Откуда вопросы и что в ответах
Эти вопросы я даю менти на пробных собеседованиях. Они собраны из реальных секций по статистике и A/B в продуктовой аналитике, поэтому формулировки близки к тому, что вы услышите. Все расчёты в ответах я пересчитал.
У каждого вопроса три части: как спрашивают, короткий ответ, который можно сказать за минуту-две, и где режут — типичная ошибка, после которой интервьюер ставит минус. Читать стоит именно её: ответы многие помнят, а проваливаются на оговорках.
Вопросы идут по порядку секции: сначала базовая статистика, потом дизайн эксперимента, потом разбор пришедших результатов и в конце — оценка эффекта, когда A/B-теста не было.
Статистика, без которой A/B не обсуждают
Среднее большого числа независимых одинаково распределённых величин с конечной дисперсией распределено примерно нормально — какой бы ни была форма исходного распределения. Метрика группы в A/B (конверсия, средний чек) — это среднее по тысячам пользователей. Значит, разница средних между группами тоже примерно нормальна, и к ней можно применять z- и t-тесты, строить доверительные интервалы и считать p-value.
Где режут: пересказывают формулировку и не связывают её с правом применять стандартные тесты. Плюс — упомянуть оговорку: при тяжёлых хвостах (выручка с редкими огромными заказами) выборка нужна заметно больше, чем для конверсии.
Отклонения считаются от выборочного среднего, которое само подогнано под данные и минимизирует сумму квадратов отклонений. Поэтому деление на n систематически занижает разброс — оценка смещена. Деление на n − 1 (поправка Бесселя) делает её несмещённой: E[s²] = σ². Другими словами, одна степень свободы уже потрачена на оценку среднего.
Где режут: отвечают «так принято». Достаточно сказать про несмещённость и степени свободы и добавить, что на больших выборках разница между n и n − 1 исчезает.
Разрыв в три раза между средним и медианой — распределение скошено вправо: большинство смотрит мало, небольшая группа смотрит часами и тянет среднее вверх. Медиана описывает типичного пользователя, среднее, умноженное на число пользователей, — общее потребление контента.
Автоплей сдвинул среднее, но не медиану. Значит, он добавил просмотра тем, кто и так смотрел много, а типичному пользователю ничего не изменил. Это не однозначный успех: нужно смотреть перцентили и retention.
Где режут: радуются +8% среднего и не смотрят на распределение.
z = (8 − 5) / 2 = 1,5; P(X > 8) = 1 − Φ(1,5) ≈ 6,7%. Для 1% нарушений нужен z ≈ 2,33: 5 + 2,33 · 2 ≈ 9,7, округляем вверх — 10 дней.
Где режут: не говорят, что нормальная модель здесь — приближение. Время доставки обычно несимметрично, с длинным правым хвостом: долгие задержки случаются чаще, чем обещает нормальное распределение, и реальных нарушений будет больше.
Нет. p-value — вероятность получить такой же или более сильный результат при условии, что эффекта нет. Это P(данные | H0), а не P(H0 | данные). Из p-value нельзя получить вероятность того, что B лучше или хуже.
Где режут: три классические ошибки — считать p вероятностью того, что нулевая гипотеза верна; считать его вероятностью ошибки; считать, что маленький p означает большой эффект. Размер эффекта показывает доверительный интервал, а не p-value. Подробнее — в статье «p-value простыми словами».
Строго — нет. Если много раз повторить эксперимент и каждый раз строить интервал тем же способом, около 95% интервалов накроют истинное значение. 95% — свойство процедуры. Конкретный интервал истину либо накрыл, либо нет: истинная разница — фиксированное число, а не случайная величина.
Практически интервал говорит две вещи: он не пересекает ноль, значит разница значима на уровне 5%; и его ширина показывает, насколько точно мы знаем эффект.
Где режут: путают с байесовским интервалом. Для собеседования достаточно сказать «95% — про процедуру, а не про этот интервал». Как считать интервал для конверсии — в статье про доверительный интервал конверсии.
Ошибка первого рода — найти эффект, которого нет (ложноположительный вывод), её вероятность — α, обычно 5%. Ошибка второго рода — не найти эффект, который есть, её вероятность — β. Мощность = 1 − β: шанс поймать эффект заданного размера, если он действительно есть. 80% — договорённость: выше мощность — больше нужна выборка.
Где режут: говорят «мощность — вероятность найти эффект» без уточнения какого размера. Мощность всегда считается для конкретного минимального эффекта (MDE).
P(подозрительный) = 0,95 · 0,01 + 0,05 · 0,99 = 0,059. P(мошенник | подозрительный) = 0,0095 / 0,059 ≈ 16%. Из каждой тысячи заблокированных заказов около 840 — честные покупатели.
Причина — низкая базовая доля: мошенников мало, поэтому даже 5% ошибок на огромной массе честных заказов дают ложных срабатываний в разы больше, чем настоящих. Вместо автоблокировки — ручная проверка, дополнительные сигналы, порог по уровню риска.
Где режут: отвечают «95%», перепутав точность модели с вероятностью для помеченного заказа.
Дизайн эксперимента
Для конверсий есть правило: n ≈ 16 · p̄ · (1 − p̄) / MDE² на одну группу. p̄ = 0,0425, MDE = 0,005: n ≈ 16 · 0,0425 · 0,9575 / 0,000025 ≈ 26 000 на группу, 52 000 всего. Точная формула даёт около 25 500 — правило слегка с запасом, для разговора этого достаточно.
При 5000 пользователях в день это 10–11 дней, с округлением до полных недель — 14 дней. Продакту три варианта: ждать две недели, согласиться ловить только больший эффект или взять более чувствительную метрику.
Где режут: забывают, что выборка растёт квадратично: эффект в два раза меньше — выборка в четыре раза больше. Посчитать для своих чисел можно в калькуляторе размера выборки.
Выборка зависит от четырёх вещей: базовой конверсии, минимального эффекта, который важен бизнесу (MDE), α и мощности. Длительность — не только «набрать n». Нужно покрыть минимум один-два полных недельных цикла: в будни и выходные люди ведут себя по-разному. И оставить время, чтобы прошёл эффект новизны.
Где режут: называют цифры без вопроса «какой эффект нам важен». MDE — бизнес-решение, а не статистическое: его выбирают из того, какой прирост окупит изменение.
Почти всегда — на уровне пользователя. Если делить по сессиям, один человек увидит обе версии: вчера пришёл пуш, сегодня нет. Эффекты смешаются, а наблюдения внутри одного пользователя перестанут быть независимыми.
Где режут: не замечают несовпадения единицы рандомизации и единицы анализа. Делим по пользователям, а конверсию считаем по сессиям — обычный t-тест занизит дисперсию и даст слишком оптимистичный p-value. Нужен дельта-метод или бутстреп по пользователям.
Единица — пользователь. Главная метрика — вернулся ли пользователь в течение 7 дней после пуша. Защитные метрики — отписки от пушей, отключение уведомлений, удаления приложения, жалобы. Контроль не получает пуш вообще. Выборку считаем через мощность, срок — 2–4 недели, чтобы увидеть, не выдыхается ли эффект.
Две оговорки, которые отличают сильный ответ. Тест идёт только на тех, у кого пуши ещё включены, — выводы нельзя переносить на всех. И пуш может вернуть человека сейчас, но раздражать и ускорить окончательный уход, поэтому смотреть нужно и долгий горизонт.
Где режут: нет защитных метрик — без них тест «поймает» рост заходов и пропустит рост отписок.
Не конверсию, а деньги: маржу на пользователя за период — выручку за вычетом стоимости доставки. Конверсия и частота заказов вырастут, но пропадёт стимул добирать корзину до 2000 ₽: средний чек упадёт, заказы раздробятся, а за доставку дешёвых заказов платит компания. Главная метрика должна видеть обе стороны.
Вторичные — конверсия, заказы на пользователя, средний чек. Защитные — стоимость доставки на заказ, доля заказов дешевле 2000 ₽, возвраты. Правило решения: раскатываем, только если маржа на пользователя не падает.
Где режут: берут конверсию главной метрикой — и тест «выигрывает», теряя деньги на каждом заказе.
1 − 0,95²⁰ ≈ 64%. Почти гарантированно хотя бы одна метрика «прокрасится» случайно. Что делать: заранее выбрать одну главную метрику и несколько защитных, остальные считать исследовательскими. Для множества проверок — поправка Бонферрони (α / 20 = 0,0025, строго) или контроль доли ложных открытий по Бенджамини — Хохбергу (мягче).
Где режут: объявляют победу по случайно значимой метрике, найденной после теста.
Каждый просмотр — ещё одна попытка поймать случайную значимость. Я смоделировал тест без эффекта с ежедневной проверкой в течение 20 дней: доля ложноположительных выводов выросла с 5% до 24%. Это та же множественная проверка, что в вопросе 14, только растянутая во времени.
Что делать: фиксировать размер выборки и дату окончания заранее и смотреть итог один раз. Если смотреть по ходу нужно — использовать последовательные тесты, которые учитывают число просмотров.
Где режут: «подглядывать можно, если не останавливать». Смотреть можно, принимать решение по промежуточному p — нельзя.
Уменьшить дисперсию метрики. Самый известный способ — CUPED: из метрики вычитают часть, которую объясняет поведение пользователя до теста. Если метрика до и после сильно коррелирует, дисперсия падает на десятки процентов, и та же мощность достигается на меньшей выборке. Другие варианты: обрезать выбросы, взять более чувствительную метрику ближе к изменению, стратифицировать.
Где режут: предлагают «поднять α до 10%» или «остановить раньше». Это не ускорение, а рост числа ложных выводов. Как работает CUPED — в отдельной статье.
Пришли результаты — что с ними делать
«Не нашли эффект» — не то же самое, что «эффекта нет». 95% ДИ для разницы: 0,3 п.п. ± 1,96 · 0,31 п.п. = [−0,31; +0,91] п.п. Интервал совместим и с небольшим вредом, и с заметной пользой — тест просто неинформативен.
Чтобы +0,3 п.п. стали различимы при α = 0,05 и мощности 80%, нужно около 87 000 пользователей на группу — почти в девять раз больше. Откатывать «потому что p > 0,05» — ошибка интерпретации.
Где режут: принимают нулевую гипотезу как доказанную. Правильная формулировка — «данных недостаточно, чтобы различить эффект такого размера».
Сначала валидность, потом значимость. Первый вопрос — SRM (Sample Ratio Mismatch): совпадает ли соотношение групп с планом. Если при сплите 50/50 в группах 12 347 и 11 891 пользователей, хи-квадрат даёт p = 0,003 — такое расхождение случайно почти не бывает. Рандомизация сломана: баг сплиттера, боты в одной группе, потеря части пользователей. Результат такого теста интерпретировать нельзя, никакой p-value его не спасёт.
Дальше: сколько дней шёл тест (покрыта ли неделя), не остановили ли его на первой значимости (вопрос 15), сколько метрик смотрели (вопрос 14). И только после этого — стоит ли +0,2 п.п. затрат на раскатку.
Где режут: сразу обсуждают p-value и не проверяют размеры групп. Проверить сплит заранее помогает A/A-тест.
Эффект новизны: пользователи реагируют на изменение, потому что оно новое, а потом возвращаются к привычному поведению. Остановили бы тест на первой неделе — раскатили бы пустое изменение. Решение принимают по установившемуся эффекту, обычно через 3–4 недели. Бывает и обратное — эффект первичности: к новому привыкают, и метрика сначала падает, а потом растёт.
Где режут: усредняют все четыре недели и получают «+2,75%», которого в устойчивом состоянии нет.
Сначала понять, одинаково ли считается отказ в обеих версиях: в новой воронке он может измеряться по-другому. Потом сегментировать: новые и вернувшиеся, устройства, источники трафика. Возможно, новый чекаут быстрее отсеивает случайных посетителей, а целевые покупают лучше. Проверить SRM и динамику по дням. И посчитать деньги: компенсирует ли рост конверсии потери от отказов.
Где режут: выбирают одну из двух метрик по вкусу, не разобравшись в механизме.
Обе метрики — косвенные, ни одна не цель сама по себе. Есть две гипотезы с противоположными выводами. Пользователи быстрее находят нужное — времени меньше, удовлетворённость выше, это хорошо. Или лента стала кликбейтной — кликают чаще, разочаровываются и уходят, это плохо. Различить их помогают отложенные метрики: retention, возвраты, жалобы и скрытия, доля сессий с целевым действием.
Где режут: выбирают «победившую» метрику после теста. Главную метрику и защитные назначают до запуска; если данных для решения не хватает — продлевают тест или оставляют долгую контрольную группу.
Краткосрочный рост против долгосрочного вреда: частые пуши раздражают, люди отключают уведомления, отписываются, удаляют приложение. Открытия — косвенная метрика, удержание — настоящая цель, и оптимизация по первой навредила второй.
Что делать: смотреть защитные метрики — отписки, отключение уведомлений, удаления; держать долгую контрольную группу; искать частоту, после которой вред перевешивает пользу; персонализировать время и содержание.
Где режут: отвечают «просто слать меньше», не предлагая, как измерить правильную частоту.
Изменились веса сегментов. Если выросла доля старых пользователей, у которых конверсия, скажем, 8%, средневзвешенная растёт, даже когда внутри каждого сегмента стало хуже. Проверка — разложить изменение на эффект состава и эффект внутри сегментов.
Для оценки продуктового изменения важнее то, что происходит внутри сегментов, — а там стало хуже. Общий рост здесь случился по «неправильной» причине и неустойчив. Нужно выяснить, почему поменялся состав, — например, не сломали ли что-то для новых пользователей.
Где режут: радуются росту агрегата и не смотрят на разрезы.
Когда A/B-теста не было
Простое сравнение «до и после» опасно: в разницу попадут тренд, сезонность и все остальные изменения за месяц. Нужна контрольная группа, которую фича не затронула: другой регион, платформа или сегмент. Дальше — разность разностей (difference-in-differences): сравнить изменение в затронутой группе с изменением в контрольной. Ключевое допущение — параллельные тренды до релиза, его проверяют на истории.
Если подходящего контроля нет — синтетический контроль: взвешенная комбинация незатронутых групп, повторяющая динамику до релиза. На будущее — оставлять отложенную группу без фичи или раскатывать по регионам постепенно.
Где режут: доверяют «до и после» и называют точную цифру без интервала и без допущений. Подробно про метод — в статье про difference-in-differences.
Это корреляция, а не доказанная причинность. Пользователи сами выбрали, добавлять друга или нет. Скорее всего, есть общая причина — вовлечённость: тот, кому продукт понравился, и друга добавит, и останется. Возможна и обратная связь: втянувшимся просто проще дойти до этого шага.
Если заставить всех, немотивированные мотивированными не станут: эффект будет намного меньше трёх раз, а лишний обязательный шаг может уронить активацию. Проверить можно только экспериментом: части новичков показать усиленную механику добавления друзей и сравнить удержание.
Где режут: соглашаются с выводом или отвечают «корреляция не причинность» и останавливаются — без механизма и без плана проверки.
Частые вопросы
Сколько вопросов по статистике задают на собеседовании?
Нужно ли знать формулы наизусть?
n ≈ 16 · p · (1 − p) / MDE², стандартную ошибку разницы конверсий и 1 − 0,95^k для множественных проверок. Остальное ценят как понимание: что делает формула и когда она ломается.Что важнее — теория или кейсы?
Где потренироваться на таких вопросах?
Связанные материалы
Главное про статистическую секцию
Интервьюеру важно не то, помните ли вы определения, а то, не сделаете ли вы неверный вывод из теста. Поэтому большая часть вопросов — про интерпретацию: что значит p-value, почему «не нашли» не равно «нет», что проверить до того, как радоваться значимости.
Три привычки, которые закрывают половину ловушек: (1) сначала валидность теста — SRM, длительность, подглядывание, — потом значимость; (2) вместо голого p-value — доверительный интервал; (3) главная и защитные метрики назначаются до запуска, а не после.