Overfitting простыми словами
events_web(user_id, event_name, created_at) и events_app(user_id, event_name, created_at). Нужно получить общий поток событий для дальнейшей агрегации. Что использовать?Зачем это знать
Overfitting — главный враг ML-модели. Работаете с прогнозом оттока, кластеризацией клиентов, рекомендательной системой — если не учитываете overfitting, получите модель, которая идеально работает на train, но бесполезна в проде.
На собеседовании middle+ аналитика или data scientist вопрос про overfitting обязателен: «как распознать, как избежать, что такое bias-variance tradeoff». Без этих знаний за стол не сесть.
В статье:
- Что такое overfitting на интуитивном уровне.
- Как распознать (train vs test).
- Главные причины.
- Способы избежать (регуляризация, cross-validation, больше данных).
- Связь с bias-variance tradeoff.
Короткое объяснение
Overfitting — модель слишком «запомнила» train-данные, включая шум, вместо того чтобы выявить реальные паттерны. На train — отличные метрики, на новых данных — провал.
Метафора: студент зазубрил ответы на конкретные вопросы из учебника, но не понял предмет. На стандартном тесте 100%. На новом вопросе — 0%.
Признаки
Train-test gap
- Train accuracy: 98%
- Test accuracy: 70%
Разрыв 28 п.п. — overfitting.
Если обе близки и высокие — нормально. Если обе низкие — underfitting.
Нестабильность
Модель даёт разные предсказания для почти одинаковых входов.
Слишком сложная структура
Decision tree с тысячей листьев на 1000 строк. Нейросеть с миллионами параметров на маленьких данных.
Причины
1. Мало данных + сложная модель
1000 строк, Random Forest с дефолтными параметрами. Слишком легко запомнить каждую точку.
2. Отсутствие регуляризации
L1, L2, dropout — инструменты для контроля сложности. Без них модель уходит в overfitting.
3. Data leakage
Информация о целевой переменной попадает в признаки. Предсказания идеальные на train и провал в проде.
4. Много признаков
Сотни фич на тысячу строк — overfitting гарантирован.
Как избежать
1. Больше данных
Самое надёжное. Больше данных → модели сложнее overfit.
2. Cross-validation
K-Fold CV: разбиваем train на K частей, обучаемся на K-1, валидируемся на 1. Повторяем K раз. Усреднённая ошибка — честная оценка.
3. Регуляризация
- L1 (Lasso): штраф за большие веса, обнуляет ненужные признаки.
- L2 (Ridge): штраф за большие веса, не обнуляет.
Гиперпараметр alpha / lambda подбирается через CV.
4. Ограничение сложности модели
- Decision tree:
max_depth,min_samples_leaf. - Нейросеть: меньше слоёв.
- XGBoost:
max_depth,min_child_weight.
5. Early stopping
В gradient boosting и нейросетях останавливаем обучение, когда ошибка на валидации начинает расти.
6. Dropout (для нейросетей)
Случайно «выключаем» часть нейронов при обучении. Модель не полагается на конкретные веса.
7. Feature selection
Убираем ненужные признаки. Меньше фич — меньше шума.
8. Ансамблевые методы
Random Forest, Gradient Boosting — усредняют много моделей, что работает как регуляризация.
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. Подбор гиперпараметров на test
Подбирали параметры на test — переобучились на test. Нужен отдельный validation set.
3. Data leakage
Например, нормализовать X на всём датасете (включая test) — утечка. Нормализация только на train.
4. Сравнивать только accuracy
AUC, precision, recall, F1 — разные аспекты качества. Смотрите несколько метрик.
Связанные темы
- Bias-variance tradeoff простыми словами
- Cross-validation простыми словами
- Precision / Recall / F1
- Data leakage простыми словами
- Нормализация данных простыми словами
FAQ
Underfitting vs overfitting?
Underfit — обе метрики низкие. Overfit — train высокая, test низкая.
Overfitting только в ML?
Не только. В любой модели (регрессия, эконометрика) — риск.
Как узнать точный cutoff?
Learning curves (ошибка vs размер обучения). Validation curves (ошибка vs гиперпараметр).
Dropout помогает везде?
В нейросетях — да. В классическом ML не применяется.