Data leakage (утечка данных) — это ситуация, когда в процесс обучения модели попадает информация, которая не должна быть доступна в момент реального предсказания, или информация из тестовой/валидационной выборки. Из-за этого модель показывает отличные метрики на проверке, но плохо работает в продакшене.
Проще: модель «подсматривает ответ» или получает знания о будущем/тестовых данных.
Основные виды
-
Target leakage — утечка целевой переменной В признаки попадает информация, которая прямо или косвенно связана с целевой переменной и известна только после события.
- Пример: предсказываем, вернёт ли клиент кредит, а среди признаков есть «дата списания долга» или «статус просрочки». В момент выдачи кредита этого ещё нет.
- Пример: предсказываем болезнь, а в признаках есть «назначенное лечение».
-
Train-test contamination — загрязнение обучающей и тестовой выборок Данные теста или валидации как-то влияют на обучение.
- Пример: сделали
StandardScalerили импутацию пропусков до разбиения на train/test. Среднее и пропуски посчитались по всем данным, включая тест. - Пример: отбор признаков, PCA, target encoding или SMOTE применили до кросс-валидации.
- Пример: сделали
-
Temporal leakage — временная утечка Для временных данных сделали случайное разбиение, и модель обучается на будущем, предсказывая прошлое.
- Пример: прогноз оттока, где в train попали данные за декабрь, а в test — за ноябрь.
- Правильно: обучать на прошлом, проверять на будущем.
-
Group leakage — утечка по группам Один и тот же объект/пациент/пользователь/устройство попадает и в train, и в test.
- Пример: несколько снимков одного пациента в разных выборках. Модель запоминает пациента, а не болезнь.
- Нужно делать group split.
-
Утечка через ID, индексы, дубликаты, метаданные
idили порядковый номер коррелирует с целевой переменной.- Дубликаты строк попали в train и test.
- Случайный индекс строки содержит информацию о времени или источнике данных.
Почему это опасно
- Метрики на валидации/тесте завышены.
- Модель выглядит почти идеальной: accuracy 0.99, ROC-AUC 0.999.
- В реальной эксплуатации качество резко падает.
- Бизнес принимает решения на основе ложной уверенности.
Как обнаружить
- Слишком высокая метрика без правдоподобного объяснения.
- Один-два признака имеют аномально высокую важность.
- Признак имеет подозрительно высокую корреляцию с целевой переменной.
- Качество резко падает, если убрать один признак.
- Временной или групповой split даёт совсем другие результаты, чем случайный.
Как предотвращать
- Сначала разбивайте данные на train/valid/test, потом всё считайте только на train.
- Используйте
Pipelineв sklearn: scaler, imputer, encoder, feature selection — всё внутри пайплайна. - Для временных данных — только
TimeSeriesSplitили split по дате. - Для групп —
GroupKFold/GroupShuffleSplit. - Target encoding, SMOTE, отбор признаков — только внутри фолдов кросс-валидации.
- Проверяйте, что каждый признак будет доступен в момент предсказания.
- Удаляйте дубликаты и проверяйте пересечения по ID/группам.
- Симулируйте продакшен: обучайте на старых данных, проверяйте на более новых.
Коротко: data leakage — это когда модель во время обучения получает информацию, которой не будет при реальном применении. Это одна из самых частых и коварных ошибок в data science, потому что приводит к красивым, но ложным метрикам.