К содержимому
MoranaLabs.
Инженерные гайды4 мин чтения0 просмотров

Качество данных для ML: чек-лист из 9 проверок, без которых модель врет 

В 2021 году мы выкатили предиктивное обслуживание насосов, и модель выдала 99% ROC AUC на валидации. В проде она легла в первый же день. Разбираем, как ловить мусор в ингесте до того, как он отравит инференс.

0xReality

В 2021 году мы выкатили предиктивное обслуживание промышленных насосов. На отложенной выборке ROC AUC пробивал 99%, а в проде на реальном железе модель начала сыпать ложноположительными алертами каждую минуту. Оказалось, в обучающий датасет случайно попал флаг вызова ремонтной бригады, который проставлялся мастером за час до реальной поломки. Мусор на входе убивает предикт, но хуже откровенного мусора — данные, которые маскируются под чистые.

Если вы не контролируете качество данных для ML, чек-лист из 9 проверок, без которых модель врет, должен стать фундаментом вашего MLOps-пайплайна до написания первой строчки кода нейросети.

Да брось, какие девять проверок. Обернули пайплайн в try-catch, пустые значения залили медианой по колонке, а дубли дропнули pandas-ом перед фит-предиктом. Зачем усложнять инженерию?

Затыкать пропуски медианой — это преступление против статистики. Особенно на edge-девайсах, где каждый датчик имеет свой профиль шума. Когда у вас отваливается сенсор температуры, медиана говорит модели, что все нормально, хотя агрегат уже плавится.

Это подводит нас к первому измерению качества — полноте. Пропуски нужно обрабатывать честно: либо тащить отдельной фичей индикатор отсутствия сигнала, либо интерполировать физически обоснованными методами, а не слепой агрегацией. Следом идут временные дыры. В потоковых данных индустриального ИИ отсутствие лога за секунду — это не просто пропуск, это потерянный контекст высокочастотного процесса.

Качество данных для ML: чек-лист из 9 проверок, без которых модель врет

Если полнота и временная непрерывность обеспечены, нужно бить по консистентности типов. Схема данных обязана быть жесткой. Когда в числовом поле оборотов шпинделя внезапно приезжает строка с текстом ошибки, пайплайн должен падать с внятным алертом, а не пытаться тихо скастовать это в ноль. Аналогично работает согласованность справочников. Прилетел ID оборудования, которого нет в мастер-системе? Это аномалия интеграции, инференс на таких данных выдаст галлюцинацию.

Пятый аспект — классические дубликаты. В высоконагруженных системах они появляются постоянно из-за особенностей at-least-once доставки брокеров сообщений. Если не дедуплицировать окна перед подачей в алгоритм, вы искусственно завышаете вес повторяющихся событий. Шестое измерение — актуальность. Модель может быть гениальной, но если задержка доставки фичей с цеха превышает пять секунд, предсказывать перегрев уже поздно.

Седьмое — выбросы. Железо ломается, датчики коротят. Если давление скачет в сто раз выше физического предела, это не новый паттерн для reinforcement learning, это битая телеметрия, которую нужно отсекать по жестким порогам. Восьмой и девятый пункты самые коварные: утечка таргета и смещение классов. Смещение классов, когда распределение целевой переменной в реальном потоке уплывает от трейна, требует немедленного ретрейна.

Звучит как работа для аналитика. Ставим Great Expectations или Soda, пишем сотню правил на YAML и дело с концом. Инструменты же есть, зачем писать велосипеды.

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

Ингест против валидации: цена избыточных проверок в пайплайне

Архитектура надежного MLOps требует встраивать DQ-проверки прямо в процесс загрузки. Подход в стиле Soda хорош тем, что вы пишете контракты данных как код. Но если вы начнете считать сложные статистические метрики распределений на каждом батче в тысячу строк при нагрузке в миллион событий в секунду, ваш кластер сгорит.

Тут нужен жесткий трейд-офф.

Базовые вещи — типы, дубли, пропуски, выход за физические пороги — проверяются на лету, прямо в стриминге. Это вычислительно дешевые операции. Смещение классов, консистентность словарей и дрейф распределений считаются асинхронно, на микробатчах раз в час или сутки. Алерты должны быть дифференцированными. Ошибка типа тормозит ингест и кидает critical дежурному инженеру. А дрейф фичи на пару процентов лишь зажигает warning для дата-сайентиста.

А что с утечкой таргета? Если мы нормально бьем датасет по времени, leakage — это миф из курсов для новичков.

В идеальном мире изолированных таблиц — да. На практике target leakage просачивается через саму бизнес-логику интеграций.

Анатомия незаметной смерти в продакшене

Вы делите данные по времени, все математически честно. Но в фичах остается статус клиентской заявки, который меняется задним числом в ERP-системе. В момент выгрузки исторического трейна у вас есть этот статус, а в момент реалтайм-инференса — еще нет, потому что оператор нажмет кнопку только через сутки. Модель цепляется за эту фичу как за самую предиктивную. Валидация показывает идеальный скор, вы катитесь в прод, и метрика падает до уровня случайного блуждания.

Чтобы ловить такие вещи, нужна бескомпромиссная версионированность фичей с point-in-time корректностью и постоянный аудит feature importance. Если одна фича забирает на себя 80% важности в ансамблях деревьев, это не гениальный инсайт от нейросети. Это гарантированная утечка таргета.

Данные не прощают слепой веры.

  • #Data Leakage
  • #Data Quality
  • #MLOps
  • #Ингест
ПоделитьсяTelegramX
рассылка

Новые статьи — на почту

Лонгриды про ML в проде, edge и компьютерное зрение — сразу после выхода.

Канал в Telegram: morana.log

Без спама. Нажимая «Подписаться», соглашаетесь с обработкой персональных данных

бесплатный pdf-гайд

Edge AI или облако: когда тащить нейросеть на железо

Признаки, фреймворк выбора и прикидка экономии — короткий PDF-гайд на почту.

PDF · 5 страниц · без спама. Нажимая «Получить», соглашаетесь с обработкой персональных данных

Читать дальше
— заявка

Опишите задачу  ответим как инженеры. 

Оставьте имя и Telegram — остальное обсудим. Без брифов на 40 слайдов и звонков по три раза.

Отвечаем за пару часовотвечает инженер, а не отдел продажNDA по запросу

Сюда напишем — это быстрее всего

Или сразу написать в Telegram

Без спама и звонков-роботов. Нажимая кнопку, вы соглашаетесь с политикой конфиденциальности и обработкой персональных данных.