Собесов

Сценарий: normal vs t-distribution — когда переключаться

Статистика и теорверDistributionsЛёгкаяJunior

Условие

A/B-тест с малой выборкой: 20 юзеров в группе. Какое распределение использовать для CI и теста?

Решение

Когда normal, когда t

n Что использовать
≥ 30 (CLT работает) Normal (z-test)
< 30, σ известно Normal (z-test)
< 30, σ неизвестно (всегда) t-distribution

В реальной практике σ почти никогда не известно → почти всегда используем t-distribution. Просто при n > 30 t ≈ Normal.

Отличие t от Normal

t-distribution с df = n-1 степенями свободы:

  • Heavier tails (толще хвосты).
  • При df → ∞ сходится к Normal.
  • При df = 1 — это распределение Cauchy.

Quantiles

df 95% quantile Normal 95%
5 2.57 1.96
10 2.23 1.96
20 2.09 1.96
30 2.04 1.96
100 1.98 1.96
1.96 1.96

t даёт более широкие CI на маленьких выборках — это правильно (мы менее уверены).

CI

CI = mean ± t_{df, 1-α/2} × SE

Для n=20, α=0.05: t = 2.09 (а не 1.96).

Python

from scipy import stats
import numpy as np
 
mean, se, n = np.mean(data), stats.sem(data), len(data)
ci = stats.t.interval(0.95, df=n-1, loc=mean, scale=se)
 
# t-test
stat, p = stats.ttest_ind(a, b, equal_var=False)  # уже использует t-распределение

Что делать при n < 30 без нормальности

  1. Bootstrap percentile CI.
  2. Non-parametric тесты (Mann-Whitney).
  3. Permutation test.

t-test устойчив к умеренным отклонениям от нормальности (CLT уже работает на n=30), но при сильной скошенности (LTV с длинным хвостом) — bootstrap безопаснее.

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

  1. Всегда использовать t, кроме случая известного σ. n=30 — не магический порог.
  2. t-distribution предполагает нормальность данных; при сильной не-нормальности используйте bootstrap.
  3. Welch's t-test (equal_var=False) — дефолт. Не предполагать равенство дисперсий.
  4. df = n-1 для одной выборки, n_A + n_B - 2 для пары при equal_var; для Welch — Satterthwaite формула.
  5. На больших n (>1000) различие t и Normal незаметно — не зацикливайтесь.

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

t-distribution всегда, когда σ неизвестно (т.е. практически всегда). На n<30 различие с Normal заметно: t-quantile больше → CI шире. При сильной не-нормальности — bootstrap.

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

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

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