Дисперсия и стандартное отклонение простыми словами
Что такое дисперсия
Дисперсия (variance) — мера разброса значений относительно среднего. Формально: среднее квадратов отклонений каждого наблюдения от среднего арифметического.
Var(X) = Σ(xᵢ - x̄)² / NКвадраты нужны по двум причинам: отклонения влево и вправо от среднего не компенсируют друг друга, а большие отклонения штрафуются сильнее.
Числовой пример. Пять кандидатов решили тестовое задание за 10, 12, 14, 16, 18 минут.
- Среднее: (10 + 12 + 14 + 16 + 18) / 5 = 14
- Отклонения от среднего: -4, -2, 0, 2, 4
- Квадраты отклонений: 16, 4, 0, 4, 16
- Дисперсия (генеральная): (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² |
| Когда | Есть все данные популяции | Есть выборка |
Выборочная дисперсия:
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 тестов и размер необходимой выборки. Без понимания разброса данных невозможно корректно интерпретировать результаты экспериментов и статистических тестов. Больше задач — на странице примеры вопросов.