Теория вероятностей · модуль 13 из 14
A/B-тест: значим ли рост конверсии
Новая кнопка «Купить» (вариант B) против старой (A). Задайте истинный эффект и число пользователей в каждой группе. Симуляция покажет, что увидит аналитик и как часто тест находит эффект.
- оценка A
- оценка B
- пунктир — истинная конверсия
- значимые повторы
Теория
В A/B-тесте пользователи случайно делятся на две группы по $n$ человек. Группа A видит старый вариант, группа B — новый. Число покупок в группе — биномиальная случайная величина, а наблюдаемые конверсии $\hat p_A$ и $\hat p_B$ отличаются от истинных $p_A$ и $p_B$ из-за случайного шума.
z-тест для двух долей. Гипотеза $H_0$: $p_A = p_B$. При её выполнении статистика
$$ z = \frac{\hat p_B - \hat p_A}{\sqrt{\bar p (1 - \bar p) \cdot 2 / n}}, \qquad \bar p = \frac{\hat p_A + \hat p_B}{2}, $$
приближённо имеет стандартное нормальное распределение. p-value — вероятность получить такое же или большее $|z|$ при отсутствии эффекта: $p = 2\,(1 - \Phi(|z|))$. Результат считается значимым при $p < 0{,}05$, что соответствует $|z| > 1{,}96$.
Ошибки. Если эффекта нет, около 5% тестов всё равно покажут значимый результат — это ошибка первого рода. Если эффект есть, тест может его не заметить — ошибка второго рода. Мощность — вероятность обнаружить существующий эффект. Для мощности 80% при уровне значимости 5% нужно примерно
$$ n \approx \frac{(z_{0,975} + z_{0,8})^2 \bigl(p_A(1 - p_A) + p_B(1 - p_B)\bigr)}{(p_B - p_A)^2} \approx \frac{7{,}85\,\bigl(p_A(1 - p_A) + p_B(1 - p_B)\bigr)}{(p_B - p_A)^2} $$
пользователей в каждой группе. Необходимый объём выборки растёт обратно пропорционально квадрату эффекта.
Где это применяется в IT
Продуктовые команды так проверяют изменения интерфейса: половина пользователей видит вариант A, половина — B. Статистика отличает реальный эффект от случайного шума.
- Значимость. $p < 0{,}05$ означает, что без реального эффекта такая разница встречалась бы реже, чем в 5% случаев.
- Ложные срабатывания. При нулевом эффекте около 5% тестов всё равно «значимы».
- Объём выборки. Мощность 80% — стандартный ориентир; маленький эффект требует десятков тысяч пользователей в каждой группе.
Код на Python
Загружаю пример…