Статистика·Сложный·7 мин
MDE и размер выборки
Сколько юзеров нужно. Как избежать недоликвидных тестов.
Параметры
4 параметра sample size:
- Baseline conversion — текущая метрика (5%)
- MDE — минимальный эффект который хочешь поймать (+0.5pp)
- Alpha — допустимая FP (обычно 0.05)
- Power — шанс поймать эффект если он есть (обычно 0.8)
Формула (упрощённая)
$$n \approx \frac{16 \cdot p(1-p)}{MDE^2}$$
Где p = baseline, MDE = в долях.
Пример
Baseline = 5%, MDE = +0.5pp (хотим заметить улучшение с 5% до 5.5%).
n = 16 × 0.05 × 0.95 / 0.005² = 30 400
Нужно 30K в каждой группе (60K total). При 1000 юзеров/день → A/B на 60 дней.
Python
from statsmodels.stats.power import zt_ind_solve_power
from math import sqrt
baseline = 0.05
mde = 0.005
effect_size = mde / sqrt(baseline * (1 - baseline))
n = zt_ind_solve_power(
effect_size=effect_size,
alpha=0.05,
power=0.8,
alternative='larger'
)
print(f"Нужно ~{int(n)} юзеров в группе")
Trade-off
| Хочешь | Цена |
|---|---|
| Меньше юзеров | Больший MDE (мелкие эффекты не поймаешь) |
| Меньше FP | Больше юзеров |
| Больше power | Больше юзеров |
Подвох
Запустил тест на 5K юзеров «посмотрим что получится». Получил p=0.15. Это не значит «не работает». Может работало, но MDE для 5K = 5pp, а реальный эффект был 1pp — система не могла его поймать.
Считай sample size заранее.