Стандартное отклонение и дисперсия простыми словами
Содержание:
- Зачем аналитику разброс данных
- Что такое дисперсия
- Что такое стандартное отклонение
- Почему нужны оба показателя
- Генеральная и выборочная дисперсия
- Правило 68-95-99.7 и нормальное распределение
- Коэффициент вариации
- Дисперсия, размер выборки и MDE
- VAR_SAMP и STDDEV_SAMP в SQL
- numpy и pandas: подвох с ddof
- Вопросы с собеседований
- Частые ошибки
- Связанные темы
- FAQ
Зачем аналитику разброс данных
Среднее арифметическое почти никогда не описывает данные целиком. Две команды могут показывать одинаковую среднюю конверсию, но в одной результаты стабильны от недели к неделе, а в другой скачут от провала до рекорда. Среднее у них совпадает, а вот поведение метрики — совершенно разное, и именно это различие чаще всего интересует аналитика на практике.
Чтобы описать, насколько сильно значения разбросаны вокруг среднего, и придуманы дисперсия и стандартное отклонение. Это две стороны одной идеи: дисперсия показывает разброс в «квадратных» единицах, а стандартное отклонение возвращает его обратно к привычному масштабу данных. Без них нельзя ни оценить значимость A/B теста, ни построить доверительный интервал, ни понять, считать ли конкретное наблюдение выбросом. Поэтому вопрос «что такое дисперсия и стандартное отклонение» — один из самых частых на собеседованиях по статистике для аналитиков.
Что такое дисперсия
Дисперсия (variance) — это мера разброса значений относительно среднего. Считается она словами так: берём каждое наблюдение, вычитаем из него среднее (получаем отклонение), возводим отклонение в квадрат, складываем все квадраты и делим на количество наблюдений. То есть дисперсия — это среднее квадратов отклонений от среднего арифметического.
Var(X) = Σ(xᵢ - x̄)² / NКвадраты нужны по двум причинам. Во-первых, отклонения влево и вправо от среднего имеют разные знаки и без возведения в квадрат просто погасили бы друг друга — их сумма всегда равна нулю. Во-вторых, квадрат сильнее штрафует крупные отклонения: промах на 10 единиц весит не вдвое, а вчетверо больше промаха на 5. Благодаря этому дисперсия чувствительна именно к большим выбросам.
Числовой пример. Пять кандидатов решили тестовое задание за 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 тестов. Дисперсия чаще остаётся промежуточной величиной внутри выкладок, а наружу выходит именно σ.
Почему нужны оба показателя
Логичный вопрос: если стандартное отклонение удобнее, зачем вообще держать дисперсию? Ответ в том, что у каждого показателя своя роль. Дисперсия удобна математически — она аддитивна. Дисперсия суммы независимых величин равна сумме их дисперсий, и на этом свойстве держатся вывод центральной предельной теоремы, расчёт дисперсии разности средних в A/B тесте и формулы размера выборки. Со стандартными отклонениями так складывать нельзя: корень из суммы не равен сумме корней.
Стандартное отклонение, наоборот, выигрывает в интерпретации. Оно в тех же единицах, что и данные, поэтому именно его показывают в отчётах, наносят на графики в виде «усов» и используют, чтобы объяснить разброс бизнесу. Грубо говоря, дисперсия — это рабочий язык формул, а стандартное отклонение — язык интерпретации. Поэтому в статистике живут оба: считаем через дисперсию, а рассказываем через стандартное отклонение.
Генеральная и выборочная дисперсия
Это различие спрашивают на собеседованиях чаще всего, потому что на нём легко споткнуться.
| Генеральная | Выборочная | |
|---|---|---|
| Делитель | N | N - 1 |
| Обозначение | σ² | s² |
| Когда | Есть все данные популяции | Есть только выборка |
Генеральная дисперсия описывает всю совокупность, когда у нас есть данные обо всех объектах без исключения. Выборочная оценивает дисперсию совокупности по части данных — по выборке. Формула почти та же, отличается только делитель:
s² = Σ(xᵢ - x̄)² / (N - 1)Для нашего примера: s² = 40 / 4 = 10, а s = √10 ≈ 3,16 минуты. Обратите внимание — выборочная оценка получилась больше генеральной (10 против 8), и это не случайность.
Почему N - 1 (поправка Бесселя)? Когда мы считаем дисперсию выборки, истинного среднего совокупности μ у нас нет — мы заменяем его на выборочное среднее x̄. А выборочное среднее по построению лежит ровно «в центре» выборки, поэтому отклонения от него систематически меньше, чем отклонения от настоящего μ. Если делить сумму квадратов на N, мы получим заниженную, смещённую оценку дисперсии. Деление на N - 1 раздувает результат ровно настолько, чтобы убрать это смещение, и даёт несмещённую оценку. С точки зрения степеней свободы: вычислив x̄ из тех же данных, мы «потратили» одну степень свободы, и независимых отклонений осталось не N, а N - 1.
На практике при большом N разница между делением на N и на N - 1 ничтожна: для выборки в 10 000 наблюдений поправка меняет результат на сотые доли процента. А вот в маленьких выборках она заметна, и использование N вместо N - 1 ощутимо занижает разброс. Поэтому правило простое: работаешь с выборкой — дели на N - 1.
Правило 68-95-99.7 и нормальное распределение
Стандартное отклонение становится по-настоящему наглядным, когда данные подчиняются нормальному закону. Для него работает так называемое правило трёх сигм: примерно 68,3% всех значений лежат в пределах одного стандартного отклонения от среднего (μ ± 1σ), около 95,4% — в пределах двух (μ ± 2σ), и почти все, 99,7%, — в пределах трёх (μ ± 3σ). Эти проценты не зависят от конкретных чисел — они одинаковы для любого нормального распределения, что и делает правило таким удобным.
Покажем на примере. Допустим, средний чек равен 2000 ₽, а стандартное отклонение — 300 ₽, и чеки распределены приблизительно нормально. Тогда около 95% покупок попадут в диапазон 2000 ± 600, то есть от 1400 до 2600 ₽. Чек в 3000 ₽ отстоит от среднего больше чем на три стандартных отклонения (3σ = 900, граница — 2900 ₽), а такие значения встречаются реже чем в 0,3% случаев — это кандидат в выбросы, который стоит проверить отдельно. Так стандартное отклонение превращается в практическую линейку: оно говорит, что считать обычным, а что — аномальным.
Коэффициент вариации
Стандартное отклонение хорошо описывает разброс в рамках одной метрики, но плохо подходит для сравнения метрик разного масштаба. Разброс времени на сайте в минутах и разброс выручки в рублях нельзя сравнивать «в лоб» — единицы разные. Для этого есть коэффициент вариации (CV) — отношение стандартного отклонения к среднему, обычно в процентах:
CV = σ / x̄ × 100%Коэффициент вариации безразмерный, поэтому им удобно сравнивать стабильность совершенно разных показателей. Возьмём наши же числа: у среднего чека CV = 300 / 2000 = 15%, а у времени решения теста CV = 2,83 / 14 ≈ 20%. Значит, время решения относительно своего среднего разбросано сильнее, чем чек, хотя в абсолютных единицах их вообще не сравнить. На практике CV используют, чтобы понять, какая метрика «шумнее»: чем выше коэффициент вариации, тем менее стабильна метрика и тем осторожнее нужно делать по ней выводы. Важная оговорка — у метрик со средним около нуля или с отрицательными значениями коэффициент вариации теряет смысл и им не пользуются.
Дисперсия, размер выборки и MDE
Главная причина, по которой аналитику нужно понимать разброс, — A/B тесты. Дисперсия метрики напрямую определяет, сколько данных потребуется, чтобы поймать эффект.
Упрощённо размер выборки на группу считается так:
n ≈ (z_α + z_β)² × 2σ² / δ²Здесь δ — это MDE (minimum detectable effect), минимальный эффект, который мы хотим уметь различить, а σ² — дисперсия метрики. Ключевой момент: дисперсия стоит в числителе, поэтому чем больше разброс метрики, тем больше наблюдений нужно набрать. Если дисперсия вырастет вдвое, размер выборки тоже удвоится; если мы захотим ловить вдвое меньший эффект (уменьшить δ в два раза), выборка вырастет уже вчетверо, потому что δ стоит в квадрате.
Отсюда практическое следствие, которое часто всплывает на собесах. Тесты на выручку требуют гигантских выборок именно из-за высокой дисперсии: у revenue огромный разброс — большинство пользователей платит мало, а редкие крупные платежи раздувают σ². Тесты же на конверсию (бинарную метрику 0/1) сходятся быстрее, потому что её дисперсия ограничена и обычно меньше. Поэтому, планируя эксперимент, аналитик сначала оценивает дисперсию метрики по историческим данным, а уже потом считает нужный объём трафика и длительность теста. Чтобы набить руку на таких задачах — про разброс, доверительные интервалы и размер выборки — удобно прорешать тренажёр по статистике с разбором решений.
VAR_SAMP и STDDEV_SAMP в SQL
В 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-варианты. Псевдонимы VARIANCE и STDDEV в PostgreSQL по историческим причинам ссылаются именно на выборочные версии.
numpy и pandas: подвох с ddof
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() и pd.Series.std() — на N - 1 (ddof=1, выборочная). На одних и тех же данных они дадут разные числа, и это классический источник расхождений в расчётах, который потом долго ищут глазами. Привычка проста: всегда указывайте ddof явно, не полагаясь на умолчания.
Вопросы с собеседований
«Что такое дисперсия и стандартное отклонение?»
Дисперсия — это среднее квадратов отклонений значений от среднего арифметического, мера разброса данных. Стандартное отклонение — корень из дисперсии, выраженный в тех же единицах, что и сами данные. На собеседовании важно добавить, зачем нужны оба: дисперсия удобна в формулах (она аддитивна), а стандартное отклонение — в интерпретации, потому что его можно прямо сравнивать со средним.
«Чем отличается генеральная дисперсия от выборочной?»
Генеральная делит сумму квадратов отклонений на N — размер всей совокупности, выборочная на N - 1. Поправка Бесселя (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 к конверсии (у бинарной метрики разброс меньше), убрать или ограничить выбросы (винзоризация, робастные метрики), стратифицировать рандомизацию по ключевым сегментам. Все они снижают σ² и тем самым уменьшают нужный размер выборки.
Частые ошибки
- Путать генеральную и выборочную дисперсию. На практике генеральная нужна крайне редко — только когда у вас на руках вся совокупность целиком. Работаете с выборкой (а это почти всегда) — делите на N - 1.
- Игнорировать дисперсию при анализе A/B тестов. Средняя конверсия выросла на 0,5%, но при большом разбросе это может быть чистый шум. Без оценки дисперсии нельзя судить о статистической значимости результата.
- Забывать про ddof в Python.
np.std()иpd.Series.std()дают разные числа на одних данных. Если не указать ddof явно, можно получить тихое расхождение в отчёте. - Интерпретировать дисперсию в исходных единицах. Дисперсия измеряется в квадратах единиц — «рубли в квадрате» осмыслить нельзя. Для интерпретации всегда используйте стандартное отклонение.
- Сравнивать разброс разных метрик по абсолютному σ. Минуты и рубли напрямую несравнимы. Чтобы сопоставить стабильность разномасштабных метрик, считайте коэффициент вариации.
Связанные темы
- Доверительный интервал простыми словами
- Нормальное распределение простыми словами
- Z-score: как считать и зачем
- Размер выборки для A/B теста
- CUPED: снижение дисперсии в A/B тесте
FAQ
Что такое дисперсия простыми словами?
Дисперсия показывает, насколько сильно значения разбросаны относительно среднего. Чем больше дисперсия — тем шире разброс. Считается как среднее квадратов отклонений каждого значения от среднего арифметического.
Чем стандартное отклонение лучше дисперсии?
Стандартное отклонение — это корень из дисперсии, и его главное преимущество в том, что оно выражено в тех же единицах, что и данные. Если данные в минутах, стандартное отклонение тоже в минутах, а дисперсия — в минутах в квадрате, и её сложно осмыслить.
Когда делить на N, а когда на N - 1?
На N — если у вас вся генеральная совокупность, то есть все существующие данные. На N - 1 — если работаете с выборкой и хотите оценить дисперсию совокупности по ней. В аналитике почти всегда используют N - 1, потому что почти всегда имеют дело с выборкой.
Что показывает коэффициент вариации?
Коэффициент вариации — это отношение стандартного отклонения к среднему, обычно в процентах. Он безразмерный, поэтому позволяет сравнивать разброс метрик разного масштаба: например, понять, что разброснее ведёт себя время на сайте или выручка. Чем выше коэффициент, тем менее стабильна метрика.
Зачем аналитику знать дисперсию?
Дисперсия определяет ширину доверительных интервалов, мощность A/B тестов и нужный размер выборки. Без понимания разброса данных невозможно корректно интерпретировать результаты экспериментов и статистических тестов. Больше задач — на странице примеры вопросов.