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

Как выбрать статистический критерий?

2.0 Middle🔥 191 комментариев
#A/B-тестирование#Статистика и теория вероятностей#Статистические критерии и тесты

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

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

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

Как выбрать статистический критерий?

Главное правило

Выбор критерия зависит от:

  1. Типа данных (категориальные vs непрерывные)
  2. Типа гипотезы (связь, различие, тренд)
  3. Количества групп (2 группы vs много)
  4. Нормальности распределения
  5. Объёма выборки

Блок-схема выбора

Шаг 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-squareChi-square
Непрерывные (нормальные)t-testANOVA
Непрерывные (не нормальные)Mann-Whitney UKruskal-Wallis
Связанные (до/после)Paired t-testRepeated 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 = большой

Частые ошибки

  1. Игнорирование нормальности → неправильный критерий
  2. p-hacking → проверяешь много критериев, пока не найдешь значимый
  3. Игнорирование effect size → статистически значимое, но практически неважное
  4. Множественные сравнения → без коррекции (Bonferroni)

Итого

Алгоритм выбора:

  1. Определи тип данных
  2. Проверь нормальность (Shapiro-Wilk)
  3. Выбери критерий из таблицы
  4. Проверь effect size
  5. Интерпретируй p-value