Почему зелёный пайплайн не гарантирует качество ML-модели
Зелёная галочка в CI не означает, что модель готова к проду. Автор на Хабре разобрал семь способов, которыми quality gate пропускает брак, — от утечек между train и test до shortcut learning.
- Гейт на одной метрике roc_auc не проверяет, выучила ли модель сигнал или артефакт данных
- Капур и Нараянан насчитали минимум 294 статьи с утечками данных в 17 областях науки
- Из 62 разобранных моделей диагностики COVID-19 по снимкам ни одна не годилась для клиники

Зелёный пайплайн в 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 областей.

