Data leakage (утечка данных) — это ситуация, когда в процесс обучения модели попадает информация, которая не должна быть доступна в момент реального предсказания, или информация из тестовой/валидационной выборки. Из-за этого модель показывает отличные метрики на проверке, но плохо работает в продакшене.

Проще: модель «подсматривает ответ» или получает знания о будущем/тестовых данных.

Основные виды

  1. Target leakage — утечка целевой переменной В признаки попадает информация, которая прямо или косвенно связана с целевой переменной и известна только после события.

    • Пример: предсказываем, вернёт ли клиент кредит, а среди признаков есть «дата списания долга» или «статус просрочки». В момент выдачи кредита этого ещё нет.
    • Пример: предсказываем болезнь, а в признаках есть «назначенное лечение».
  2. Train-test contamination — загрязнение обучающей и тестовой выборок Данные теста или валидации как-то влияют на обучение.

    • Пример: сделали StandardScaler или импутацию пропусков до разбиения на train/test. Среднее и пропуски посчитались по всем данным, включая тест.
    • Пример: отбор признаков, PCA, target encoding или SMOTE применили до кросс-валидации.
  3. Temporal leakage — временная утечка Для временных данных сделали случайное разбиение, и модель обучается на будущем, предсказывая прошлое.

    • Пример: прогноз оттока, где в train попали данные за декабрь, а в test — за ноябрь.
    • Правильно: обучать на прошлом, проверять на будущем.
  4. Group leakage — утечка по группам Один и тот же объект/пациент/пользователь/устройство попадает и в train, и в test.

    • Пример: несколько снимков одного пациента в разных выборках. Модель запоминает пациента, а не болезнь.
    • Нужно делать group split.
  5. Утечка через 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, потому что приводит к красивым, но ложным метрикам.