Skip to content
PПромтбук
RUEN
05Эксперименты

Расчёт размера выборки для A/B теста

MDE, power, baseline, длительность, одно- vs двусторонний — без интуиции, по формуле.

Посчитай размер выборки и длительность A/B теста.

Baseline: {{baseline}} Дневной трафик: {{traffic}}

Что считаем (4 переменные)

ПеременнаяЧтоДефолт
α (significance)Шанс false positive0.05
β (1 − power)Шанс false negative0.2 (power = 80%)
baseline (p₀)Текущая метрикаиз {{baseline}}
MDEМинимальный детектируемый эффект — то, что важно пойматьзадай, см. ниже

Если кто-то посчитал «нужно 1000 на ветку» — спроси все 4. Без них цифра бессмысленна.

Шаг 1. MDE — самый важный выбор

MDE — не «что я надеюсь увидеть», а «ниже какого эффекта мне не важно».

Если MDE = 1% — нужны огромные выборки (≈ 250k+ на ветку при baseline 5%). Если MDE = 20% — нужно мало (≈ 1.2k), но ты не поймаешь реальные +5%.

КонтекстРазумный MDE
Pricing change5-10% (relative)
Главный CTA на лендинге5-15%
Onboarding step10-20%
Notification copy15-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
К подразделу «Эксперименты»
Похожие промты