Что такое ошибки первого и второго рода в статистике?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое ошибки первого и второго рода в статистике?
Ошибки первого и второго рода — это два типа ошибок при проверке статистических гипотез. Для Data Analyst понимание этих ошибок критично при работе с A/B тестами, анализом значимости и принятии решений на основе данных.
Контекст: проверка гипотез
При проверке гипотезы мы проверяем два варианта:
- H0 (нулевая гипотеза) — предположение, которое мы тестируем (обычно — нет эффекта)
- H1 (альтернативная гипотеза) — предположение, которое мы принимаем если H0 ложна (есть эффект)
Ошибка первого рода (Type I Error) — ложный положительный результат
Ошибка первого рода (α) — это отклонение нулевой гипотезы когда она на самом деле верна. Мы утверждаем, что есть эффект, когда его нет.
Вероятность ошибки первого рода — это уровень значимости α (обычно 0.05 или 5%).
Ошибка второго рода (Type II Error) — ложный отрицательный результат
Ошибка второго рода (β) — это принятие нулевой гипотезы когда она ложна. Мы не находим эффект, когда он есть.
Вероятность ошибки второго рода — это β (обычно 0.1 или 0.2 или 10-20%).
Мощность теста (Power) — вероятность правильно отклонить ложную гипотезу (1 - β), обычно целимся на 80-90%.
Матрица ошибок:
Реальность H0 верна Реальность H0 ложна
(Нет эффекта) (Есть эффект)
─────────────────────────────────────────────────────────────
Мы отклоняем H0 Ошибка I рода (α) Правильно (Power = 1-β)
(Говорим: есть Ложный положит. Истинный положит.
эффект)
─────────────────────────────────────────────────────────────
Мы принимаем H0 Правильно Ошибка II рода (β)
(Говорим: нет (Истинный Ложный отрицательный
эффекта) отрицательный)
Практические примеры:
Пример 1: Медицинский тест
Гипотеза: У пациента есть болезнь
Ошибка I рода (α): Сказать, что болезнь есть, когда её нет
→ Последствие: Ненужное лечение, беспокойство пациента
→ Вероятность: α = 0.05 (5%)
Ошибка II рода (β): Сказать, что болезни нет, когда она есть
→ Последствие: Пациент не получает лечение, болезнь прогрессирует
→ Вероятность: β = 0.10 (10%)
Пример 2: A/B тест в интернет-магазине
from scipy.stats import ttest_ind
# Новый дизайн кнопки (версия B) vs старый дизайн (версия A)
version_a_conversions = [1, 0, 1, 1, 0, 1, 0, 1, 1, 0] # 60% конверсия
version_b_conversions = [1, 1, 1, 1, 0, 1, 1, 1, 1, 0] # 80% конверсия
t_stat, p_value = ttest_ind(version_a_conversions, version_b_conversions)
alpha = 0.05 # Уровень значимости
print(f'p-значение: {p_value:.4f}')
print(f'Уровень значимости α: {alpha}')
if p_value < alpha:
print('Отклоняем H0: версия B лучше')
# Риск ошибки I рода: 5% шанс, что мы ошиблись
# (на самом деле версии одинаковые)
else:
print('Принимаем H0: различий нет')
# Риск ошибки II рода: мы можем пропустить реальное улучшение
# (нужна большая выборка, чтобы его обнаружить)
Пример 3: Обнаружение мошенничества
Гипотеза: Транзакция мошенническая
Ошибка I рода: Считаем транзакцию мошеннической, когда она легальна
→ Последствие: Блокируем легального покупателя, теряем клиента
→ Вероятность: α (высокая стоимость)
Ошибка II рода: Не замечаем мошеннический платёж
→ Последствие: Финансовые потери компании
→ Вероятность: β (высокая стоимость)
Компромисс между α и β:
Есть инверсная связь между α и β: при уменьшении одной, другая увеличивается (при фиксированном размере выборки).
import numpy as np
from scipy.stats import norm
# Визуализация компромисса
# Левая кривая: распределение при H0 верна
# Правая кривая: распределение при H0 ложна
plt.figure(figsize=(12, 6))
# H0 верна (среднее = 0)
x1 = np.linspace(-4, 4, 1000)
y1 = norm.pdf(x1, 0, 1)
plt.plot(x1, y1, 'b-', linewidth=2, label='H0 верна')
# H0 ложна (среднее = 2)
y2 = norm.pdf(x1, 2, 1)
plt.plot(x1, y2, 'r-', linewidth=2, label='H0 ложна')
# Критическое значение при α = 0.05
alpha = 0.05
critical = norm.ppf(1 - alpha)
plt.axvline(critical, color='green', linestyle='--', label=f'Критическое значение (α={alpha})')
# Ошибка I рода (α) — синяя область справа от критического значения
plt.fill_between(x1[x1 > critical], y1[x1 > critical], alpha=0.3, color='blue', label='Ошибка I (α)')
# Ошибка II рода (β) — красная область слева от критического значения
mask = x1 < critical
plt.fill_between(x1[mask], y2[mask], alpha=0.3, color='red', label='Ошибка II (β)')
plt.xlabel('Значение статистики')
plt.ylabel('Плотность')
plt.legend()
plt.title('Ошибки первого и второго рода')
plt.show()
print(f'Ошибка I рода (α): примерно {alpha:.2%}')
print(f'Ошибка II рода (β): примерно {norm.cdf(critical - 2):.2%}')
Как выбрать α и β:
Ошибка I более критична когда:
- Неправильное решение имеет серьёзные последствия (медицина, безопасность)
- Стоимость ложного положительного результата высока
- Используем α = 0.01 или 0.001
Ошибка II более критична когда:
- Упустить реальный эффект дорого
- Хотим высокую мощность теста (1 - β = 0.9)
- Целимся на β = 0.1 или 0.2 (мощность 90% или 80%)
Размер выборки и ошибки:
Чтобы уменьшить обе ошибки — нужна большая выборка:
from scipy.stats import ttest_ind_from_stats
import numpy as np
# Рассчитать размер выборки для A/B теста
# Параметры:
effect_size = 0.2 # Размер эффекта (Cohen's d)
alpha = 0.05 # Уровень значимости
power = 0.8 # Желаемая мощность (1 - beta)
# Используем формулу
from statsmodels.stats.power import tt_ind_solve_power
n = tt_ind_solve_power(
effect_size=effect_size,
alpha=alpha,
power=power,
ratio=1.0
)
print(f'Требуемый размер выборки: {int(n)} на каждую группу')
print(f'Общее количество наблюдений: {int(n*2)}')
Реальный пример: A/B тест платформы
from scipy.stats import ttest_ind
# Тестируем новую версию рекомендаций
old_engagement = [0.45, 0.52, 0.48, 0.55, 0.51, 0.49, 0.53, 0.46] * 50
new_engagement = [0.48, 0.54, 0.51, 0.57, 0.53, 0.52, 0.55, 0.49] * 50
t_stat, p_value = ttest_ind(old_engagement, new_engagement)
alpha = 0.05
print(f'Старая версия: средняя = {np.mean(old_engagement):.3f}')
print(f'Новая версия: средняя = {np.mean(new_engagement):.3f}')
print(f'p-значение: {p_value:.4f}')
print()
if p_value < alpha:
print(f'✓ Отклоняем H0 (p < {alpha})')
print(f' Новая версия статистически значимо лучше')
print(f' Риск ошибки I (α): {alpha:.1%}')
print(f' Это значит: 5% шанс, что мы ошиблись')
print(f' Выводы: Внедряем новую версию!')
else:
print(f'✗ Не отклоняем H0 (p >= {alpha})')
print(f' Различия не статистически значимы')
print(f' Риск ошибки II (β): неизвестен без анализа мощности')
print(f' Выводы: Нужна большая выборка или нет реального эффекта')
Чек-лист для Data Analyst:
✅ Установи α перед анализом (обычно 0.05) ✅ Рассчитай требуемый размер выборки для нужной мощности ✅ Интерпретируй p-значение как вероятность ошибки I рода ✅ Помни о мощности теста (1 - β), не только о α ✅ При p > α не говори "гипотеза верна", говори "нет доказательств против H0" ✅ Документируй оба риска в отчётах
Выводы:
- Ошибка I (α) — отклоняем верную гипотезу (ложный положительный)
- Ошибка II (β) — принимаем ложную гипотезу (ложный отрицательный)
- Компромисс: снизить одну часто означает повысить другую
- Решение: увеличить размер выборки
- Мощность теста (1 - β) — способность обнаружить реальный эффект
Эти ошибки — не математическая абстракция, а реальные риски при принятии бизнес-решений на основе данных.