Bayesian AB testing: альтернатива frequentist подходу

Два подхода к AB-тестированию

Классический (frequentist) и байесовский — два философских подхода к статистике. Оба применимы к AB-тестам, но отвечают на разные вопросы.

Frequentist. «Какова вероятность увидеть такую разницу, ЕСЛИ гипотеза H0 верна?» (p-value).

Bayesian. «Какова вероятность, что B лучше A, УЧИТЫВАЯ данные?» (posterior probability).

Второй вопрос ближе к тому, что хочет знать бизнес. Но bayesian требует более сложной математики и осознанного выбора «prior».

Как работает Bayesian AB testing

Процесс:

  1. Задаём prior. Начальные верования о параметрах (conversion rate) до начала теста.
  2. Собираем данные. Наблюдения за тестом.
  3. Обновляем beliefs. Комбинируем prior и data → posterior distribution.
  4. Принимаем решение. На основе posterior distribution.

Вместо точечной оценки получаем распределение. Это богаче информационно.

Prior — что это

Prior — distribution, отражающее знание о параметре до эксперимента.

Типы:

Uninformative prior. Flat distribution (uniform). Говорит «не знаю ничего про parameter». Data полностью driven posterior.

Weakly informative. Широкое distribution с небольшим предпочтением. Например, Beta(1, 1) для conversion rate — uniform.

Informative. Строится на исторических данных. Если исторический conversion rate 3-5%, задаём Beta(30, 700) — concentrates around 4%.

Informative prior сокращает время теста (меньше данных нужно), но если неправильный — искажает результат.

Beta-Binomial модель

Стандартная модель для conversion rate AB-теста.

Prior для conversion rate: Beta(α, β).

Данные: n трайалов, k успехов (Binomial).

Posterior: Beta(α + k, β + n - k).

Красота: posterior — та же семья, что prior. Можно легко считать вероятности и updates.

Пример:

  • Prior Beta(1, 1) — uninformative
  • Group A: 100 юзеров, 5 конверсий → posterior Beta(6, 96)
  • Group B: 100 юзеров, 8 конверсий → posterior Beta(9, 93)

Теперь можем спросить: «какая probability, что B > A?» — посчитать через sampling.

SQL и Python для Bayesian AB

В Python:

import numpy as np
from scipy.stats import beta

# Данные
a_trials, a_conversions = 1000, 50
b_trials, b_conversions = 1000, 65

# Uninformative prior Beta(1, 1)
a_posterior = beta(1 + a_conversions, 1 + a_trials - a_conversions)
b_posterior = beta(1 + b_conversions, 1 + b_trials - b_conversions)

# Sampling для оценки P(B > A)
n_samples = 100000
a_samples = a_posterior.rvs(n_samples)
b_samples = b_posterior.rvs(n_samples)

p_b_better = (b_samples > a_samples).mean()
print(f"P(B > A): {p_b_better:.3f}")

# Expected uplift
uplift = (b_samples - a_samples) / a_samples
print(f"Expected uplift: {uplift.mean():.1%}")
print(f"95% credible interval: [{np.percentile(uplift, 2.5):.1%}, {np.percentile(uplift, 97.5):.1%}]")

Получаем прямую вероятность и credible interval для uplift.

Credible Interval vs Confidence Interval

Два concepts легко спутать.

Confidence Interval (frequentist). «Если повторить эксперимент 100 раз, 95% CI содержат истинное значение». НЕ «95% вероятность, что истинное значение в этом CI».

Credible Interval (bayesian). «95% вероятность, что истинное значение находится в этом interval, учитывая данные». Прямая интерпретация.

Bayesian ответ — тот, который интуитивно нужен. Frequentist ответ часто неправильно интерпретируют.

Decision framework

Bayesian подход даёт гибкие правила решений.

Probability to beat baseline. «B лучше A с вероятностью 95%+ → запускаем B».

Expected loss. Насколько вы рискуете выбрать hudje option. «Если выбираем A вместо B, теряем в среднем 0.3% conversion rate». Если loss threshold < X → решаем.

Credible interval width. Если CI очень широкий (много uncertainty), может стоить подождать.

Frequentist traditionally использует только p-value. Bayesian предоставляет больше данных для решения.

Преимущества Bayesian подхода

