Статистика
Хи-квадрат: как Фишер поймал Менделя на фальсификации
Цели урока
- Применять χ² тест согласия для проверки соответствия наблюдений теоретическому распределению
- Применять χ² тест независимости к таблицам сопряжённости и считать Cramer's V
- Понимать, как считать степени свободы для разных вариантов теста
- Реализовывать SRM-детектор для A/B платформы и интерпретировать результат
- Использовать χ² в ML-задачах: feature selection, distribution shift, LLM evaluation
Предварительные знания
- Понимание H0 / H1, p-value и уровня значимости α (см. урок stat-05-hypothesis)
- Базовая центральная предельная теорема для интуиции аппроксимации
- Различение категориальных и числовых переменных
Фишер 1936: хи-квадрат на данных Менделя выявил подделку, на которой стоит вся школьная генетика. Тот же тест сегодня ловит сломанную рандомизацию в Optimizely и distribution shift в production LLM.
- **Booking.com и Microsoft ExP** запускают SRM-тест автоматически перед каждым анализом A/B - 5-10% экспериментов помечается невалидными по оценке Ronny Kohavi
- **Optimizely / Statsig / GrowthBook** показывают предупреждение SRM в UI: 8% imbalance флагается уже на 100K пользователей
- **Evidently и WhyLabs** мониторят production ML через χ² между train- и inference-распределениями фичей и предсказаний
- **Clinical trials FDA** требуют χ² тест на баланс групп по полу, возрасту, расе при анализе lecarstvennyh efficacy
- **sklearn.feature_selection.chi2** отбирает признаки в text classification: миллионы признаков TF-IDF фильтруются за секунды
- **Хедж-фонды** применяют χ² для детекции аномальных паттернов в торговом потоке - связь типа ордера и времени дня
Карл Пирсон и рождение хи-квадрат
В 1900 году Карл Пирсон публикует "On the Criterion that a Given System of Deviations from the Probable in the Case of a Correlated System of Variables is such that it can be reasonably supposed to have arisen from Random Sampling" - 18 страниц, которые открывают эпоху статистики категориальных данных. До Пирсона статистика занималась средними и дисперсиями нормальных распределений. Пирсон даёт инструмент для частот: монета честная или нет, кости честные или подделаны, наследование жёлтого vs зелёного гороха идёт по закону или нет. В 1922 году Рональд Фишер уточняет понятие степеней свободы и закладывает современную форму теста. Через 14 лет Фишер тем же тестом разоблачит самого Менделя - инструмент против собственного основания дисциплины.
Тест согласия: соответствует ли распределение
**1936 год. Рональд Фишер берёт записи Грегора Менделя о горохе за 1856-1863 годы и применяет свой свежий критерий хи-квадрат.** Мендель - святой генетики, его законы наследования преподают в каждой школе. Результат Фишера: данные Менделя слишком хорошо ложатся на теоретические соотношения 3:1 и 9:3:3:1. Вероятность такой точности случайно - ниже 0.0001. Либо горох на австрийском участке монастыря в Брно был сверхъестественно благосклонен, либо ассистент монаха выбрасывал неудобные стручки. Хи-квадрат вскрыл fraud в основании генетики - и стал первым в истории алгоритмом для детекции причёсанных данных.
**Хи-квадрат (χ²) тест согласия (goodness-of-fit)** проверяет: совместимы ли наблюдаемые частоты по k категориям с гипотетическим распределением? H0 - данные из распределения F0, H1 - не из F0. Этот тест работает не с числами (для чисел есть t-тест), а с **частотами категорий**: цвет горошины, тип устройства, метка класса в датасете.
Алгоритм за 5 шагов
- Разбить выборку на k категорий и посчитать наблюдаемые частоты O1, O2, ..., Ok
- Вычислить ожидаемые при H0: Ei = n · pi, где pi - теоретическая вероятность категории
- Посчитать статистику χ² = Σ (Oi - Ei)² / Ei
- Степени свободы df = k - 1 - (число оценённых параметров)
- Сравнить с критическим χ² при выбранном уровне α. Если χ² больше - H0 отвергается
Хи-квадрат на горохе Менделя
Наблюдения: 5474 жёлтых, 1850 зелёных, всего n = 7324. Ожидаемые при соотношении 3:1: E_жёлт = 7324 · 0.75 = 5493, E_зел = 7324 · 0.25 = 1831. χ² = (5474-5493)² / 5493 + (1850-1831)² / 1831 = 361/5493 + 361/1831 = 0.066 + 0.197 = 0.263. df = 1, критическое значение χ²(0.05, 1) = 3.841. 0.263 << 3.841, H0 не отвергается - один эксперимент совместим с 3:1. Но Фишер агрегировал все 84 серии Менделя. Совокупный χ² = 41.6 с p-value около 0.99996 - данные слишком красивые.
**Слишком хороший fit - тоже подозрителен.** Если χ² систематически меньше df и p-value близко к 1, данные выглядят причёсанными. Этот же приём современная биостатистика использует для retraction-watch: ищут papers, где наблюдения подозрительно ровно ложатся на гипотезу. ML-аналог - LLM evaluation: если модель **слишком стабильно** выдаёт нужный класс, есть подозрение на data contamination между train и benchmark.
**Условие применимости:** все Ei >= 5. При нарушении хи-квадрат-аппроксимация проседает - объединять редкие категории либо использовать Fisher exact test для таблиц 2x2.
Хи-квадрат измеряет силу связи или размер эффекта
Хи-квадрат - это только тест значимости. Размер эффекта измеряется отдельно через Cramer's V или phi-coefficient
Большой χ² при огромном n всегда даст p < 0.001, даже если Cramer's V = 0.02 (пренебрежимо малая связь). На датасете в 10 миллионов записей хи-квадрат отвергнет любую H0 о независимости. Поэтому в production A/B анализе всегда репортят и χ², и effect size - один без другого вводит в заблуждение.
Статистика χ², степени свободы и распределение
**Карл Пирсон, 1900.** Статья "On the Criterion that a Given System of Deviations from the Probable..." - 18 страниц, после которых статистика стала наукой о категориях, а не только о средних. Пирсон вывел: если истинное распределение F0 верно, то сумма Σ (Oi - Ei)² / Ei сходится по распределению к χ²(df). Это работает потому, что нормированная разность (Oi - Ei) / sqrt(Ei) при больших n приближается к стандартной нормальной по центральной предельной теореме, а сумма квадратов k-1 независимых стандартных нормальных - это и есть хи-квадрат с df = k-1.
Степени свободы - сколько координат свободны
| Тест | Формула df | Интуиция |
|---|---|---|
| Goodness-of-fit | k - 1 | Из k частот одна определена через сумму = n |
| GoF с оценкой параметров | k - 1 - p | Минус число оценённых параметров (например, μ и σ для нормали) |
| Тест независимости r×c | (r-1)(c-1) | Маргиналы фиксированы, свободны только внутренние ячейки |
| 2x2 contingency | 1 | Одна ячейка определяет три остальных через маргиналы |
Критические значения χ² при α = 0.05
df=1: 3.841 (SRM детектор для 50/50 теста) df=2: 5.991 (тест 2x3, например iOS / Android / Web vs premium / free) df=3: 7.815 (4 категории, A/B/C/D тест на равномерность) df=4: 9.488 df=10: 18.31 df=30: 43.77 Практика: при df > 30 распределение χ² близко к нормальному с μ = df, σ = sqrt(2·df).
**Хи-квадрат в feature selection.** `sklearn.feature_selection.chi2(X, y)` возвращает χ²-статистику для каждого признака против целевой переменной. Признаки с большим χ² сильнее связаны с y и отбираются для модели. Используется в text classification (TF-IDF признаки vs класс) и в bioinformatics (SNP vs phenotype). Ограничение: работает только с неотрицательными признаками.
**Связь с G-test.** Альтернатива хи-квадрат - G-тест, основанный на likelihood ratio: G = 2 · Σ Oi · ln(Oi / Ei). При больших n G и χ² численно близки, но G лучше теоретически обоснован для малых выборок и используется в bioinformatics (BLAST, фенотипические анализы).
Тест согласия с нормальным распределением: оценили μ и σ из данных, разбили на k = 10 категорий. Какое df?
Тест независимости и таблицы сопряжённости
**Contingency table test** (тест сопряжённости) - расширение χ² на две категориальные переменные. Вопрос: P(A ∩ B) = P(A) · P(B)? Если да - переменные независимы. Если нет - есть связь. Классический пример из 1900-х: связь между выживанием на Титанике и классом пассажира - первое массовое применение χ² в социологии.
Пример: покупка premium и платформа
Вопрос: зависит ли premium-конверсия от платформы (iOS / Android / Web)? Таблица наблюдений Oij: iOS Android Web Σ Premium: 210 180 90 480 Free: 290 420 310 1020 Σ: 500 600 400 1500 Ожидаемые при независимости: Eij = (row_total · col_total) / grand_total E(Prem,iOS) = 480 · 500 / 1500 = 160 E(Prem,And) = 480 · 600 / 1500 = 192 E(Prem,Web) = 480 · 400 / 1500 = 128 E(Free,iOS) = 1020 · 500 / 1500 = 340 E(Free,And) = 1020 · 600 / 1500 = 408 E(Free,Web) = 1020 · 400 / 1500 = 272 χ² = (210-160)²/160 + (180-192)²/192 + (90-128)²/128 + (290-340)²/340 + (420-408)²/408 + (310-272)²/272 = 15.625 + 0.750 + 11.281 + 7.353 + 0.353 + 5.316 = 40.68 df = (r-1)(c-1) = 1 · 2 = 2 χ²(0.05, 2) = 5.991. 40.68 >> 5.991 - H0 отвергается. Cramer's V = sqrt(χ² / (n · min(r-1, c-1))) = sqrt(40.68 / 1500) = 0.165 - связь маленькая.
| Cramer's V | Сила связи | Пример |
|---|---|---|
| < 0.1 | Пренебрежимая | Конверсия и день недели на масштабе сайта |
| 0.1 - 0.3 | Малая | Платформа vs premium на 1500 пользователей |
| 0.3 - 0.5 | Средняя | Возраст и предпочитаемая категория продукта |
| > 0.5 | Большая | Пол vs тип товара в fashion e-commerce |
**Standardized residuals** показывают, какая именно ячейка вытащила тест. iOS / Premium с residual = +3.95 - там сильное превышение над ожидаемым. iOS пользователи покупают premium заметно чаще среднего, Web - заметно реже. Это аналог post-hoc анализа для категориальных тестов и стандарт в clinical trials, где χ² применяется к таблицам типа лечение vs исход.
**Корреляция не равна causation.** χ² показал связь iOS и premium, но не сказал, почему. iOS пользователи могут быть платёжеспособнее, или iOS-приложение раньше получало premium-фичи, или дизайн платёжного экрана на iOS лучше. Для причинности нужен рандомизированный эксперимент или causal inference (см. причинный вывод).
p-value - это вероятность того, что H0 истинна
p-value - вероятность получить настолько же или более экстремальную статистику ПРИ УСЛОВИИ что H0 истинна
Это самая частая ошибка интерпретации в статистике, многократно зафиксированная в American Statistical Association statement on p-values (2016). p = 0.001 не значит, что H0 верна с вероятностью 0.1%. Это значит: если бы H0 была истинна, такие данные наблюдались бы в 0.1% случаев. Реальная вероятность H0 требует байесовского подхода с prior.
SRM-детектор и применения в ML
**Sample Ratio Mismatch (SRM)** - незаметный killer A/B тестов. Эксперимент сконфигурирован 50/50, но реальный сплит выходит 52/48. Причины: кэширование кук, ботовый трафик, async JS с задержкой, redirect chains, сломанная random seed. С точки зрения хи-квадрат это тест согласия с равномерным распределением - и при достаточном n даже сдвиг в 2% даёт χ² > 100. Microsoft ExP, Optimizely, Statsig, GrowthBook - все запускают SRM-детектор автоматически перед любым анализом результатов.
SRM детекция: реальная ошибка рандомизации
Тест должен был быть 50/50 на 10000 пользователей. Фактический сплит: Control 5234, Treatment 4766. H0: p_control = p_treatment = 0.5 E_control = 10000 · 0.5 = 5000, E_treatment = 10000 · 0.5 = 5000 χ² = (5234-5000)² / 5000 + (4766-5000)² / 5000 = 234² / 5000 + 234² / 5000 = 10.95 + 10.95 = 21.90 df = 1, χ²(0.05, 1) = 3.841 21.90 >> 3.841, p < 0.0001 - SRM обнаружен. Эксперимент помечается невалидным до починки рандомизации. Ronny Kohavi (Microsoft, ex-Airbnb) оценивает: 5-10% A/B тестов в крупных компаниях содержат SRM.
Хи-квадрат в production ML
| Применение | Что считается | Где |
|---|---|---|
| SRM детектор A/B | Фактический сплит vs целевой | Optimizely, Statsig, GrowthBook, Microsoft ExP |
| Distribution shift | Распределение классов train vs production | Evidently, WhyLabs, ML monitoring |
| Feature selection | Признак vs целевая категория | sklearn.feature_selection.chi2 в text classification |
| LLM evaluation | Распределение токенов train vs inference | Detection of prompt drift, OOD inputs |
| Genomics / GWAS | Hardy-Weinberg равновесие SNP | PLINK, медицинская генетика |
| Fraud detection | Тип транзакции vs устройство vs время | Контингент-таблицы в реальном времени, банки |
**Distribution shift detection в LLM eval.** При деплое модели train-распределение токенов известно, inference-распределение собирается online. Хи-квадрат тест согласия на топ-1000 токенов даёт быстрый сигнал: пользователи спрашивают не то, на чём модель обучалась. Это сигнал к ретренингу или RAG-расширению (см. LLM evaluation).
**Multiple comparisons и p-hacking.** Если запускать 20 χ² тестов на одних данных, при α = 0.05 один из них окажется значимым случайно. Garden of forking paths Андрю Гелмана: исследователь крутит срезы пока не получит p < 0.05. Защита - Bonferroni-коррекция (α / число тестов) или FDR-контроль (Benjamini-Hochberg). Подробно в уроке про множественные тесты.
Вопросы для размышления
- В каких системах ежедневной работы (CI/CD, мониторинг, аналитика, рекомендации) можно увидеть скрытый хи-квадрат тест - и как изменилось бы решение, если бы он работал явно?
Связанные уроки
- stat-05-hypothesis — p-value и H0/H1 - база для любого критерия
- stat-06-t-test — t-тест для чисел, хи-квадрат для категорий
- stat-19-multiple-testing — Поправки при множественных хи-квадрат тестах
- ml-15-naive-bayes — Хи-квадрат как фильтр признаков перед Naive Bayes
- aie-31-evaluation — Detection распределительного сдвига train vs inference
- prob-08-variance