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

Что такое дисперсия

Дисперсия (variance) — мера разброса значений относительно среднего. Формально: среднее квадратов отклонений каждого наблюдения от среднего арифметического.

Var(X) = Σ(xᵢ - x̄)² / N

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

Числовой пример. Пять кандидатов решили тестовое задание за 10, 12, 14, 16, 18 минут.

  1. Среднее: (10 + 12 + 14 + 16 + 18) / 5 = 14
  2. Отклонения от среднего: -4, -2, 0, 2, 4
  3. Квадраты отклонений: 16, 4, 0, 4, 16
  4. Дисперсия (генеральная): (16 + 4 + 0 + 4 + 16) / 5 = 8

Дисперсия равна 8. Единица измерения — минуты в квадрате. Это неудобно для интерпретации, и тут на помощь приходит стандартное отклонение.

Что такое стандартное отклонение

Стандартное отклонение (standard deviation, std) — корень из дисперсии:

σ = √Var(X)

Для примера выше: σ = √8 ≈ 2,83 минуты. Теперь единицы совпадают с данными — можно сказать: «время решения отклоняется от среднего примерно на 2,8 минуты».

Стандартное отклонение — основная мера разброса в аналитике. Именно σ стоит в формулах доверительных интервалов, z-score и расчёта мощности A/B тестов.

Генеральная vs выборочная дисперсия

Ключевое различие, которое спрашивают на собеседованиях.

Генеральная Выборочная
Делитель N N - 1
Обозначение σ²
Когда Есть все данные популяции Есть выборка

Выборочная дисперсия:

s² = Σ(xᵢ - x̄)² / (N - 1)

Для нашего примера: s² = 40 / 4 = 10, s = √10 ≈ 3,16 минуты.

Почему N - 1 (поправка Бесселя)? Выборочное среднее x̄ ближе к данным выборки, чем истинное среднее μ. Из-за этого сумма квадратов отклонений от x̄ систематически занижена. Деление на N - 1 вместо N компенсирует это смещение и даёт несмещённую оценку дисперсии. Формально: при вычислении x̄ из выборки мы «потратили» одну степень свободы — осталось N - 1.

На практике при большом N разница между N и N - 1 мизерная. Но в малых выборках она заметна, и использование N вместо N - 1 занижает дисперсию.

Правило 68-95-99.7

Если данные распределены по нормальному закону, стандартное отклонение даёт наглядную интерпретацию:

  • 68.3% значений лежат в пределах μ ± 1σ
  • 95.4% — в пределах μ ± 2σ
  • 99.7% — в пределах μ ± 3σ

Пример: средний чек 2000 ₽, σ = 300 ₽. Если чеки распределены нормально, 95% из них лежат в диапазоне 1400–2600 ₽. Чек в 3000 ₽ — это более 3σ от среднего, потенциальный выброс.

Зачем дисперсия аналитику

Мощность A/B теста. Формула минимального размера выборки содержит σ² в числителе. Чем больше разброс метрики, тем больше нужно наблюдений, чтобы поймать эффект. Высокая дисперсия revenue — причина, почему A/B тесты на выручку требуют огромных выборок.

Ширина доверительного интервала. CI = x̄ ± z × (σ / √n). Стандартное отклонение напрямую определяет ширину доверительного интервала. Больше σ — шире интервал — менее точная оценка.

Сравнение распределений. Среднее без дисперсии — половина картины. Два датасета со средним 100, но σ = 5 и σ = 50 — совершенно разные ситуации.

SQL: VAR_SAMP и STDDEV_SAMP

В PostgreSQL есть встроенные агрегатные функции:

SELECT
    topic,
    AVG(score)              AS avg_score,
    VAR_SAMP(score)         AS variance,      -- выборочная дисперсия (N-1)
    STDDEV_SAMP(score)      AS std_dev,        -- выборочное стд. отклонение
    VAR_POP(score)          AS var_pop,        -- генеральная дисперсия (N)
    STDDEV_POP(score)       AS std_pop         -- генеральное стд. отклонение
FROM training_events
GROUP BY topic;

VAR_SAMP и STDDEV_SAMP делят на N - 1, VAR_POP и STDDEV_POP — на N. В аналитике почти всегда работаем с выборками, поэтому по умолчанию используйте _SAMP-варианты.

