Как проверить релевантность модели на тестовых данных до выкатки в продакшн
Что проверяют
Понимаете ли вы, что хорошая цифра на тесте ещё не означает хорошую модель в продакшне. Интервьюер смотрит, как вы строите офлайн-оценку, которой можно верить, и с чем сравниваете результат. Следом обычно спрашивают, почему офлайн-метрика выросла, а в A/B-тесте эффекта нет.
Как отвечать
Каркас из четырёх шагов:
- честная отложенная выборка: тест собран так же, как данные придут в проде. Данные во времени делите по времени, обучение на прошлом, тест на последних неделях. Если у пользователя много строк, нужно групповое разбиение (
GroupKFold), иначе модель запомнит пользователя. Гиперпараметры подбирают на валидации или кросс-валидации, тест трогают один раз; - метрика под задачу: для поиска и рекомендаций
NDCG@k,MRR,recall@k; для классификации с дисбалансомPR-AUC, precision и recall на рабочем пороге; для регрессииMAEилиMAPE. Порог выбирают из цены ошибки, а не берут0.5по умолчанию; - сравнение с базой: текущая модель в проде или простая эвристика на том же тесте. Прирост подтверждайте доверительным интервалом, например бутстрэпом, иначе разница в третьем знаке окажется шумом;
- срезы и ошибки: метрика по сегментам (новые пользователи, редкие категории), разбор худших примеров, калибровка вероятностей. Подозрительно высокая метрика, которая держится на одном признаке, почти всегда означает утечку.
Отдельно проверьте задержку инференса, память и поведение на пустых и битых признаках. Версии данных и результаты фиксируйте в трекере вроде MLflow. Окончательный ответ даёт онлайн: теневой запуск, затем A/B-тест или канареечная выкатка на долю трафика.
Где спотыкаются
Называют accuracy главной метрикой. При 2% положительного класса модель, которая всегда отвечает «нет», получит 98% и будет бесполезна.
Многократно смотрят на тест и подгоняют под него параметры. Тест превращается в валидацию, и оценка становится оптимистичной.
Делят временные данные случайно. В обучение попадает будущее, офлайн всё выглядит отлично, а в проде качество проседает.