статистикаЦПТA/B-тесты

Центральная предельная теорема простыми словами

2026-07-11 12 мин

Если объяснять в одном предложении: центральная предельная теорема (ЦПТ) говорит, что если брать много выборок из почти любых данных и у каждой считать среднее, то эти средние сложатся в нормальное распределение — колокол — даже если сами данные на колокол не похожи ни разу. Нормальными становятся не данные, а средние выборок. Звучит как абстракция из учебника, но на ней стоит половина того, чем аналитик занимается каждый день: доверительные интервалы, A/B-тесты, оценки в духе «средний чек 1500 ₽ плюс-минус столько-то». Ниже разберу, почему так выходит, сколько для этого нужно наблюдений и где популярное «30 хватит» подводит.

Что такое центральная предельная теорема простыми словами?

Возьми выручку интернет-магазина по отдельным заказам. Распределение будет уродливым: куча мелких покупок на 300–800 ₽, длинный хвост вправо и редкие заказы на 50 тысяч, которые тянут всё за собой. Это правостороннее (скошенное) распределение, и оно совершенно не похоже на аккуратный колокол.

Теперь сделай другое. Возьми случайные 50 заказов, посчитай их среднее. Потом ещё 50 — снова среднее. И так тысячу раз. У тебя получится тысяча средних. Если построить их гистограмму, она будет симметричной и колоколообразной — почти идеальная нормальная кривая. При этом сами данные как были кривыми, так и остались.

Вот это и есть ЦПТ: распределение выборочных средних стремится к нормальному по мере роста размера выборки, независимо от формы исходных данных. Есть оговорки (нужно, чтобы у распределения существовала конечная дисперсия — то есть хвост не должен быть совсем уж диким, как у распределения Коши), но для 99% реальных данных аналитика — чеки, длительности сессий, время до конверсии, клики — они выполняются.

Ключевая мысль, которую стоит закрепить: ЦПТ — это утверждение не про твои данные, а про поведение статистики (среднего), которую ты из этих данных считаешь.

Почему средние выборок складываются в колокол, а данные — нет?

Интуиция такая. Когда ты усредняешь 50 значений, случайные отклонения гасят друг друга. Один аномально большой заказ в выборке подтягивает среднее вверх, но рядом почти всегда окажется несколько мелких, которые тянут вниз. Чем больше значений в выборке, тем сильнее эти толчки в разные стороны компенсируются, и тем ближе среднее выборки жмётся к настоящему среднему всей популяции.

Разброс этих средних описывается стандартной ошибкой. Формула простая, и её стоит держать в голове словами: стандартная ошибка = стандартное отклонение данных / корень из размера выборки. То есть если увеличить выборку в 4 раза, разброс средних упадёт вдвое (корень из 4 — это 2). Хочешь уменьшить неопределённость ещё вдвое — готовь выборку уже в 16 раз больше. Отсюда, кстати, растёт ощущение, что «точность стоит дорого»: чтобы вдвое сузить доверительный интервал, данных нужно вчетверо больше.

А симметрия и колокол берутся из того, что сумма многих независимых случайных вкладов всегда стягивается к нормальной форме — это математический факт, и именно его формализует теорема. Неважно, из какого распределения пришли слагаемые: как только их много и они складываются, результат нормализуется.

Почему ЦПТ — это фундамент A/B-тестов и доверительных интервалов?

Потому что и доверительный интервал, и t-тест, и z-тест построены на одном допущении: выборочное среднее распределено нормально. Без ЦПТ это допущение висело бы в воздухе — ведь конверсия или выручка сами по себе не нормальные. ЦПТ даёт право сказать: «неважно, какие у меня данные, среднее по достаточно большой выборке ведёт себя нормально, значит формулы работают».

