p-value — это вероятность увидеть различие как в данных или ещё больше при условии, что на самом деле разницы нет (нулевая гипотеза верна). Формально это P(данные H_0), а не вероятность того, что гипотеза верна. Маленькое p-value означает лишь одно: наблюдаемый результат плохо согласуется с предположением «эффекта нет».
Ниже — честное определение, что p-value НЕ означает, порог значимости, числовой пример из A/B-теста, топ заблуждений с собеседований и связь с доверительным интервалом.
Что такое p-value честным языком?
Любой статистический тест стартует с нулевой гипотезы H_0 — «различия нет, всё случайно». Мы собираем данные и считаем, насколько наблюдаемый результат странный, если H_0 верна.
p-value отвечает ровно на один вопрос: если разницы реально нет, как часто случайность выдавала бы отклонение хотя бы такое же большое, как у нас?
p = P(различие наблюдаемого H_0 верна)
Ключевые слова — «если H_0 верна». Мы условно считаем, что эффекта нет, и смотрим, насколько наши данные редки в этом мире. Если такие данные при «нет эффекта» почти не встречаются (p маленькое), делаем вывод: предположение «эффекта нет» плохо описывает реальность, и отвергаем H_0.
p-value ничего не говорит о размере эффекта. Оно измеряет, насколько убедительно данные противоречат случайности, а не насколько велика разница. Отклонение в 0.1% на миллионе пользователей даст крошечный p, оставаясь бизнес-бесполезным.
Что p-value НЕ означает?
Здесь спотыкается большинство джунов. Разберём по пунктам.
| Утверждение | Верно? | Почему |
|---|---|---|
p = 0.03 → вероятность, что H_0 верна, равна 3% | Нет | Это P(данные H_0), а не P(H_0 данные) |
| p = 0.05 → на 95% уверены, что эффект есть | Нет | 95% относится к процедуре, а не к конкретному результату |
| Большое p → доказали, что эффекта нет | Нет | Отсутствие доказательства ≠ доказательство отсутствия |
| p-value измеряет размер эффекта | Нет | Зависит и от эффекта, и от размера выборки |
| p = 0.049 сильно лучше, чем p = 0.051 | Нет | Порог 0.05 — договорённость, а не физический закон |
Главная ловушка — путать P(данные H_0) и P(H_0 данные). Это как перепутать «вероятность мокрого асфальта, если идёт дождь» и «вероятность дождя, если асфальт мокрый». Асфальт мог намокнуть от поливальной машины. Чтобы получить P(H_0 данные), нужна теорема Байеса и априорная вероятность гипотезы — обычного p-value для этого недостаточно.
Что такое alpha и порог значимости?
alpha (α) — это заранее выбранный порог: насколько редкий результат мы готовы считать достаточно убедительным, чтобы отвергнуть H_0. Стандартно α = 0.05.
Правило простое:
p α→ отвергаемH_0, называем результат статистически значимым;p > α→ не отвергаемH_0, значимости не хватило.
α — это и есть вероятность ошибки первого рода: как часто мы ошибочно закричим «эффект есть», когда его нет. Взяв α = 0.05, мы соглашаемся, что в 5% случаев, где эффекта на самом деле нет, тест всё равно даст ложную тревогу.
Выбор α зависит от цены ошибки. Для рискованных решений (медицина, деньги) берут 0.01 или строже. Для дешёвых продуктовых экспериментов иногда 0.1. Главное — зафиксировать α ДО теста, а не подгонять под удобный результат.
Как посчитать p-value в A/B-тесте?
Разберём иллюстративный пример (числа условные). Тестируем новую формулировку кнопки на посадочной странице.
- Контроль: 10 000 показов, 500 кликов → конверсия 5.00%
- Вариант B: 10 000 показов, 560 кликов → конверсия 5.60%
H_0: конверсии равны. H_1: конверсии различаются. Считаем через z-тест для двух пропорций.
from statsmodels.stats.proportion import proportions_ztest
# клики и показы (иллюстративные данные)
clicks = [500, 560]
shows = [10000, 10000]
z_stat, p_value = proportions_ztest(clicks, shows)
print(f"z = {z_stat:.3f}, p-value = {p_value:.4f}")
# z = -1.870, p-value = 0.0615 -> при alpha=0.05 НЕ значимо
p-value ≈ 0.062 больше 0.05. Разница в 0.6 п.п. выглядит приятно, но при такой выборке укладывается в диапазон случайных колебаний. Правильный вывод: значимости не хватило, эффект не подтверждён. Не «эффекта нет», а «данных мало, чтобы уверенно отличить его от нуля».
Будь показов по 50 000, тот же разрыв в конверсии дал бы p существенно меньше 0.05. Отсюда вывод: p-value зависит и от эффекта, и от размера выборки. Заранее рассчитайте нужный объём через MDE, иначе тест либо не добьёт значимости, либо поймает шум.
Частые ошибки и заблуждения
- p = 0.05 не значит «95% что эффект есть». 95% — это доля доверительных интервалов, накрывающих истину при бесконечном повторении, а не уверенность в конкретном выводе. Подробнее — в разборе доверительного интервала простыми словами.
- Peeking (подглядывание). Смотреть p-value каждый день и остановиться, как только он опустился ниже 0.05, — это раздувает реальную вероятность ошибки первого рода в разы. Фиксируйте срок и выборку заранее либо используйте sequential-методы.
- p-hacking. Перебор метрик, сегментов и вариантов до первой «значимости». При 20 независимых проверках хотя бы одна выдаст
p < 0.05просто по случайности. Лечится поправками на множественность (Bonferroni, Benjamini-Hochberg) и предрегистрацией гипотез. - Значимо
≠важно. На большой выборке значимым станет любой микроэффект. Всегда смотрите на размер эффекта и доверительный интервал, а не только на фактp < 0.05. - Большое p — не доказательство
H_0.p = 0.4говорит лишь, что данные согласуются и с нулём, и с небольшим эффектом. Чтобы уверенно заявить «эффекта нет», нужна достаточная мощность и узкий интервал вокруг нуля.
Как p-value связан с доверительным интервалом?
Это две стороны одной монеты. Для стандартного двустороннего теста при α = 0.05 работает точное соответствие:
- если 95%-й доверительный интервал для разницы НЕ включает 0 →
p < 0.05(значимо); - если интервал включает 0 →
p 0.05(не значимо).
Доверительный интервал полезнее для решений, потому что показывает и направление, и величину эффекта. Сравните: «p = 0.03» против «разница конверсии +0.6 п.п., 95% ДИ от +0.05 до +1.15 п.п.». Второе сразу отвечает на бизнес-вопрос «а на сколько именно лучше». Поэтому в отчётах приводите обе величины, а лучше опирайтесь на интервал.
-- прикидка разницы конверсий и её погрешности (иллюстративно)
SELECT
0.056 - 0.050 AS diff, -- +0.6 п.п.
1.96 * SQRT(0.05*(1-0.05)/10000
+ 0.056*(1-0.056)/10000) AS half_ci -- полуширина 95% ДИ
;
-- diff = 0.006, half_ci ~ 0.0063 -> интервал накрывает 0 -> не значимо
Короткий чек-лист перед выводом
- Зафиксировал
H_0,H_1иαДО теста. - Рассчитал нужную выборку через MDE, дождался её без peeking.
- Проверил корректность теста (пропорции → z-тест или хи-квадрат, средние → t-тест).
- Смотрю не только на
p < 0.05, но и на размер эффекта плюс доверительный интервал. - Если проверял много метрик — применил поправку на множественность.
p-value — это индикатор того, насколько данные противоречат случайности, а не вероятность правоты гипотезы и не мера важности эффекта. Понимание этой разницы — почти гарантированный вопрос на собеседовании аналитика.
Потренируйтесь считать значимость и интервалы на реальных задачах в Python-тренажёре, а формулировки под давлением отрепетируйте с AI-интервьюером.