Модель уже начала деградировать. Просто вы об этом ещё не знаетеПривет! На связи Мария Жарова, ментор курсов «ML-инженер» и «Дата-сайентист» 👋🏻Модель в проде — это не «настроил и забыл». Это живой сервис, который потихоньку деградирует с первого же дня после релиза. Вопрос только в том, заметите вы это сами или расскажут коллеги из бизнеса, когда посыпется выручка.
Разберём, как выстроить мониторинг модели так, чтобы про её “устаревание” узнавать заранее, а не постфактум — что смотреть, с какой периодичностью и на что ставить триггеры.
В целом, мониторинг модели можно разбить на три разных слоя, где каждый отлавливает свой тип проблем.
📌 Слой 1: входные данные. Проблемы на этом этапе часто называют
data drift: ➖ Меняется ли распределение фичей относительно того, на чём модель училась?
➖ Появились ли новые категории, которых раньше не было?
➖ Не стало ли внезапно 30% пропусков там, где раньше было 2%?
Инструменты для проверки здесь стандартные статистические: PSI (Population Stability Index), KS-тест, сравнение распределений по бакетам. По каждой ключевой фиче — свой контроль (не по всему набору, а именно по ключевым, иначе алерты превратятся в шум).
📌 Слой 2: предсказания модели — это уже называется
prediction drift. Даже если входные данные стабильны, может поехать
распределение предсказаний — вот несколько типичных примеров:
➖ Модель начала чаще предсказывать положительный класс;
➖ Средний скор пополз вверх.
Иногда, кстати, проблема оказывается во входных данных — когда по отдельным фичам её не поймать, а в предсказаниях на комбинации признаков она проявляется.
📌 Слой 3: качество модели или
concept drift — это самое важное и самое сложное, тут мы смотрим на реальные метрики: precision, recall, ROC-AUC, бизнес-KPI. Основная загвоздка здесь в том, что настоящий таргет обычно приходит с задержкой — факт оттока станет известен через месяц, факт возврата кредита через год… И до этого момента честно посчитать качество нельзя.
Но всё же есть способ поймать проблему, даже пока таргет ещё не пришёл!
➖
Использовать прокси-метрики: часто есть промежуточный сигнал, который приходит быстрее (клик до покупки, первая просрочка до дефолта, отписка до оттока). Конечно, это не идеально, но обычно даёт хоть какой-то ранний неплохой сигнал.
➖
Сравнить с бенчмарком:
держите рядом простую эвристику или прошлую версию модели и мониторьте разрыв. Если разрыв схлопывается — модель теряет своё преимущество.
➖
Смотрите на сегментные метрики: часто модель деградирует не целиком, а на конкретных срезах (новые пользователи, определённый регион, новая версия приложения). Общий скор может быть в норме, а вот в разрезе по сегментам — катастрофа.
💡 Совет: ставьте триггеры на переобучениеКлассический подход: «переобучаем модель раз в месяц, потому что так решили на глаз». Иногда это оверкилл — если модель стабильна и трогать её нет смысла, а иногда наоборот — за месяц уже всё развалилось.
Поэтому более зрелый подход — комбинировать
регулярное переобучение по расписанию как базовый цикл с добавлением
триггерного переобучения по алертам (PSI по ключевой фиче ушёл за порог, качество на прокси-метрике просело на N%, доля новых значений категорий превысила X%).
💡 И ещё совет — джентльменский набор метрик для мониторинга модели в проде:➖ Распределение ключевых фичей и алерт на их сдвиг;
➖ Распределение предсказаний модели во времени;
➖ Доступные онлайн-метрики (те самые прокси);
➖ Реальные метрики с лагом, как только таргет приезжает;
➖ Разбивка по ключевым сегментам, а не только общая цифра;
➖ Отдельно health--чек самого сервиса: скорость ответа, количество ошибок.
И помните, что мониторинг — это не «сделаем, когда будет время», а часть релиза наравне с самим сервисом алгоритмом. Модель без мониторинга — это чёрный ящик, который однажды перестанет работать, и вы узнаете об этом последним.
Кстати, про то, как грамотно построить мониторинг и MLOps-обвязку вокруг моделей в проде, у нас есть отдельный
модуль на курсе.
Сохраняйте, чтобы не потерять! ❤️