Разберём на A/B-тесте. Ты сравниваешь конверсию в контроле и в тесте. Конверсия отдельного пользователя — это ноль или единица (купил / не купил), распределение Бернулли, никакого колокола. Но тебе и не нужна нормальность отдельного пользователя. Тебе нужна нормальность разницы средних конверсий между группами — а вот она, благодаря ЦПТ, при нормальных размерах трафика приходит к колоколу. Именно поэтому ты можешь посчитать p-value и доверительный интервал для разницы, хотя исходные данные — просто нули и единицы.

То же с доверительным интервалом для среднего чека. Ты говоришь «средний чек 1500 ₽, 95% доверительный интервал от 1440 до 1560». Эта фраза имеет смысл только потому, что выборочное среднее нормально: интервал строится как среднее ± примерно 2 стандартные ошибки. Кривизна самих чеков на это не влияет — влияет размер выборки и разброс.

Если хочется потрогать это на живых задачах, а не на словах, полезно разобрать несколько кейсов с A/B и продуктовыми метриками в разделе кейсов и посмотреть, как считаются базовые показатели вроде DAU и производных от него — там ЦПТ работает под капотом всех интервалов.

Сколько нужно наблюдений и правда ли работает «правило 30»?

Правило 30 — это народная эвристика: «если в выборке 30+ наблюдений, среднее уже можно считать нормальным». Оно удобное и часто честное, но у него нет никакого священного смысла. Число 30 не вылито в граните — это компромисс, который прижился в учебниках, потому что для умеренно кривых данных 30 значений действительно достаточно, чтобы колокол сложился прилично.

Правильнее думать так: сколько нужно наблюдений — зависит от того, насколько кривые исходные данные. Логика прямая:

Отдельная история — редкие бинарные события. Для конверсии есть более честный ориентир, чем 30: нужно, чтобы и число «успехов», и число «неуспехов» было хотя бы порядка 10 в каждой группе. Если конверсия 0,5%, то на 30 пользователях у тебя в среднем 0 покупок — никакая ЦПТ тут ещё не включилась, сколько ни усредняй. Нужны тысячи наблюдений, чтобы набрать достаточно успехов.

Когда правило 30 врёт?

Врёт оно ровно в тех случаях, где длинный хвост доминирует. Классический пример из практики — выручка на пользователя. Представь, что 98% людей приносят 0–2 тысячи, а 2% — по 100 тысяч. Среднее по выборке из 30 человек будет диким скачком: попадёт в выборку «кит» — среднее улетело в космос, не попадёт — среднее заниженное. Распределение таких средних останется скошенным и на 30, и на 100 значениях. Колокол приходит, но медленно.

Второй частый провал — асимметричные бинарные метрики с низкой базой: клики по редкой кнопке, отказы платежей, жалобы. Мало успехов — мало информации, ЦПТ буксует.

Что с этим делают на практике:

Мой рабочий принцип: чем толще хвост, тем меньше я доверяю магии числа 30 и тем охотнее беру бутстрап или лог-преобразование.

Как увидеть ЦПТ своими глазами: симуляция на Python

Лучший способ поверить в ЦПТ — не читать про неё, а один раз прогнать симуляцию. Возьмём заведомо кривые данные (экспоненциальное распределение, похожее на суммы заказов) и посмотрим, как ведут себя средние выборок разного размера.

import numpy as np

rng = np.random.default_rng(42)

# «Кривые» данные: суммы заказов, сильно скошены вправо
population = rng.exponential(scale=1500, size=1_000_000)

print(round(population.mean(), 1))  # ~1500, средний чек
print(round(population.std(), 1))   # ~1500, разброс огромный — это не колокол

def sample_means(n, n_samples=10_000):
    # берём n_samples выборок по n заказов и считаем среднее каждой
    idx = rng.integers(0, len(population), size=(n_samples, n))
    return population[idx].mean(axis=1)

for n in (2, 5, 30, 100):
    m = sample_means(n)
    print(f"n={n:<3} среднее средних={m.mean():.1f}  ст.ошибка={m.std():.1f}")

