Урок курса
Статистическая значимость и p-value в A/B-тесте
A/B тесты и анализ данных на PythonСтатистический тест начинает с нулевой гипотезы: наблюдаемая разница между вариантами совместима со случайным шумом. P-value — вероятность получить такой же или более экстремальный результат при условии, что нулевая гипотеза и предпосылки теста верны.
Это не вероятность того, что нулевая гипотеза верна. P-value 0,03 не означает «вероятность случайности равна 3%» и не говорит, что эффект с вероятностью 97% повторится. Он измеряет совместимость данных с конкретной моделью нулевой гипотезы.
До запуска выбирают уровень значимости alpha, часто 0,05. Если p-value меньше alpha, результат называют статистически значимым и отвергают нулевую гипотезу по заранее установленному правилу.
Что проверяет t-тест
Для сравнения средних часто используют t-тест. В продуктовой аналитике обычно предпочтителен вариант Уэлча, который не требует равенства дисперсий групп. Тест предполагает независимые наблюдения и адекватную единицу анализа.
Если один пользователь создаёт много событий, нельзя бездумно считать события независимыми строками: стандартная ошибка получится слишком маленькой. Метрику агрегируют на уровне рандомизации или используют метод, учитывающий кластеризацию.
Большая выборка делает значимой даже крошечную разницу. Поэтому вместе с p-value показывают оценку эффекта и доверительный интервал. Они отвечают на более полезный вопрос: какого масштаба изменение согласуется с данными.
Типичные ошибки интерпретации
Нельзя сначала много раз смотреть на результат, а остановить тест при первом p-value ниже 0,05: обычный порог не учитывает последовательный просмотр. Нельзя выбирать метрику после того, как увидели красивый эффект. При проверке десятков метрик растёт вероятность хотя бы одного случайного «успеха».
Практический отчёт содержит дизайн эксперимента, размер групп, длительность, исходную и новую метрику, абсолютный и относительный uplift, доверительный интервал и p-value. Затем бизнес сравнивает диапазон эффекта с минимально полезным изменением и возможными рисками.
Статистическая значимость — фильтр против части случайных находок, а не сертификат полезности и не замена корректному дизайну.
Пример: p-value для двух конверсий
В варианте A покупку совершили 200 из 2000 пользователей, в B — 250 из 2000. Наблюдаемая конверсия выросла с 10% до 12,5%. Для учебного расчёта сравним независимые бинарные наблюдения двусторонним z-тестом с общей оценкой вероятности при нулевой гипотезе. Это нормальное приближение: при редких событиях и малой выборке нужен другой метод.
Код использует только стандартную библиотеку Python. Пользователь — единица рандомизации и наблюдения. Если одна строка соответствует клику, а человек совершает много кликов, этот расчёт нельзя переносить на такие строки без изменения модели.
from math import sqrt, erfc
n_a = n_b = 2000
x_a, x_b = 200, 250
p_a, p_b = x_a / n_a, x_b / n_b
pooled = (x_a + x_b) / (n_a + n_b)
z = (p_b - p_a) / sqrt(pooled * (1 - pooled) * (1/n_a + 1/n_b))
p_value = erfc(abs(z) / sqrt(2))
print(round(z, 3), round(p_value, 4))
assert p_value < 0.05
Получится z около 2,502 и p-value около 0,0124. При заранее выбранном alpha=0,05 нулевую гипотезу отвергают. Но тест не сообщает цену дополнительной покупки, влияние на возвраты или вероятность повторения эффекта. В отчёте отдельно нужны разница конверсий и её интервал. Формула теста разности долей в NIST.
Продолжите разбор: Доверительный интервал в A/B-тесте: как читать.
Задача 1
Что означает p-value в классическом статистическом тесте?
Продолжить с сохранением прогресса
Перейдите к уроку в учебном кабинете.
