Байесовский A/B-тест онлайн: вероятность, что B лучше A, ожидаемые потери при выборе каждого варианта и достоверный интервал прироста. До 10 вариантов, конверсии или средние, равномерное априорное или по прошлым данным, правило остановки по порогу потерь — и сравнение с классическим тестом на тех же данных. Код Python и R.
Цифры остаются в браузере и никуда не отправляются
Посетители и конверсии по вариантам — до 10. Первый — контроль A. Два варианта считаются точно, больше — Монте-Карло, 20 000 розыгрышей.
Средний чек, выручка на пользователя, время на сайте: n, среднее и стандартное отклонение по двум группам. Апостериорное — нормальное приближение.
ВариантПосетителейКонверсий
A
B
Априорное распределение
Сила — сколько посетителей «весит» прошлое: при 2 000 оно тянет оценку так же, как 2 000 новых наблюдений.
Тест можно останавливать, когда ожидаемые потери при выборе лидера ниже порога — сколько вы готовы потерять, если он на самом деле хуже.
n — целое не меньше 2, среднее — число, SD — не меньше нуля
Тест можно останавливать, когда ожидаемые потери при выборе лидера ниже порога — сколько вы готовы потерять, если он на самом деле хуже.
02
Результат
Можно выбирать B.
Вероятность, что B лучше A, — 95,4 %. Если B окажется хуже, в среднем потеряем 0,0013 п.п. — меньше порога 0,010 п.п.
Вероятность, что B лучше A
95,4 %
точная формула
Потери при выборе B
0,0013 п.п.
0,06 % конверсии B
Потери при выборе A
0,1213 п.п.
6,06 % конверсии A
Интервал прироста B к A
−0,9 % … +13,4 %
достоверный интервал, 95 %
Апостериорная конверсия B
2,121 %
Beta(1 697; 78 305)
Априорное
Beta(1; 1)
равномерное
Можно выбирать B.
Вероятность, что B лучше A, — 97,9 %. Если B окажется хуже, в среднем потеряем 0,37 — меньше порога 5,00.
Вероятность, что B лучше A
97,9 %
точная формула
Потери при выборе B
0,37
0,012 % среднего
Потери при выборе A
100,37
3,346 % среднего
Разница B − A
3,88 … 196,12
+0,1 % … +6,5 %
Байесовский результат легче объяснять, но он не отменяет подглядывания и SRM: если останавливаться на первом удачном числе или трафик поделился криво, вывод так же ненадёжен.
Где, скорее всего, лежит настоящая конверсия каждого варианта
Апостериорные распределения
Где, скорее всего, лежит настоящее среднее каждой группы
04
Сравнение
Двусторонний z-тест: p = 0,091 — разница не доказана. Байесовская вероятность близка к 1 − p одностороннего теста (95,4 %): подходы видят одни данные, но формулируют вывод по-разному.
Байес и классический тест на тех же данных
ВопросКлассическийБайесовский
Что отвечаетНасколько данные необычны, если эффекта нетНасколько вероятно, что B лучше
Решениеp < αПотери лидера < порога
ПодглядываниеЛомает αТоже вредит, но мягче
05
Проверить в Python / R
Проверить в Python / R
import numpy as np
rng = np.random.default_rng(7)
a = rng.beta(1601, 78401, 200_000)
b = rng.beta(1697, 78305, 200_000)
print((b > a).mean()) # P(B > A)
print(np.maximum(a - b, 0).mean()) # потери при выборе B
06
Примеры
07
Частые вопросы
Классический тест отвечает, насколько необычны данные, если эффекта нет: это p-value. Байесовский — какова вероятность, что B лучше A, и сколько можно потерять, выбрав его. Для 1 600 и 1 696 конверсий из 80 000 классический двусторонний p = 0,091, «не доказано», а байесовская вероятность — 95,4 %. Противоречия нет: это ответы на разные вопросы об одних данных.
Доля правдоподобных вариантов мира, в которых настоящая конверсия B выше, чем у A, — при ваших данных и выбранном априорном распределении. Для 1 600 и 1 696 из 80 000 она равна 95,4 %. Это не вероятность большого выигрыша: B может быть лучше на сотые доли процента. Поэтому рядом смотрят на интервал прироста и ожидаемые потери.
Насколько в среднем просядет конверсия, если выбранный вариант на самом деле хуже. Учитывается и вероятность ошибки, и её размер. В примере с кнопкой выбор B грозит потерей 0,0013 п. п. конверсии, а выбор A — 0,121 п. п. Из-за этого потери удобнее вероятности: высокий шанс мелкой ошибки и малый шанс большой они взвешивают честно.
Равномерное Beta(1, 1), если истории нет: оно почти не влияет на результат при тысячах посетителей. Если есть — прошлая конверсия и «сила» в посетителях. Прошлые 5 % с силой 2 000 дают Beta(100, 1 900) и тянут оценку к 5 %: для 50 и 62 конверсий из 1 000 вероятность, что B лучше, падает с 87,7 до 75,8 %.
Чаще, чем в классическом, но не бесплатно. Если смотреть каждый день и останавливаться на первом «95 %», доля неверных решений тоже растёт, хотя и медленнее, чем у p-value. Байес не спасает и от перекоса трафика: при SRM данные испорчены для любого метода. Правило остановки — порог потерь и минимальный срок — задайте до старта.
Когда ожидаемые потери при выборе лидера ниже порога — сколько вы готовы потерять, если он на самом деле хуже. Например, 0,01 п. п. конверсии. В примере с кнопкой потери B — 0,0013 п. п., можно выбирать. При 50 и 62 конверсиях из 1 000 они 0,063 п. п. — рано, хотя вероятность уже 87,7 %. Неделю-две держите тест всё равно, ради сезонности.