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

Переобучение и недообучение: практическое руководство по диагностике моделей

Подробный разбор переобучения и недообучения в машинном обучении: как распознавать каждую проблему, почему она возникает и как исправлять её через баланс смещения и разброса.
Обновлено 12 июн. 2026 г.  · 12 мин читать

Знаете ли вы, почему ваша модель показывает 99% точности на обучающей выборке, но в продакшене не может предсказать ничего правильно?

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

Эти две проблемы — переобучение и недообучение. Прежде чем исправлять, нужно понять, с какой из них вы столкнулись.

В этой статье я покажу, как распознавать переобучение и недообучение, почему они возникают и какие практические шаги помогут найти баланс.

Что такое недообучение?

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

Представьте, что вы пытаетесь предсказывать цены на жильё по одному правилу: «каждый дом стоит $300 000». Оно почти везде будет неверным. Такое правило не видит района, площади, количества спален, наличия гаража или года постройки. У модели просто недостаточно гибкости, чтобы уловить закономерность.

Недообучение можно распознать всегда одинаково: низкая точность на обучении и низкая точность на тесте. Оба показателя плохие, и ключ в том, что они плохие вместе.

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

Пример недообучения

Пример недообучения

Что такое переобучение?

Переобучение — противоположная проблема. Модель слишком сложна.

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

Хорошая новость в том, что переобучение легко заметить: точность на обучении отличная, а на тесте — ужасная.

Представьте студента, который выучил ответы наизусть, но не понял материал. На пробном тесте он набирает высокие баллы, а на реальном, скорее всего, провалится.

Пример переобучения

Пример переобучения

Переобучение vs недообучение: ключевые различия

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

Во время обучения они проявляются по-разному:

  • Недообучение — это ровно посредственная работа по всем метрикам: модель ни из чего толком не учится
  • Переобучение — это разрыв: метрики на обучении растут, а на тесте стоят на месте или ухудшаются со временем

Причины тоже зеркальны. Недообучение — от недостатка: простые модели и нехватка признаков. Переобучение — от избытка: слишком сложные модели и слишком много признаков.

Коротко подытожим:

Сравнение недообучения и переобучения

Сравнение недообучения и переобучения

Как распознать переобучение и недообучение

Знать теорию — одно, а заметить это в собственной модели — другое.

Проще всего сравнить ошибку на обучении и тесте и посмотреть кривые обучения.

Ошибка на обучении vs на тесте

Быстрый чек: разделите данные на обучающую и тестовую выборки, обучите модель и посмотрите ошибку на каждой.

Для недообучения обе ошибки будут высокими. Модель плохо выучила обучение и не станет лучше на невиденных данных. Плохой результат с обеих сторон.

Для переобучения ошибка на обучении очень низкая, а на тесте остаётся высокой. Модель запомнила обучение, но это знание не переносится.

Визуализация ошибки на обучении и тесте

Визуализация ошибки на обучении и тесте

Важно проанализировать разрыв между показателями. Малый разрыв при высоких ошибках указывает на недообучение. Большой разрыв при низкой ошибке на обучении и высокой на тесте — на переобучение. Малый разрыв и низкие ошибки на обеих — это цель: модель выучила реальное представление данных.

Кривые обучения

Кривые обучения показывают ошибку на обучении и валидации в зависимости от размера обучающей выборки или числа итераций. Они отражают, как модель учится.

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

Кривые недообученной модели

Кривые недообученной модели

В переобученной модели кривая обучения стремится к нулю, а валидационная остаётся высокой. По мере обучения разрыв растёт. Так переобучение выглядит на графике.

Кривые переобученной модели

Кривые переобученной модели

Здоровая модель показывает, как обе кривые снижаются и сходятся при низкой ошибке с небольшим разрывом.

Почему возникают переобучение и недообучение

Когда вы научились их распознавать, следующий вопрос — почему они появляются. Обе проблемы возникают из-за несоответствия между моделью и задачей, но в противоположных направлениях.

Причины недообучения

Недообучение почти всегда сводится к одному из трёх факторов.

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

Причины переобучения

Переобучение появляется, когда вы даёте модели больше свободы, чем нужно данным.

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

Компромисс между смещением и разбросом

