Диагностика Mock-интервью
Главная · Основы машинного обучения

Фичи и утечки данных (data leakage)

На табличных данных признаки (features) решают больше, чем выбор модели. Разбираем преобразования фичей, target encoding и утечку данных (data leakage) — из-за неё AUC 0.99 оффлайн превращается в 0.6 в проде.

Интуиция

Смена алгоритма на табличных данных обычно даёт доли процента, а одна хорошо придуманная фича — проценты и десятки процентов. Модель видит мир только через признаки: если в них нет сигнала, никакой бустинг его не выдумает. Поэтому инженерия признаков (feature engineering) — это перевод знаний о задаче на язык чисел, который понятен модели.

Но у этой силы есть тёмная сторона: чем изобретательнее фичи, тем легче случайно протащить в них информацию, которой в момент предсказания ещё не существует. Это и есть утечка данных — главный источник «слишком хороших» моделей.

Как это работает: виды преобразований

💡 Ключевая мысль К каждой фиче задавай один вопрос: «была ли она известна в момент предсказания?» Если нет или не уверен — это кандидат в утечку, а не в модель.

Утечка данных: четыре сценария

Утечка (data leakage) — это когда фича «подглядывает» в будущее или прямо в таргет. Модель на такой фиче выглядит гениально на валидации и разваливается в проде, где будущего ещё нет. Четыре классических сценария:

Главный симптом один: подозрительно высокая оффлайн-метрика и провал после деплоя. Если AUC вдруг 0.99 — сначала ищи утечку и только потом радуйся. Истории на эту тему одинаковы во всех компаниях: модель предсказания оттока «обнаруживает», что лучший признак ухода клиента — обнулённый тариф (который проставляют при закрытии договора), а модель диагностики по снимкам учится узнавать метку сканера реанимационного отделения вместо болезни. В обоих случаях сигнал настоящий, просто он появляется вместе с ответом или после него.

Как защититься

⚠️ Подводный камень Target encoding опасен даже без явного «подглядывания в будущее»: если среднее по категории посчитано на тех же строках, на которых модель учится, редкие категории почти дословно запоминают свой таргет. Это микро-утечка, которую видно только по разрыву train/validation.
🎤 На собеседовании
  • «AUC 0.99 оффлайн, 0.6 в проде — что случилось?» — классика: утечка. Проверить фичи, заполняемые после события, схему сплита и предобработку до сплита.
  • «Как сделать target encoding без утечки?» — out-of-fold: кодировку для строки считаем на фолдах без неё; плюс сглаживание для редких категорий.
  • «Почему random split временных данных — обман?» — модель видит будущее: оффлайн-метрика завышена, в проде такой информации не будет.
  • «Как ищете утечки на практике?» — аудит фичей по моменту появления, подозрительно важные фичи, сравнение метрики при сплите по времени и случайном.