Логические задачи на собеседовании аналитика: 11 задач с разбором
Логические задачи, вероятности «на салфетке» и задачи на оценку для собеседования аналитика: 11 авторских задач с ходом рассуждения, ответом и типичной ошибкой.
Содержание статьи
Посреди разговора о SQL интервьюер вдруг просит оценить, сколько поездок на такси совершают в Москве за день. Это не проверка эрудиции: точного числа он сам может не знать. Ему интересно, как вы разбиваете незнакомую задачу на части, какие допущения называете и замечаете ли собственную ошибку. Ниже одиннадцать авторских задач трёх типов — логика и перебор, вероятность «на салфетке», оценка объёма. У каждой условие, рассуждение вслух, ответ и ошибка, которую чаще всего слышат на собеседовании. Ответы проверены перебором и симуляцией в Python.
Зачем аналитику логические задачи и задачи на оценку
В работе аналитика половина вопросов приходит без данных: «Сколько нам нужно серверов под новую фичу?», «Может ли это падение быть случайным?», «Какой из трёх отчётов врёт?». Короткая задача на собеседовании — уменьшенная копия такого вопроса. За пять минут видно, начинает ли кандидат с определения, держит ли в голове несколько условий и проверяет ли ответ на здравый смысл.
Поэтому в ответе важнее числа три вещи. Первая — структура: вы сказали, из каких частей собираете ответ, до того как начали считать. Вторая — явные допущения: «примем 40%, если окажется 20%, ответ уменьшится вдвое». Третья — проверка: прикидка с другой стороны или подстановка граничного случая. Неточное число с ясной логикой ценится выше угаданного точного.
Таблица ниже — шпаргалка по первой фразе ответа: она должна показать план.
| Тип задачи | Что проверяют | Как начинать ответ |
|---|---|---|
| Логика и перебор | Умение держать несколько условий и не терять варианты | «Вариантов немного, переберу каждый и проверю условия» |
| Поиск за минимум шагов | Понимание, сколько информации даёт одна проверка | «Каждая проверка делит кандидатов на части, считаю худший случай» |
| Вероятность «на салфетке» | Знаменатель, независимость, условная вероятность | «Сначала уточню, что считаю независимым и что случайно» |
| Ожидание и «сколько в среднем» | Разбиение процесса на этапы | «Разобью процесс на этапы и сложу средние по этапам» |
| Оценка объёма (Fermi) | Декомпозиция и чувствительность к допущениям | «Соберу оценку из множителей и назову диапазон» |
| Оценка мощности и пика | Различие среднего и пиковой нагрузки | «Посчитаю спрос в самый загруженный час, а не в среднем» |
Как рассуждать вслух: четыре хода
Повторите условие своими словами и задайте один-два вопроса, которые меняют ответ: «Метрики независимы?», «Считаем жителей или и приезжих тоже?». Затем назовите план одной фразой. Посчитайте, проговаривая промежуточные числа: интервьюер исправит ошибку на втором шаге, а не после ответа. В конце проверьте результат с другой стороны и скажите, какое допущение сильнее всего его двигает.
Молчать минуту, а потом выдать число — худший сценарий, даже если число верное. Интервьюер не видит, угадали вы или посчитали. Если застряли, скажите, на чём именно: «Не понимаю, считать ли повторные заказы одного человека». Это тоже рассуждение, и его можно продолжить вместе.
Задача 1. Три выгрузки и одна правдивая подпись
Условие. В папке три выгрузки A, B и C, свежая из них ровно одна. Коллеги подписали файлы: на A — «свежая в B», на B — «свежая не в A», на C — «свежая не в B». Известно, что правдива ровно одна подпись. Где свежая выгрузка?
Рассуждение. Вариантов всего три, поэтому проще перебрать их, чем искать хитрый ход. Пусть свежая в B: подписи на A и B верны — две правды, не подходит. Пусть в C: верны подписи на B и C — снова две. Пусть в A: подпись на A ложна, на B ложна, на C верна — ровно одна правда.
Ответ. Свежая выгрузка в A.
Типичная ошибка. Начать с доверия одной из подписей («раз на B написано, что не в A, значит, не в A») и строить цепочку от неё. При условии «правдива ровно одна» любая подпись может оказаться ложной, а перебор трёх вариантов занимает полминуты.
Задача 2. Четыре аналитика и планёрка
Условие. Аня, Борис, Вика и Глеб по одному показывают результаты на планёрке с понедельника по четверг. Борис не выступает ни в понедельник, ни в четверг. Вика выступает на следующий день после Ани. Глеб выступает раньше Бориса. Кто в какой день?
Рассуждение. Начните с самого жёсткого условия. Борис — во вторник или в среду. Если в среду, Глеб — в понедельник или во вторник, а пара «Аня, затем Вика» должна занять два соседних дня из оставшихся; оставшиеся дни не соседние, противоречие. Значит, Борис во вторник, Глеб в понедельник, а Аня и Вика занимают среду и четверг именно в таком порядке.
Ответ. Понедельник — Глеб, вторник — Борис, среда — Аня, четверг — Вика. Решение единственное: перебор всех 24 расстановок в блоке ниже оставляет одну.
Типичная ошибка. Найти одно подходящее расписание и остановиться. Интервьюер может спросить: «А другие есть?» Сильный ответ показывает, почему других нет, — как здесь через противоречие при Борисе в среду.
from itertools import permutations
# Задача 1: где свежая выгрузка, если правдива ровно одна подпись
for fresh in 'ABC':
signs = [fresh == 'B', # на A: «свежая — в B»
fresh != 'A', # на B: «свежая — не в A»
fresh != 'B'] # на C: «свежая — не в B»
if sum(signs) == 1:
print('Задача 1: свежая выгрузка в', fresh)
# Задача 2: кто в какой день выступает на планёрке
days = ['Пн', 'Вт', 'Ср', 'Чт']
names = ['Аня', 'Борис', 'Вика', 'Глеб']
for order in permutations(range(4)):
d = dict(zip(names, order))
if d['Борис'] in (0, 3): # Борис не в понедельник и не в четверг
continue
if d['Вика'] != d['Аня'] + 1: # Вика выступает на следующий день после Ани
continue
if d['Глеб'] > d['Борис']: # Глеб раньше Бориса
continue
print('Задача 2:', {n: days[d[n]] for n in names})
# Задача 1: свежая выгрузка в A
# Задача 2: {'Аня': 'Ср', 'Борис': 'Вт', 'Вика': 'Чт', 'Глеб': 'Пн'}Задача 3. Сто релизов и сломанная метрика
Условие. После релиза 0 конверсия считалась правильно, после релиза 100 — уже нет. Ошибку внёс один из ста релизов с 1 по 100. Одна проверка — развернуть нужную версию на тестовом стенде и пересчитать метрику, это час работы. Сколько проверок понадобится в худшем случае?
Рассуждение. Каждая проверка отвечает «уже сломано» или «ещё нет», то есть делит кандидатов на две группы. Проверяем релиз 50: если сломано, виновник среди 1–50, иначе среди 51–100. Каждый шаг вдвое сокращает список: 100, 50, 25, 13, 7, 4, 2, 1. Получается семь проверок. Короче не выйдет: за шесть ответов «да или нет» можно различить не больше 2⁶ = 64 вариантов, а у нас сто.
Ответ. Семь проверок. Это та же идея, что у git bisect.
Типичная ошибка. Ответить «50 — проверяю по одному с середины» или забыть уточнить, надёжна ли проверка. Если метрика шумит и один пересчёт может ошибиться, бинарный поиск уйдёт не в ту половину. Хороший кандидат сам спросит, насколько однозначен результат одной проверки.
Задача 4. A/A-тест на двадцати метриках
Условие. Команда запустила A/A-тест: обе группы видят одно и то же. На дашборде 20 метрик, каждая проверяется на уровне значимости 5%. Какова вероятность, что хотя бы одна метрика покажет «значимую» разницу?
Рассуждение. Уточняем: считаем метрики независимыми. Для одной метрики ложная тревога случается с вероятностью 0,05, её отсутствие — 0,95. Отсутствие тревоги на всех двадцати — 0,95²⁰ ≈ 0,358. Значит, хотя бы одна тревога — 1 − 0,358 ≈ 0,64. В среднем «значимой» окажется одна метрика из двадцати.
Ответ. Около 64% при независимых метриках. Реальные метрики связаны (выручка и число заказов растут вместе), поэтому настоящая вероятность ниже, но всё равно далека от 5%.
Типичная ошибка. Сказать «5%» или сложить: 20 × 5% = 100%. Сложение даёт ожидаемое число ложных тревог, а не вероятность хотя бы одной; на тридцати метриках оно дало бы 150%, чего не бывает.
Задача 5. Совпадения промокодов
Условие. Маркетинг раздаёт 5 000 случайных шестизначных промокодов, всего вариантов 1 000 000. Коды генерируются независимо, без проверки на повторы. Насколько вероятно, что два клиента получат одинаковый код?
Рассуждение. Первая мысль — 5 000 из миллиона, полпроцента. Но совпадение — свойство пары кодов, а пар много: 5 000 × 4 999 / 2 ≈ 12,5 млн. Каждая пара совпадает с вероятностью одна миллионная, так что в среднем ожидается около 12,5 совпавших пар. Вероятность не встретить ни одной ничтожна.
Ответ. Совпадение почти гарантировано: вероятность 0,999996. Половину шансов на повтор дают уже 1 178 кодов. Вывод для продукта — проверять уникальность при генерации, а не надеяться на большой алфавит.
Типичная ошибка. Считать долю занятых вариантов (0,5%) вместо числа пар. Это та же ловушка, что в задаче о днях рождения, только с деньгами.
import math
import numpy as np
rng = np.random.default_rng(2026)
# Задача 4: A/A-тест, 20 независимых метрик, порог 5%
exact = 1 - 0.95 ** 20
sim = (rng.random((100_000, 20)) < 0.05).any(axis=1).mean()
print(f'A/A: точно {exact:.4f}, симуляция {sim:.4f}')
# Задача 5: 5 000 случайных шестизначных кодов из 1 000 000 вариантов
N, n = 1_000_000, 5_000
p_no_clash = math.prod((N - i) / N for i in range(n))
clash = np.mean([len(np.unique(rng.integers(0, N, n))) < n for _ in range(2_000)])
print(f'Коды: P(хотя бы одно совпадение) = {1 - p_no_clash:.6f}, '
f'симуляция {clash:.4f}, ожидаемо пар-совпадений {n * (n - 1) / 2 / N:.1f}')
# A/A: точно 0.6415, симуляция 0.6431
# Коды: P(хотя бы одно совпадение) = 0.999996, симуляция 1.0000, ожидаемо пар-совпадений 12.5Задача 6. Тревога антифрода
Условие. Мошеннических операций 1%. Модель замечает 90% из них, но тревожит и на 5% честных операций. Модель подняла тревогу. Какова вероятность, что операция действительно мошенническая?
Рассуждение. Удобнее считать в людях, а не в процентах. Возьмём 10 000 операций: мошеннических 100, модель ловит 90. Честных 9 900, ложных тревог 5% от них — 495. Всего тревог 585, из них настоящих 90. 90 / 585 ≈ 0,154.
Ответ. Около 15%. Примерно пять из шести тревог ложные — не потому, что модель плохая, а потому, что мошенничество редкое и даже малая доля ложных тревог на большой массе честных операций перевешивает.
Типичная ошибка. Ответить «90%», перепутав вероятность тревоги при мошенничестве с вероятностью мошенничества при тревоге. Если спросят, что делать с таким потоком, предложите ручную проверку, начиная с самых подозрительных операций, а не блокировку всех подряд.
import numpy as np
rng = np.random.default_rng(2026)
n = 1_000_000
fraud = rng.random(n) < 0.01 # 1% операций — мошенничество
alert = np.where(fraud,
rng.random(n) < 0.90, # модель ловит 90% мошенничества
rng.random(n) < 0.05) # и тревожит на 5% честных операций
exact = 0.01 * 0.90 / (0.01 * 0.90 + 0.99 * 0.05)
print(f'P(мошенничество | тревога): точно {exact:.4f}, симуляция {fraud[alert].mean():.4f}')
# P(мошенничество | тревога): точно 0.1538, симуляция 0.1542Задача 7. Сколько заказов до полной коллекции
Условие. В каждый заказ кладут одну случайную наклейку из пяти видов, все виды равновероятны. Сколько заказов в среднем нужно сделать, чтобы собрать все пять?
Рассуждение. Разбейте процесс на этапы. Первая наклейка всегда новая — один заказ. Дальше новая выпадает с вероятностью 4/5, и ждать её в среднем 5/4 заказа. Затем 5/3, 5/2 и 5/1. Сумма: 1 + 1,25 + 1,67 + 2,5 + 5 ≈ 11,4. Половину времени съедает последняя наклейка.
Ответ. В среднем около 11,4 заказа. Разброс большой: примерно в 17% случаев понадобится больше 15 заказов, а собрать коллекцию за пять заказов удаётся меньше чем в 4% случаев.
Типичная ошибка. Ответить «5» или «в среднем 5 заказов на вид, значит 25». Для маркетинга вывод другой: если акция обещает приз за полную коллекцию, затраты определяет хвост, а не среднее. Здесь пригодится понятие математического ожидания по этапам.
Задача 8. Поездки на такси в Москве за день
Условие. Оцените, сколько поездок на такси совершают жители Москвы за обычный будний день. Готовой статистики нет, интернета тоже.
Рассуждение. Население Москвы — около 13,3 млн (оценка Мосстата на 1 января 2025 года — 13 274 285 человек). Детей и тех, кто сам такси не заказывает, отбросим: примем 10 млн потенциальных пассажиров. Допустим, 40% из них ездят на такси хотя бы раз в месяц, в среднем 4 поездки в месяц. Получаем 10 млн × 0,4 × 4 / 30 ≈ 530 тыс. поездок в день.
Ответ. Порядка полумиллиона поездок в день по нашим допущениям. Если доля ездящих от 30% до 50%, а частота от 2 до 6 поездок в месяц, оценка ложится в диапазон от 200 тыс. до 1 млн. Частота двигает ответ сильнее, чем население, — её и стоило бы уточнять в первую очередь.
Типичная ошибка. Назвать одно число без диапазона или выдавать допущение за факт («40% москвичей ездят на такси»). Ещё одна — забыть, что не сделано: приезжие, туристы и поездки в аэропорты в оценку не вошли. Это стоит сказать вслух.
| Сценарий | Доля ездящих | Поездок в месяц | Поездок в день |
|---|---|---|---|
| Нижний | 30% | 2 | 200 тыс. |
| Базовый | 40% | 4 | ≈ 530 тыс. |
| Верхний | 50% | 6 | 1 млн |
Задача 9. Сколько событий пишет приложение
Условие. У мобильного приложения 200 тыс. активных пользователей в день. Команда подключает подробную аналитику событий. Сколько места займут сырые события за год?
Рассуждение. Допущения: 3 сессии на активного пользователя в день, 40 событий за сессию, одно событие с параметрами весит около 1 КБ. В день: 200 000 × 3 × 40 = 24 млн событий, это 24 ГБ. За год — 24 ГБ × 365 ≈ 8,8 ТБ без сжатия и копий.
Ответ. Около 9 ТБ сырых событий в год при наших допущениях.
Типичная ошибка. Умножать на число пользователей за месяц вместо дневных или забыть о повторной отправке событий при плохой связи. Хороший ответ предложит, какое допущение проверить первым: число событий за сессию берётся из плана трекинга, и оно чаще всего оказывается больше, чем думали.
Задача 10. Курьеры в вечерний пик
Условие. Сервис доставки получает 6 000 заказов в день и работает 12 часов. Курьер успевает 2,5 заказа в час. Сколько курьеров нужно на линии?
Рассуждение. Среднее обманет: 6 000 / 12 / 2,5 = 200 курьеров, но заказы приходят неравномерно. Уточняем или допускаем: 30% заказов приходится на вечерние два часа. Это 1 800 заказов за 2 часа. Один курьер за это время отвезёт 5, значит, нужно 360 человек. Добавим 20% на опоздания и неявки — около 430.
Ответ. Порядка 430 курьеров в пик при 200 в среднем за день. Больше чем вдвое — и ровно этой разницы не хватает сервису, который планирует смены по средним.
Типичная ошибка. Считать по суточному среднему. Если спросят, как обойтись меньшим числом курьеров, назовите рычаги сглаживания пика: повышенная стоимость доставки, слоты на завтра, более долгое обещанное время доставки.
Задача 11. Выручка кофейни у бизнес-центра
Условие. Кофейня на первом этаже бизнес-центра, где работает 3 000 человек. Работает 12 часов, за стойкой два бариста. Оцените дневную выручку.
Рассуждение. Оцениваем с двух сторон. Спрос: пусть 20% сотрудников покупают кофе каждый день, в среднем 1,2 чашки — 720 чашек. Предложение: бариста готовит чашку за 1,5 минуты, двое делают 80 чашек в час, 960 за день. Спрос меньше мощности, и кажется, что продадут все 720. Но половина спроса приходится на утро с 8 до 10: это 360 желающих, а за два часа можно сделать только 160. Если ушедшие из очереди не возвращаются, теряем 200 чашек и продаём 520. При среднем чеке 250 ₽ выручка — 130 тыс. ₽ в день.
Ответ. Около 130 тыс. ₽ в день по нашим допущениям, а не 180 тыс., которые дал бы спрос без учёта пика. Отсюда и рекомендация: третий бариста утром может окупиться быстрее, чем реклама.
Типичная ошибка. Посчитать только спрос или только мощность. Сверка двух независимых оценок — лучший способ проверить Fermi-ответ: если они расходятся в разы, одна из моделей что-то упускает.
| Показатель | Расчёт | Итог |
|---|---|---|
| Спрос за день | 3 000 × 20% × 1,2 | 720 чашек |
| Мощность за день | 2 бариста × 40 в час × 12 ч | 960 чашек |
| Спрос с 8 до 10 | 720 × 50% | 360 чашек |
| Мощность с 8 до 10 | 80 в час × 2 ч | 160 чашек |
| Продано | 720 − (360 − 160) | 520 чашек |
| Выручка | 520 × 250 ₽ | 130 000 ₽ |
Ошибки, которые интервьюер замечает в первую минуту
Скрытые допущения. Задача о вероятности почти всегда держится на том, что считается случайным и независимым. Классический пример — парадокс Монти Холла: ответ меняется, если ведущий открывает дверь наугад, а не зная, где приз. Проговорите такие предпосылки вслух, даже если они кажутся очевидными.
Число без проверки. После расчёта сделайте прикидку: 530 тыс. поездок в день на 10 млн человек — это одна поездка на двадцать человек в день. Звучит правдоподобно? Если бы вышло по поездке на каждого, где-то ошибка.
Ложная точность. «Ровно 533 333 поездки» звучит хуже, чем «порядка полумиллиона, от 200 тыс. до 1 млн». Округляйте до порядка и показывайте диапазон.
Как тренироваться
Решайте вслух и записывайте себя на диктофон. Через день переслушайте: где вы молчали, где перескочили через шаг, где назвали допущение фактом. Для вероятностей возьмите привычку проверять ответ десятью строками симуляции — как в блоках выше. Это быстрее, чем спорить с собой, и на собеседовании можно сказать: «Я бы проверил это симуляцией».
Логические задачи — только один этап отбора. Основной вес у SQL, метрик и кейсов, поэтому не тратьте на головоломки больше пятой части подготовки. План по всем этапам и список тем — в отдельном материале о подготовке, а задачи на SQL с автоматической проверкой можно решать прямо в браузере.
Частые вопросы
Дают ли логические задачи на собеседовании аналитика всегда?
Нет. Во многих процессах отбора их нет вовсе: разговор идёт о SQL, метриках и кейсе. Но задача на оценку может прозвучать и внутри кейса, поэтому пара тренировок не помешает.
Что делать, если не знаю ответа на сложную логическую задачу?
Рассуждать вслух и честно сказать, где застряли. Интервьюер часто подсказывает, и умение воспользоваться подсказкой тоже оценивают.
Нужно ли помнить реальные числа для задач на оценку?
Нет. Достаточно назвать допущение и показать, как от него зависит ответ. Если число нужно, интервьюер его даст.
Можно ли пользоваться калькулятором или ноутбуком?
Спросите. Обычно задачи подобраны так, чтобы считать на бумаге, а округление до удобных чисел не считается ошибкой, если вы о нём сказали.
Материалы по теме

Статистика на собеседовании аналитика: 20 вопросов и задач
Двадцать авторских вопросов по статистике, вероятности и A/B-тестам для собеседования аналитика: ответ вслух, слабая формулировка, расчёт на Python и SQL.

Метод STAR: ответы аналитика на поведенческом интервью
Как отвечать по методу STAR на поведенческом интервью аналитика: структура, десять вопросов, примеры сильных и слабых ответов, банк историй и ошибки подготовки.
Собеседование аналитика данных: 30 задач и как решать их вслух
Большой практический гайд по собеседованию аналитика данных: SQL, Python, метрики, статистика, кейсы, дашборды и ответы, которые показывают ход мышления.