A/B Lab.
← Открыть калькуляторМЕТОДОЛОГИЯ · V1.0

Формулы, предпосылки
и контрольные примеры.

Величина эффекта везде означает B − A. Проценты конверсии и процентные пункты разделены: 10% → 12% — это +2 п.п. и +20% relative uplift. Вводимые данные и вычисления остаются в браузере. Ссылка на расчёт содержит параметры во фрагменте URL; передавайте её только тем, кому хотите раскрыть эти параметры.

Впервые разбираетесь в статистике? АБ тесты для чайников →

Что умеет калькулятор

Планирование выборки, длительности и MDE; анализ бинарных метрик A/B/n; Bayesian-анализ A/B; сравнение средних и выручки. Неравное распределение трафика, множественные сравнения, SRM, практический порог и денежный сценарий помогают связать статистику с решением. Расчёты можно сохранить и открыть повторно.

1. Популяция и единица наблюдения

Бинарный режим принимает независимые Bernoulli-наблюдения: n — число рандомизированных единиц, x — сколько из них совершили хотя бы одну конверсию за согласованное окно, 0 ≤ x ≤ n. Один пользователь не должен учитываться повторно или одновременно входить в две группы. Число заказов вместо числа сконвертировавшихся пользователей нарушает модель, даже если случайно x ≤ n.

Все варианты сравниваются с общим контролем A. Другие пары автоматически не тестируются. Из выигрыша B и C у контроля нельзя заключить, что B лучше C. Из статистической значимости нельзя автоматически заключить, что эффект полезен бизнесу.

2. Планирование бинарной метрики

p̄ = (nA·pA + nB·pB)/(nA + nB)
SE₀ = √[p̄(1−p̄)(1/nA + 1/nB)]
SE₁ = √[pA(1−pA)/nA + pB(1−pB)/nB]
d = pB − pA; c = z(1−α/2)·SE₀
Power₂ = Φ((−c−d)/SE₁) + 1−Φ((c−d)/SE₁)
Power(B>A) = 1−Φ((z(1−α)·SE₀−d)/SE₁)

Для B<A используется левый хвост. Выборка и MDE находятся бинарным поиском по этой функции, с обеими хвостовыми вероятностями в двустороннем режиме. nB = ceil(nA·r); после округления мощность пересчитывается. Точный смысл совпадает с statsmodels power_proportions_2indep: pooled variance под нулевой гипотезой и unpooled под альтернативой.

Это нормальное приближение без continuity correction. При редких событиях нет гарантии точной биномиальной мощности; калькулятор предупреждает при ожидаемых частотах меньше 10. Для конверсий требуются 0 < pA,pB < 1 и ненулевой MDE. При нескольких вариантах Bonferroni использует α/m. Мощность относится к одному сравнению при заданном эффекте, не к вероятности одновременно выявить все эффекты.

Доля каждого варианта qB = (1 − qA)/m
Трафик теста за неделю = eligible new users × участие
Срок в днях = 7 × max(nA/qA, nB/qB) / трафик теста
Срок по циклам = ceil(срок / цикл) × цикл

Недельный трафик должен означать поток новых единиц эксперимента, без повторного подсчёта тех же людей между неделями. Календарное округление не заменяет окно созревания конверсий и не проверяет сезонность.

3. Частотный тест

pA = xA/nA; pB = xB/nB
p̂ = (xA+xB)/(nA+nB)
Z = (pB−pA)/√[p̂(1−p̂)(1/nA+1/nB)]
p₂ = 2·Φ(−|Z|); p-value (H₁: pB>pA) = 1−Φ(Z); p-value (H₁: pB<pA) = Φ(Z)

Это pooled Z-test для нулевой гипотезы равных долей. Направление одностороннего теста выбирают заранее. Деление двустороннего p на два без учёта знака неверно. SE разницы для описания эффекта отдельно считается из непулированных дисперсий. При нулевой вариативности Z помечается неопределённым; p = 1 не доказывает равенства.

Auto выбирает Fisher, когда хотя бы одна ожидаемая частота в 2×2-таблице меньше 5. Условная гипергеометрическая таблица записывается как [[xB,nB−xB],[xA,nA−xA]]. Двусторонний Fisher суммирует вероятности всех допустимых таблиц с вероятностью не выше наблюдаемой. Он не равен удвоенному минимальному хвосту в общем случае. Реализация использует устойчивую рекурсию вокруг моды; максимум 200 000 допустимых таблиц. См. определение и пример SciPy Fisher exact.

