Самая коварная ошибка в ML — это не плохая модель.
Это data leakage.
Потому что:
👉 модель показывает идеальные метрики
👉 ты радуешься
👉 выкатываешь в прод
👉 всё разваливается
И ты не понимаешь почему.
Что такое Data Leakage
Data leakage — это ситуация, когда модель
получает доступ к информации из будущего или из target’а,
которой не будет в реальном использовании.
Модель читерит, а не учится.
Почему это так опасно
Потому что leakage:
👉 не очевиден
👉 не даёт ошибок
👉 сильно улучшает метрики
Чем лучше скор — тем подозрительнее.
Классические примеры leakage
1. Нормализация до split
Сделали scaling на всём датасете,
а потом разбили на train/test.
Модель уже «видела» test.
2. Target encoding на всех данных
Посчитали средний target по категории
используя весь датасет.
В train попала информация из test.
3. Фичи из будущего
Пример:
👉 предсказываем отток
👉 используем действия после момента предсказания
Модель знает будущее.
4. Дубликаты
Один и тот же объект:
👉 в train
👉 и в test
Модель просто запоминает.
5. Неправильный split
Временные ряды:
👉 случайный split
Модель обучается на будущем.
Как понять, что у тебя leakage
Сигналы:
👉 слишком высокий score
👉 огромный разрыв между offline и продом
👉 модель «слишком уверена»
👉 странно важные фичи
Если выглядит слишком хорошо — скорее всего, так и есть.
Как защититься
1. Делай split до любых преобразований
Сначала:
👉 train / test
Потом:
👉 scaling
👉 encoding
👉 feature engineering
2. Следи за временем
👉 train = прошлое
👉 test = будущее
3. Используй pipeline
Все трансформации:
👉 обучаются только на train
👉 применяются к test
4. Проверяй фичи
Задай вопрос:
Эта информация доступна в момент предсказания?
Если нет — удаляй.
5. Делай sanity check
👉 обучись на случайных данных
👉 убери подозрительные фичи
Если качество не падает — что-то не так.
Главный инсайт
Data leakage — это не баг.
Это иллюзия качества.
В одном предложении
Если модель слишком хороша —
сначала проверь leakage, а потом радуйся.