Короткий ответ
Размер выборки рассчитывается через power analysis на основе базовой конверсии, минимального детектируемого эффекта (MDE), выбранного уровня значимости и желаемой мощности теста (обычно 80%); чем меньше MDE, тем больше нужна выборка.
Как это работает подробнее
для сравнения двух пропорций размер выборки на группу зависит от базовой конверсии p, от размера эффекта (p2−p1), альфа и мощности — формула связывает эти параметры через стандартные нормальные квантили; на практике расчёт обычно делают через готовые функции (statsmodels), а не вручную по формуле.
Пример кода
Пример на Python
from statsmodels.stats.power import NormalIndPower
from statsmodels.stats.proportion import proportion_effectsize
effect_size = proportion_effectsize(0.10, 0.11) # базовая 10% -> целевая 11%
analysis = NormalIndPower()
n = analysis.solve_power(effect_size=effect_size, alpha=0.05, power=0.8, ratio=1)
print(n) # необходимый размер выборки на группуЧто использовать на практике
- На практике. важно договориться о MDE заранее, исходя из того, какой минимальный эффект вообще имеет смысл для бизнеса — слишком маленький MDE может потребовать нереалистично большой выборки и месяцев теста. Также стоит заложить запас на ожидаемую долю пользователей, которые не завершат весь сценарий (fallout), и на возможное снижение мощности при неравном сплите групп. Дополнительно стоит заложить запас выборки на долю пользователей, отсеивающихся до момента измерения целевого события (funnel dropout), иначе фактическая мощность теста окажется ниже расчётной.
- Пример. Sanity check: уменьшить целевую конверсию разницу до 0.5 п.п. (меньший эффект) и убедиться, что требуемый n вырос — это подтверждает обратную зависимость размера выборки от MDE.
Подводные камни
- Частые ошибки. считать размер выборки уже после начала теста, подгоняя MDE под то, что реально получится собрать; игнорировать базовую конверсию — для редких событий (конверсия 0.5%) требуется значительно больше наблюдений, чем для частых (конверсия 30%); использовать формулы для пропорций при работе с непрерывными метриками (выручка на пользователя) без учёта их дисперсии. Ещё одна ошибка — рассчитывать размер выборки по общей аудитории, не учитывая, что часть пользователей вообще не попадёт в сегмент, где применяется тестируемое изменение.