Статистика A/B-тестов: значимость, размер выборки и подглядывание
Продвинутое4 минРедакция Innovialabs
Коротко
Надёжный A/B-тест планируется заранее: вы выбираете главную метрику, минимальный эффект, который хотите поймать, и по ним считаете размер выборки. Затем тест идёт до этого объёма без остановки при первом «значимом» результате — иначе ложных побед становится гораздо больше, чем обещает уровень значимости.
Главное за минуту
Большинство ошибок в A/B-тестах — не в формулах, а в процессе. Правильный порядок:
- Сформулируйте гипотезу и одну главную метрику.
- Задайте минимальный детектируемый эффект (MDE) — самое маленькое изменение, ради которого стоит внедрять вариант.
- Посчитайте размер выборки под MDE, уровень значимости и мощность.
- Запустите тест и не принимайте решения до набора выборки (или используйте последовательный метод).
- Проверьте качество данных и только потом читайте результат.
Что такое p-value на самом деле
p-value — вероятность увидеть разницу не меньше наблюдаемой, если на самом деле варианты не отличаются. Это не вероятность того, что B лучше A, и не вероятность ошибки.
Обычно задают уровень значимости α = 0,05: если p-value ниже, результат называют значимым. Это значит, что при отсутствии реального эффекта вы примерно в одном тесте из двадцати получите ложную «победу». Такую ошибку называют ошибкой первого рода.
Мощность и MDE
Мощность — вероятность обнаружить эффект, если он реально есть и не меньше MDE. Стандартный ориентир — 80%. Оставшиеся 20% — это ошибка второго рода: эффект был, а тест его не заметил.
MDE, мощность и размер выборки связаны:
| Хотите | Цена |
|---|---|
| Ловить эффекты меньше | Нужна выборка больше |
| Мощность выше | Нужна выборка больше |
| α строже | Нужна выборка больше |
| Выше базовая конверсия | Выборка при том же относительном эффекте меньше |
Для конверсионных метрик есть грубое правило (α = 0,05, мощность 80%): на каждую группу нужно примерно 16 × p × (1 − p) / δ² пользователей, где p — базовая конверсия, δ — абсолютная разница. При конверсии 5% и желании заметить рост до 6% это около 7 600 человек на группу. Для точного расчёта используйте калькулятор или библиотеку.
from statsmodels.stats.power import NormalIndPower
from statsmodels.stats.proportion import proportion_effectsize
effect = proportion_effectsize(0.06, 0.05)
n = NormalIndPower().solve_power(effect_size=effect, alpha=0.05, power=0.8)
print(round(n)) # пользователей в каждой группе
Если трафика не хватает на разумный MDE, тест не даст ответа. Лучше тестировать более смелые изменения или метрики выше по воронке.
Проблема подглядывания
Подглядывание (peeking) — когда вы смотрите на результат каждый день и останавливаете тест, как только p-value опустилось ниже 0,05. Случайные колебания в начале теста большие, и при многократных проверках шанс хотя бы раз увидеть ложную значимость сильно превышает заявленные 5%.
Как с этим жить:
- Фиксированный горизонт: решение только после набора рассчитанной выборки. Смотреть можно — для контроля поломок, но не для выводов.
- Последовательное тестирование: методы с заранее заданными точками проверки и поправкой порога (group sequential, alpha spending) или «всегда валидные» p-value. Их поддерживают многие платформы экспериментов.
- Полные недели: поведение по будням и выходным различается, поэтому длительность кратна неделе.
Множественные сравнения
Чем больше вариантов, метрик и сегментов вы проверяете, тем выше шанс найти «значимое» случайно. Десять метрик по α = 0,05 — почти гарантированно одна ложная находка.
- Заранее назначьте одну главную метрику, остальные — вспомогательные и защитные.
- Для нескольких вариантов используйте поправки: Бонферрони (α делится на число сравнений — просто, но консервативно), Холм или Бенджамини — Хохберг (контроль доли ложных открытий).
- Находки в сегментах («в Safari на iOS вырос») считайте гипотезами для нового теста, а не результатом.
Байесовский и частотный подходы
| Частотный | Байесовский | |
|---|---|---|
| Ответ | p-value и доверительный интервал | «вероятность, что B лучше A» и ожидаемые потери |
| Исходные допущения | нет априорных данных | нужно задать априорное распределение |
| Интерпретация | менее интуитивна | ближе к бизнес-вопросу |
| Подглядывание | ломает контроль ошибок | тоже требует правила остановки |
Байесовский подход удобнее объяснять команде, но он не отменяет дисциплину: если останавливать тест, как только вероятность превысила порог, ошибок тоже становится больше. Выбор подхода важен меньше, чем заранее зафиксированный план.
Проверки перед чтением результата
- SRM (sample ratio mismatch): если делили 50/50, а получили заметно неравные группы, сплит или трекинг сломан — результату верить нельзя.
- Одинаковые события и фильтры в обеих группах.
- Нет параллельных тестов на тех же страницах без изоляции.
- Учтён эффект новизны: всплеск в первые дни часто затухает.