Компромисс смещение–разброс объясняет, почему качество модели — это поиск «золотой середины», где она хорошо обобщает на невиденных данных, не чрезмерно упрощая задачу и не подгоняя обучение.

Высокое смещение

Смещение — это ошибка, возникающая из-за допущений модели о данных. Модель с высоким смещением делает сильные, упрощающие допущения. Она не может отразить реальную сложность происходящего в данных.

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

Если обучить модель с высоким смещением 100 раз на разных сэмплах, все 100 версий будут допускать похожие ошибки. Их предсказания группируются вокруг неверного ответа.

Высокий разброс

Разброс — это ошибка из-за чрезмерной чувствительности модели к конкретным обучающим данным. Модель с высоким разбросом подхватывает каждую мелкую «закономерность», чаще всего шум.

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

Если обучить модель с высоким разбросом 100 раз на разных сэмплах, вы получите 100 очень разных моделей. Их предсказания «разбросаны» даже для одного и того же входа.

Компромисс

Полностью устранить ни смещение, ни разброс невозможно — можно лишь смещать баланс между ними.

Уменьшаете смещение, усложняя модель — растёт разброс. Уменьшаете разброс, упрощая — растёт смещение. Цель — найти середину, где суммарная ошибка минимальна.

Пример компромисса смещение–разброс

Пример компромисса смещение–разброс

Как исправить недообучение

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

  • Увеличить сложность модели: перейти к более гибкой модели. От линейной регрессии — к полиномиальной, от неглубокого дерева — к более глубокому.
  • Добавить признаки: добавить новые входы, которые действительно полезны. Создать взаимодействия, полиномиальные признаки или доменно-специфичные признаки, к которым у модели не было доступа.
  • Дольше обучать: возможно, модели не хватило времени для сходимости. Дайте больше эпох или измените расписание скорости обучения.
  • Снизить регуляризацию: регуляризация упрощает модель — это противоположно потребностям при недообучении. Уменьшите силу регуляризации или временно уберите её, чтобы дать модели больше свободы.

Пара хороших признаков часто влияет сильнее, чем смена архитектуры. Начните с этого, прежде чем менять саму модель.

Как исправить переобучение

Исправление переобучения требует противоположного подхода. Нужно сдержать модель, чтобы она перестала запоминать обучение.

  • Собрать больше данных: на большом наборе данных модели труднее всё запомнить. Больше примеров заставляют искать закономерности, устойчивые на всём наборе, а не на горстке строк.
  • Применить регуляризацию: L1 и L2-регуляризация добавляют штраф за большие веса, не позволяя модели слишком полагаться на отдельные признаки. Это один из самых надёжных способов.
  • Снизить сложность модели: если модель велика для данных, уменьшите её: меньше параметров, более мелкие деревья или компактные сети.
  • Использовать кросс-валидацию: Кросс-валидация даёт более честную оценку качества на невиденных данных. Вы получаете больше разбиений обучение–тест из одного датасета.
  • Применить Dropout для нейросетей: Dropout случайно отключает часть нейронов во время обучения. Это заставляет сеть учить избыточные представления и снижает зависимость от отдельных нейронов.
  • Раннее прекращение обучения: отслеживайте валидационную ошибку и останавливайте обучение, когда она начинает расти, даже если ошибка на обучении всё ещё снижается. Это называется early stopping и внедряется проще всего.

Регуляризация и ранняя остановка — обычно первые средства, к которым стоит прибегнуть. Они ничего не стоят и почти всегда помогают.

Переобучение и недообучение в разных моделях

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

Линейные модели

  • Недообучение: линейные модели предполагают связь по прямой. Когда реальная зависимость изгибается, модель не может её отследить, сколько бы данных вы ни добавили.
  • Переобучение: при большом числе полиномиальных или интеракционных членов даже линейная регрессия может подогнать шум. Методы регуляризации, такие как Ridge и Lasso, в основном для этого и созданы.

Решающие деревья

  • Недообучение: неглубокое дерево делает всего несколько разбиений. С двумя-тремя решениями оно не может выразить закономерности, требующие большей тонкости.
  • Переобучение: глубокие деревья склонны к переобучению. Если делить до тех пор, пока в каждом листе не останется один обучающий пример, на обучении будет идеальная точность, а на тесте — плохая. Поэтому и существуют параметры max_depth, min_samples_split и методы обрезки (pruning).

