Нулевая гипотеза простыми словами: что это и как её формулировать
Нулевая гипотеза (H0) — утверждение, что эффекта или разницы нет. Чем она отличается от альтернативной гипотезы H1, как формулировать H0 для A/B-теста и продуктовых вопросов, что значит «отвергнуть» и «не отвергнуть» H0 — с расчётом z-теста на учебной базе.
Содержание статьи
Продакт-менеджер присылает итоги теста: в онбординг добавили чек-лист, и конверсия в создание рабочего пространства выросла с 20% до 30%. Вопрос короткий — «это значимо?». Чтобы ответить, сначала нужно сформулировать, что именно проверяется. Статистика не умеет доказывать, что чек-лист работает. Она умеет другое: оценить, насколько такие данные странные, если чек-лист не работает вовсе. Это «не работает вовсе» и называется нулевой гипотезой.
Коротко
- Нулевая гипотеза (H0) — утверждение, что эффекта нет: доли, средние или распределения в группах равны.
- Альтернативная гипотеза (H1) — то, что вы готовы принять, если данные опровергнут H0: разница есть.
- Тест не доказывает H1. Он показывает, насколько данные неправдоподобны при верной H0.
- Отвергли H0 при p < α — разница статистически значима. Не отвергли — данных не хватило, чтобы её увидеть, но это не доказательство, что её нет.
- H0, H1, направление и порог α записывают до того, как смотрят на результат.
Что такое нулевая гипотеза
Нулевая гипотеза (H0) — это утверждение об отсутствии эффекта, которое статистический тест пытается опровергнуть данными. В A/B-тесте оно звучит так: «конверсия в тестовой группе равна конверсии в контрольной». Нулевой её называют потому, что разница между группами в ней равна нулю.
Логика похожа на презумпцию невиновности. Пока нет убедительных улик, считаем, что изменение ничего не дало. Улики — это данные, а мера их убедительности — p-value: вероятность получить такую же или ещё большую разницу, если H0 верна. Если эта вероятность меньше заранее выбранного порога α, H0 отвергают.
Почему не проверять сразу «чек-лист работает»? Потому что у утверждения «эффект есть» нет одного значения: плюс 1 пункт, плюс 10, плюс 30. Посчитать вероятность данных можно только для конкретного мира, а «эффекта ровно ноль» — как раз такой мир.
H0 встречается не только в A/B-тестах. У проверки корреляции нулевая гипотеза — «коэффициент корреляции в генеральной совокупности равен нулю». У проверки разбиения трафика — «пользователи делятся между вариантами ровно в заданной пропорции». У сравнения двух регионов по среднему чеку — «средние равны». Устройство всегда одно: H0 фиксирует конкретное значение, при котором «ничего интересного не происходит», и тест спрашивает, насколько данные с ним спорят.
Нулевая и альтернативная гипотеза: как они связаны
Альтернативная гипотеза (H1) — всё, что не H0. Вместе они покрывают все возможные исходы, и верна ровно одна из них. Для теста с чек-листом, где p — доля пользователей, создавших workspace:
H0: p(checklist) = p(control); H1: p(checklist) ≠ p(control)Гипотезы говорят о доле во всей генеральной совокупности пользователей, а не о двух числах в выборке. Числа в выборке различаются почти всегда.
Односторонняя и двусторонняя гипотеза
Двусторонняя H1 — «разница есть в любую сторону»: p(checklist) ≠ p(control). Односторонняя — «вариант лучше»: p(checklist) > p(control). При односторонней H1 тот же результат даёт вдвое меньший p-value, поэтому соблазн её выбрать велик.
Одностороннюю гипотезу честно выбирать только тогда, когда результат в обратную сторону приведёт к тому же решению, что и отсутствие эффекта, и это решено заранее. На практике в продуктовых тестах чаще берут двустороннюю: если чек-лист ухудшил конверсию, это тоже важно знать, а не списывать в «эффекта нет». Главное правило — направление фиксируется до запуска теста. Выбрать одностороннюю H1 после того, как увидели, в какую сторону сдвинулась метрика, значит подогнать тест под ответ.
Как сформулировать нулевую гипотезу для продуктового вопроса
Рабочий порядок такой: сначала вопрос бизнеса, потом метрика, потом H0 в виде равенства, и только потом тест. Если H0 не получается записать как равенство конкретных величин, вопрос ещё не готов к проверке.
| Вопрос | H0 | H1 | Чем проверять |
|---|---|---|---|
| Чек-лист в онбординге повышает создание workspace? | доля создавших одинакова в обеих группах | доли различаются | z-тест для двух долей или хи-квадрат |
| Новая цена меняет средний чек? | средний чек в группах равен | средние различаются | t-тест Уэлча, при тяжёлых хвостах — бутстреп |
| Время до первого отчёта у нового онбординга короче? | распределения времени одинаковы | в новом варианте время сдвинуто вниз | критерий Манна — Уитни |
| Каналы привлечения отличаются по выбору тарифа? | распределение по тарифам не зависит от канала | зависит | хи-квадрат для таблицы сопряжённости |
| Выросла ли доля платящих после редизайна? | доля до и после одинакова | доля изменилась | z-тест для долей, но проверьте сезонность: это не рандомизированный тест |
Пример: проверяем H0 на данных A/B-теста
В учебной базе SQL-курса есть эксперимент onboarding_checklist с вариантами control и checklist. Поле converted показывает, создал ли пользователь workspace в окне эксперимента. Каждый пользователь попал в тест один раз, всего 3068 человек. Гипотезы записаны выше, двусторонние, порог α = 0,05.
Перед основной проверкой стоит проверить ещё одну нулевую гипотезу — о самом разбиении. Если трафик делили поровну, H0 звучит так: «доля пользователей в каждом варианте — 50%». В контроль попали 1527 человек, в вариант — 1541. Критерий хи-квадрат даёт p = 0,80: такое расхождение при честном делении пополам — обычное дело, H0 не отвергаем, и группы можно сравнивать. Если бы здесь H0 отверглась, это был бы sample ratio mismatch, и сравнивать конверсии было бы рано.
| Вариант | Пользователей | Создали workspace | Конверсия |
|---|---|---|---|
| control | 1527 | 306 | 20,04% |
| checklist | 1541 | 467 | 30,30% |
select
variant,
count(*) as users,
count(*) filter (where converted) as converted,
round(100.0 * count(*) filter (where converted) / count(*), 2) as conversion_pct
from experiment_exposures
where experiment_name = 'onboarding_checklist'
group by variant
order by variant desc;Как посчитать p-value для разницы конверсий
Для двух долей подходит z-тест. Если H0 верна, обе группы — выборки из одной конверсии, и её лучшая оценка — общая доля по обеим группам: 773 из 3068, около 25,2%. От неё считается стандартная ошибка разницы, а z показывает, сколько таких ошибок укладывается в наблюдаемую разницу в 10,27 процентного пункта.
Получается z = 6,55 и двусторонний p-value около 5,8·10⁻¹¹. Если бы чек-лист не влиял на конверсию, разница в 10 пунктов и больше при таких размерах групп практически не встречалась бы. p намного меньше 0,05, значит, H0 отвергаем: разница статистически значима.
Для решения одного p-value мало. 95% доверительный интервал разницы — от 7,2 до 13,3 процентного пункта. Это и есть ответ продакту: чек-лист повышает создание workspace, и даже нижняя граница эффекта — больше 7 пунктов.
from math import sqrt
from scipy.stats import norm
x_a, n_a = 306, 1527 # control: создали workspace / всего в группе
x_b, n_b = 467, 1541 # checklist
p_a, p_b = x_a / n_a, x_b / n_b
p_pool = (x_a + x_b) / (n_a + n_b) # общая конверсия, если верна H0
se = sqrt(p_pool * (1 - p_pool) * (1 / n_a + 1 / n_b))
z = (p_b - p_a) / se
p_value = 2 * norm.sf(abs(z)) # двусторонняя H1
print(f'{p_a:.4f} {p_b:.4f} z = {z:.2f} p = {p_value:.1e}')p = 5,8·10⁻¹¹ — это не вероятность того, что H0 верна, и не вероятность ошибиться. Это вероятность данных при условии H0. Подробно о том, как читать p-value, — в отдельном материале.
Ошибки первого и второго рода
Решение по тесту может ошибиться двумя способами. Отвергнуть H0, когда она верна, — ошибка первого рода: вы выкатили изменение, которое ничего не дало. Её вероятность ограничивает α. Не отвергнуть H0, когда верна H1, — ошибка второго рода: вы похоронили работающую идею. Её вероятность обозначают β, а 1 − β называют мощностью теста.
α выбирают сами, обычно 0,05. β зависит от размера выборки, реального размера эффекта и разброса метрики. Её снижают не порогом, а планированием: заранее считают, сколько пользователей нужно, чтобы заметить минимальный интересный эффект.
| H0 верна (эффекта нет) | H1 верна (эффект есть) | |
|---|---|---|
| Отвергли H0 | ошибка I рода, вероятность α | верное решение, вероятность 1 − β (мощность) |
| Не отвергли H0 | верное решение, вероятность 1 − α | ошибка II рода, вероятность β |
«Не отвергли H0» — это не «эффекта нет»
Посмотрим только на первую неделю того же теста — показы до 8 июня. В контроле 12 конверсий из 65 (18,46%), в варианте с чек-листом 19 из 66 (28,79%). Разница +10,3 пункта — почти такая же, как во всём тесте. Но p = 0,16, и при α = 0,05 H0 не отвергается.
Эффект не исчез, просто 131 человека мало, чтобы отличить 10 пунктов от случайности. Доверительный интервал разницы — от −4,1 до +24,8 пункта: в него помещаются и ухудшение, и очень сильный рост. Вывод «чек-лист не работает» по первой неделе был бы ошибкой второго рода.
Правильная формулировка при p > α — «данных недостаточно, чтобы отвергнуть H0». Чтобы говорить об отсутствии эффекта, нужен узкий интервал вокруг нуля. На мобильных устройствах в этом тесте так и есть: 20,05% в контроле против 19,89% с чек-листом, p = 0,94, интервал от −4,3 до +3,9 пункта. Здесь можно сказать: если эффект на мобильных и есть, он вряд ли больше 4 пунктов в любую сторону.
Учебная база SQL-курса, DuckDB. Весь тест: p ≈ 5,8·10⁻¹¹; первая неделя: p = 0,16; desktop: p ≈ 7·10⁻¹⁸; mobile: p = 0,94. Разрез по устройствам не планировался до теста.
Частые ошибки с нулевой гипотезой
Разрез по устройствам на графике выглядит как открытие: на десктопе конверсия выросла почти вдвое (20,03% → 39,78%), на мобильных не изменилась. Но гипотезу о разнице по устройствам никто не формулировал до запуска. Это повод для следующего теста, а не вывод текущего: если перебрать двадцать разрезов, при α = 0,05 шанс хотя бы одной ложной значимости — около 64%.
- H1 меняется после просмотра данных: двусторонняя становится односторонней, когда стало видно направление.
- Много гипотез без поправки. Двадцать сегментов, пять метрик, три варианта — каждая проверка добавляет шанс ложной находки. Простейшая защита — поправка Бонферрони: делить α на число проверок, для 20 проверок это 0,0025.
- Подглядывание: тест останавливают в тот день, когда p впервые опустился ниже 0,05. Так ошибка первого рода растёт далеко за 5%.
- «Не отвергли H0» записывают как «доказали, что эффекта нет».
- H0 сформулирована про одну метрику, а решение принимают по другой.
- Статистическая значимость подменяет практическую: при огромной выборке значимой станет и разница в 0,1 пункта, которая не окупает разработку.
Что читать дальше
Нулевая гипотеза — первый шаг проверки. Дальше нужны p-value, мощность, размер выборки и защита от типичных ошибок A/B-тестов.
Материалы по теме

p-value простыми словами: что он показывает и чего не доказывает
Что на самом деле измеряет p-value, почему 0,05 — не граница истины, как читать его вместе с доверительным интервалом и что делать, когда результат «незначим».
Калькулятор значимости A/B-теста: как посчитать и как прочитать результат
Как посчитать статистическую значимость A/B-теста по двум конверсиям: какие числа нужны, что означает p-value и доверительный интервал разницы, и когда расчёт вообще не применим.
Калькулятор размера выборки для A/B-теста: сколько трафика и дней нужно
Как рассчитать размер выборки и длительность A/B-теста: что такое MDE, откуда берутся уровень доверия и мощность, и почему вдвое меньший эффект стоит вчетверо большего трафика.