Привет! Я Наталия Воронова, спикер курса «Дата-сайентист» 👋🏻
Расскажу кейс из практики про то, где на самом деле ломаются ML-модели после деплоя. И спойлер: дело не в алгоритмах.
Ситуация
Мы обучили модель кредитного скоринга. ROC-AUC стабильный, валидация чистая, и модель уходит в прод.
Через время качество начинает ухудшаться. Не резко, постепенно. Самый неприятный сценарий: модель работает (ошибок нет), но бизнес-метрики ползут вниз.
Что произошло?
Смещение распределений признаков между train и prod. В обучении признаки считались на историческом срезе: доход клиента, транзакционная активность, поведенческие агрегаты.
В проде данные приходили с задержкой, часть признаков считалась по другому временному окну, а часть обновлялась асинхронно. Модель начала получать данные, которые статистически отличались от обучающей выборки.
Как диагностировали?
PSI (Population Stability Index) — стандарт в кредитном скоринге. PSI показывает, насколько распределение признака в проде отличается от обучающего.
Мы сравнили train и текущий поток. Результат: по ключевым фичам PSI > 0.3. Получается, модель работала уже в другой реальности.
Правило интерпретации PSI:
➖ < 0.1 → стабильно
➖ 0.1–0.25 → есть сдвиг, следить
➖ > 0.25 → критическое изменение
Почему это происходит?
Данные не живут в вакууме. Особенно в динамичных задачах:
🟠 Кредитный риск → меняется макроэкономика, ставки, доходы
🟠 Маркетинг → меняются каналы, сезонность, поведение
🟠 churn → меняется продукт, конкуренты, акции
Модель не ломается. Она начинает экстраполировать туда, где никогда не обучалась.
Что сделали:
🔹 Синхронизировали пайплайны расчёта признаков (train = prod);
🔹 Зафиксировали временные окна;
🔹 Добавили мониторинг PSI по ключевым фичам;
🔹 Ввели алерты на drift.
Главный вывод: если вы не смотрите на распределения — вы не знаете, как работает ваша модель. Модель без контроля данных — это чёрный ящик с отложенными проблемами. Это ключевая разница между ML в ноутбуке и ML в продакшене.
Мониторите drift в проектах? 😉