← К списку уроков
Статистика·Сложный·7 мин

MDE и размер выборки

Сколько юзеров нужно. Как избежать недоликвидных тестов.

Параметры

4 параметра sample size:

  1. Baseline conversion — текущая метрика (5%)
  2. MDE — минимальный эффект который хочешь поймать (+0.5pp)
  3. Alpha — допустимая FP (обычно 0.05)
  4. 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 заранее.