Дисперсия и стандартное отклонение: что это и как посчитать
Дисперсия — средний квадрат отклонения от среднего, стандартное отклонение — корень из неё. Формулы, пример на пяти числах, почему делят на n − 1, расчёт в SQL, Excel и Python, типичные ошибки.
Содержание статьи
В ежемесячном отчёте рядом со средним DAU за август стоит «σ = 64,8», и продакт спрашивает, много это или мало. Вы пересчитываете и видите: если убрать 30 августа, стандартное отклонение падает до 44,1. Данные за этот день обрываются в 12:59, и один неполный день раздул разброс почти в полтора раза. Чтобы ловить такие вещи, нужно понимать, что именно считают дисперсия и стандартное отклонение, из чего они складываются и на что реагируют сильнее всего.
Коротко
- Дисперсия — это средний квадрат отклонения значений от их среднего. Она измеряется в квадратных единицах: «пользователи в квадрате», «рубли в квадрате».
- Стандартное отклонение (оно же среднеквадратичное отклонение, σ или s) — это квадратный корень из дисперсии. Оно в тех же единицах, что и данные, поэтому его и показывают в отчётах.
- По выборке дисперсию делят на n − 1, а не на n. На пяти точках разница заметна, на тысяче — почти нет.
- Стандартное отклонение описывает разброс наблюдений. Точность среднего описывает другое число — стандартная ошибка.
- Один выброс способен раздуть стандартное отклонение в разы. Если в данных длинный хвост, рядом ставьте медиану и межквартильный размах.
Что такое дисперсия простыми словами
Среднее отвечает на вопрос «где центр». Дисперсия отвечает на следующий: насколько далеко от этого центра обычно лежат значения. Два магазина со средним чеком 2 000 ₽ могут жить совсем по-разному: у одного почти все чеки от 1 800 до 2 200 ₽, у другого половина по 500 ₽, а остальное — крупные заказы. Среднее одинаковое, дисперсия — нет.
Считается она так: от каждого значения отнимают среднее, получают отклонение, возводят его в квадрат и усредняют квадраты. Квадрат нужен по двум причинам. Без него отклонения вверх и вниз взаимно погасят друг друга: их сумма всегда равна нулю. И квадрат сильнее наказывает большие отклонения, чем маленькие, — это важное свойство, к нему мы вернёмся на выбросах.
Стандартное отклонение — это корень из дисперсии. Корень возвращает единицы измерения обратно: если DAU меряют в пользователях, то и стандартное отклонение DAU — в пользователях. Его можно положить рядом со средним и сравнить глазами.
Как посчитать дисперсию: пример на пяти числах
Возьмём регистрации за пять дней: 40, 70, 80, 100 и 110. Сумма — 400, среднее — 80 регистраций в день.
Дальше четыре шага. Отнимаем среднее от каждого дня. Возводим отклонения в квадрат. Складываем квадраты — получается 3 000. Делим на n − 1 = 4 и получаем выборочную дисперсию 750. Корень из 750 — это стандартное отклонение, 27,39 регистрации.
Проверьте себя на столбце отклонений: −40, −10, 0, 20, 30 в сумме дают ноль. Так будет всегда, какие бы числа вы ни взяли. Поэтому среднее отклонение без квадратов бесполезно — оно всегда нулевое.
Читается результат так: в обычный день регистраций примерно на 27 больше или меньше, чем 80. Это не граница и не гарантия, а типичный масштаб колебаний.
| День | Регистраций, x | Отклонение x − x̄ | Квадрат отклонения |
|---|---|---|---|
| 1 | 40 | −40 | 1 600 |
| 2 | 70 | −10 | 100 |
| 3 | 80 | 0 | 0 |
| 4 | 100 | 20 | 400 |
| 5 | 110 | 30 | 900 |
| Итого | среднее 80 | сумма 0 | сумма 3 000 |
| Дисперсия | 3 000 / 4 = 750 | ||
| Стандартное отклонение | √750 ≈ 27,39 |
Формулы дисперсии: генеральная и выборочная
Формул две, и отличаются они только знаменателем. Если у вас все значения, которые вообще существуют — например, выручка по всем 12 месяцам прошлого года, и вывод касается только этих месяцев, — делят на n. Это дисперсия генеральной совокупности, её обозначают σ².
Если данные — выборка, по которой вы хотите судить о процессе в целом, делят на n − 1. Это выборочная дисперсия s². В аналитике почти всё — выборка: пользователи этого месяца, участники теста, дни квартала. Поэтому по умолчанию берите n − 1, и именно так работают stddev в PostgreSQL, СТАНДОТКЛОН.В в Excel и std() в pandas.
В нашем примере генеральная дисперсия равна 3 000 / 5 = 600, стандартное отклонение — 24,49. Выборочная — 750 и 27,39. Дисперсии различаются на четверть, стандартные отклонения — на 12%: для пяти точек это существенно.
σ² = Σ(x − μ)² / n; s² = Σ(x − x̄)² / (n − 1); s = √s²μ — среднее всей совокупности, x̄ — среднее выборки. Знаменатель n − 1 называют поправкой Бесселя.
Почему в выборочной дисперсии делят на n − 1
Отклонения мы считаем от среднего самой выборки, а не от настоящего среднего процесса, которое неизвестно. Выборочное среднее по построению — то значение, при котором сумма квадратов отклонений от своих точек минимальна. От любого другого центра, включая настоящий, сумма квадратов была бы больше.
Значит, деление на n систематически занижает разброс. В среднем такая оценка даёт (n − 1) / n от настоящей дисперсии: на пяти точках — 80%, на двух — только половину. Деление на n − 1 возвращает недостающее, и в среднем по многим выборкам оценка получается без смещения.
Есть и второе объяснение, про степени свободы. Отклонения от выборочного среднего в сумме дают ноль, поэтому свободны только n − 1 из них: зная первые четыре отклонения из нашего примера, пятое вы вычислите сами. Одна степень свободы ушла на оценку среднего.
На больших данных спор теряет смысл. У 1 251 оплаты в учебной базе выборочная дисперсия суммы — 47,50, генеральная — 47,46, стандартные отклонения 6,892 и 6,889. Разница меньше десятой процента. Выбирать знаменатель нужно осознанно, но переживать из-за него стоит только на малых выборках.
Коэффициент вариации: много это или мало
Само по себе стандартное отклонение ничего не говорит о том, большой ли разброс. 44 пользователя — огромные колебания для сервиса с DAU 100 и незаметные для DAU 100 000. Чтобы сравнивать, делят стандартное отклонение на среднее. Это коэффициент вариации, CV.
На учебной базе это выглядит так. DAU за 1–29 августа: среднее 486,9, стандартное отклонение 44,1, CV около 9% — аудитория от дня к дню довольно стабильна. Сумма оплаты: среднее 24,49, стандартное отклонение 6,89, CV 28%. Пауза между двумя действиями пользователя: среднее 95,8 часа, стандартное отклонение 130,8 часа, CV 137%. Разброс больше самого среднего — первый признак длинного хвоста.
CV имеет смысл только для величин, у которых есть естественный ноль и нет отрицательных значений: деньги, количество, время. Для температуры в градусах или для прироста в процентах, который может быть и плюсом, и минусом, он даёт бессмыслицу.
CV = s / x̄Безразмерный: позволяет сравнить разброс метрик в разных единицах и разного масштаба.
Стандартное отклонение и стандартная ошибка — не одно и то же
Стандартное отклонение описывает, насколько различаются сами наблюдения: одни оплаты по 19, другие по 39. Стандартная ошибка описывает, насколько неточно посчитано среднее по этим наблюдениям. Первое — свойство процесса, второе — свойство вашей выборки.
Связаны они просто: стандартная ошибка равна стандартному отклонению, делённому на корень из n. У 1 251 оплаты s = 6,89, а стандартная ошибка среднего — 0,195. Поэтому средний чек 24,49 известен с точностью примерно ±0,38 при 95% доверии, хотя отдельные оплаты отличаются от него на 4,5–14,5.
Путаница здесь стоит дорого. Если построить «доверительный интервал» из стандартного отклонения, он окажется в √n раз шире, чем нужно, и любое изменение метрики будет выглядеть шумом. Если наоборот, стандартной ошибкой описать разброс клиентов, клиенты покажутся одинаковыми.
SE = s / √nБольше данных — точнее среднее. Разброс самих наблюдений от размера выборки не зависит.
Правило 68–95–99,7: когда на него можно опираться
Часто пишут, что в пределах одного стандартного отклонения от среднего лежит 68% данных, двух — 95%, трёх — 99,7%. Это свойство нормального распределения, а не любых данных. Для нормального распределения точные доли — 68,27%, 95,45% и 99,73%.
Проверим на учебной базе. Число событий на пользователя распределено почти симметрично: среднее 7,66, стандартное отклонение 3,55, и в пределах ±1σ лежит 64,0% пользователей, ±2σ — 96,4%, ±3σ — 99,8%. Правило работает неплохо.
С паузами между действиями всё иначе. Среднее 95,8 часа минус одно стандартное отклонение 130,8 даёт −35 часов: отрицательной паузы не бывает. В пределах ±1σ оказывается 88,2% интервалов вместо 68%, а за пределами ±3σ — 2,2% вместо 0,3%. Правило «всё дальше трёх сигм — аномалия» здесь пометило бы 690 обычных возвращений — пауз длиннее 488 часов, то есть примерно трёх недель.
Для любого распределения гарантировано только более слабое неравенство Чебышёва: в пределах k стандартных отклонений лежит не меньше 1 − 1/k² значений. Для двух сигм это 75%, а не 95%.
Учебная база SQL-курса, DuckDB. События на пользователя — 4 613 пользователей, паузы между действиями — 30 728 интервалов.
Почему выбросы так сильно влияют на стандартное отклонение
Вернёмся к пяти дням регистраций и заменим 110 на 410 — в пятый день прошла промоакция. Среднее выросло с 80 до 140, стандартное отклонение — с 27,39 до 152,48, в 5,6 раза. Медиана осталась 80. Одно значение, возведённое в квадрат, перевесило остальные четыре вместе.
Когда хвост тяжёлый или в данных возможен мусор, рядом со стандартным отклонением ставят устойчивые меры разброса. Медианное абсолютное отклонение (MAD) — медиана модулей отклонений от медианы: в обоих вариантах примера оно равно 20. Межквартильный размах — разница между 75-м и 25-м перцентилями, он тоже не заметил промоакции.
Выброс не обязательно редкое событие. Неполный последний день — тот же выброс, только технический. DAU за 1–29 августа имеет стандартное отклонение 44,1. Добавьте 30 августа, где данные обрываются в 12:59 и DAU равен 223, — и стандартное отклонение становится 64,8, а среднее падает с 486,9 до 478,1. Перед расчётом разброса по дням всегда проверяйте, закрыт ли последний день.
Ещё одна ловушка — тренд. За все 91 день DAU в учебной базе стандартное отклонение равно 147,4, но это не колебания: аудитория выросла с 32 до почти 600 человек в день. Стандартное отклонение ряда с трендом измеряет рост, а не нестабильность. Считайте его на коротком стабильном окне или на отклонениях от тренда.
with daily as (
select event_time::date as day, count(distinct user_id) as dau
from events
group by 1
)
select
count(*) filter (where day < '2026-08-30') as days_29,
round(avg(dau) filter (where day < '2026-08-30'), 1) as mean_29,
round(stddev_samp(dau) filter (where day < '2026-08-30'), 1) as sd_29,
count(*) as days_30,
round(avg(dau), 1) as mean_30,
round(stddev_samp(dau), 1) as sd_30
from daily
where day >= '2026-08-01';Как посчитать дисперсию и стандартное отклонение в SQL
В PostgreSQL, DuckDB и большинстве аналитических баз функций четыре: var_samp и var_pop для дисперсии, stddev_samp и stddev_pop для стандартного отклонения. Суффикс _samp делит на n − 1, _pop — на n. Короткие variance и stddev в PostgreSQL и DuckDB — синонимы выборочных версий. В ClickHouse те же функции называются varSamp, varPop, stddevSamp и stddevPop.
Все они агрегатные: работают с group by, игнорируют NULL, а для одной строки выборочная версия возвращает NULL — делить на n − 1 = 0 нельзя. Если разброс нужен по пользователям, а в таблице события, сначала соберите одну строку на пользователя в подзапросе и только потом агрегируйте.
Медианного абсолютного отклонения в стандартном SQL нет. В DuckDB есть функция mad(), в PostgreSQL его собирают из двух медиан через percentile_cont(0.5) within group (order by …).
select
round(avg(amount), 2) as mean_amount,
round(var_samp(amount), 2) as var_samp,
round(var_pop(amount), 2) as var_pop,
round(stddev_samp(amount), 3) as sd_samp,
round(stddev_pop(amount), 3) as sd_pop
from payments;Дисперсия и стандартное отклонение в Excel и Python
В Excel и Google Таблицах суффикс в названии функции подсказывает знаменатель: «.В» — выборка, делит на n − 1, «.Г» — генеральная совокупность, делит на n. Старые функции СТАНДОТКЛОН и ДИСП без суффикса считают по выборке и оставлены для совместимости.
В Python главное различие — между библиотеками. numpy.std и numpy.var по умолчанию делят на n (ddof=0), а методы std() и var() у pandas — на n − 1 (ddof=1). Один и тот же массив даёт два разных ответа, и на маленьких группах это заметно. Параметр ddof лучше указывать явно.
| Инструмент | Выборочная (n − 1) | Генеральная (n) |
|---|---|---|
| PostgreSQL, DuckDB | var_samp, stddev_samp, variance, stddev | var_pop, stddev_pop |
| ClickHouse | varSamp, stddevSamp | varPop, stddevPop |
| Excel (рус.) | ДИСП.В, СТАНДОТКЛОН.В | ДИСП.Г, СТАНДОТКЛОН.Г |
| Excel (англ.), Google Таблицы | VAR.S, STDEV.S | VAR.P, STDEV.P |
| numpy | np.std(x, ddof=1) | np.std(x) — по умолчанию |
| pandas | s.std() — по умолчанию | s.std(ddof=0) |
import numpy as np
import pandas as pd
x = [40, 70, 80, 100, 110]
np.std(x) # 24.49 — ddof=0, делит на n
np.std(x, ddof=1) # 27.39 — делит на n − 1
pd.Series(x).std() # 27.39 — в pandas по умолчанию ddof=1
np.var(x, ddof=1) # 750.0Типичные ошибки
Почти все ошибки со стандартным отклонением происходят не в формуле, а в том, какие данные в неё попали и как потом прочитали результат.
- Показывать дисперсию в отчёте. «Дисперсия DAU — 1 941 пользователь в квадрате» никто не прочтёт — показывайте стандартное отклонение.
- Сравнивать стандартные отклонения метрик разного масштаба. Для этого есть коэффициент вариации.
- Считать разброс по событиям, когда вопрос про пользователей. Сначала одна строка на единицу наблюдения, потом агрегат.
- Включать неполный последний день или период с трендом и называть результат «волатильностью».
- Путать стандартное отклонение со стандартной ошибкой и строить интервалы не из того числа.
- Применять правило трёх сигм к данным с длинным хвостом: деньгам, времени, числу покупок.
- Сравнивать numpy и pandas на одних данных и искать ошибку в коде, когда разница в
ddof.
Что читать дальше
Стандартное отклонение — вход для доверительных интервалов, расчёта размера выборки и сравнения групп. Если данные с длинным хвостом, дополняйте его перцентилями.
Материалы по теме
Статистика для аналитика с нуля: разброс, перцентили, форма данных и выборка
Что из статистики нужно в рабочий день: как читать разброс и стандартное отклонение, зачем p90 и p99, почему продуктовые данные почти никогда не нормальные и чем выборочная ошибка отличается от смещения.

Нулевая гипотеза простыми словами: что это и как её формулировать
Нулевая гипотеза (H0) — утверждение, что эффекта или разницы нет. Чем она отличается от альтернативной гипотезы H1, как формулировать H0 для A/B-теста и продуктовых вопросов, что значит «отвергнуть» и «не отвергнуть» H0 — с расчётом z-теста на учебной базе.

Корреляция простыми словами: что значит «коррелирует» и как читать r
Что такое корреляция и что значит «коррелирует»: коэффициент Пирсона от −1 до 1, r², Спирмен, выбросы, общий тренд и уровень агрегации. Как посчитать корреляцию в SQL, Excel и pandas — на примерах с учебной базы.