← Назад к вопросам

Что такое p-value и для чего оно нужно?

1.0 Junior🔥 131 комментариев
#Статистика и A/B тестирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое p-value?

p-value — вероятность наблюдать такие данные (или еще более экстремальные), при условии что нулевая гипотеза верна.

Интуитивное определение

p-value это НЕ:

  • Вероятность того, что нулевая гипотеза верна
  • Вероятность ошибки

p-value это:

  • Вероятность наблюдать такие данные при условии H0 верна

Пример A/B теста

Группа A: 10000 пользователей, конверсия 5% Группа B: 10000 пользователей, конверсия 5.5%

Это случайность или эффект?

from scipy.stats import chi2_contingency
import numpy as np

data = np.array([[500, 9500], [550, 9450]])
chi2, p_value, dof, expected = chi2_contingency(data)
print(f"p-value: {p_value:.4f}")

p-value = 0.054

Интерпретация: Если нет разницы между группами, шанс увидеть такую разницу = 5.4%. Редко, но возможно.

Правило принятия решений

Обычно alpha = 0.05:

  • Если p < 0.05: результат значим
  • Если p >= 0.05: нет значимости

Важные ошибки

Ошибка 1: p-value 0.03 значит гипотеза верна на 97% — неверно!

Ошибка 2: p-value не учитывает practical significance

При большой выборке маленький эффект может быть статистически значим:

from scipy.stats import ttest_ind

group_a = np.random.normal(100, 10, 100000)
group_b = np.random.normal(100.1, 10, 100000)
t_stat, p_value = ttest_ind(group_a, group_b)
# p очень маленький, но эффект ничтожный

Типы ошибок

Type I (False Positive):

  • Говорим есть эффект, а его нет
  • Вероятность = alpha (обычно 0.05)

Type II (False Negative):

  • Говорим нет эффекта, а он есть
  • Вероятность = beta

Power = 1 - beta: вероятность обнаружить эффект

Расчет sample size

from statsmodels.stats.power import tt_ind_solve_power

n = tt_ind_solve_power(
    effect_size=0.2,
    alpha=0.05,
    power=0.80,
    alternative="two-sided"
)
print(int(n))  # ~252 человека в каждой группе

Когда использовать

Хорошо:

  • A/B тесты с фиксированным размером
  • Проверка гипотез
  • Сравнение методов

Избегать:

  • Множественное тестирование
  • Continuous monitoring (p-hacking)
  • Как единственный критерий

Bayesian альтернатива

from scipy.stats import beta

posterior_a = beta(501, 9501)
posterior_b = beta(551, 9451)

prob_b_better = np.mean(
    [posterior_b.rvs() > posterior_a.rvs() for _ in range(100000)]
)
print(f"P(B > A) = {prob_b_better:.3f}")  # более интуитивно

Ключевые выводы

  • p-value это вероятность данных при H0
  • p < 0.05 не значит эффект важен
  • Смотри effect size и confidence interval
  • Избегай p-hacking
  • Для A/B тестов рассчитай sample size заранее