Привет! На связи Кристина Желтова, директор по разработке моделей в Газпромбанке и преподаватель курса «Инженер машинного обучения» 👋🏻
На практике нередкая ситуация, когда ML-специалист или даже целая команда празднуют победу — их модель показывает на локальных экспериментах отличное качество, а значит, задача решена!
Модель проходит код-ревью, готовится к раскатке в прод и пилотированию или A/B-тестированию, и вот час настал — её выпускают в настоящую жизнь, в продакшн. Но через какое-то время разгневанные заказчики приходят и сетуют на сошедшую с ума модель, которая одобрила кредиты всем подряд или рекомендовала потратить весь бюджет маркетинга на удержание клиентов, которые и так не собирались уходить.
❓ Какие могут быть причины такого поведения модели, и как узнать о существовании проблемы не от заказчиков, а во время экспериментов?
1️⃣ Temporal Leakage: неправильная разбивка данных, упорядоченных по времени
Проблема: команда использовала обычный
train_test_split с shuffle=True на упорядоченных данных с временными метками.Что произошло: модель училась на данных от января до декабря, а тестировалась на случайно перемешанных данных из этого же периода. Фактически, модель использовала «будущее» для предсказания «прошлого».
Правильный подход: использовать специальную валидацию для временных данных — TrainTestSplit.
2️⃣ Feature Leakage: признаки из «будущего»
Проблема: в датасете могли быть признаки, которые содержали информацию из будущего относительно момента предсказания. Например, параметр
customer_lifetime_value, рассчитанный на транзакциях после целевой даты предсказания.Правильный подход: проверять, что все признаки, агрегации и статистики считаются только на данных до целевой даты предсказания.
3️⃣ Target Leakage: утечка информации из целевой переменной
Проблема: для моделирования использовали признаки, напрямую связанные с целевой переменной или вычисляемые из неё.
Правильный подход: все признаки должны быть собраны или вычислены только из данных, доступных до момента, когда модель делает прогноз. Также стоит отделять создание признаков от целевой переменной во времени.
У вас бывали подобные случаи? Делитесь в комментариях!
