Почему зелёный пайплайн не гарантирует качество ML-модели

Зелёная галочка в CI не означает, что модель готова к проду. Автор на Хабре разобрал семь способов, которыми quality gate пропускает брак, — от утечек между train и test до shortcut learning.

Главное
  • Гейт на одной метрике roc_auc не проверяет, выучила ли модель сигнал или артефакт данных
  • Капур и Нараянан насчитали минимум 294 статьи с утечками данных в 17 областях науки
  • Из 62 разобранных моделей диагностики COVID-19 по снимкам ни одна не годилась для клиники
Схема ML-пайплайна с этапом оценки модели и порогом качества
Фото: Хабр: Машинное обучение

Зелёный пайплайн в CI не доказывает, что модель готова к проду. Автор на Хабре разобрал семь способов, которыми quality gate пропускает брак. В основе почти каждого — одна метрика, один датасет и один порог.

Типичный гейт выглядит так: скрипт сравнивает roc_auc с порогом 0,85 и возвращает код выхода. Если метрика выше — модель регистрируется в MLflow и едет в прод. Автор сравнивает такой подход с судом, который выносит приговор по показаниям одного свидетеля, не спрашивая, откуда взята цифра.

Гейт, который ничего не блокирует

CI держится на коде выхода: 0 — зелёный, остальное — красный. Способы сделать красный неважным есть в каждом пайплайне: allow_failure: true, || true после команды, [skip ci], кривые rules, точечные исключения вроде NOSONAR. Отдельный случай — sonar-scanner без флага sonar.qualitygate.wait=true: сканер отправил отчёт и вышел с нулём, на сервере гейт красный, а джоба зелёная.

Модель видела ответы

Утечка данных — это когда информация о правильном ответе просачивается в обучение. Капур и Нараянан из Принстона в работе 2023 года прошлись по обзорам в 17 областях науки и насчитали минимум 294 статьи с утечками. К 2024 году в реестре было уже 648 статей из 30 областей.

Пример из статьи: несколько работ заявляли, что сложные ML-модели обходят логистическую регрессию в прогнозировании гражданских войн. Утечка нашлась в каждой. После исправления преимущество пропало.

Классификация утечек, переложенная на код, включает препроцессинг до разбиения, отбор признаков по всему датасету, дубликаты в train и test, признаки, которых не было в момент прогноза, и зависимые выборки. Автор предлагает превратить проверку разбиения в автотест: пересечение ключей, доля дубликатов, доступность признаков.

Тест из другой реальности

В 2021 году в Nature Machine Intelligence вышел обзор моделей, ставивших COVID-19 по рентгену и КТ. Авторы нашли 2212 статей и подробно разобрали 62. Ни одна из 62 моделей не годилась для клиники.

Причины — «датасеты-Франкенштейны» из склеенных источников, отсутствие внешней валидации в 29 из 37 статей по глубокому обучению. ДеГрейв, Янизек и Ли описали shortcut learning: модели смотрели на текстовые метки на снимке, положение пациента, особенности аппарата. В тесте подсказка есть, в проде её нет.

Не та метрика

Epic Sepsis Model — проприетарная модель раннего предупреждения о сепсисе, развёрнутая в сотнях больниц США. Разработчик заявлял AUC 0,76—0,83. Wong et al. провели независимую валидацию на данных Michigan Medicine: на 38 455 госпитализациях реальный AUC составил 0,63, модель пропустила 67% пациентов с сепсисом.

Для профиТехнические детали: архитектура, цифры, ссылки
  • Типичный гейт: sys.exit(0 if m['roc_auc']>=0.85 else 1) — одна метрика, один датасет, один порог.
  • Sonar way в SonarQube проверяет новый код по четырём условиям: ноль новых проблем, все security hotspots просмотрены, покрытие ≥ 80%, дублирование ≤ 3%.
  • Реестр утечек данных: минимум 294 статьи в 17 областях (Patterns, 2023), 648 статей из 30 областей к 2024 году.
  • Обзор COVID-19-моделей: 2212 статей найдено, 62 разобрано, ни одна не годилась для клиники (Nature Machine Intelligence, 2021).
  • Epic Sepsis Model: заявленный AUC 0,76—0,83, реальный AUC 0,63 на 38 455 госпитализациях, пропущено 67% случаев сепсиса (JAMA Internal Medicine, 2021).

Вопросы и ответы

Почему зелёный пайплайн не гарантирует качество модели?
Гейт часто проверяет одну метрику на одном датасете. Если разбиение кривое или метрика выбрана неверно, высокий roc_auc ничего не доказывает.
Что такое shortcut learning?
Это когда модель находит самый дешёвый способ угадать метку — например, по текстовым меткам на снимке или положению пациента, а не по признакам болезни.
Сколько статей с утечками данных насчитали исследователи?
Капур и Нараянан насчитали минимум 294 статьи в 17 областях науки. К 2024 году в реестре было 648 статей из 30 областей.