На основании каких показателей можно понять, что модель деградировала
Что проверяют
Понимаете ли вы, что модель в продакшене живёт в меняющемся мире, и умеете ли отличать реальную деградацию от шума, сезонности и сломанного пайплайна. Отдельно смотрят, помните ли вы про задержку разметки: если ответ строится только вокруг оффлайн-метрик, значит опыта эксплуатации не было.
Как отвечать
Раскладывайте сигналы по трём уровням.
Качество на свежих данных: падение основной метрики на размеченной выборке последнего периода (ROC-AUC, PR-AUC, logloss, MAE) и просадка продуктовой метрики, ради которой модель существует: конверсия, доля одобрений, доля жалоб, ручных переопределений оператором.
Поведение самой модели, когда меток ещё нет: сдвиг распределения предсказаний, изменение доли положительных ответов, расхождение калибровки, когда средний предсказанный скор перестал совпадать с фактической частотой события на уже размеченной части.
Вход и окружение: дрейф признаков (PSI, тест Колмогорова и Смирнова, доля пропусков, доля новых категорий), расхождение между обучением и продом, рост задержки и ошибок сервиса.
Сильный ответ добавляет два уточнения: смотреть метрики в разрезах, потому что в среднем всё держится, а на сегменте уже провал, и держать контрольную группу или старую модель для сравнения, иначе непонятно, ухудшилась модель или задача стала сложнее.
Где спотыкаются
Первое: называют главной метрикой accuracy. При доле положительных в один процент она остаётся высокой у модели, которая всем отвечает «нет», и падение бизнес-качества по ней не видно.
Второе: предлагают кросс-валидацию как способ мониторинга. Это техника отбора модели на обучении, а в проде в момент предсказания меток просто нет, и ждать их приходится днями или месяцами.
Третье: путают дрейф данных и дрейф концепта. В первом случае изменилось распределение входа, во втором изменилась связь признаков с целевой переменной, и лечится это по-разному. Плюс самая частая причина падения вовсе не старение модели, а сломанный признак: источник поменял формат и колонка заполнилась пустыми значениями.