Условие
Хочу проверить, связаны ли «способ оплаты» (карта/СБП/cash) и «купил повторно в течение 30 дней (да/нет)». Какой тест?
Решение
Chi-square test of independence
Для категориальных переменных. Проверяет:
H_0: переменные независимы (P(A, B) = P(A)·P(B))
H_1: зависимы
Таблица сопряжённости
| Купил | Не купил | |
|---|---|---|
| Карта | 800 | 1200 |
| СБП | 500 | 500 |
| Cash | 100 | 900 |
Вычисление
Expected frequency для ячейки (i, j):
E_ij = row_total_i × col_total_j / grand_total
Например, expected «Карта × Купил»:
E = 2000 × 1400 / 4000 = 700
Observed = 800
Chi-square statistic:
χ² = Σ (O - E)² / E
import numpy as np
from scipy.stats import chi2_contingency
table = np.array([[800, 1200], [500, 500], [100, 900]])
chi2, p, dof, expected = chi2_contingency(table)dof = (rows - 1) × (cols - 1) = 2 × 1 = 2.
Effect size
Cramér's V = sqrt(χ² / (n × min(rows-1, cols-1)))
- < 0.1 — слабая связь.
- 0.1-0.3 — средняя.
-
0.3 — сильная.
Условия применимости
- Independent observations.
- Expected count ≥ 5 в каждой ячейке. На малых частотах — Fisher exact test.
- Categorical data (не ordinal).
from scipy.stats import fisher_exact
# Только для 2×2 таблиц
odds_ratio, p = fisher_exact([[5, 95], [10, 90]])Goodness-of-fit (отдельный chi²)
Проверка соответствия одной выборки известному распределению:
from scipy.stats import chisquare
chisquare(observed, expected)Применение: «доли каналов acquisition не сместились с прошлого месяца?»
Post-hoc
Если χ² значимый, не известно какие ячейки отличаются. Standardised residuals:
r_ij = (O_ij - E_ij) / sqrt(E_ij)
|r| > 2 — ячейка «отклонена»
Подводные камни
- Большая выборка даёт significant p даже при тривиальной разнице. Effect size (Cramér's V) важнее p.
- Expected ≥ 5 — нарушение даёт неверный p. Fisher exact или объединение категорий.
- Тест на independence — не тест на «какая категория лучше». Это смежная задача.
- Continuity correction Yates для 2×2 — снижает Type I error при малых выборках.
- Ordinal data: Mann-Whitney или ordinal logistic, не chi².
Эталонный ответ
Chi-square test independence: χ² = Σ(O−E)²/E, dof=(r-1)(c-1). Применяется для категориальных переменных. Условие: expected ≥ 5. Effect size — Cramér's V. На малых выборках — Fisher exact.