Дисперсия в ML: всё, что вы хотели знать — зачем нужна, формула и как с ней работать

Наводим порядок в хаосе данных

Дисперсия в ML: всё, что вы хотели знать — зачем нужна, формула и как с ней работать

Среднее арифметическое — математически верная величина. Но результат таких вычислений может ввести в заблуждение. Возьмите зарплаты в условной компании: директор получает 500 тысяч рублей, четыре разработчика — по 200, уборщица — 30. Средняя выходит 181 тысяча. Формально правда, по существу — фикция. Именно для таких случаев придумали дисперсию. Она показывает, насколько цифры в наборе разбегаются от среднего, и не даёт красивым показателям искажать реальную картину. 

В data science дисперсия прошивает всю работу с данными — от первого взгляда на таблицу до финальной настройки модели. Без базовой теории вероятности в машинном обучении сложно понять, почему алгоритмы ведут себя именно так. то рабочий инструмент, которым дата-сайентист пользуется каждый день — иногда даже не замечая.

Что такое дисперсия простыми словами и зачем нужна мера разброса

Дисперсия — это мера разброса данных вокруг их среднего значения. Определение звучит сухо, поэтому лучше один раз увидеть на конкретном примере.

Представьте две группы учеников, которые написали контрольную. Оценки следующие:

  • Группа А: 3, 4, 4, 4, 5. Средний балл — 4.
  • Группа Б: 2, 3, 5, 5, 5. Средний балл — тоже 4.

Средние одинаковые, но в группе Б результаты скачут от двойки до пятёрки, а в группе А почти все получили четыре. Среднее эту разницу не ловит. Дисперсия — считывает.

Чем выше дисперсия, тем сильнее данные разбросаны. Если дисперсия равна нулю — все значения одинаковы. Такое бывает редко и обычно означает, что данные либо искусственные, либо избыточные (например, столбец, состоящий из одного числа).

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

Как читать дисперсию на примере

Возьмём два числовых ряда по шесть элементов:

  • Ряд 1: 7, 5, 10, 6, 5, 15. Среднее арифметическое — 8.
  • Ряд 2: 8, 8, 8, 7, 9, 8. Среднее — тоже 8.

В ряду 1 значения прыгают от 5 до 15, в ряду 2 почти не шевелятся. Дисперсия для ряда 1 составит примерно 12,2, а для ряда 2 — около 0,33. Разница в 37 раз — при одинаковом среднем. Без дисперсии эту разницу просто не увидеть.

Успейте: скидка 15% до 29 мая

Если хотите разобраться в data science так, чтобы работать с любыми данными, — держите промокод Практикума на любой платный курс: по ссылке (можно просто нажать). Даёт скидку 15% при покупке, плюс дополнительно 5 мини-курсов и 5 книг стоимостью ~75 000 ₽. Но только до 29 мая — потом всё, промокод сгорит.

Формула дисперсии и пошаговый расчёт

Формула дисперсии выглядит так:

σ² = Σ (xᵢ — μ)² / N

Расшифровка:

  • σ² — дисперсия (сигма в квадрате);
  • Σ — сумма;
  • xᵢ — каждое значение в наборе;
  • μ — среднее арифметическое всех значений;
  • N — количество значений.

Логика простая: берём каждое значение, вычитаем из него среднее, возводим разницу в квадрат, всё это складываем и делим на количество элементов. Квадраты нужны, чтобы плюсы и минусы не схлопнулись в ноль — среднее отклонение без квадратов всегда равно нулю.

Разберём расчёт на конкретной выборке: 2, 4, 4, 6, 8.

  1. Среднее арифметическое: (2 + 4 + 4 + 6 + 8) / 5 = 4,8.
  2. Отклонения каждого значения от среднего:
    2 − 4,8 = −2,8;
    4 − 4,8 = −0,8;
    4 − 4,8 = −0,8;
    6 − 4,8 = 1,2;
    8 − 4,8 = 3,2.
  3. Квадраты отклонений:
    (−2,8)² = 7,84;
    (−0,8)² = 0,64;
    (−0,8)² = 0,64;
    1,2² = 1,44;
    3,2² = 10,24.
  4. Сумма квадратов: 7,84 + 0,64 + 0,64 + 1,44 + 10,24 = 20,8.
  5. Делим на количество элементов: 20,8 / 5 = 4,16.

Итог: дисперсия равна 4,16. Это значит, что в среднем квадрат отклонения значения от среднего арифметического (4,8) составляет 4,16. Сама по себе цифра не слишком наглядна — именно поэтому на практике чаще используют корень из дисперсии, стандартное отклонение. О нём чуть дальше.

Генеральная и выборочная дисперсия: когда делить на n, а когда на n−1

Предыдущий расчёт предполагал, что наши пять чисел — вся совокупность. Такую дисперсию называют генеральной и обозначают σ². Формула: делим на n.

Но в реальной работе дата-сайентист почти никогда не имеет всей совокупности. Данные — это выборка из генеральной совокупности. И здесь появляется нюанс.

