A/B-тесты для аналитика — дизайн, статистика, ошибки

A/B-тесты — ключевой инструмент продуктового аналитика. На собесе в Яндекс, Ozon, Авито обязательно спросят про дизайн эксперимента, sample size, причины peeking. Здесь — полный гайд: от базы (H0/H1, t-test) до Senior-уровня (CUPED, sequential testing, mSPRT). Бенчмарки реальных компаний.
Содержание (8 разделов)
  1. База дизайна A/B-теста
  2. Что такое MDE и sample size
  3. Senior-level: CUPED, sequential, Bayesian
  4. Сколько ждать конца теста — формула
  5. Типичные ошибки на собесе
  6. Twyman's Law и Sanity checks
  7. Когда нужен Bayesian
  8. Bandit vs A/B — когда что

База дизайна A/B-теста

6 шагов которые нужно пройти прежде чем нажать «запустить эксперимент». Пропустишь один — получишь невалидные результаты.

Что такое MDE и sample size

MDE (Minimum Detectable Effect) — минимальный эффект который сможем заметить с заданной мощностью. Sample size зависит от MDE, variance и желаемой мощности.

# Sample size для A/B-теста на пропорции (z-test)
from statsmodels.stats.power import zt_ind_solve_power

# Baseline CR 3%, MDE 0.3pp (relative 10%)
# Alpha 0.05 (two-sided), Power 0.8
p1, p2 = 0.030, 0.033
effect_size = (p2 - p1) / ((p1 * (1-p1) + p2 * (1-p2)) / 2) ** 0.5
n = zt_ind_solve_power(
    effect_size=effect_size,
    alpha=0.05,
    power=0.8,
    alternative='two-sided'
)
print(f"Sample size per group: {n:,.0f}")
# Output: ~31,000 на группу = 62,000 total

Senior-level: CUPED, sequential, Bayesian

Эти три темы — must know на Senior в Яндекс/Авито/Tinkoff. Без них собес не пройти.

МетодКогда применятьЭффект
CUPEDVariance reduction для дорогих метрик-30-50% sample size
Sequential (mSPRT)Хочется прервать раньшеБез peeking penalty
Bayesian A/BМалые выборки, prior знаниеPosterior probability
StratifiedMix-shift между группамиЗащита от Simpson

Сколько ждать конца теста — формула

Время эксперимента = sample size / daily volume. Например: 62,000 user / 10,000 daily = 6.2 дня. На практике добавляем 2-3 дня на стабилизацию (избегать day-of-week эффект).

Типичные ошибки на собесе

Эти ошибки автоматически снижают grade. На Senior-уровне их вообще нельзя допускать.

Twyman's Law и Sanity checks

Twyman's Law: «Любая фигура которая выглядит интересной или особенной — обычно ошибка». Если результат теста удивил — сначала проверь sanity, потом ищи объяснение.

Когда нужен Bayesian

Bayesian подход полезен когда есть prior знание (предыдущие эксперименты) или малая выборка. Booking использует Bayesian для оценки эффекта на 10% revenue uplift CI.

Bandit vs A/B — когда что

A/B — фиксированный split (50/50), оценивается на этапе planning. Multi-Armed Bandit — динамический split, оптимизирует cumulative reward. Используется когда нет времени ждать конца теста (новости, реклама).

МетодКогдаЦель
A/B testСтабильная гипотезаValidate effect (precision)
Multi-Armed BanditДинамика, exploitMax cumulative reward
Sequential A/B (mSPRT)Хочешь early stopA/B + ранний выход
Contextual BanditПерсонализацияReward per user-context

Частые вопросы

Что такое p-value простыми словами?

Вероятность увидеть результат как наш или больший, ЕСЛИ нет эффекта (H0 верна). p < 0.05 — отвергаем H0 (значимо). p = 0.05 НЕ означает «5% шанс что H1 верна» — это критическая ошибка интерпретации. На собесе спросят разницу между p-value и posterior probability.

Что такое peeking и почему это плохо?

Peeking — подглядывание результата до планируемого окончания и принятие решения на основе текущих данных. Инфлирует FPR (false positive rate) в 3-7×: классический test даёт p<0.05 в 5% случаев когда H0 верна, peeking даёт 15-35%. Решение: sequential testing (mSPRT) либо строго ждать конца.

Зачем нужен CUPED?

CUPED снижает variance метрики на 30-50% за счёт регрессии на pre-experiment ковариату (предыдущая активность юзера). Это даёт ту же мощность при 30-50% меньшем sample size. Применяется в Microsoft/Booking/Yandex для дорогих метрик (revenue, retention).

Что такое SRM (Sample Ratio Mismatch)?

Когда фактическое распределение юзеров по группам не соответствует target (например, ожидаешь 50/50, а получил 48/52). Признак сломанной рандомизации или утечки. Проверка: chi-square test между actual и expected. Если p < 0.001 — НЕ доверяй результатам теста, ищи баг.

Какая разница между t-test и Mann-Whitney?

t-test (Стьюдент) — параметрический, требует нормальности и равной дисперсии (либо Welch для разной). Mann-Whitney U — непараметрический, работает на любых распределениях, сравнивает медианы (точнее, P(X>Y)). Для skew-распределений (revenue, time) — Mann-Whitney или bootstrap.

Что такое MDE и как его выбирать?

Minimum Detectable Effect — минимальный эффект, который сможем заметить с заданной мощностью. Выбирают на этапе planning из бизнес-логики: «эффект < 0.5pp нам не интересен». Жёстче MDE → больше sample size → дольше эксперимент. Пример: для CR 5%, MDE 0.5pp = ~16K на группу.

Можно ли остановить A/B-тест раньше срока?

Классический A/B — нельзя (peeking penalty). Sequential testing (mSPRT, Pocock, OBF) — можно с контролем alpha. Google, Microsoft используют sequential для дорогих экспериментов. На обычном собесе ответ: «нельзя, дождись конца». На senior спросят про sequential.

Что такое Simpson Paradox в A/B?

Когда aggregate-effect противоположен по segments. Пример: Yandex показывает aggregate uplift +2%, но по новым юзерам -5%, по старым +5%. Mix-shift между группами создаёт ложный сигнал. Защита: stratified рандомизация + analysis by segment.

Что такое multiple testing correction?

Когда тестируешь 10+ гипотез одновременно — alpha инфлируется. Без коррекции при alpha=0.05 и 10 тестах FPR ≈ 40%. Решения: Bonferroni (alpha / N, консервативно), Benjamini-Hochberg (контроль FDR, мягче). Применяется при множественных metric / segment tests.

Bandit или A/B-test?

A/B — для validation эффекта (научная цель). Bandit — для максимизации cumulative reward (бизнес-цель). Если у тебя 100 вариантов и ты не знаешь который лучший — Bandit. Если 2 варианта и хочешь точно измерить эффект — A/B. Tinkoff/Yandex используют оба.

Начать практику бесплатно →