Overfitting простыми словами

Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.

Зачем это знать

Overfitting — главный враг ML-модели. Работаете с churn prediction, clustering клиентов, recommendation engine — если не учитываете overfitting, получите модель, которая идеально работает на train-данных, но бесполезна в production.

На собеседовании middle+ аналитика / data scientist вопрос про overfitting обязателен: «как распознать, как избежать, что такое bias-variance tradeoff». Без этих знаний за стол не сесть.

В статье:

  • Что такое overfitting на intuitive уровне
  • Как распознать (train vs test)
  • Главные причины
  • Способы избежать (regularization, cross-validation, больше данных)
  • Связь с bias-variance tradeoff

Короткое объяснение

Overfitting — модель слишком «запомнила» train-данные, включая шум, вместо того чтобы выявить реальные паттерны. На train — отличные метрики, на новых данных — провал.

Метафора: студент зазубрил ответы на конкретные вопросы из учебника, но не понял предмет. На стандартном тесте 100%. На новом вопросе — 0%.

Признаки

Train-test gap

  • Train accuracy: 98%
  • Test accuracy: 70%

Разрыв 28 п.п. — overfitting.

Если обе близки и высокие — нормально. Если обе низкие — underfitting.

Нестабильность

Модель дает разные предсказания для почти одинаковых inputs.

Слишком сложная структура

Decision tree с тысячей листьев на 1000 rows. Deep network с миллионами параметров на малых данных.

Причины

1. Малые данные + сложная модель

1000 rows, Random Forest с default параметрами. Слишком легко запомнить каждую точку.

2. Отсутствие регуляризации

L1, L2, dropout — инструменты для контроля сложности. Без них модель уходит в overfitting.

3. Data leakage

Target info попадает в features. Предсказания идеальные на train, провал на prod.

4. Много features

Сотни features на тысячу rows — overfitting гарантирован.

Как избежать

1. Больше данных

Самое надёжное. Больше данных → модели сложнее overfit.

2. Cross-validation

K-Fold CV — разбиваем train на K частей, обучаемся на K-1, валидируемся на 1. Повторяем K раз. Усреднённая ошибка — честная оценка.

3. Регуляризация

  • L1 (Lasso): штраф за большие веса, обнуляет ненужные features
  • L2 (Ridge): штраф за большие веса, не обнуляет

Hyperparameter alpha / lambda — подбирается через CV.

4. Ограничение complexity

  • Decision tree: max_depth, min_samples_leaf
  • Neural net: меньше слоёв
  • XGBoost: max_depth, min_child_weight

5. Early stopping

В gradient boosting / neural net — останавливаемся, когда test error начинает расти.

6. Dropout (для neural networks)

Случайно «выключаем» часть нейронов при обучении. Модель не полагается на конкретные веса.

7. Feature selection

Убираем ненужные features. Меньше features → меньше шума.

8. Ансамблевые методы

Random Forest, Gradient Boosting — усредняют много моделей → regularization.

Bias-variance tradeoff

Overfitting = высокий variance. Underfitting = высокий bias.

Total error = Bias² + Variance + Irreducible noise

Нужно балансировать. Слишком простая модель — bias. Слишком сложная — variance. Золото в середине.

Пример в Python

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# overfit версия
model_overfit = RandomForestClassifier(n_estimators=1000, max_depth=None)
model_overfit.fit(X_train, y_train)

print('Train:', accuracy_score(y_train, model_overfit.predict(X_train)))  # 0.99
print('Test:',  accuracy_score(y_test, model_overfit.predict(X_test)))   # 0.72

# регуляризованная
model_reg = RandomForestClassifier(n_estimators=100, max_depth=5, min_samples_leaf=10)
model_reg.fit(X_train, y_train)

print('Train:', accuracy_score(y_train, model_reg.predict(X_train)))  # 0.87
print('Test:',  accuracy_score(y_test, model_reg.predict(X_test)))   # 0.84

Во второй модели gap меньше — меньше overfitting.

На собесе

«Что такое overfitting?» Модель запомнила train, но не обобщает на новые данные.

«Как обнаружить?» Train-test gap. Большой разрыв accuracy.

«Как избежать?» Больше данных, регуляризация, CV, ограничение complexity.

«Random Forest vs Logistic Regression — какая чаще overfit?» RF, если не ограничить. LR проще, меньше риск.

Частые ошибки

1. Не делать train-test split

Обучали и тестировали на одном — 100% accuracy. Ложная уверенность.

2. Hyperparameter tuning на test

Подбирали параметры на test → переобучились на test. Нужен отдельный validation set.

3. Data leakage

Например, нормализовать X со всем dataset (включая test) → leak. Нормализация — только на train.

4. Сравнивать только accuracy

AUC, precision, recall, F1 — разные aspects. Смотрите все.

Связанные темы

FAQ

Underfitting vs overfitting?

Underfit — обе метрики низкие. Overfit — train высокая, test низкая.

Overfitting только в ML?

Не только. В любой модели (regression, econometrics) — риск.

Как узнать точный cutoff?

Learning curves (error vs training size). Validation curves (error vs hyperparameter).

Dropout помогает везде?

В neural networks — да. В классическом ML — не применяется.


Тренируйте ML и статистику — откройте тренажёр с 1500+ вопросами для собесов.