Что такое overfitting
Что такое overfitting
Overfitting, или переобучение, — это ситуация, когда ML-модель слишком хорошо запомнила обучающие данные, включая их шум, и плохо работает на новых данных. Модель «выучила» конкретные примеры, но не закономерность.
Классическая аналогия — студент, который зазубрил ответы на конкретные экзаменационные билеты, но не понял предмет. На реальных задачах он проваливается.
Простой пример
Вы строите модель, предсказывающую churn. Обучили на тренировочных данных — accuracy 99%. Проверили на новых данных — accuracy 65%. Это overfitting.
Модель запомнила особенности обучающей выборки. Например, она выучила, что user_id 1234 — churn, а user_id 5678 — не churn. Но эта «фича» бесполезна для новых пользователей.
На хороших моделях train и test accuracy близки. Если между ними разрыв больше 5-10%, подозревайте overfitting.
Почему происходит
Модель слишком сложная для данных. Глубокая нейросеть или градиентный бустинг с тысячей деревьев могут запомнить каждый пример обучающей выборки, включая шум.
Слишком мало данных. Если у вас 100 примеров и 50 features, модель найдёт «закономерности», которых на самом деле нет.
Feature leakage. Какая-то feature содержит информацию, которой не было бы в момент predictions. Модель «жульничает», а на реальных данных feature отсутствует.
Недостаточно регуляризации. Модель не ограничена в сложности и свободно подгоняется под данные.
Как обнаружить
Первый признак — большой gap между train и test метриками. Train accuracy 99%, test 70% — классический overfitting.
Второй — learning curves. График метрик по мере роста обучающей выборки. Если train всегда выше test, и разрыв не сокращается с добавлением данных — overfitting.
Третий — cross-validation. Если модель показывает разные метрики на разных folds (например, AUC варьируется от 0.7 до 0.9), это нестабильность из-за overfitting.
Четвёртый — validation curves. Метрики в зависимости от сложности модели. Точка, где test начинает падать, а train продолжает расти, — start of overfitting.
Тренироваться на таких вопросах можно в Telegram-боте Карьерник — там 1500+ задач с реальных собесов с разборами.
Как бороться
Больше данных. Самый надёжный способ. Модель не может запомнить 10 млн примеров — приходится искать реальные закономерности.
Регуляризация. Штрафы за сложность модели. L1 (Lasso) и L2 (Ridge) для линейных моделей. Max_depth и min_samples_leaf для деревьев. Dropout и early stopping для нейросетей.
Проще модель. Иногда линейная регрессия лучше XGBoost. Не усложняйте без необходимости.
Cross-validation. Разбивайте данные на k частей, обучайте на k-1, проверяйте на k-той. Усреднённая метрика более стабильна.
Feature selection. Уберите неинформативные features. Они добавляют шум и возможность переобучиться.
Early stopping. Прекращайте обучение, когда test метрика перестаёт улучшаться. Стандартная практика для бустингов и нейросетей.
Ensemble. Random Forest и Bagging — комбинируют много слабых моделей, каждая видит часть данных. Это снижает overfitting.
Underfitting — противоположная проблема
Underfitting — модель слишком простая, не захватывает даже обучающие данные. Train accuracy низкий, test тоже низкий.
Решение — увеличить сложность модели: больше features, более глубокие деревья, нелинейные модели.
Цель — balance между underfitting и overfitting. Этот balance называется bias-variance tradeoff.
Bias-Variance Tradeoff
High bias (underfitting) — модель делает сильные предположения, упрощает реальность. Систематические ошибки.
High variance (overfitting) — модель слишком гибкая, sensitive к обучающим данным. Предсказания скачут.
Цель — найти точку, где total error (сумма bias² + variance + noise) минимален. Это сердце ML — найти оптимальную сложность модели для имеющихся данных.
Практический пример
У вас задача предсказания цены квартиры. Простая линейная регрессия по 2 features (площадь, этаж) — high bias. Предсказания систематически ошибаются, потому что модель не учитывает расположение, состояние, год постройки.
Random Forest с 500 деревьями и всеми features (100 штук, включая случайные) — high variance. Модель отлично работает на train, но плохо на test.
Правильный выбор — градиентный бустинг со средней глубиной деревьев и 20-30 informative features. Учитывает сложность данных, но не переобучается.
К слову, набить руку на таких кейсах удобно через тренажёр в Telegram — разбирайте по 10 вопросов в день, через 2 недели тема становится рефлексом.
Overfitting в аналитике без ML
Overfitting — проблема не только ML. В классической аналитике тоже: если вы тестируете 100 гипотез на одной выборке, 5 из них окажутся «значимыми» случайно. Это эффект multiple comparisons.
Решение — pre-registration гипотез. Сначала зафиксировать, что будете тестировать, потом смотреть данные. Не подгоняйте гипотезы под найденные паттерны.
Overfitting в A/B-тестах
В A/B-тестах overfitting проявляется как cherry-picking сегментов. Вы запустили тест, в целом не значим. Начинаете резать данные: по устройствам, по каналам, по времени. В одном сегменте находите p < 0.05.
Но при 20 сегментах один из них случайно окажется значимым. Это не реальный effect, это overfitting ваших выводов под данные.
Решение — multiple testing correction (Bonferroni, BH) или pre-register сегменты до эксперимента.
Читайте также
FAQ
Всегда ли overfitting плохо?
Да. Модель, которая не генерализует, бесполезна на новых данных.
Как понять, что достиг balance?
Test и validation accuracy близки, модель не показывает резкого падения на новых данных.
Регуляризация обязательна?
Для линейных моделей — часто да. Для деревьев — другие методы (max_depth). Для нейросетей — dropout и early stopping.
Можно ли overfit на очень большом dataset?
Сложнее, но возможно, если модель очень сложная. 1 млн параметров нейросети может переобучиться даже на 10 млн примеров.