4. Доверительные интервалы

Для каждой конверсии — Wilson score interval, включая 0% и 100%. Для абсолютной разницы — Newcombe hybrid-score на основе двух Wilson-интервалов. Если [LA,UA] и [LB,UB] — интервалы долей:

L = d − √[(pB−LB)² + (UA−pA)²]
U = d + √[(UB−pB)² + (pA−LA)²]

Односторонняя граница использует z(1−α), то есть соответствующий центральный интервал уровня 1−2α, с естественной границей −1 или +1. Интервалы Newcombe и pooled Z/Fisher не являются точными инверсиями одного и того же теста: около порога вывод по p и включению нуля может различаться. Это явно разные процедуры. Определения методов statsmodels.

Relative lift = pB/pA−1. Его приблизительный интервал построен через log risk-ratio, SE(log RR) = √(1/xB−1/nB+1/xA−1/nA); после экспоненцирования из границ RR вычитается 1. Он показывается только когда каждая наблюдаемая ячейка ≥ 5. При нулевой CR контроля relative lift не определён. Делить границы интервала абсолютной разницы на наблюдаемый pA некорректно.

5. Несколько сравнений и SRM

Holm — default для нескольких вариантов против A. Bonferroni: p_adj = min(1,m·p). Holm: отсортировать p по возрастанию, умножить на m−rank+1 и применить накопительный максимум; затем вернуть исходный порядок. BH использует обратный накопительный минимум m·p/rank; он контролирует FDR при соответствующих предпосылках независимости/положительной зависимости, а не семейную вероятность хотя бы одной ошибки. Справочник statsmodels multipletests.

При выборе Bonferroni интервалы абсолютного эффекта в главной таблице и графике строятся на уровне 1−α/m для приближённого совместного покрытия. Остальные интервалы (Wilson долей, relative lift, односторонние границы и детали) остаются индивидуальными. При Holm/BH коррекция p не делает обычные интервалы совместными. Поправка на варианты не исправляет многократные просмотры во времени или выбор из множества метрик.

SRM: Ei = N·wi/Σw
χ² = Σ (Oi−Ei)²/Ei; df = k−1
pSRM = верхний хвост χ²(df)

Используются размеры распределённых групп, не конверсии. Веса задаются по плану, не подгоняются к наблюдаемым данным. Порог по умолчанию 0,001 — отдельная диагностическая настройка. При ожидаемых частотах меньше 5 χ²-вывод не считается надёжным. Обнаруженный SRM блокирует зелёный итог в частотном режиме. Отсутствие SRM не подтверждает всю корректность данных. Microsoft Research: диагностика SRM.

6. Байесовская модель

pi ~ Beta(α₀, β₀)
pi | data ~ Beta(α₀ + xi, β₀ + ni − xi)
P(B>A) = E[1(pB > pA)]
regret(B) = E[max(pA−pB,0)] · для метрики «больше — лучше»; regret минимизируем
regret(A) = E[max(pB−pA,0)]

Поддерживаются Uniform Beta(1,1), Jeffreys Beta(0.5,0.5) и общий пользовательский prior для обеих групп. Независимость posterior следует из независимых prior и независимых выборок. Исходные формулы Evan Miller и техническая работа VWO об expected loss объясняют вероятности превосходства и риск решения.

Используется воспроизводимый Monte Carlo: генератор Mulberry32, seed, независимые Gamma-сэмплы по Marsaglia–Tsang, Beta = Gα/(Gα+Gβ). По умолчанию 200 000 draws; можно выбрать 1 000 000. Центральный credible interval — эмпирические квантили разностей отдельных draws, с линейной интерполяцией. График обрезает лишь по 0,1% хвостов для удобства; расчёты используют все draws.

Вероятности имеют численную погрешность. Для P показывается 95% Wilson-интервал Monte Carlo, включая случаи нулевого числа проигрышей. Он не является интервалом истинного эффекта. При 200 000 draws максимальная стандартная ошибка вероятности ≈ 0,112 п.п.; при миллионе ≈ 0,05 п.п. Ни «0 выигрышей», ни «все выигрыши» не означают математически точных 0%/100%.

