Все материалы
Продуктовая аналитикаматериалсредний

Центральная предельная теорема простыми словами: зачем она аналитику

Центральная предельная теорема (ЦПТ): почему среднее скошенной метрики распределено почти нормально, как считать стандартную ошибку среднего σ/√n и почему правило «n ≥ 30» не закон. Симуляция на выручке из учебной базы.

КейсПрактика25 сентября 2026 г.12 мин

Вы сравниваете выручку на пользователя в двух группах A/B-теста, и коллега задаёт резонный вопрос. У 80% пользователей выручка нулевая, медиана равна нулю, хвост тянется до 117 — это совсем не колокол. Откуда тогда нормальное распределение в формуле доверительного интервала и в t-тесте? Ответ даёт центральная предельная теорема: нормальным становится не распределение выручки, а распределение её среднего. Разберём, почему так происходит, как из этого получается стандартная ошибка и когда на теорему нельзя опираться.

Коротко

  • ЦПТ говорит о распределении среднего по выборке, а не о самих данных. Данные могут быть сколь угодно скошенными.
  • Разброс выборочного среднего — стандартная ошибка — равен σ/√n. Чтобы сузить интервал вдвое, нужно вчетверо больше наблюдений.
  • На ЦПТ держатся доверительные интервалы для средних и долей, z- и t-тесты в A/B-экспериментах.
  • «n ≥ 30» — эмпирическое правило, а не закон. На выручке с асимметрией 2,83 при n = 30 интервал 95% накрывает истинное среднее только в 89% случаев.
  • Теорема требует независимых наблюдений и конечной дисперсии. Сессии одного пользователя, киты и маленькие выборки ломают её предпосылки.

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

Центральная предельная теорема — это утверждение теории вероятностей о том, что среднее (или сумма) большого числа независимых наблюдений распределено приблизительно нормально, даже если сами наблюдения распределены иначе. Центр этого распределения совпадает с истинным средним, а разброс равен σ/√n: при росте выборки вчетверо он сокращается вдвое.

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

Объяснение интуитивное: в среднем по многим пользователям крупные значения одних уравновешиваются нулями других, а редкие большие значения делятся на n. Чем больше слагаемых, тем меньше итог зависит от формы исходного распределения.

Для монеты такой результат получил Муавр ещё в XVIII веке, Лаплас распространил его на более общие случаи, а доказательство при общих условиях дал Ляпунов на рубеже XIX и XX веков. Слово «центральная» в названии обычно объясняют её ролью: на этой теореме держится почти вся выборочная статистика.

Центральная предельная теорема
x̄ₙ ≈ N(μ, σ² / n) при большом n

μ и σ — среднее и стандартное отклонение исходной величины. Приближение тем точнее, чем больше n и чем ближе исходное распределение к симметричному.

Стандартная ошибка среднего: формула и пример

Стандартная ошибка среднего (SE) — это стандартное отклонение выборочного среднего, то есть типичная величина, на которую среднее по вашей выборке отличается от истинного. Её не нужно путать со стандартным отклонением данных. Стандартное отклонение описывает, насколько различаются пользователи. Стандартная ошибка — насколько неточно вы знаете их среднее.

Истинное σ обычно неизвестно, поэтому в формулу подставляют выборочное стандартное отклонение s. В учебной базе выручка на пользователя по всем 4 613 пользователям имеет среднее 6,64 и s = 15,53. Стандартная ошибка: 15,53 / √4613 ≈ 0,229. Отдельные пользователи отличаются от среднего на десятки, а само среднее известно с точностью около ±0,45 при 95% уверенности: примерно от 6,19 до 7,09.

Главное следствие формулы — корень в знаменателе. Точность растёт медленнее объёма данных: вдвое больше пользователей сужают интервал только в √2 ≈ 1,41 раза. Поэтому удвоение длительности теста редко спасает эксперимент, которому не хватило чувствительности в несколько раз.

Стандартная ошибка среднего
SE = σ / √n ≈ s / √n; 95%-интервал: x̄ ± 1,96 · SE

Для доли p стандартная ошибка равна √(p(1 − p) / n): доля — это среднее нулей и единиц.

Насколько скошены исходные данные

Чтобы демонстрация была честной, возьмём метрику, которая действительно далека от нормальной. Отдельная оплата в учебной базе для этого не годится: в таблице payments всего три цены — 19, 29 и 39, среднее 24,49, медиана 19, асимметрия 0,87. Хвост есть, но короткий.