Если посчитать дисперсию по выборке, поделив на n, оценка окажется заниженной. Почему? Потому что выборочное среднее подогнано под саму выборку — оно всегда сидит чуть ближе к точкам, чем истинное среднее генеральной совокупности. Формула с делением на n этот факт игнорирует.

Поправка Бесселя решает проблему: в знаменателе берут n−1 вместо n. Такую дисперсию называют выборочной (или исправленной) и обозначают s².

Формула выборочной дисперсии:

s² = Σ (xᵢ — x̄)² / (n − 1)

Правило простое: если перед вами все возможные данные (например, результаты ЕГЭ всех выпускников региона) — делите на n. Если данные — выборка (скажем, тысяча пользователей из десяти миллионов) — делите на n−1. При больших n разница между n и n−1 исчезает, но при малых выборках (меньше 30–50) поправка Бесселя ощутима.

Дисперсия и стандартное отклонение: что и когда использовать

У дисперсии есть неудобное свойство: она измеряется в квадратах исходных единиц. Если данные — рубли, то дисперсия — «квадратные рубли». Осмыслить такую величину трудно. Поэтому в арсенале дата-сайентиста есть стандартное отклонение — квадратный корень из дисперсии.

ПоказательЕдиница измеренияКогда использовать
Дисперсия σ²Квадрат единиц данныхФормулы ML, ANOVA, аналитические выводы
Стандартное отклонение σТе же единицы, что данныеИнтерпретация, визуализация, отчёты

Стандартное отклонение удобно для общения с аудиторией. Если средняя зарплата по выборке — 100 тысяч, а стандартное отклонение — 20 тысяч, это сразу читается: «большинство получают от 80 до 120». Дисперсия в этой ситуации дала бы непредставимые «квадратные рубли» — не самая наглядная цифра.

Но в формулах и алгоритмах дисперсия удобнее. Квадраты глаже ведут себя при дифференцировании, их проще складывать и раскладывать. В методе главных компонент (PCA) ищут направления, вдоль которых дисперсия данных максимальна. В ANOVA общую дисперсию раскладывают на межгрупповую и внутригрупповую. Везде, где нужна алгебра, работает дисперсия, а не стандартное отклонение.

Дисперсия в машинном обучении: bias-variance tradeoff

В машинном обучении слово «дисперсия» получает дополнительный смысл. Кроме статистической дисперсии данных, говорят о дисперсии модели — насколько сильно меняются её предсказания при обучении на разных подвыборках одних и тех же данных.

Ошибку любой предсказательной модели можно разложить на три составляющих:

Error = Bias² + Variance + Noise

Смещение (bias) показывает, насколько модель в принципе далека от истины — насколько сильные и, возможно, неверные допущения она делает о данных. Высокое смещение — модель слишком простая, она не улавливает закономерности. Это называют недообучением.

Дисперсия (variance) показывает, насколько чувствительна модель к конкретному набору обучающих данных. Высокая дисперсия — модель реагирует на случайный шум так, будто это важный сигнал. Это называют переобучением.

Шум (noise) — неустранимая ошибка, заложенная в самих данных.

Проблема в том, что смещение и дисперсия тянут в разные стороны. Упрощая модель, вы уменьшаете дисперсию, но увеличиваете смещение. Усложняя — снижаете смещение, но дисперсия растёт. Этот конфликт и есть bias-variance tradeoff — центральный компромисс в построении ML-моделей.

Как Random Forest снижает дисперсию

Одиночное дерево решений обладает высокой дисперсией: небольшое изменение обучающих данных может полностью перекроить его структуру. Random Forest решает эту проблему через два механизма: бэггинг и случайный выбор признаков.

Бэггинг (bootstrap aggregating) работает так: из исходного набора данных делают b бутстрэп-выборок (случайный отбор с возвращением), для каждой строят своё дерево, а потом усредняют предсказания всех деревьев. Если деревья независимы, дисперсия среднего падает пропорционально числу деревьев: Var(среднего) = Var(одного дерева) / n.

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

Параметры, управляющие этим процессом:

  • n_estimators — количество деревьев; чем больше, тем ниже дисперсия, но растёт время обучения;
  • max_depth — максимальная глубина дерева; ограничение снижает дисперсию, но увеличивает смещение;
  • max_features — доля признаков для каждого разбиения; уменьшение декоррелирует деревья и снижает дисперсию.

Практическое применение дисперсии в задачах data science

Дисперсия всплывает в повседневной работе дата-сайентиста постоянно — часто в ситуациях, где её не ждёшь. 