Для relative uplift выводятся медиана и квантили отношения. Средний E[pB/pA−1] может быть бесконечным при posterior αA ≤ 1; поэтому он не используется. ROPE = вероятность |pB−pA| ≤ заданный практический порог. При выборе полезного снижения знак в вероятности улучшения, regret и денежном сценарии меняется; интервалы эффекта по-прежнему подписаны B−A.

7. Денежный сценарий

Будущие пользователи = (nA+nB) / дни теста / доля A+B × дни горизонта
Чистый эффект = s·(pB−pA) × будущие пользователи × ценность − стоимость
s = +1 для полезного роста, −1 для полезного снижения

Ценность — постоянная выручка, маржа или экономия на событие по вашему определению. Горизонт по умолчанию 182 дня. Вероятность достичь цели, вероятность убытка и интервалы получены из того же posterior. Условный средний убыток — среднее только по проигравшим draws; безусловный expected regret — другое число. Стоимость внедрения включена в чистый эффект, но не в conversion regret. При наличии C и других вариантов доля участия должна охватывать только A+B.

Это сценарий при постоянных притоке новых пользователей и ценности события. Он не моделирует неопределённость чека, изменение трафика, сезонность, повторные покупки, churn или зависимость будущих событий. Для измерения выручки на пользователя нужен отдельный анализ этой метрики, например Welch.

8. Средние и выручка

vA=sA²/nA; vB=sB²/nB; SE=√(vA+vB)
t=(meanB−meanA)/SE
df=(vA+vB)² / [vA²/(nA−1)+vB²/(nB−1)]
CI = meanB−meanA ± t(1−α/2,df)·SE

SD — выборочное стандартное отклонение, делитель n−1. n ≥ 2; обе SD не могут одновременно быть нулевыми. df остаётся дробным. Используется Student t, без предположения равных дисперсий. SciPy: Welch по агрегатам; NIST: сравнение двух средних.

Для revenue per randomized user включаются нули и фиксируется одинаковое окно наблюдения. Средний чек только покупателей — другая метрика, а постэкспериментальный отбор покупателей может сместить оценку. Тяжёлые хвосты по n/mean/SD проверить нельзя. Планирование непрерывных метрик — отдельное нормальное приближение с заданными SD, без нецентрального t; калькулятор не называет его точной мощностью Welch.

9. Что не следует делать

10. Независимая проверка

Ядро без сторонних runtime-зависимостей сопоставлено с SciPy 1.13.1 и statsmodels 0.14.6. Сохранены 321 контрольный случай и 736 численных проверок, включая проверки инвариантов, некорректного ввода, крайних частот и воспроизводимости. Для четырёх Bayesian-сценариев вероятности и expected regret сверены с независимым численным интегрированием SciPy. Допуски MC учитывают размер симуляции; это не заявление о совпадении до последнего знака.

КонтрольЭталон
10% → 12%, α=.05, power=.8, two-sided, 1:13 841 на группу
То же, nB/nA=2nA=2 911, nB=5 822
A=100/1000, B=120/1000Z=1.4293008498; p₂=0.1529177819
Newcombe CI для предыдущего примера[−0.74921675; 4.75506675] п.п.
Wilson 95%, 0/10[0; 27.75327999]%
Fisher [[6,2],[1,4]]p₂=0.1025641026
SRM 550/450 при 50:50χ²=10; p=0.0015654023
Welch A: n30,mean100,SD10; B: n40,mean106,SD12t=2.2786635759; df=67.190087; p₂=0.0258712125
Holm [.01,.04,.03][.03,.06,.06]

Область ввода: 1–100 млн пользователей на группу, 1–5 вариантов сверх A; доверие 80–99,99%; Bayesian prior α/β от 0,1 до 100 000. Сверхбольшие планы ограничены 10 млрд на контроль. Численные алгоритмы возвращают явную ошибку при несходимости, а не правдоподобное фиктивное число. Проверки не заменяют внешнего статистического аудита и не доказывают корректность произвольных исходных данных.

Машиночитаемый отчёт валидации · Вернуться к калькулятору