Выручка на пользователя устроена жёстче. Это та метрика, которую сравнивают в тестах монетизации: сумма всех оплат пользователя, включая тех, кто не заплатил ничего. У 80,2% пользователей она равна нулю, медиана — 0, 90-й перцентиль — 29, 99-й — 78, максимум — 117. Среднее 6,64 лежит там, где нет ни одного реального пользователя. Коэффициент асимметрии — 2,83: у нормального распределения он равен нулю.

Результат запроса и та же сводка для отдельной оплаты
ПоказательВыручка на пользователяСумма одной оплаты
Наблюдений4 6131 251
Доля нулей80,2%—
Среднее6,6424,49
Медиана019
Стандартное отклонение15,536,89
Асимметрия2,830,87
Форма распределения выручки на пользователя
with revenue as (
  select u.user_id, coalesce(sum(p.amount), 0) as revenue
  from users u
  left join payments p on p.user_id = u.user_id
  group by u.user_id
)
select
  count(*)                                         as users,
  round(100.0 * count(*) filter (where revenue = 0) / count(*), 1) as zero_pct,
  round(avg(revenue), 2)                           as mean,
  median(revenue)                                  as median,
  quantile_cont(revenue, 0.9)                      as p90,
  quantile_cont(revenue, 0.99)                     as p99,
  max(revenue)                                     as max,
  round(stddev_samp(revenue), 2)                   as sd,
  round(skewness(revenue), 2)                      as skew
from revenue;

Демонстрация ЦПТ: выборки по 5, 30 и 200 пользователей

Распределение выручки полностью задаётся десятью значениями и числом пользователей с каждым из них — это та же таблица из 4 613 строк, только сжатая. Будем считать эту базу генеральной совокупностью с известным средним μ = 6,642 и σ = 15,530. Возьмём 100 000 случайных выборок по n пользователей, посчитаем в каждой среднее и 95%-интервал x̄ ± 1,96·s/√n, а затем проверим, насколько распределение средних похоже на то, что обещает теорема.

Первая проверка проходит на всех размерах: стандартное отклонение средних совпадает с σ/√n до третьего знака — 6,938 против 6,945 при n = 5, 2,834 против 2,835 при n = 30, 1,096 против 1,098 при n = 200. Формула стандартной ошибки верна для любого распределения с конечной дисперсией, нормальность для неё не нужна.

Вторая проверка — форма. Асимметрия средних падает с 2,83 у исходных данных до 1,26 при n = 5, 0,52 при n = 30 и 0,21 при n = 200. Она уменьшается примерно как асимметрия исходных данных, делённая на √n: 2,83 / √30 ≈ 0,52. Колокол появляется, но постепенно.

Третья проверка — самая практичная: как часто интервал накрывает истинное среднее. Должно быть 95%. При n = 5 выходит 66,0%: в трети выборок нет ни одного платящего, среднее и s равны нулю, и интервал схлопывается в точку. При n = 30 — 89,1%, при n = 200 — 94,0%.

Результат запуска: 100 000 выборок на каждый размер, зерно 42
Размер выборкиσ/√nSD среднихАсимметрия среднихВыборок без платящихИнтервал 95% накрыл μ
n = 56,9456,9381,2633,4%66,0%
n = 302,8352,8340,520,1%89,1%
n = 2001,0981,0960,210,0%94,0%
pythonСимуляция выборочных средних на распределении выручки из учебной базы
import numpy as np
from scipy import stats

# Выручка на пользователя в учебной базе: сумма → число пользователей
dist = {0: 3701, 19: 349, 29: 204, 38: 138, 39: 69,
        57: 27, 58: 77, 78: 26, 87: 15, 117: 7}
values = np.array(list(dist.keys()), dtype=float)
counts = np.array(list(dist.values()))
population = np.repeat(values, counts)          # 4 613 пользователей

mu = population.mean()
sigma = population.std()                         # по всей совокупности, ddof=0
print(f"N={population.size}  μ={mu:.3f}  σ={sigma:.3f}  "
      f"асимметрия={stats.skew(population):.2f}")

