Собесов

Сценарий: Kruskal–Wallis для 3+ групп без нормальности

Статистика и теорверHypothesis testingСредняяMiddle

Условие

Сравниваем 4 группы юзеров по revenue (распределение скошено). Какой тест?

Решение

Если бы revenue был нормальный

ANOVA (f_oneway):

from scipy.stats import f_oneway
F, p = f_oneway(group1, group2, group3, group4)

Если не нормальный — Kruskal-Wallis

Непараметрический аналог one-way ANOVA на рангах.

from scipy.stats import kruskal
H, p = kruskal(group1, group2, group3, group4)

Что проверяет

H_0: все группы имеют одинаковое распределение
H_1: хотя бы одно распределение отличается

Не «средние», а stochastic equality.

Алгоритм

  1. Объединяем все наблюдения, ранжируем.
  2. Считаем сумму рангов в каждой группе.
  3. Считаем H-статистику ~ χ²(k-1).
H = (12 / (N(N+1))) × Σ R_i² / n_i - 3(N+1)

Post-hoc

Если K-W значимый — нужно парные сравнения. Mann-Whitney с поправкой Bonferroni:

from itertools import combinations
from scipy.stats import mannwhitneyu
 
alpha = 0.05
k = 4
n_pairs = k * (k - 1) / 2  # 6
alpha_corr = alpha / n_pairs  # 0.0083
 
for g1, g2 in combinations(['g1', 'g2', 'g3', 'g4'], 2):
    u, p = mannwhitneyu(globals()[g1], globals()[g2])
    print(f'{g1} vs {g2}: p={p:.4f}, sig at α/6={alpha_corr:.4f}? {p<alpha_corr}')

Альтернативы: Holm-Bonferroni (мощнее), Dunn's test (специально для K-W post-hoc).

Effect size для K-W

η² = (H - k + 1) / (N - k)
  • 0.01 — small
  • 0.06 — medium
  • 0.14 — large

Сравнение с ANOVA

ANOVA мощнее Kruskal-Wallis на 5-10% при нормальности. На скошенных данных Kruskal-Wallis может быть мощнее.

Альтернативы

  1. Log-transform + ANOVA — часто работает на revenue.
  2. Bootstrap ANOVA — без предположений о распределении.
  3. Permutation test — точный non-parametric.

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

  1. Many ties (одинаковые значения) ослабляют тест — нужна tie correction.
  2. K-W не говорит, какие группы отличаются — нужен post-hoc.
  3. Без поправки на multiple comparisons — inflated Type I error.
  4. Heterogeneity of variances в группах нарушает Welch-аналог; для серьёзных проектов смотрите Brown-Forsythe / Games-Howell.
  5. На малых n в группе (< 10) K-W слабомощный — лучше combine или собрать больше данных.

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

Kruskal-Wallis = ANOVA на рангах, для 3+ групп без нормальности. После значимого H — post-hoc Dunn / Mann-Whitney с Bonferroni. Effect size η². Альтернатива — log-transform + ANOVA, bootstrap, permutation.

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

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

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