Короткий ответ
Размер выборки на группу рассчитывается по формуле для сравнения двух долей на основе базовой конверсии, желаемого MDE, уровня значимости alpha и мощности теста; обычно это делают через калькулятор или библиотеку, а не вручную по формуле каждый раз.
Как это работает подробнее
формула для сравнения двух пропорций использует дисперсию биномиального распределения при базовой конверсии p1, ожидаемой конверсии p2=p1+MDE, и квантили нормального распределения для alpha и мощности; итоговый размер выборки растёт при уменьшении MDE и росте требуемой мощности.
Пример кода
example.py
from statsmodels.stats.power import NormalIndPower
from statsmodels.stats.proportion import proportion_effectsize
p1, p2 = 0.05, 0.055 # базовая конверсия 5%, ожидаемая 5.5%
effect_size = proportion_effectsize(p1, p2)
analysis = NormalIndPower()
n = analysis.solve_power(effect_size, alpha=0.05, power=0.8, ratio=1.0)
print(round(n))Что использовать на практике
- перед запуском теста считают n через готовую функцию (например, statsmodels.stats.power в Python) и сверяют с доступным трафиком за разумный срок — если трафика не хватает, пересматривают MDE или длительность, а не 'запускаем и посмотрим'.
- Ожидаемый результат: n ≈ 15700 пользователей на группу. Проверка: при увеличении MDE (например, до 1 п.п.) n должно заметно уменьшиться — это sanity check корректности направления формулы.
Подводные камни
- расчёт выборки по MDE в относительных процентах, когда библиотека ожидает абсолютную разницу долей (или наоборот) — это задаёт совершенно другой, часто заниженный размер выборки.