Гипотезы, p-value и ошибки первого и второго рода

«Объясните, что такое p-value, человеческим языком» — вопрос, на котором ошибаются даже опытные кандидаты.

p-value — вероятность увидеть различие не меньше наблюдаемого при условии, что на самом деле различия нет. Это вероятность данных при верной нулевой гипотезе, а не вероятность гипотезы при данных.

Вопрос 1. Что такое нулевая и альтернативная гипотезы?

Что проверяет интервьюер. Понимаете ли вы логику «от противного». Мы не доказываем, что новая кнопка лучше. Мы предполагаем, что она не отличается, и смотрим, насколько наши данные несовместимы с этим предположением.

  • H₀ (нулевая): разницы между группами нет, конверсии равны.
  • H₁ (альтернативная): разница есть. Двусторонняя («отличается») или односторонняя («больше»).

Дальше считается статистика критерия и по ней — p-value. Если p-value меньше заранее выбранного порога α (обычно 0.05), говорят, что результат статистически значим, и H₀ отвергают. Обратите внимание на асимметрию: H₀ можно отвергнуть, но нельзя «принять». Большое p-value означает «доказательств не хватило», а не «разницы точно нет».

Вопрос 2. Посчитайте значимость на пальцах

Классический z-тест для двух долей. Формула считает, во сколько стандартных ошибок укладывается наблюдённая разница конверсий:

import math

def z_test(conv_a, n_a, conv_b, n_b):
    p_a, p_b = conv_a / n_a, conv_b / n_b
    p_pool = (conv_a + conv_b) / (n_a + n_b)
    se = math.sqrt(p_pool * (1 - p_pool) * (1 / n_a + 1 / n_b))
    z = (p_b - p_a) / se
    p_value = 2 * (1 - 0.5 * (1 + math.erf(abs(z) / math.sqrt(2))))
    return round(z, 2), round(p_value, 4)

print("По 10 000 в группе, 5.00% против 5.50%:", z_test(500, 10000, 550, 10000))
print("По  1 000 в группе, 5.00% против 5.50%:", z_test(50, 1000, 55, 1000))

Вывод:

По 10 000 в группе, 5.00% против 5.50%: (1.59, 0.1129)
По  1 000 в группе, 5.00% против 5.50%: (0.5, 0.6162)

Относительный прирост одинаковый — 10% — а выводы разные, и оба отрицательные. Даже при десяти тысячах пользователей в группе p-value равно 0.11: разница не значима. Это отличная иллюстрация того, почему для маленьких эффектов нужны очень большие выборки, и почему «у нас конверсия выросла с 5% до 5.5%» на тысяче пользователей не значит ничего.

Вопрос 3. Что p-value НЕ означает?

Это главный вопрос урока. Три формулировки, которые звучат правдоподобно и все неверны:

НеверноПочему
«p = 0.03 — вероятность того, что H₀ верна, равна 3%»перевёрнутое условие: p-value считается при условии верной H₀, а не про её вероятность
«p = 0.03 — вероятность 97%, что эффект реален»то же самое, только с другой стороны
«p = 0.60 — значит, разницы нет»значит, доказательств не хватило; при малой выборке так будет и при реальном эффекте

Хорошая аналогия для интервью — суд. H₀ — презумпция невиновности. p-value — насколько улики странны для невиновного человека. Малое p-value означает «улики слишком странные, презумпцию отвергаем». Оправдательный приговор не доказывает невиновность — он означает, что улик не хватило.

Вопрос 4. Ошибки первого и второго рода

H₀ верна (эффекта нет)H₀ неверна (эффект есть)
Отвергли H₀Ошибка I рода (α) — ложная тревогаверное решение (мощность, 1−β)
Не отвергли H₀верное решениеОшибка II рода (β) — пропустили эффект

Практический смысл: α = 0.05 означает, что в 5% случаев, когда эффекта нет, мы всё равно объявим победу и выкатим бесполезную (а иногда и вредную) фичу. β = 0.2 при стандартной мощности 80% означает, что в 20% случаев мы пропустим реальный эффект и зря выбросим хорошую идею.

Между ними есть обмен: снижая α до 0.01, мы делаем ложную тревогу реже, но β растёт — эффект пропускается чаще. Единственный способ уменьшить обе ошибки сразу — увеличить выборку. Это ключевой ответ, который ждут.

Цена ошибок разная в разных задачах, и это стоит проговорить: для эксперимента с формой оплаты ложная тревога дороже (сломаем деньги), для дешёвого изменения текста кнопки дороже пропущенный эффект.

Типичные ошибки кандидатов

  • Определяют p-value как «вероятность того, что нулевая гипотеза верна». Это самая частая ошибка в отрасли.
  • Из p = 0.4 делают вывод «версии одинаковы».
  • Путают α (порог, который выбираем) и p-value (то, что получаем из данных).
  • Считают статистическую значимость синонимом практической: разница в 0.01% может быть значимой на миллионе пользователей и абсолютно бесполезной для бизнеса.
  • Не могут объяснить обмен между ошибками I и II рода.

Как ответить кратко

«p-value — вероятность получить различие не меньше наблюдаемого, если на самом деле разницы нет. Это не вероятность того, что гипотеза верна: условие направлено в другую сторону. Если p меньше выбранного заранее α, отвергаем нулевую гипотезу; большое p означает, что доказательств не хватило, а не что эффекта нет. Ошибка I рода — объявили эффект там, где его нет, её вероятность мы задаём сами через α. Ошибка II рода — пропустили реальный эффект, её контролируем мощностью, обычно 80%. Эти ошибки обмениваются друг на друга, уменьшить обе сразу можно только увеличив выборку. И статистическая значимость не равна практической: на большой выборке значимым станет даже бесполезный эффект».

Проверьте себя
1. Какое определение p-value корректно?
AВероятность того, что нулевая гипотеза верна
BВероятность увидеть различие не меньше наблюдаемого при условии, что различия на самом деле нет
CВероятность того, что эффект реален
DДоля пользователей, у которых эффект проявился
2. Тест дал p = 0.62. Какой вывод корректен?
AВерсии одинаковы, разницы точно нет
BДоказательств против нулевой гипотезы не хватило — эффекта может не быть, а может не хватать выборки
CНулевая гипотеза верна с вероятностью 62%
DНужно продолжить тест до тех пор, пока p не станет меньше 0.05
3. Как одновременно уменьшить вероятности ошибок первого и второго рода?
AСнизить α с 0.05 до 0.01
BУвеличить размер выборки
CПерейти к одностороннему критерию
DДобавить в анализ больше метрик