Нейронные сети

  • Недообучение: слишком маленькие для задачи сети будут недообучаться. Также — при слишком ранней остановке обучения или когда оптимизатор застрял в неоптимальном решении.
  • Переобучение: чаще встречается в дип-обучении. Сеть с миллионами параметров способна запомнить даже большие датасеты при достаточном числе эпох. Для предотвращения есть Dropout, weight decay, аугментация данных и ранняя остановка.

Дополнительные примеры переобучения и недообучения

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

Полиномиальная регрессия

Шумная синусоида — хороший тест. Если подбирать полиномы разных степеней, поведение модели становится наглядным.

import numpy as np

# Data
np.random.seed(7)
X = np.linspace(0, 1, 30)
y_true = np.sin(2 * np.pi * X)
y = y_true + np.random.normal(0, 0.2, X.shape)

# Fit polynomials of three degrees
X_smooth = np.linspace(0, 1, 300)
degrees = [1, 3, 15]

for degree in degrees:
    coefs = np.polyfit(X, y, deg=degree)
    y_pred = np.polyval(coefs, X_smooth)

Пример полиномиальной регрессии

Пример полиномиальной регрессии

Степень 1 — прямая линия, которая недообучается: она вовсе не следует кривой. Степень 3 отражает реальную форму: часть шума поглощается, но к истине остаётся близко. Степень 15 — переобучение: кривая «проходит» через каждую обучающую точку и даёт огромные колебания между ними.

Решающие деревья с разной глубиной

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

import numpy as np
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# Data
np.random.seed(11)
X = np.linspace(0, 10, 250).reshape(-1, 1)
y = np.sin(X).ravel() + np.random.normal(0, 0.3, 250)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=0
)

depths = range(1, 21)
train_errors = []
test_errors = []

for depth in depths:
    tree = DecisionTreeRegressor(max_depth=depth, random_state=0)
    tree.fit(X_train, y_train)
    train_errors.append(mean_squared_error(y_train, tree.predict(X_train)))
    test_errors.append(mean_squared_error(y_test, tree.predict(X_test)))

Пример с деревом решений

Пример с деревом решений

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

Распространённые ошибки при диагностике качества модели

Даже выбрав правильную метрику, легко сделать неверные выводы. Вот чего не стоит делать при оценке качества модели:

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

Проверьте все четыре пункта, прежде чем останавливаться на модели. Большинство продакшен‑сбоев связано с одним или несколькими из них.

Заключение

Недообучение и переобучение — два способа, которыми модель не умеет обобщать. Одна остаётся слишком простой, чтобы выучить закономерность. Другая пытается выучить каждую точку вашего набора.

Цель обучения — оказаться между ними, где смещение и разброс сбалансированы, а суммарная ошибка минимальна.

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

Хотите изучить продвинутые концепции Data Science и подготовиться к рынку труда в 2026 году? Запишитесь на наш Machine Learning Engineer трек — от основ к MLOps.

FAQs

В чём разница между переобучением и недообучением?

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

Как понять, что модель переобучается или недообучается?

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

Что такое компромисс смещение–разброс?

Смещение — это ошибка из-за чрезмерной простоты модели, а разброс — из-за её чувствительности к обучающим данным. Снижение одного обычно повышает другое, поэтому цель — найти баланс, при котором суммарная ошибка минимальна. Модели с лучшим балансом лучше всего обобщают на новые данные.

Исправит ли сбор большего объёма данных переобучение?

Обычно помогает, но это не гарантия. Больше данных усложняет запоминание, поэтому модель вынуждена искать закономерности, устойчивые на всём наборе. Но если модель слишком сложна для задачи или признаки в основном шумовые, одного увеличения данных недостаточно. В таких случаях лучше работают регуляризация и упрощение модели.

Можно ли использовать раннюю остановку, чтобы предотвратить переобучение в нейросетях?

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

Темы

Учитесь с DataCamp

Course

Feature Engineering for Machine Learning in Python

4 ч
38.8K
Create new features to improve the performance of your Machine Learning models.
ПодробнееRight Arrow
Начать курс
Смотрите большеRight Arrow