На выходе увидишь две вещи. Первая: «среднее средних» при любом n держится около 1500 — то есть выборочное среднее не смещено, оно честно целится в настоящее среднее. Вторая: стандартная ошибка падает ровно по закону 1500 / корень из n. Для n = 100 она примерно в 10 раз меньше, чем для n = 1 — потому что корень из 100 равен 10.

Теперь самое наглядное — форма. Добавь построение гистограммы и сравни:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(1, 3, figsize=(12, 3))
for ax, n in zip(axes, (2, 30, 100)):
    ax.hist(sample_means(n), bins=60)
    ax.set_title(f"средние выборок по n={n}")
plt.tight_layout()
plt.show()

При n = 2 гистограмма средних ещё заметно скошена — наследует форму исходных данных. При n = 30 она уже почти симметрична. При n = 100 это чистый колокол. Ты буквально видишь, как ЦПТ включается по мере роста выборки. Поиграй с параметром scale и подставь распределение потяжелее (например, rng.pareto) — увидишь, как для тяжёлого хвоста тот же колокол складывается заметно медленнее, и правило 30 перестаёт спасать.

Этот код можно прогнать прямо в браузере, ничего не устанавливая, — в Python-тренажёре есть numpy и matplotlib. А если подзабыл синтаксис агрегаций и работы с массивами, держи под рукой справочник по Python.

Что центральная предельная теорема не гарантирует?

Тут копится больше всего ошибок на собеседованиях и в реальных отчётах, так что пройдусь по границам.

ЦПТ не делает нормальными сами данные. После неё чеки как были скошенными, так и остались. Нормально ведёт себя только их среднее. Если тебе нужно предсказать конкретный заказ, а не средний, ЦПТ ничем не помогает.

ЦПТ не отменяет требования к размеру выборки. На маленьких и очень кривых данных она ещё не успела сработать, и доверительный интервал будет врать — окажется у́же, чем должен, и ты переоценишь свою уверенность.

ЦПТ не чинит смещение выборки. Если данные собраны криво (только активные пользователи, только один регион, выжившие после оттока), то среднее сойдётся к нормали — но к нормали вокруг неправильного центра. Теорема про случайный шум, а не про систематическую ошибку отбора.

ЦПТ не требует независимости бесплатно. Формула стандартной ошибки предполагает, что наблюдения независимы. Если у тебя по несколько заказов на одного пользователя, а ты считаешь их как отдельные независимые точки, стандартная ошибка занизится, а p-value в A/B получится оптимистично-ложным. В таких случаях агрегируют до уровня пользователя или применяют поправки на кластеры.

Как применять ЦПТ в ежедневной работе аналитика

Когда я строю доверительный интервал для метрики, я держу в голове три вопроса: насколько скошены данные, сколько у меня наблюдений и независимы ли они. Если данные умеренные и выборка в сотни-тысячи строк — спокойно доверяю нормальным формулам. Если хвост тяжёлый или выборка маленькая — беру бутстрап или логарифмирую. Если наблюдения повторяются на одном юзере — сначала агрегирую.

В A/B-тестах ЦПТ — это молчаливое оправдание того, что ты вообще можешь считать p-value для конверсии. Но она не освобождает от расчёта размера выборки заранее: именно скорость сходимости к нормали и целевой размер эффекта диктуют, сколько трафика набрать до старта.

И главное — это одна из тех тем, которую любят на собеседованиях, потому что она отделяет тех, кто заучил формулы, от тех, кто понимает, почему они работают. Если хочешь потренироваться формулировать это вслух и разобрать смежные вопросы по статистике, загляни в банк вопросов с интервью и порешай практические задания на доверительные интервалы и A/B.

Хочешь идти дальше по статистике для аналитика системно — с интерактивными конспектами, симуляциями и разбором реальных кейсов до автоматизма — это открывается в Pro. Без давления: базовую практику по Python и A/B можно пощупать и на бесплатном доступе, а Pro просто снимает лимиты.

Готовься к собесу аналитика
Вопросы по статистике и A/B с разбором — попробуй бесплатно.
Банк вопросов →