Центральная предельная теорема на пальцах
Почему нормальное распределение возникает буквально везде? Ответ — в одной из самых красивых теорем статистики.
Центральная предельная теорема (ЦПТ): сумма (и среднее) большого числа независимых случайных величин распределена приблизительно нормально — почти независимо от того, как распределены сами величины.
Удивительное обещание
Возьмём максимально «ненормальную» величину — бросок честной кости. Её распределение равномерное: плоское, никакого колокола. Но если складывать результаты нескольких костей, сумма начнёт стремиться к нормальной форме. Это и есть магия ЦПТ: из плоских кирпичиков складывается колокол.
Одна кость — плоско
import random
from collections import Counter
random.seed(0)
# Распределение одной кости — равномерное (плоское)
rolls = [random.randint(1, 6) for _ in range(60000)]
c = Counter(rolls)
for face in range(1, 7):
print(f"{face}: {'#' * (c[face] // 500)} ({c[face]})")
Вывод:
1: ################### (9978) 2: #################### (10136) 3: ################### (9994) 4: ################### (9825) 5: #################### (10091) 6: ################### (9976)
Все грани примерно равны — никакого колокола, чистое равномерное распределение.
Сумма пяти костей — появляется колокол
Теперь будем бросать пять костей и складывать. Сумма пяти равномерных величин уже выглядит как колокол.
import random
from collections import Counter
random.seed(0)
def sum_of_dice(n):
return sum(random.randint(1, 6) for _ in range(n))
sums = [sum_of_dice(5) for _ in range(100000)]
c = Counter(sums)
for s in range(5, 31):
bar = "#" * (c[s] // 500)
print(f"{s:2}: {bar}")
Вывод:
5: 6: 7: 8: 9: # 10: ### 11: ##### 12: ####### 13: ########## 14: ############# 15: ################ 16: ################## 17: #################### 18: #################### 19: ################## 20: ################# 21: ############# 22: ########## 23: ####### 24: ##### 25: ### 26: # 27: 28: 29: 30:
Вот он, колокол! Хотя каждая кость по отдельности плоская, их сумма симметрично концентрируется вокруг центра (среднее суммы пяти костей = 5 · 3.5 = 17.5). Чем больше костей складываем, тем ровнее колокол.
Среднее выборок тоже нормально
ЦПТ работает не только для сумм, но и для средних — и это её главное практическое следствие. Возьмём сильно скошенную величину и посмотрим на распределение средних по выборкам.
import random
from statistics import mean, stdev
random.seed(1)
# Сильно скошенная исходная величина (экспоненциальная)
def skewed():
return random.expovariate(1.0) # среднее = 1, длинный правый хвост
# Берём 2000 выборок по 50 значений и считаем их средние
sample_means = [mean(skewed() for _ in range(50)) for _ in range(2000)]
print("Среднее из средних:", round(mean(sample_means), 3))
print("Разброс средних (σ):", round(stdev(sample_means), 3))
print("Теория σ/sqrt(n) =", round(1 / 50 ** 0.5, 3))
Вывод:
Среднее из средних: 1.004 Разброс средних (σ): 0.146 Теория σ/sqrt(n) = 0.141
Хотя исходная величина сильно скошена, распределение её выборочных средних — почти нормальное и узкое. Его разброс близок к σ/√n (стандартная ошибка) — здесь 1/√50 ≈ 0.141, что симуляция подтвердила.
Почему это так важно
ЦПТ — фундамент статистического вывода из последнего раздела. Именно благодаря ей мы можем строить доверительные интервалы и проверять гипотезы, опираясь на нормальное распределение, даже не зная, как распределены исходные данные. Достаточно, чтобы выборка была достаточно большой (часто хватает n ≥ 30).
Итог
- ЦПТ: сумма и среднее многих независимых величин стремятся к нормальному распределению.
- Это работает почти независимо от формы исходного распределения.
- Разброс выборочного среднего — стандартная ошибка σ/√n: больше выборка — точнее оценка.
- ЦПТ — основа доверительных интервалов и проверки гипотез.