Ответ
Переобучение (high variance) проявляется, когда модель слишком хорошо подстраивается под обучающие данные, включая шум. Методы детекции:
1. Валидационные кривые (Validation Curves):
Сравнение производительности на тренировочном и валидационном наборах при изменении ключевого гиперпараметра (например, max_depth дерева).
from sklearn.model_selection import validation_curve
import matplotlib.pyplot as plt
depths = range(1, 20)
train_scores, val_scores = validation_curve(
RandomForestClassifier(n_estimators=50),
X, y, param_name='max_depth', param_range=depths, cv=5
)
# Переобучение: train_score высокий, val_score низкий/падает после оптимума
plt.plot(depths, train_scores.mean(axis=1), label='Train')
plt.plot(depths, val_scores.mean(axis=1), label='Validation')
2. Сравнение метрик на train/test: Явный сигнал — большая разница в accuracy/precision/recall.
train_accuracy = accuracy_score(y_train, model.predict(X_train))
test_accuracy = accuracy_score(y_test, model.predict(X_test))
print(f'Train Acc: {train_accuracy:.3f}, Test Acc: {test_accuracy:.3f}')
# Сигнал переобучения: Train Acc >> Test Acc (на 5-10% и более)
3. Анализ кривой обучения (Learning Curve): Показывает, как метрики меняются с увеличением размера обучающей выборки. При переобучении кривая валидации остается далеко от кривой обучения даже на больших данных.
Решение: Упрощение модели (уменьшение max_depth, увеличение min_samples_leaf), добавление регуляризации (в XGBoost/LightGBM — reg_alpha, reg_lambda), сбор большего количества данных.