Собесов

Сценарий: scipy.stats для типичных тестов аналитика

PythonNumpy и scipyСредняяMiddle

Условие

Перечисли, какой тест в 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)

Подводные камни

  1. ttest_ind(equal_var=True) (по умолчанию) предполагает равенство дисперсий — в реальности оно почти никогда не выполняется. Всегда equal_var=False (Welch).
  2. Mann–Whitney чувствителен к форме распределения, а не только к медиане; интерпретируйте как «вероятность, что A > B».
  3. chi2_contingency требует ожидаемых частот ≥ 5; на малых выборках использовать Fisher exact (stats.fisher_exact).
  4. KS-test слаб на хвостах и слишком жёсток на центрах — для бизнес-распределений (LTV) сначала смотрите Q-Q и Mann–Whitney.
  5. Pearson измеряет линейную связь; для монотонной — Spearman. На выбросах Pearson разваливается.

Эталонный ответ

Welch's ttest_ind(equal_var=False) для средних, mannwhitneyu для скошенных распределений, chi2_contingency для долей в таблице. Параметры дефолта проверять — особенно equal_var.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти