Условие
Когда использовать t-test (parametric), когда Mann-Whitney (nonparametric)?
Решение
Краткая таблица
| Условие | Test |
|---|---|
| Нормальное / большие n / CLT | t-test |
| Скошенное / outliers / маленькие n | Mann-Whitney |
| Парные | paired t-test / Wilcoxon signed-rank |
| 3+ группы norm | ANOVA |
| 3+ групп non-norm | Kruskal-Wallis |
| Доли / категории | chi² / Fisher exact |
Параметрические
- Предполагают распределение (обычно normal).
- Более мощные при выполненных предположениях.
- Сравнивают средние/дисперсии.
Непараметрические
- Без предположений о распределении.
- Сравнивают ранги (или медианы при симметрии).
- Менее мощные при нормальности (~5% потеря), но устойчивы.
- Не работают на parameter, считают другую величину.
Что меряет Mann-Whitney
Не «равенство медиан» в общем случае — это распространённое заблуждение. Меряет:
H_0: P(X_A > X_B) = 0.5
«Вероятность, что A больше B».
Если распределения одинаковой формы, это то же, что разница медиан.
Когда не использовать t-test
- Жирные хвосты (revenue, LTV): outliers искажают среднее.
- Малые n (< 20) и явная не-нормальность.
- Discrete / ordinal данные (1-5 NPS) — лучше Mann-Whitney или ordinal logistic.
- Bounded by 0/1 (rates) —
proportions_ztestили logistic.
Power
При сильной не-нормальности t-test теряет power. Если данные сильно скошены (LTV) — bootstrap или Mann-Whitney могут быть мощнее.
Что использовать в A/B
Большинство компаний — t-test (Welch's) на mean. Корректировки:
- Log-transform для скошенных.
- Winsorize для outliers.
- CUPED для variance reduction.
Mann-Whitney реже — потому что бизнес считает в среднем, а не в ранге.
from scipy import stats
t, p = stats.ttest_ind(a, b, equal_var=False)
u, p_mw = stats.mannwhitneyu(a, b, alternative='two-sided')Подводные камни
- Параметрический тест на скошенных данных может врать: tail событий портят SE и p-value.
- Mann-Whitney на «одинаковая медиана, разная форма» даёт значимый p даже без разницы медиан.
- Большие n спасают t-test даже на скошенности (CLT), но на n < 100 — осторожно.
- NPS / ranks — discrete с малым числом значений → ties в Mann-Whitney портят расчёт.
- p-value не = «отсутствие эффекта». Низкая power тоже даёт большой p.
Эталонный ответ
Parametric (t-test) — большие n или нормальные данные, измеряет средние. Non-parametric (Mann-Whitney) — скошенные/малые n/outliers, измеряет ранги (≈ медианы при одинаковой форме). На скошенных данных — log-transform или bootstrap часто лучше.