Пять типовых сценариев:

  • Обнаружение выбросов. Правило трёх сигм: если значение отстоит от среднего больше чем на 3σ, его считают выбросом (для нормально распределённых данных сюда попадает лишь 0,27% наблюдений). Без дисперсии это правило не построить.
  • Стандартизация признаков. Перед подачей в модель данные приводят к нулевому среднему и единичной дисперсии: вычитают среднее и делят на стандартное отклонение (Z-нормализация). Без дисперсии не получится.
  • Оценка стабильности метрик A/B-теста. Чем выше дисперсия метрики, тем больше данных нужно, чтобы зафиксировать эффект и проверить статистическую значимость. Инженеры по данным применяют методы вроде CUPED, чтобы эту дисперсию снизить и закончить тест быстрее.
  • ANOVA. Дисперсионный анализ сравнивает средние нескольких групп, раскладывая общую дисперсию на межгрупповую и внутригрупповую. Если межгрупповая дисперсия значимо больше внутригрупповой — группы различаются.
  • PCA. Метод главных компонент ищет направления, вдоль которых дисперсия данных максимальна. Первая компонента — направление с наибольшей объяснённой дисперсией, и так далее. Так сжимают данные без большой потери информации.

Расчёт дисперсии в Python: NumPy и pandas

Три строчки кода, которые покрывают 99% потребностей дата-сайентиста:

import numpy as np
import pandas as pd

x = np.array([2, 4, 4, 6, 8])

# Генеральная дисперсия (деление на n)
print(np.var(x))  # 4.16

# Выборочная дисперсия с поправкой Бесселя (деление на n-1)
print(np.var(x, ddof=1))  # 5.2

# pandas по умолчанию считает выборочную (ddof=1)
print(pd.Series(x).var())  # 5.2

NumPy с параметром ddof=0 (по умолчанию) делит на n — это генеральная дисперсия. С ddof=1 — выборочная с поправкой Бесселя. pandas, наоборот, по умолчанию использует ddof=1. Это частая ловушка: перенесли расчёт из pandas в NumPy, забыли про параметр — получили другие цифры.

Типичные ошибки при работе с дисперсией

Три ошибки, которые делают даже в production-коде.

Путают дисперсию и стандартное отклонение при интерпретации. Если стандартное отклонение зарплат равно 20 тысячам рублей, это полезная цифра: «плюс-минус 20 тысяч от среднего». Если в отчёте пишут «дисперсия зарплат — 400 млн», читатель ничего не поймёт. Последствие: неверные выводы из данных, особенно когда отчёт читают люди без технического бэкграунда. Правило: для общения с людьми — σ, для внутренней кухни алгоритмов — σ².

Забывают про поправку Бесселя. NumPy по умолчанию считает генеральную дисперсию — деление на n. Если у вас выборка, а не вся совокупность, оценка дисперсии окажется заниженной. На малых выборках (до 30 наблюдений) разница может составлять 10–15%. Последствие: слишком узкие доверительные интервалы, ложная уверенность в точности модели. Правило: всегда проверяйте параметр ddof.

Доверяют дисперсии при наличии выбросов. Дисперсия крайне чувствительна к экстремальным значениям — один выброс может завысить её в разы, потому что отклонение возводится в квадрат. Например, в выборке зарплат из 100 человек, где 99 получают около 50 тысяч, а один — 500 тысяч, дисперсия взлетит неадекватно. Последствие: модель, обученная на таких данных, будет гоняться за хвостами распределения. Правило: перед расчётом дисперсии чистите выбросы либо используйте робастные аналоги вроде IQR.

Вывод: зачем дата-сайентисту дисперсия

Дисперсия — это три инструмента в одном. На этапе знакомства с данными она показывает, насколько выборка неоднородна, и помогает отловить выбросы. На этапе моделирования — раскладывает ошибку на смещение и дисперсию, объясняя, почему модель недоучилась или переучилась. И наконец, на этапе подготовки данных дисперсия вшита в стандартизацию признаков, PCA и ANOVA — то есть почти во всё, что дата-сайентист делает перед тем, как скормить данные модели.

Без дисперсии data science не рассыплется — но без неё дата-сайентист работает вслепую, доверяя средним там, где они врут. А это уже не наука о данных, а гадание на кофейной гуще.

Вы не спрашивали, но мы отметим

Может ли дисперсия быть отрицательной?

Нет. Дисперсия — это среднее арифметическое квадратов отклонений. Квадрат любого числа неотрицателен, сумма и среднее неотрицательных чисел — тоже. Нулевая дисперсия бывает только когда все значения в наборе одинаковы.

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

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

Когда делить на n, а когда на n−1?

Если у вас генеральная совокупность (все возможные данные) — делите на n. Если выборка (часть данных) — делите на n−1. Это поправка Бесселя, она делает оценку дисперсии несмещённой.

Как посчитать дисперсию в Excel?

Функция =ДИСП.В(диапазон) — выборочная дисперсия (деление на n−1). =ДИСП.Г(диапазон) — генеральная (деление на n).

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

Модель переобучена: предсказания сильно меняются при незначительном изменении обучающих данных. Это значит, модель запомнила шум вместо того, чтобы выучить настоящие закономерности.

Советуем дополнительно почитать по теме: 

Бонус для читателей

Если вам интересно погрузиться в мир ИТ и при этом немного сэкономить, держите наш промокод на курсы Практикума. Он даст вам скидку при оплате, поможет с льготной ипотекой и даст безлимит на маркетплейсах. Ладно, окей, это просто скидка, без остального, но хорошая.

Вам может быть интересно
medium