Перейти к основному содержимому

Смещение, дисперсия и переобучение

Разработчику

Модель может ошибаться по разным причинам: слишком простая и «не дотягивает» до закономерностей или слишком гибкая и запоминает шум. Язык для этого — смещение (bias) и дисперсия (variance). Ниже — объяснение через мишень и типичные кривые ошибки с привязкой к Melbourne.


Гиперпараметры и параметры

Параметры моделиГиперпараметры
ПримерыВеса линейной регрессии, пороги в деревеmax_depth, n_estimators, learning_rate
Как задаютсяАлгоритм обучает на данныхРазработчик выбирает до или во время CV
АналогияРезультат игрыРучки на «приборной панели» радио

Подбор гиперпараметров — на validation или k-fold, не на test.


Смещение и дисперсия — мишень

Представьте центр мишени как истинное значение y, а попадания — отдельные прогнозы модели.

ПаттернСмещениеДисперсияИнтерпретация
Куча в центреНизкоеНизкоеИдеал
Куча рядом с центром, но размазанаНизкоеВысокоеВ среднем верно, нестабильно
Куча далеко от центра, плотнаяВысокоеНизкоеСистематически мимо
Разброс по всей мишениВысокоеВысокоеХудший случай
  • Смещение — насколько прогнозы в среднем отклонены от правды (модель «не туда целится»).
  • Дисперсия — насколько прогнозы разбросаны при разных выборках (модель «дрожит»).

Цель — низкая ошибка на новых данных, а не обязательно минимум bias или variance по отдельности.


Компромисс bias–variance

По мере усложнения модели (слева направо на оси «сложность»):

  • сначала высокое смещение, низкая дисперсия → недообучение;
  • затем sweet spot — ошибка на train и test близка;
  • дальше дисперсия растёт, train error падает, test error растётпереобучение.

Недообучение (underfitting)

Модель слишком проста: линейная прямая там, где нужна кривая; дерево глубины 1 на сложных данных.

Признаки:

  • плохая метрика и на train, и на test;
  • мало данных или не те признаки;
  • train/test не перемешали — часть закономерностей «застряла» только в одной выборке.

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

Переобучение (overfitting)

Модель подстроилась под шум train.

Признаки:

  • отлично на train, заметно хуже на test;
  • в Melbourne: MAE train ≈ 28k AUD, MAE test ≈ 168k при max_depth=30.

Лечение: упростить (max_depth=5), регуляризация, dropout (нейросети), больше данных, ансамбли с усреднением (бэггинг, random forest).


Практические рычаги

СимптомЧто попробовать
Train и test оба плохиеСложнее модель, новые признаки, больше данных
Train хорош, test плохМеньше max_depth, больше min_samples_leaf, L1/L2, ранняя остановка
Нестабильные CV-фолдыБольше данных, проще модель, проверить leakage
k-NN шумитУвеличить k (усреднить больше соседей)
Одно дерево переобучаетRandom Forest или ограничить глубину

Линейная регрессия редко переобучает, но часто недообучает на нелинейных данных. Одно глубокое дерево — обратная крайность.

Регуляризация (L1/L2) штрафует сложность весов: искусственно поднимает «bias», чтобы снизить variance — классический tradeoff.


Связь с Melbourne и GridSearch

В 7.md в стартовой конфигурации намеренно ставят max_depth=30 — train MAE падает, test страдает. Смена на max_depth=5 и рост n_estimators сужает разрыв: типичная ручная настройка bias–variance.

GridSearchCV ищет комбинацию гиперпараметров по CV на train; финальный test — один замер после выбора.

Один рычаг за раз

Меняйте один гиперпараметр и смотрите train и test (или CV). Так видно, растёт variance или падает bias.


Связанные материалы


См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").