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. Смотрите все.
Связанные темы
- Bias-variance tradeoff простыми словами
- Cross-validation простыми словами (если есть)
- Precision / Recall / F1
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+ вопросами для собесов.