rng = np.random.default_rng(42)
for n in [5, 30, 200]:
    samples = rng.choice(population, size=(100_000, n), replace=True)
    means = samples.mean(axis=1)
    se = samples.std(axis=1, ddof=1) / np.sqrt(n)
    covered = np.abs(means - mu) <= 1.96 * se
    print(f"n={n:>3}  σ/√n={sigma / np.sqrt(n):.3f}  "
          f"SD средних={means.std():.3f}  "
          f"асимметрия средних={stats.skew(means):.2f}  "
          f"средних = 0: {np.mean(means == 0):.1%}  "
          f"95%-интервал накрыл μ: {covered.mean():.1%}")
    if n == 30:
        edges = np.arange(0, 20, 2)
        hist, _ = np.histogram(means, bins=edges)
        normal = np.diff(stats.norm.cdf(edges, mu, sigma / np.sqrt(n)))
        print("  интервал   выборки, %   нормальная кривая, %")
        for lo, hi, h, q in zip(edges[:-1], edges[1:], hist, normal):
            print(f"  {lo:>4.0f}–{hi:<4.0f} {100 * h / means.size:8.1f} {100 * q:12.1f}")

Как выглядит распределение средних при n = 30

Гистограмма ниже — средние 100 000 выборок по 30 пользователей, разложенные по интервалам шириной 2, рядом с долями, которые дала бы нормальная кривая с тем же центром и стандартной ошибкой 2,835. В середине совпадение хорошее: 25,4% против 23,5% и 26,4% против 27,4%.

Расхождение сидит в хвостах, и оно несимметричное. Слева выборок меньше, чем ждёт нормальная кривая: 3,5% против 4,1% в интервале 0–2. Справа больше: 0,9% против 0,4% в интервале 14–16 и 0,2% против почти нуля в интервале 16–18. Центр распределения уже нормальный, а правый хвост ещё помнит о китах. Доверительный интервал и p-value считаются как раз по хвостам, поэтому для них это расхождение важнее, чем для глаза.

Средняя выручка в 100 000 выборок по 30 пользователей: доля выборок в интервале, %

Учебная база SQL-курса, выручка на пользователя; симуляция numpy, зерно 42. Нормальная кривая — N(6,642; 2,835²).

Выборки по 30 пользователейНормальная кривая

Миф «n ≥ 30»: откуда он и почему 30 бывает мало

Правило «при n от 30 можно считать среднее нормальным» встречается почти в каждом учебнике. Это эмпирический ориентир, а не часть теоремы. Сама ЦПТ — предельное утверждение, в ней нет никакого конкретного порога. Тридцати наблюдений хватает для умеренно скошенных данных и не хватает для сильно скошенных.

Наша симуляция это показывает. Для выручки на пользователя с асимметрией 2,83 при n = 30 интервал 95% промахивается почти в 11% случаев вместо 5%. Причина не только в остаточной асимметрии среднего. В скошенных данных низкое среднее обычно приходит вместе с низким s: в выборке без крупных плательщиков и среднее маленькое, и разброс маленький. Интервал получается узким как раз тогда, когда среднее сильнее всего занижено.

Для отдельной оплаты с асимметрией 0,87 те же 30 наблюдений дают асимметрию среднего около 0,87 / √30 ≈ 0,16 — это уже почти симметрия. Одно и то же n в одной базе достаточно для одной метрики и недостаточно для другой.

Практический способ проверить свою метрику — сделать то же, что в коде выше: взять фактическое распределение, симулировать выборки нужного размера и посмотреть на покрытие интервала. Если под рукой нет времени на симуляцию, ориентируйтесь на асимметрию: чтобы асимметрия среднего опустилась до 0,2, нужно примерно n ≈ (асимметрия / 0,2)², для выручки из учебной базы это около 200 пользователей.

Почему A/B-тесты на средних работают благодаря ЦПТ

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

В учебной базе эксперимент onboarding_checklist даёт конверсию 30,30% в варианте с чек-листом и 20,04% в контроле. Разница 10,27 процентного пункта, стандартная ошибка 1,56, 95%-интервал — от 7,2 до 13,3 пункта. Ноль далеко за пределами интервала: эффект на конверсию есть. Конверсия здесь — среднее нулей и единиц по 1,5 тысячи пользователей в группе, для ЦПТ это комфортные условия.

С выручкой на пользователя в том же тесте картина другая: 6,34 против 7,06, разница −0,72, стандартная ошибка 0,57, интервал от −1,83 до 0,39. Ноль внутри, различие не доказано. При 1,5 тысячах пользователей в группе асимметрия среднего около 2,85 / √1527 ≈ 0,07, так что нормальное приближение здесь уже надёжно, несмотря на 80% нулей. Интервал широкий из-за разброса выручки, а не из-за формы распределения.

Стандартная ошибка разницы двух групп
SE(x̄₁ − x̄₂) = √(SE₁² + SE₂²); 95%-интервал: (x̄₁ − x̄₂) ± 1,96 · SE

Для долей: SE = √(p₁(1 − p₁)/n₁ + p₂(1 − p₂)/n₂).

