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

Как прокачиваешь свои навыки как разработчик?

1.3 Junior🔥 121 комментариев
#Soft skills и опыт работы

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

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

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

Что такое 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 заранее