← Назад к вопросам
Что такое 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 заранее