Условие
Перечисли, какой тест в scipy.stats использовать в типичных задачах A/B-теста аналитика и покажи примеры вызовов.
Решение
Шпаргалка
| Задача | Тест | scipy функция |
|---|---|---|
| Сравнить средние двух независимых групп (нормальные) | t-test | ttest_ind |
| Сравнить средние парных наблюдений | paired t-test | ttest_rel |
| Сравнить медианы/распределения (не нормальные) | Mann–Whitney U | mannwhitneyu |
| Сравнить распределения парных не-нормальных | Wilcoxon signed-rank | wilcoxon |
| Сравнить доли двух групп | z-test или chi² | proportions_ztest (statsmodels) / chi2_contingency |
| 3+ группы, среднее | ANOVA | f_oneway |
| 3+ группы, ранги | Kruskal–Wallis | kruskal |
| Корреляция числ-числ | Pearson / Spearman | pearsonr / spearmanr |
| Категория-категория | chi² independence | chi2_contingency |
| Распределение vs распределение | KS-test | ks_2samp |
Примеры
from scipy import stats
# Средние (CTR с большой выборкой → можно t-test даже без нормальности)
stat, p = stats.ttest_ind(a, b, equal_var=False) # Welch's t-test
# Не-нормальное распределение (LTV с длинным хвостом)
stat, p = stats.mannwhitneyu(a, b, alternative='two-sided')
# Доли (контр.: 120 из 1000 vs 150 из 1100)
from statsmodels.stats.proportion import proportions_ztest
stat, p = proportions_ztest([120, 150], [1000, 1100])
# Категориальные таблицы
import numpy as np
table = np.array([[120, 880], [150, 950]])
chi2, p, dof, expected = stats.chi2_contingency(table)Подводные камни
ttest_ind(equal_var=True)(по умолчанию) предполагает равенство дисперсий — в реальности оно почти никогда не выполняется. Всегдаequal_var=False(Welch).- Mann–Whitney чувствителен к форме распределения, а не только к медиане; интерпретируйте как «вероятность, что A > B».
chi2_contingencyтребует ожидаемых частот ≥ 5; на малых выборках использовать Fisher exact (stats.fisher_exact).- KS-test слаб на хвостах и слишком жёсток на центрах — для бизнес-распределений (LTV) сначала смотрите Q-Q и Mann–Whitney.
- Pearson измеряет линейную связь; для монотонной — Spearman. На выбросах Pearson разваливается.
Эталонный ответ
Welch's ttest_ind(equal_var=False) для средних, mannwhitneyu для скошенных распределений, chi2_contingency для долей в таблице. Параметры дефолта проверять — особенно equal_var.