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

«Что такое переобучение модели?» — вопрос из категории Классическое ML, который задают на 35% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Как я диагностирую переобучение:

  • График обучения: Строю кривые обучения (learning curves), которые показывают метрики (например, accuracy или loss) на обучающей и валидационной выборках в зависимости от количества эпох или сложности модели.
  • Большой разрыв в метриках: Высокая точность на трейне (например, 99%) и значительно более низкая на валидации/тесте (например, 70%) — классический признак.

Методы борьбы, которые я применяю на практике:

  1. Регуляризация:
    from sklearn.linear_model import Ridge
    # L2-регуляризация в линейной модели
    model = Ridge(alpha=1.0)  # alpha — сила регуляризации
  2. Упрощение модели: Уменьшение глубины дерева, количества нейронов/слоев.
  3. Аугментация данных (для CV/NLP): Искусственное увеличение обучающей выборки.
  4. Dropout (для нейросетей): Случайное "выключение" нейронов во время обучения.
  5. Ансамблирование: Использование методов вроде бэггинга (Random Forest), которые по своей природе менее склонны к переобучению.

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

from sklearn.tree import DecisionTreeClassifier

# Модель, склонная к переобучению (неограниченная сложность)
overfit_tree = DecisionTreeClassifier()

# Модель с контролем сложности (менее склонна к переобучению)
generalizable_tree = DecisionTreeClassifier(
    max_depth=5,
    min_samples_leaf=10,
    max_features='sqrt'
)

Главная цель — найти баланс между смещением (bias) и дисперсией (variance) модели.