Как бороться с переобучением в ML
Считаете вы значит свои данные на тренировочных данных, качество хорошее, нужно внедрять в прод. Смотрите на тестовых — все плохо. Достаточно понятное объяснение: модель подстроилась под тренировочные данные.
Чем это грозит? Когда будем получать новые данные, модель не сможет адекватно интерпретировать нашу реальность, из-за чего будем страдать. Неадекватные прогнозы, плохое обобщение модели, неверные решения для бизнеса, убытки. В общем, все хорошо приемлемо 👨⚖️
Вся эта борьба по сути, управление bias–variance tradeoff: либо модель слишком простая, либо слишком подгоняется под шум.
Что можно с этим сделать
1. Больше качественных данных. Взять больше выборку, предобработать лучше. Минусы: не всегда есть эти данные. Возможно, мы уже взяли те самые 100% на которых мы обучаем 👀. У меня в магистратуре есть курс по предподготовке и анализу данных. Считаю его одним из самых важных. Об этом напишу в следующих постах.
2. Регуляризация. Модель может штрафовать за сложность. Чем проще модель, тем меньше она запоминает шум в данных. Без нее модель может выучить все подряд. Почитать можно тут, все хорошо объяснено. Практически всегда стоит начинать со включенной регуляризации, если понимаете за что каждый из видов отвечает.
3. Уменьшить сложность модели. Несмотря на то, что могут быть более мощные модели, они имеют свойство переобучаться. Например, для деревьев можно ограничить глубину. Попробовать сократить количество фичей и использовать более простую модель 🤔
4. Замерять качество на валидационном датасете. Сравнивать качество на тренировочных и тестовых данных, а дальше тюнить в зависимости от обнаружения проблемы по метрикам качества модели. Про то как работать с кросс-валидацией написано тут 🍪🍪
5. Feature Selection. Определять важные для модели фичи, которые можно будет легко интерпретировать. Лучше использовать 10 хороших фичей, чем 200 случайных. Про простенький вариант на примере Титаника 😮 6. Аугментация и добавление синтетических данных. Можно обмануть алгоритм, добавив шум, предоставить те же семплы данных, но немного измененные. Обычно это подходит для CV и NLP. Например, когда, мы подаем в модель повернутые картинки котиков, искусственно масштабируя датасет. Здесь также можно применить и SMOTE / ADASYN 🙊. Важно: все oversampling / SMOTE только на тренировочной выборке, иначе будет data leakage (утечка данных). О том, что это и как с этим бороться — тут.
7. Раннее прекращение обучения модели. Если качество на валидации перестаёт расти или начинает ухудшаться, обучение стоит остановить. Дальше модель может запоминать только шум. Например, останавливать обучение, если после N итераций качество на валидации не улучшается (как это указано на картинке).
Вот [здесь](https://practicum.yandex.ru/blog/pereobuchenie-modeli-v-mashinnom-obuchenii/#:~:text=ситуациям на полке.-,Особенности переобучения в разных типах моделей,-Переобучение проявляется по) неплохо рассказано про то, как проявляется переобучение у разных моделей машинного обучения и не только.
Хорошая модель — это не та, что идеальна на трейне, а та, что стабильно работает на новых данных 🤓 Но все должно быть объяснимо, почему может возникнуть переобучение, проблемные случаи и так далее. Мы же не на Kaggle 🔑**, чтобы оптимизировать модели вслепую ради скора, а должны смотреть на все комплексно Что-то забыл? Пишите в комментариях! Ставьте 🤪, если понравился пост! Планирую по 💻 писать больше, так как учусь на него, ну...
@zasql_python
· 22.12.2025
Пока у вас метрика "хорошести" остаётся на уровне "мне нравится/не нравится", нихера путного не получится.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён