← Назад к вопросам
Как выбрать статистический критерий?
2.0 Middle🔥 191 комментариев
#A/B-тестирование#Статистика и теория вероятностей#Статистические критерии и тесты
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как выбрать статистический критерий?
Главное правило
Выбор критерия зависит от:
- Типа данных (категориальные vs непрерывные)
- Типа гипотезы (связь, различие, тренд)
- Количества групп (2 группы vs много)
- Нормальности распределения
- Объёма выборки
Блок-схема выбора
Шаг 1: Тип данных?
- Категориальные (да/нет, категории) → Chi-square
- Непрерывные (числа) → шаг 2
Шаг 2: Сколько групп?
- 2 группы → t-test или Mann-Whitney U
- 3+ групп → ANOVA или Kruskal-Wallis
Шаг 3: Нормальное распределение?
- Да → параметрический (t-test, ANOVA)
- Нет → непараметрический (Mann-Whitney U, Kruskal-Wallis)
Практические примеры
Пример 1: Средняя зарплата до и после
Тип: непрерывные, 2 группы
from scipy import stats
before = [50000, 55000, 60000, 52000, 58000]
after = [55000, 60000, 65000, 57000, 63000]
stat, p = stats.shapiro(before) # Проверяем нормальность
if p > 0.05:
t_stat, p_value = stats.ttest_ind(before, after)
else:
u_stat, p_value = stats.mannwhitneyu(before, after)
if p_value < 0.05:
print("Различия значимы")
Пример 2: Связь между полом и покупкой
Тип: категориальные
from scipy.stats import chi2_contingency
import pandas as pd
contingency = pd.crosstab(df["gender"], df["purchased"])
chi2, p_value, dof, expected = chi2_contingency(contingency)
if p_value < 0.05:
print("Пол и покупка связаны")
Пример 3: Доход по 3 регионам
Тип: непрерывные, 3 группы
from scipy import stats
region1 = [50000, 55000, 60000]
region2 = [45000, 50000, 55000]
region3 = [60000, 65000, 70000]
f_stat, p_value = stats.f_oneway(region1, region2, region3)
if p_value < 0.05:
print("Доходы различаются по регионам")
Таблица критериев
| Данные | 2 группы | 3+ групп |
|---|---|---|
| Категориальные | Chi-square | Chi-square |
| Непрерывные (нормальные) | t-test | ANOVA |
| Непрерывные (не нормальные) | Mann-Whitney U | Kruskal-Wallis |
| Связанные (до/после) | Paired t-test | Repeated ANOVA |
Проверка нормальности
from scipy.stats import shapiro
data = [1, 2, 3, 4, 5, 6, 7, 8, 100]
stat, p = shapiro(data)
if p > 0.05:
print("Нормально распределено")
else:
print("Не нормально")
p-value интерпретация
- p < 0.01 → очень значимо (99% уверены)
- p < 0.05 → значимо (95% уверены)
- p < 0.10 → слабо значимо (90% уверены)
- p >= 0.05 → не значимо
Effect Size (размер эффекта)
Всегда проверяй не только p-value, но и практическую значимость:
# Cohens d
mean1, std1 = 50, 10
mean2, std2 = 55, 12
n1, n2 = 100, 100
import numpy as np
cohens_d = (mean1 - mean2) / np.sqrt(((n1-1)*std1**2 + (n2-1)*std2**2) / (n1+n2-2))
# d < 0.2 = малый, 0.2-0.5 = средний, > 0.8 = большой
Частые ошибки
- Игнорирование нормальности → неправильный критерий
- p-hacking → проверяешь много критериев, пока не найдешь значимый
- Игнорирование effect size → статистически значимое, но практически неважное
- Множественные сравнения → без коррекции (Bonferroni)
Итого
Алгоритм выбора:
- Определи тип данных
- Проверь нормальность (Shapiro-Wilk)
- Выбери критерий из таблицы
- Проверь effect size
- Интерпретируй p-value