Утечка данных (data leakage)
Самая коварная ловушка машинного обучения — когда модель на тесте показывает блестящий результат, а в проде разваливается. Часто виновата утечка: в обучение случайно просочилась информация, которой в реальный момент предсказания не будет. Модель «подсмотрела ответ» — и обманула всех, включая авторов.
Прод-качество (зелёное) — настоящее, оно не меняется. Утечка раздувает только train/test: «признак из будущего» (например, дата закрытия счёта при прогнозе оттока) выдаёт ответ; предобработка на всех данных до сплита даёт тесту подсмотреть в обучение. Цель валидации — чтобы тест ≈ прод.
Утечка — это когда признак или часть теста несут информацию из «будущего» или из самого ответа. Модель учится на ней, метрики на тесте взлетают — но в реальности этого признака на момент предсказания ещё нет, и качество рушится. Это не переобучение в чистом виде: даже честная по сложности модель будет врать, если данные «протекли».
Профилактика — дисциплина пайплайна: сначала split, потом вся подготовка только на train (через fit на train и transform на test). Признаки проверяют на «доступность во времени»: можно ли их вычислить строго до момента прогноза.
Подозрительно высокое качество — повод не радоваться, а искать утечку. «Слишком хорошо» в ML почти всегда означает ошибку валидации, а не гениальную модель.
Знаменитые провалы соревнований и стартапов: модель показывала AUC 0.99 на тесте и проваливалась в бою — потому что в данные просочился идентификатор или поле, косвенно кодирующее ответ.
Медицинские модели «предсказывали» болезнь по служебным меткам снимка (название аппарата онкоцентра), а не по самому снимку — классическая утечка через посторонний признак.
Определения
Train/test и кросс-валидация дают честную оценку, ТОЛЬКО если в тест не просочилась информация из обучения. При утечке даже правильная по форме валидация врёт.
Для временных и сгруппированных данных обычное случайное разбиение само по себе является утечкой — нужны временные/групповые схемы валидации.