Собесов

Сценарий ML: диагностика overfitting и underfitting

ML / Data ScienceOverfitting и регуляризацияЛёгкаяMiddle

Условие

Train ROC AUC = 0.95, validation = 0.74. Это что и что с этим делать?

Решение

Подход

Большой gap train vs val — overfitting. Underfitting — наоборот, оба низкие. Используем диагностические инструменты:

  1. Learning curves: train/val score vs train size.
    • Overfit: train высокая, val низкая, gap не схлопывается.
    • Underfit: обе низкие и плоские.
  2. Validation curve: метрика vs гиперпараметр.
  3. Bias-variance decomposition.

Реализация

from sklearn.model_selection import learning_curve
import numpy as np
import matplotlib.pyplot as plt
 
def diagnose(model, X, y, cv=5):
    sizes, train_sc, val_sc = learning_curve(
        model, X, y, cv=cv, scoring='roc_auc',
        train_sizes=np.linspace(0.1, 1.0, 10), n_jobs=-1
    )
    train_m = train_sc.mean(axis=1)
    val_m = val_sc.mean(axis=1)
    plt.plot(sizes, train_m, label='train')
    plt.plot(sizes, val_m, label='val')
    gap = train_m[-1] - val_m[-1]
    if gap > 0.05 and train_m[-1] > 0.8:
        return 'overfitting'
    if train_m[-1] < 0.7 and val_m[-1] < 0.7:
        return 'underfitting'
    return 'ok'

Лечение overfitting

  1. Больше данных (если возможно).
  2. Регуляризация: L1/L2, max_depth, min_samples_leaf, dropout.
  3. Уменьшение модели: меньше параметров, меньше деревьев.
  4. Early stopping по val.
  5. Data augmentation (CV/NLP).
  6. Feature selection / PCA / удаление leakage-фичей.

Лечение underfitting

  1. Больше фичей, feature engineering.
  2. Менее регуляризация, глубже модель.
  3. Сменить семейство моделей (linear → tree → boosting).
  4. Проверить, нет ли scaling-проблем.

Подводные камни

  1. Train AUC 0.95 vs val 0.74 — может быть leakage, а не «честный» overfit. Проверьте, что split правильный (по user/time).
  2. Маленький val (n<500) даёт большой шум в оценке — gap может быть случайным.
  3. Imbalanced classes: AUC может быть высоким и при overfit, и при random для маловероятного класса.
  4. «Регуляризация мощнее» — типичный совет, но без cross-val выбор λ — это p-hacking на validation.

Эталонный ответ

Train≫val → overfitting. Диагностика — learning curve (gap не схлопывается), validation curve (метрика vs гиперпараметр). Лечение: регуляризация, ранний стоп, больше данных, меньшая capacity. До регуляризации — проверить leakage в split.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти