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

Что такое уровень значимости?

2.0 Middle🔥 161 комментариев
#Машинное обучение

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

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

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

Уровень значимости (Significance Level, α)

Уровень значимости — это вероятность совершить ошибку типа I (отклонить верную нулевую гипотезу), когда вы проводите статистический тест. Обычно устанавливается до проведения теста.

Определение и интерпретация

α (alpha) — вероятность ложно отклонить H₀

H₀: нулевая гипотеза (предположение)
H₁: альтернативная гипотеза

Если p-value < α → отклоняем H₀
Если p-value ≥ α → не отклоняем H₀

Типичные значения

α = 0.05  → 95% доверительный уровень (standard)
α = 0.01  → 99% доверительный уровень (более строгий)
α = 0.10  → 90% доверительный уровень (менее строгий)
α = 0.001 → 99.9% доверительный уровень (очень строгий)

Ошибки типа I и II

Таблица:
           │ H₀ истинна │ H₀ ложна
───────────┼────────────┼─────────
Отклоняем  │ Type I (α) │ ✓ Correct
не отклон. │ ✓ Correct  │ Type II (β)

Тип I:  ложное срабатывание (false positive)
Тип II: ложное негативное (false negative)
import numpy as np
from scipy import stats

# Пример: тест на эффект лекарства
# H₀: лекарство не работает
# H₁: лекарство работает

treatment = np.array([7.5, 8.2, 6.9, 8.5, 7.8])
control = np.array([5.2, 5.8, 6.1, 5.9, 6.2])

# t-test
t_stat, p_value = stats.ttest_ind(treatment, control)

alpha = 0.05
if p_value < alpha:
    print(f"p-value={p_value:.4f} < {alpha}")
    print("Отклоняем H₀: лекарство работает ✓")
else:
    print(f"p-value={p_value:.4f}{alpha}")
    print("Не отклоняем H₀: нет доказательства эффекта")

P-value vs α

# p-value: вероятность увидеть такие или более экстремальные данные,
#          если H₀ истинна

# Принцип:
if p_value < alpha:
    print("Результат статистически значим")
    print("Отклоняем H₀")
else:
    print("Результат не статистически значим")
    print("Не отклоняем H₀")

# Пример
p_value = 0.03
alpha = 0.05
# p_value < alpha → значим ✓

p_value = 0.07
alpha = 0.05
# p_value ≥ alpha → не значим ✗

Доверительный интервал

Доверительный уровень = 1 - α

α = 0.05  → 95% CI
α = 0.01  → 99% CI
from scipy import stats

data = np.array([1.2, 1.5, 1.3, 1.4, 1.6])
mean = np.mean(data)  # 1.4
std_err = stats.sem(data)  # стандартная ошибка

alpha = 0.05
ci = stats.t.interval(1-alpha, len(data)-1, loc=mean, scale=std_err)
print(f"95% CI: {ci}")
# 95% CI: (1.15, 1.65)
# Вероятность, что истинное значение в [1.15, 1.65] = 95%

Практические примеры

1. A/B тест

from scipy.stats import chi2_contingency

# A/B тест: выбор цвета кнопки
# H₀: цвет не влияет на клики
# H₁: цвет влияет

data = np.array([
    [150, 100],  # красная кнопка: клики, не-клики
    [130, 120]   # синяя кнопка
])

chi2, p_value, dof, expected = chi2_contingency(data)
alpha = 0.05

if p_value < alpha:
    print(f"Цвет значимо влияет (p={p_value:.4f})")
else:
    print(f"Нет значимого эффекта (p={p_value:.4f})")

2. Проверка нормальности

from scipy.stats import shapiro

data = np.random.normal(100, 15, 50)
stat, p_value = shapiro(data)

alpha = 0.05
if p_value < alpha:
    print("Данные не нормальны")
else:
    print("Данные нормально распределены")

3. Корреляция

from scipy.stats import pearsonr

X = np.array([1, 2, 3, 4, 5])
Y = np.array([2, 4, 5, 4, 6])

corr, p_value = pearsonr(X, Y)
alpha = 0.05

if p_value < alpha:
    print(f"Корреляция {corr:.3f} статистически значима")
else:
    print(f"Корреляция не значима (p={p_value:.4f})")

Выбор уровня значимости

Добро пожаловать к выбору α!

α = 0.05 (95%)
  → стандартный выбор
  → баланс между Type I и Type II
  → используй для большинства тестов

α = 0.01 (99%)
  → когда Type I ошибка очень дорогая
  → медицина, авиация (нужна высокая уверенность)
  → требует больший размер выборки

α = 0.10 (90%)
  → exploratory анализ
  → когда данных мало
  → выше риск Type I

Multiple testing problem

# Если проводишь много тестов, вероятность Type I растёт!

# Например, 20 тестов с α=0.05:
n_tests = 20
alpha_nominal = 0.05
alpha_family = 1 - (1 - alpha_nominal)**n_tests  # ~64%!

print(f"Семейный α: {alpha_family:.2%}")
# Вероятность хотя бы одна ошибка Type I = 64%!

# Решение: Bonferroni correction
alpha_bonferroni = 0.05 / n_tests  # 0.0025
print(f"Bonferroni α: {alpha_bonferroni:.4f}")

Мощность теста (Power)

Мощность = 1 - β
β = вероятность ошибки типа II

Цель: высокая мощность (обычно > 80%)
from scipy.stats import ttest_ind_from_stats

# Анализ мощности
# Какой размер выборки нужен?
# Какая мощность при текущем n?

from statsmodels.stats.power import tt_solve_power

required_n = tt_solve_power(
    effect_size=0.5,      # Cohen's d
    alpha=0.05,
    power=0.8,
    alternative='two-sided'
)

print(f"Нужно n={required_n:.0f} образцов на группу")

Резюме

Уровень значимости (α):

  • Вероятность ошибки типа I (false positive)
  • Стандартное значение: α = 0.05
  • p-value < α → результат статистически значим
  • Связана с доверительным интервалом: CI = 1 - α
  • Выбор зависит от стоимости ошибок и области
Что такое уровень значимости? | PrepBro