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

Проверь себя · 1/3разбор после ответа
На что в первую очередь нацелено alpha spending?

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

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

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

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

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

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

Процесс:

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

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

Prior — что это

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

Типы:

Uninformative prior. Плоское распределение (uniform). Говорит «не знаю ничего про параметр». Апостериорное полностью определяется данными.

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

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

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

Beta-Binomial модель

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

Приор для conversion rate: Beta(α, β).

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

Апостериорное: Beta(α + k, β + n - k).

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

Пример:

  • Приор Beta(1, 1) — uninformative
  • Группа A: 100 юзеров, 5 конверсий → апостериорное Beta(6, 96)
  • Группа B: 100 юзеров, 8 конверсий → апостериорное Beta(9, 93)

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

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

Два понятия легко спутать.

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

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

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

Правила принятия решений

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

Вероятность обогнать базовый вариант. «B лучше A с вероятностью 95%+ → запускаем B».

Ожидаемые потери. Насколько вы рискуете выбрать худший вариант. «Если выбираем A вместо B, теряем в среднем 0.3% conversion rate». Если потери ниже порога — решаем.

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

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

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

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

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

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

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

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

Подготовься к собесу по A/B и статистике
300+ вопросов с разбором: дизайн, размер выборки, p-value, ловушки
Тренировать A/B в Telegram

Недостатки

Субъективный приор. Два аналитика с разными приорами → разные выводы. Прозрачность приоров важна.

Вычислительная стоимость. Для сложных моделей (иерархических, с непрерывными исходами) нужен MCMC-сэмплинг. Медленно.

Готовность организации. Многие стейкхолдеры обучены думать в frequentist-категориях. Байесовские отчёты требуют обучения команды.

Риск неправильного использования. «Остановим тест когда probability > 90%» — звучит ок, но без правильного decision framework можно накручивать false positives.

Sequential testing

Байесовский подход естественен для последовательного тестирования — проверяете результаты по мере поступления данных и можете остановиться рано.

Frequentist требует корректировок (alpha spending) для подсматривания. Bayesian естественно работает, если приор правильно задан и используется корректное stopping rule (ожидаемые потери, пороги вероятности).

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

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

Иерархические байесовские модели

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

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

Иерархическая байесовская модель моделирует сегменты совместно, «заимствуя силу» (partial pooling). Сегменты влияют друг на друга через общий приор.

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

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

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

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

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

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

  • Регуляторные требования (фарма).
  • Большой объём данных и стандартные эксперименты.
  • Нет хороших априорных знаний.
  • Команда уже привыкла к p-value.

Онлайн-инструменты

Сервисы с байесовским AB:

  • VWO SmartStats — проприетарный байесовский движок.
  • Dynamic Yield, Optimizely — предлагают байесовский режим.
  • Bayesian inference calculator — бесплатный онлайн для простых кейсов.
  • Statsig — современная экспериментальная платформа с байесовскими методами.

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

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

Выбирать слишком информативные приоры. Приор должен «побеждаться» данными при большой выборке. Если апостериорное мало отличается от приора — приор слишком сильный.

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

Останавливаться только при положительных результатах. «Остановимся когда P(B > A) > 95%, иначе продолжим». Это асимметричное stopping rule → смещённые оценки. Нужно думать о потерях и стоимости обоих решений.

Смешивать p-value и bayesian. Репортить оба «для надёжности» — создаёт путаницу. Выберите один подход и придерживайтесь.

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

FAQ

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

В долгосрочной перспективе вероятно да, особенно в tech. В медицине и регулируемых отраслях frequentist остаётся доминирующим.

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

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

Нужен ли data scientist?

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

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

Нет. Часто короче благодаря ранней остановке. Вычисление на одно обновление — быстрее, чем прогон полного frequentist-теста.