Парадокс который ты видел но не задумывался
Возьми любое распределение — даже самое страшное и кривое:
- Доход людей в КЗ — экспоненциально скошен (большинство мало, единицы много)
- Время отклика API — лог-нормальное (длинный хвост)
- Количество детей в семье — Пуассон
Если ты будешь много раз случайно выбирать выборки из этого распределения и усреднять их — распределение этих средних будет нормальным. Колоколом. Симметричным.
Это и есть Центральная предельная теорема (CLT).
Точная формулировка
Пусть X1, X2, ..., Xn — независимые одинаково распределённые случайные величины с конечными математическим ожиданием μ и дисперсией σ².
Тогда среднее выборки:
$$\bar{X}n = \frac{1}{n}\sum{i=1}^n X_i$$
при n → ∞ распределено как:
$$\bar{X}_n \sim \mathcal{N}\left(\mu,\ \frac{\sigma^2}{n}\right)$$
То есть — нормальное распределение, с:
- средним =
μ(как и у исходного) - стандартным отклонением =
σ / √n(становится уже по мере ростаn)
Что это значит на практике
1. A/B-тесты работают
Когда ты сравниваешь две группы по средней конверсии (или среднему чеку), ты сравниваешь средние двух выборок. По CLT эти средние ≈ нормальны (при достаточном размере), и можно применять стандартные t-test / z-test.
Без CLT — пришлось бы для каждого распределения подбирать свой статистический тест. С CLT — универсальный подход.
2. Стандартная ошибка среднего
σ / √n — это стандартная ошибка среднего (SEM). Чем больше выборка — тем точнее знаешь среднее.
Квадратный корень — важный нюанс. Чтобы уменьшить погрешность в 2 раза, нужна выборка в 4 раза больше. Поэтому A/B-тесты так дорого ловить мелкие эффекты — sample size растёт квадратично.
3. Доверительные интервалы
95% ДИ для среднего:
$$\bar{x} \pm 1.96 \cdot \frac{s}{\sqrt{n}}$$
где s — выборочное стандартное отклонение. Эта формула работает благодаря CLT — мы предполагаем что распределение среднего нормальное.
Симуляция в Python
Посмотрим на это в живую. Берём экспоненциальное распределение (далёкое от нормального) и усредняем выборки.
import numpy as np
import matplotlib.pyplot as plt
# Исходное распределение: экспоненциальное (скошенное)
population = np.random.exponential(scale=2, size=100_000)
# Гистограмма исходного
plt.hist(population, bins=80)
# → видим скошенное распределение
# Теперь возьмём 1000 выборок по 30 штук и посчитаем их средние
sample_means = []
for _ in range(1000):
sample = np.random.choice(population, size=30)
sample_means.append(sample.mean())
plt.hist(sample_means, bins=40)
# → видим почти идеальный колокол!
Уже при размере выборки 30 распределение средних практически нормально. Это эмпирическое правило: n ≥ 30 — CLT работает для большинства распределений.
Когда CLT НЕ работает
CLT — мощная теорема, но есть оговорки.
1. Бесконечная дисперсия
Если у исходного распределения бесконечная дисперсия (Коши, Парето с тяжёлым хвостом α < 2) — CLT не применим. Средние не сходятся к нормальному.
В аналитике встречается редко, но в финансах и страховании — постоянно (величины с экстремальными выбросами).
2. Зависимые наблюдения
CLT требует независимость. Если у тебя в выборке один человек залогинился 10 раз — это не 10 независимых наблюдений.
Поэтому в A/B-тестах ВСЕГДА дедуплицируй на уровне юзера или сессии, перед тем как считать среднее.
3. Маленькая выборка из очень кривого распределения
Если исходное распределение крайне skewed (например, миллиардеры в выборке зарплат), при малых n (< 100) распределение средних всё ещё может быть не нормальным.
В таких случаях:
- Увеличь выборку
- Используй bootstrap или permutation tests (не требуют нормальности)
- Применяй Mann-Whitney вместо t-test
Связь с другими концепциями
- Закон больших чисел ≠ CLT. ЗБЧ говорит что среднее сходится к
μ. CLT говорит как оно вокругμраспределено. - Распределение Стьюдента (t) — поправка к нормальному для малых выборок (n < 30), когда
σнеизвестно и оценивается какs.
TL;DR
- Среднее выборки любого распределения при росте
nстремится к нормальному - При
n ≥ 30уже почти нормально для большинства реальных метрик - Standard error =
σ / √n— квадратичная цена точности - Не работает: бесконечная дисперсия, зависимые наблюдения, экстремальный skew + малый
n - Это фундамент всех A/B-тестов на средних