Разница выручки на пользователя и её 95%-интервал через стандартные ошибки
with r as (
  select e.variant, e.user_id, coalesce(sum(p.amount), 0) as revenue
  from experiment_exposures e
  left join payments p on p.user_id = e.user_id
  group by e.variant, e.user_id
),
v as (
  select
    variant,
    count(*)                                    as n,
    avg(revenue)                                as arpu,
    stddev_samp(revenue) / sqrt(count(*))       as se
  from r
  group by variant
)
select
  round(t.arpu, 2)                                      as arpu_checklist,
  round(c.arpu, 2)                                      as arpu_control,
  round(t.arpu - c.arpu, 2)                             as diff,
  round(sqrt(t.se ^ 2 + c.se ^ 2), 2)                   as se_diff,
  round(t.arpu - c.arpu - 1.96 * sqrt(t.se ^ 2 + c.se ^ 2), 2) as ci_low,
  round(t.arpu - c.arpu + 1.96 * sqrt(t.se ^ 2 + c.se ^ 2), 2) as ci_high
from v t, v c
where t.variant = 'checklist' and c.variant = 'control';

Когда центральная предельная теорема подводит

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

Тяжёлые хвосты и киты. Если несколько пользователей приносят выручку, в сотни раз превышающую среднюю, стандартное отклонение огромно, и до нормальности среднего нужны десятки тысяч наблюдений. Хуже того, по выборке без китов разброс кажется маленьким, и интервал получается слишком узким. Для таких метрик помогают ограничение значений сверху по заранее выбранному перцентилю, логарифм, бутстреп или отдельный анализ крупных клиентов. Любое преобразование меняет вопрос, на который отвечает тест, и об этом нужно писать в выводах.

Маленькие выборки. На пяти пользователях, как показала симуляция, треть средних равна нулю, и интервал теряет смысл. Для малых групп используйте t-распределение вместо нормального, а для сильно скошенных данных — бутстреп или ранговые критерии, помня, что они проверяют другую гипотезу.

Зависимые наблюдения. В таблице events учебной базы 35 341 строка на 4 613 пользователей, в среднем 7,66 события на человека, максимум — 22. Если посчитать долю каких-то событий и взять n = 35 341, стандартная ошибка окажется заниженной: события одного пользователя похожи друг на друга, и независимых наблюдений гораздо меньше, чем строк. Рандомизация в тесте идёт по пользователям, поэтому и считать нужно по пользователям: сначала агрегат на пользователя, потом среднее и стандартная ошибка. Для метрик-отношений вроде «событий на сессию» используют дельта-метод или бутстреп по пользователям.

Чем ЦПТ отличается от закона больших чисел

Обе теоремы говорят о выборочном среднем, но отвечают на разные вопросы. Закон больших чисел обещает, что среднее сойдётся к истинному значению. Центральная предельная теорема описывает, как именно распределена ошибка на пути к пределу: какой она формы и какого размера при данном n. Без первой нельзя было бы доверять выборкам вообще, без второй нельзя было бы сказать, насколько им доверять.

Закон больших чиселЦентральная предельная теорема
ВопросКуда стремится среднее?Как распределена ошибка среднего?
ОтветК истинному среднему μПриблизительно нормально, со стандартной ошибкой σ/√n
Что даёт аналитикуУверенность, что на больших данных оценка близка к истинеДоверительные интервалы, p-value, расчёт размера выборки
УсловияНезависимость, конечное среднееНезависимость, конечная дисперсия, достаточно большое n

Что читать дальше

На ЦПТ опираются почти все инструменты сравнения групп. Эти материалы показывают, как применять её на практике: от z-оценки до расчёта размера выборки для теста.

Продолжить чтение
Вся библиотека
Продуктовая аналитика25 сентября 2026 г.12 мин
Ломаная линия, которая сильно скачет слева и постепенно ложится на горизонтальную прямую справа

Закон больших чисел простыми словами: формулировка и примеры

Закон больших чисел: почему среднее и доля стабилизируются с ростом выборки. Пример с монетой, накопленная конверсия A/B-теста в SQL, слабая и сильная форма, ошибка игрока и когда закон работает медленно.

Читать материал
Продуктовая аналитика2 сентября 2026 г.8 мин

Калькулятор значимости A/B-теста: как посчитать и как прочитать результат

Как посчитать статистическую значимость A/B-теста по двум конверсиям: какие числа нужны, что означает p-value и доверительный интервал разницы, и когда расчёт вообще не применим.

Читать материал