← Назад к вопросам

Для чего нужна дисперсия?

1.0 Junior🔥 111 комментариев
#Статистика и A/B тестирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Дисперсия: Определение и Применение

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

Математическое определение

Дисперсия случайной величины X определяется как:

Var(X) = E[(X - μ)²] = E[X²] - (E[X])²

Где:

  • μ (mu) — математическое ожидание (среднее значение)
  • E[] — оператор математического ожидания
  • Возведение в квадрат гарантирует, что все отклонения положительны

Пример расчёта:

import numpy as np

# Данные
data = [2, 4, 6, 8, 10]

# Ручной расчёт
mean = np.mean(data)  # 6
deviations = [(x - mean)**2 for x in data]  # [16, 4, 0, 4, 16]
variance = np.mean(deviations)  # 8

# NumPy функция
variance = np.var(data)  # 8.0

# Несмещённая дисперсия выборки (делим на n-1)
variance_unbiased = np.var(data, ddof=1)  # 10.0

Основные применения дисперсии в Data Science

1. Оценка разброса данных

Дисперсия показывает устойчивость переменной:

  • Малая дисперсия → данные близко к среднему (стабильно)
  • Большая дисперсия → данные разбросаны (нестабильно)
# Сравнение двух наборов данных
temperature_stable = [20, 21, 20, 21, 20]  # var = 0.4
temperature_volatile = [10, 15, 20, 25, 30]  # var = 50

2. Анализ модели: Bias-Variance Tradeoff

В машинном обучении дисперсия — это один из двух источников ошибки модели:

Ошибка = Bias² + Variance + Irreducible Error
  • Высокая дисперсия → модель переобучена (overfitting)

    • Модель слишком чувствительна к колебаниям в данных обучения
    • Меняется значительно при изменении обучающего набора
    • Высокая ошибка на тестовых данных
  • Низкая дисперсия → модель стабильна

    • Предсказания не сильно зависят от деталей тренировочного набора
    • Хорошо обобщается на новые данные
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import DecisionTreeClassifier, RandomForestClassifier

# Дерево решений имеет высокую дисперсию (переобучается)
dt = DecisionTreeClassifier(max_depth=None)
dt_scores = cross_val_score(dt, X, y, cv=5)
print(f"Дерево - стд отклонение: {dt_scores.std():.3f}")  # Высокое

# Случайный лес имеет низкую дисперсию (усреднение)
rf = RandomForestClassifier(n_estimators=100)
rf_scores = cross_val_score(rf, X, y, cv=5)
print(f"Лес - стд отклонение: {rf_scores.std():.3f}")  # Низкое

3. Выбор модели и регуляризация

Дисперсия используется при выборе гиперпараметров:

from sklearn.linear_model import Ridge, Lasso
from sklearn.model_selection import learning_curve

# Ridge регрессия снижает дисперсию (добавляет bias через штраф L2)
ridge = Ridge(alpha=1.0)  # Большой alpha → меньше дисперсия

# Lasso регрессия также справляется с дисперсией через L1 штраф
lasso = Lasso(alpha=0.1)

4. Нормализация и стандартизация

Дисперсия показывает, нужна ли масштабизация признаков:

from sklearn.preprocessing import StandardScaler

# Признаки с разными дисперсиями
X = np.array([[1, 100],
              [2, 200],
              [3, 300]])

# Дисперсия: [1.0, 6666.67]
# После стандартизации: [1, 1] - одинаковые
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

5. PCA и анализ главных компонент

Принцип PCA основан на дисперсии:

from sklearn.decomposition import PCA

# PCA выбирает направления с максимальной дисперсией
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)

print(pca.explained_variance_ratio_)  # Доля дисперсии в каждом компоненте

6. Обнаружение аномалий

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

import pandas as pd

# Найти признаки с необычно высокой дисперсией
variances = X.var()
threshold = variances.mean() + 2 * variances.std()
suspicious_features = variances[variances > threshold]

Дисперсия выборки vs Дисперсия генеральной совокупности

# Дисперсия генеральной совокупности (делим на n)
population_var = np.var(data, ddof=0)

# Дисперсия выборки (делим на n-1) - несмещённая оценка
sample_var = np.var(data, ddof=1)

Делим на n-1 для выборки, потому что мы теряем одну степень свободы при расчёте среднего.

Связь с другими понятиями

  • Стандартное отклонение = √Дисперсия (в исходных единицах)
  • Коэффициент вариации = Стд. отклонение / Среднее (нормализованная дисперсия)
  • Ковариация — как две переменные варьируются вместе

Практические выводы

Дисперсия нужна для:

  1. Понимания данных — оценка их однородности
  2. Предотвращения переобучения — контроль variance в моделях
  3. Выбора признаков — удаление нулевой дисперсии
  4. Масштабирования данных — выравнивание влияния признаков
  5. Диагностики моделей — анализ bias-variance трейдофф