Проверка гипотез отвечает на вопрос: может ли наблюдаемая разница объясняться случайностью. Половина кандидатов на собесе объясняет p-value неправильно, и интервьюер это ловит одним уточняющим вопросом.
Нулевая и альтернативная гипотезы
- H0 (нулевая): эффекта нет. Конверсии в группах равны, новая кнопка ничего не меняет.
- H1 (альтернативная): эффект есть. Двусторонняя: «конверсии различаются». Односторонняя: «конверсия в B выше».
Логика доказательства от противного: предполагаем, что H0 верна, и смотрим, насколько неожиданны наши данные в этом мире.
Статистика критерия
Число, которое сводит данные к одной мере расхождения с H0. Например, z-статистика для разницы долей:
z = (p̂_B - p̂_A) / SE
При верной H0 её распределение известно (здесь стандартное нормальное), и можно посчитать, насколько экстремально наблюдаемое значение.
p-value
p-value это вероятность получить результат не менее экстремальный, чем наблюдаемый, при условии, что H0 верна.
from statistics import NormalDist
z = 2.1
p_two_sided = 2 * (1 - NormalDist().cdf(abs(z))) # 0.0357
Чем p-value не является:
- не вероятность того, что H0 верна;
- не вероятность того, что результат случайный;
- не вероятность того, что B лучше A, и
1 - pтоже ею не является; - не размер эффекта: p = 0.001 не значит «эффект большой», на огромной выборке и крошечный эффект даёт малое p-value.
Уровень значимости α
Порог, заданный до эксперимента. Обычно 0.05. Если p-value < α, отвергаем H0. Если нет, не отвергаем: это не доказательство отсутствия эффекта, а только «данных недостаточно, чтобы его увидеть».
Ошибки I и II рода
| H0 верна | H0 неверна | |
|---|---|---|
| Отвергли H0 | ошибка I рода (ложное срабатывание), вероятность α | верно, вероятность = мощность 1 - β |
| Не отвергли H0 | верно | ошибка II рода (пропуск эффекта), вероятность β |
- Ошибка I рода: выкатили бесполезную фичу, решив, что она работает.
- Ошибка II рода: выкинули работающую фичу, не заметив эффекта.
Уменьшая α, мы снижаем ложные срабатывания, но при той же выборке растёт β. Обе ошибки одновременно снижает только больший объём данных или меньший шум.
Одно- и двусторонние тесты
Односторонний тест при том же α находит эффект в одну сторону легче, но совсем не замечает эффекта в другую. В продуктовых A/B обычно берут двусторонний: новая фича вполне может ухудшить метрику, и об этом нужно знать. Выбирать сторону после того, как увидели данные, нельзя: это удваивает реальную ошибку I рода.
Значимость против важности
Статистическая значимость говорит «эффект, скорее всего, не ноль». Практическая значимость говорит «эффект достаточно большой, чтобы это было важно для бизнеса». На миллионах пользователей рост конверсии на 0.01 п.п. может быть значимым, но не окупить разработку. Поэтому рядом с p-value всегда показывают размер эффекта и доверительный интервал.
Порядок проверки
- Сформулировать H0 и H1, выбрать метрику.
- Задать α и нужную мощность, посчитать размер выборки.
- Собрать данные, не подглядывая с решением.
- Посчитать статистику и p-value, построить интервал.
- Принять решение с учётом размера эффекта и guardrail-метрик.
Частые ошибки
- «p = 0.03, значит с вероятностью 97% B лучше».
- «p = 0.2, значит эффекта нет».
- Менять α или сторону теста после просмотра данных.
- Считать p = 0.049 и p = 0.051 принципиально разными результатами.
Что спросят на собесе
- Что такое p-value? Объясните продакту без формул.
- Чем ошибка I рода отличается от ошибки II рода, что дороже в вашем продукте?
- Что значит «не отвергаем H0»?
- Когда допустим односторонний тест?
- Почему маленький p-value не означает большой эффект?