Байесовский подход к A/B-тестам: когда классика не работает
Содержание
Частотная статистика отвечает на вопрос: «если гипотеза верна, насколько странные данные мы увидели?». Байесовская — на другой: «с какой вероятностью одно лучше другого, учитывая данные и то, что я знал заранее?». Это принципиально разные вопросы.
Теорема Байеса
Всё держится на одном тождестве:
Где:
- — prior, что мы думали о параметре до данных,
- — likelihood, вероятность увидеть данные при данном ,
- — posterior, обновлённое мнение после данных.
В A/B-тесте — конверсия группы. — число успехов и провалов.
Beta-Binomial: рабочая модель для конверсий
Если prior на конверсию — , а наблюдение — успехов из , то posterior имеет аккуратный вид:
Это сопряжённый prior: форма распределения не меняется, только параметры. Никаких интегралов руками.
Python (SciPy):
import numpy as np
from scipy.stats import beta
# Слабый prior (неинформативный): Beta(1, 1) = равномерное
alpha_prior, beta_prior = 1, 1
# A: 1040 конверсий из 10 000. B: 1120 из 10 000.
a_post = beta(alpha_prior + 1040, beta_prior + 10_000 - 1040)
b_post = beta(alpha_prior + 1120, beta_prior + 10_000 - 1120)
# P(B > A) через Monte Carlo
N = 200_000
samples_a = a_post.rvs(N)
samples_b = b_post.rvs(N)
prob_b_better = np.mean(samples_b > samples_a)
print(f"P(B > A) = {prob_b_better:.3f}") # ~0.97
97% вероятности, что B лучше A. Это прямой ответ на вопрос продакта, без мысленных оборотов вокруг «отвергаем нулевую гипотезу».
Частотный vs байесовский: честное сравнение
| Свойство | Частотный подход | Байесовский подход |
|---|---|---|
| Главный вопрос | ||
| Требует фиксированного | Да (иначе peeking) | Нет |
| Использует prior-знание | Нет | Да, явно |
| Интерпретация неэксперту | Сложная | Простая («вероятность, что B лучше») |
| Контроль ошибок I рода | Гарантирован | Не гарантирован в классическом виде |
| Вычислительная стоимость | Низкая | Выше (MCMC для сложных моделей) |
Когда байес реально выигрывает
- Маленькие выборки. Prior стабилизирует оценку, не даёт дикие доверительные интервалы.
- Sequential decisions. Можно останавливаться, когда , без штрафа за peeking.
- Сложные модели. Иерархические эффекты по сегментам в bayes — тривиальны, в частотной — кошмар.
- Решение через risk. Можно считать expected loss, если выберем неверный вариант:
Пока loss выше порога — продолжаем тест. Это работает ближе к тому, как продукт реально принимает решения.
Где ловушки
- Plausible prior. Если prior неаккуратный ( без оснований), он будет доминировать. Делайте prior слабым, либо откровенно основанным на прошлых тестах.
- P(B > A) — не вероятность релиза. 95% — это ещё не бинарное решение: учитывайте cost и reversibility.
- Нет магии. Байес не создаёт информацию из ничего. Шумный эксперимент останется шумным.
Что читать дальше
- Bayesian Data Analysis, Gelman et al. — справочник на всю жизнь.
- Блог VWO и статьи Chris Stucchio — про практику в продукте.
PyMCилиStan— когда перерастёте Beta-Binomial.
Частотный подход проще в автоматизации и стандартизации, байесовский — честнее отвечает на бизнес-вопросы. В зрелой экспериментальной культуре живут оба.