Python: numpy и pandas

import numpy as np
import pandas as pd

data = [10, 12, 14, 16, 18]

# numpy: ddof=0 по умолчанию (генеральная)
print(np.var(data))          # 8.0
print(np.std(data))          # 2.83

# выборочная — укажите ddof=1
print(np.var(data, ddof=1))  # 10.0
print(np.std(data, ddof=1))  # 3.16

# pandas: ddof=1 по умолчанию (выборочная)
s = pd.Series(data)
print(s.var())               # 10.0
print(s.std())               # 3.16

Главный подвох: numpy и pandas используют разные значения ddof по умолчанию. np.std() делит на N (ddof=0), а df.std() — на N - 1 (ddof=1). Забыть про это — частая причина расхождений в расчётах. Всегда явно указывайте ddof.

Типичные ошибки

  • Путать генеральную и выборочную дисперсию. На практике генеральная нужна крайне редко. Если вы работаете с выборкой — делите на N - 1.
  • Игнорировать дисперсию при анализе A/B тестов. Средняя конверсия выросла на 0,5%, но при высокой дисперсии это может быть шум. Без оценки разброса нельзя судить о статистической значимости.
  • Забывать про ddof в Python. np.std() и pd.Series.std() дают разные результаты на одних и тех же данных.
  • Интерпретировать дисперсию в исходных единицах. Дисперсия измеряется в квадратах единиц. Для интерпретации используйте стандартное отклонение.

Вопросы с собеседований

«Что такое дисперсия и стандартное отклонение?»

Дисперсия — среднее квадратов отклонений от среднего, мера разброса данных. Стандартное отклонение — корень из дисперсии, выражается в тех же единицах, что и данные. σ удобнее для интерпретации: «значения отклоняются от среднего в среднем на столько-то единиц».

«Чем отличается генеральная дисперсия от выборочной?»

Генеральная делит сумму квадратов отклонений на N (размер популяции), выборочная — на N - 1. Поправка Бесселя (N - 1) компенсирует занижение дисперсии из-за того, что выборочное среднее ближе к данным выборки, чем истинное среднее генеральной совокупности.

«Как дисперсия влияет на A/B тесты?»

Дисперсия метрики определяет мощность теста и необходимый размер выборки. Формула: n = (z_α + z_β)² × 2σ² / δ², где δ — минимальный детектируемый эффект. Чем выше σ², тем больше нужно наблюдений. Поэтому тесты на revenue (высокая дисперсия) требуют больше трафика, чем тесты на конверсию.

«Почему np.std() и pd.Series.std() дают разные результаты?»

Разные значения ddof по умолчанию. NumPy использует ddof=0 (генеральная, делит на N), pandas — ddof=1 (выборочная, делит на N - 1). Для консистентности всегда явно передавайте параметр ddof.

«Как уменьшить дисперсию метрики в A/B тесте?»

Несколько способов: использовать CUPED (ковариатная коррекция на пре-экспериментальные данные), перейти от revenue к конверсии (бинарная метрика с меньшим разбросом), удалить выбросы или использовать робастные метрики (винзоризация, медиана), увеличить длительность эксперимента, стратифицировать рандомизацию.


Потренируйтесь решать задачи на дисперсию и стандартное отклонение — откройте тренажёр для подготовки к собеседованиям аналитиков.

FAQ

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

Дисперсия показывает, насколько сильно значения разбросаны относительно среднего. Чем больше дисперсия — тем больше разброс. Вычисляется как среднее квадратов отклонений от среднего арифметического.

Чем стандартное отклонение лучше дисперсии?

Стандартное отклонение — это корень из дисперсии. Его преимущество в том, что оно выражено в тех же единицах, что и данные. Если данные в минутах, стандартное отклонение тоже в минутах, а дисперсия — в минутах².

Когда делить на N, а когда на N - 1?

На N — если у вас вся генеральная совокупность (все данные, которые существуют). На N - 1 — если работаете с выборкой и хотите оценить дисперсию генеральной совокупности. В аналитике почти всегда используют N - 1, потому что работают с выборками.

Зачем аналитику знать дисперсию?

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