Интуитивная интерпретация. «Вероятность 94%, что B лучше» — ясно. «p-value 0.06» — требует объяснения.

Нет необходимости в предустановленном sample size. Можете monitoring posterior и остановиться когда уверены. Это peeking в frequentist запрещён, в bayesian допустим (если правильно делать).

Inclusion prior knowledge. Если есть исторические данные о conversion rate — используйте. Ускоряет тесты.

Multi-arm bandits. Bayesian natural для bandits (динамическое распределение трафика к лучшим вариантам).

Small sample sizes. Бывают ситуации с малыми данными (enterprise AB с 50 клиентами). Frequentist не работает, bayesian может дать полезный вывод.

Недостатки

Subjective prior. Два analysts с разными priors → разные выводы. Прозрачность priors важна.

Computational cost. Для сложных моделей (hierarchical, continuous outcomes) нужен MCMC sampling. Медленно.

Organisational readiness. Многие stakeholders обучены думать в frequentist категориях. Bayesian reports требуют education.

Risk misuse. «Мы остановим тест когда probability > 90%» — звучит ok, но без proper decision framework можно накручивать false positives.

Sequential testing

Bayesian natural для sequential testing — проверяете результаты по мере поступления данных и можете остановиться рано.

Frequentist требует корректировок (alpha spending) для peeking. Bayesian естественно работает, если prior правильно задан и используется proper stopping rule (expected loss, probability thresholds).

Это огромное practical преимущество — сокращает время тестов в 30-50%.

Продвинутая статистика для AB-тестов — senior-level skill для аналитика. В тренажёре Карьерник есть задачи по AB-тестам, bayesian методам и статистике.

Hierarchical Bayesian models

Для сложных случаев — иерархические модели. Пример: AB-тест по нескольким segments (web, iOS, android).

Классический подход: считать для каждого сегмента отдельно → мало данных в каждом.

Hierarchical bayesian: моделирует sub-populations совместно, «заимствуя силу» (partial pooling). Segments влияют друг на друга через общий prior.

Результат: более точные оценки для каждого сегмента, особенно малых.

Библиотеки: PyMC, Stan (через CmdStanPy), Bambi.

Когда использовать Bayesian

Хорошие кейсы:

  • Небольшие sample sizes (важен prior).
  • Ранние decisions без полного теста (peek-and-stop).
  • Multi-arm bandits или continuous optimization.
  • Есть хорошие исторические данные.
  • Business хочет «probability B лучше» — прямой ответ.

Frequentist остаётся лучше когда:

  • Регуляторные требования (pharmaceuticals).
  • Большой объём данных и стандартные experiments.
  • Нет хорошего prior knowledge.
  • Команда уже attuned к p-values.

Online tools

Сервисы с Bayesian AB:

  • VWO SmartStats — proprietary bayesian.
  • Dynamic Yield, Optimizely — offer bayesian mode.
  • Bayesian inference calculator — free online для простых cases.
  • Statsig — modern experimentation platform с bayesian методами.

Многие custom in-house AB-платформы крупных компаний (Booking, Airbnb) дрейфуют к bayesian.

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

Choosing overly informative priors. Prior должен «побеждаться» данными при large sample. Если посты-posterior отличается от prior — prior слишком strong.

Not reporting priors. При шаринге результатов — транспарентно указать prior, чтобы другие могли воспроизвести.

Stopping for positive results only. «Остановимся когда P(B > A) > 95%, иначе продолжим». Это asymmetric stopping rule → biased. Нужно думать о loss и cost обеих decisions.

Mixing p-values and bayesian. Репортить оба «для надёжности» — создаёт confusion. Выберите один подход и придерживайтесь.

Читайте также

FAQ

Bayesian тест заменит классический?

В долгосрочной перспективе вероятно да, особенно в tech. В medical и regulated industries frequentist остаётся dominant.

Какой prior выбрать для conversion rate?

Beta(1, 1) — uninformative. Если есть исторические — Beta, соответствующая историческому mean conversion rate с variance, отражающим неопределённость.

Нужен ли data scientist?

Для простых Beta-Binomial — нет. Для hierarchical моделей или custom likelihoods — да.

Bayesian тест считать ещё дольше?

Нет. Часто короче благодаря early stopping. Computation per update — быстрее чем running full frequentist test.