Расчёт размера выборки для A/B теста
MDE, power, baseline, длительность, одно- vs двусторонний — без интуиции, по формуле.
Посчитай размер выборки и длительность A/B теста.
Baseline: {{baseline}} Дневной трафик: {{traffic}}
Что считаем (4 переменные)
| Переменная | Что | Дефолт |
|---|---|---|
| α (significance) | Шанс false positive | 0.05 |
| β (1 − power) | Шанс false negative | 0.2 (power = 80%) |
| baseline (p₀) | Текущая метрика | из {{baseline}} |
| MDE | Минимальный детектируемый эффект — то, что важно поймать | задай, см. ниже |
Если кто-то посчитал «нужно 1000 на ветку» — спроси все 4. Без них цифра бессмысленна.
Шаг 1. MDE — самый важный выбор
MDE — не «что я надеюсь увидеть», а «ниже какого эффекта мне не важно».
Если MDE = 1% — нужны огромные выборки (≈ 250k+ на ветку при baseline 5%). Если MDE = 20% — нужно мало (≈ 1.2k), но ты не поймаешь реальные +5%.
| Контекст | Разумный MDE |
|---|---|
| Pricing change | 5-10% (relative) |
| Главный CTA на лендинге | 5-15% |
| Onboarding step | 10-20% |
| Notification copy | 15-30% |
| Радикальный редизайн | 20%+ |
Правило: меньший MDE → дороже тест, но мельче эффект ловится. Не «занижай чтобы было поскорее» — это даёт ложные «не значимые».
Шаг 2. Формула
Для binary метрик (конверсия, retention):
n_per_group = 16 × p × (1 − p) / δ²
где:
p = baseline (например 0.05)
δ = absolute MDE (например 0.05 × 0.10 = 0.005 при relative MDE 10%)
16 = константа для α=0.05, power=80%, two-tailed
Пример:
baseline = 5%, relative MDE = 10%
δ = 0.005
n = 16 × 0.05 × 0.95 / 0.000025
n ≈ 30,400 на ветку → 60,800 всего
Для continuous метрик (ARPU, time-on-page):
n_per_group = 16 × σ² / δ²
σ — стандартное отклонение метрики (нужны исторические данные)
Используй калькулятор для cross-check: Evan Miller, Optimizely Sample Size, statsig.com.
Шаг 3. Длительность
days = (n_per_group × 2) / daily_traffic_in_test
Пример:
60,800 / 4,000 daily traffic = 15.2 дней
→ округли до 21 (целое число недель)
Минимум недель: всегда целое число недель (захватить weekend cycle).
Минимум 2 недели даже если математика говорит 3 дня — иначе будет novelty bias и day-of-week confounding.
Шаг 4. Одно- vs двусторонний
| Two-tailed (по умолчанию) | One-tailed |
|---|---|
| Ловишь и + и − | Ловишь только в одну сторону |
| α = 0.05 → ±1.96 σ | α = 0.05 → +1.645 σ |
| Безопаснее, стандарт в индустрии | Меньше выборка, но опасно |
Используй two-tailed. One-tailed оправдан только если падение метрики физически невозможно (редко) или ты заранее коммитнулся: «если упадёт — нам всё равно». Иначе будешь подтасовывать post-hoc.
Шаг 5. Проверь жизнеспособность
Если days > 30 — пересмотри:
- MDE слишком мал?
- Трафика правда столько?
- Может быть proxy-метрика быстрее?
Если days < 7 — пересмотри:
- Не словишь weekly cycle
- Может быть MDE слишком большой
Шаг 6. Multiple variants
Если тестируешь A/B/C/D — нужно больше выборки и поправка на множественные сравнения (Bonferroni: α / k):
4 варианта → α = 0.05/3 = 0.0167 (3 попарных сравнения с control)
n ≈ + 30-40% от базового расчёта
Что НЕ делать
❌ «Подождём недельку и посмотрим» — недостаточно мощности, p-value будет дрейфовать ❌ Брать MDE из интуиции — задай вопрос «какая разница меняет решение?» ❌ Считать общую n, забыв ÷ 2 на варианты ❌ One-tailed без явной коммиты до старта ❌ Пересчитывать sample size посреди теста («ой, нужно больше») — нарушает α ❌ Запускать на «дополнительной» неделе если p = 0.07 — это peeking ❌ Игнорировать power: 50% power = бросаешь монету, не считай эксперимент
На выходе
## Calculation
Baseline: 5.2%
Relative MDE: 10% (= absolute 0.52pp)
Power: 80%, α: 0.05, two-tailed
n per group: 31,200
Total sample: 62,400
Daily traffic in test: 4,000
Duration: 16 days → 21 days (3 weeks)
## Stop rules
- p < 0.05 AND lift > MDE → ship
- p < 0.05 AND lift < MDE → ship with caution (significant but small)
- p > 0.05 → keep control
- Guardrail metric breached → kill, любая длительность
## Risks
- If actual baseline drifts → recompute
- If traffic drops → extend duration, not sample
Декомпозиция фичи в user stories
Разбить фичу на маленькие истории формата «As a … I want … so that …» с acceptance criteria.
Blind A/B eval двух промтов
Сравнить prompt v1 vs v2 на одних inputs: judge (Claude или человек), статистическая значимость, защита от cherry-picking.
Архитектура feature flags
Типы флагов (release/experiment/ops/permission), хранение, оценка, тех-долг и удаление.