Центральная предельная теорема
Центральная предельная теорема объясняет, почему нормальное распределение встречается повсюду: суммы и средние случайных величин стремятся к колоколу.
Центральная предельная теорема (ЦПТ): распределение среднего (или суммы) большого числа независимых случайных величин приближается к нормальному — независимо от того, как распределены сами величины.
Почему это поразительно
Это один из самых удивительных фактов математики. Исходные данные могут быть распределены как угодно — равномерно, кривобоко, дискретно. Но как только мы начинаем брать средние по выборкам, эти средние выстраиваются в аккуратный колокол. Поэтому нормальное распределение «вылезает» в стольких местах: рост, ошибки измерений, шум — всё это суммы множества мелких независимых вкладов.
Эксперимент: средние равномерных чисел
Возьмём заведомо НЕ нормальное распределение — равномерное на [0, 1] (плоское, никакого колокола). Будем много раз брать выборку из 30 чисел и считать её среднее. Посмотрим, как распределены эти средние.
import random, statistics
random.seed(0)
def sample_mean(n):
return statistics.mean(random.random() for _ in range(n)) # равномерное [0,1]
# 10000 выборочных средних, каждое по 30 чисел
means = [sample_mean(30) for _ in range(10000)]
print("Среднее всех средних :", round(statistics.mean(means), 3), "(теория 0.5)")
print("Минимум и максимум :", round(min(means), 3), "—", round(max(means), 3))
# Грубая гистограмма: считаем, сколько средних в каждой корзине
from collections import Counter
buckets = Counter(round(m, 1) for m in means)
for b in sorted(buckets):
print(f"{b:.1f}: {'#' * (buckets[b] // 150)}".rstrip())
Вывод:
Среднее всех средних : 0.5 (теория 0.5) Минимум и максимум : 0.281 — 0.672 0.3: 0.4: ########### 0.5: ########################################### 0.6: ########### 0.7:
Хотя сами числа равномерны (плоские), их средние образуют колокол с пиком на 0.5 — ровно как предсказывает ЦПТ. Симметрично, с убыванием к краям.
Стандартная ошибка среднего
ЦПТ даёт и количественную формулу. Разброс выборочных средних (его называют стандартной ошибкой) меньше разброса исходных данных в sqrt(n) раз: SE = σ / sqrt(n). Чем больше выборка, тем кучнее средние вокруг истины — снова видим, почему «больше данных» означает «точнее оценка».
import random, statistics, math
random.seed(1)
# σ равномерного [0,1] равна 1/sqrt(12)
sigma = 1 / math.sqrt(12)
for n in [10, 30, 100]:
means = [statistics.mean(random.random() for _ in range(n)) for _ in range(5000)]
empirical_se = statistics.pstdev(means)
theoretical_se = sigma / math.sqrt(n)
print(f"n={n:3}: SE эмпирическая = {round(empirical_se, 4)}, теория = {round(theoretical_se, 4)}")
Вывод:
n= 10: SE эмпирическая = 0.0912, теория = 0.0913 n= 30: SE эмпирическая = 0.0533, теория = 0.0527 n=100: SE эмпирическая = 0.0286, теория = 0.0289
Эмпирический разброс средних почти точно совпал с формулой σ/sqrt(n), и с ростом n он падает: учетверишь выборку — вдвое точнее оценка.
Зачем это в ML
ЦПТ — фундамент статистического вывода в ML. На ней стоят доверительные интервалы и проверка значимости (A/B-тесты: «улучшение реально или это шум?»). Она же объясняет, почему ошибки моделей часто моделируют нормальным распределением, и почему усреднение предсказаний (ансамбли, бэггинг) снижает разброс по закону 1/sqrt(n).
Итог
- ЦПТ: среднее многих независимых величин распределено почти нормально, какими бы ни были сами величины.
- Поэтому колокол встречается везде — рост, шум, ошибки суть суммы мелких вкладов.
- Стандартная ошибка среднего SE = σ/sqrt(n): больше выборка — кучнее средние.
- ЦПТ — основа доверительных интервалов, A/B-тестов и ансамблей в ML.