Дрейф данных

Материал из llmdocs — справочник разработчика
Портал: ML и MLOps
Дрейф данных
Видыковариатный сдвиг, сдвиг меток, дрейф концепции
МетрикиPSI, KS-тест, расстояние Вассерштейна, дивергенция Дженсена — Шеннона
ИнструментыEvidently, NannyML, whylogs, Alibi Detect
Реакцияпереобучение, пересмотр признаков, откат
СвязанноеMLOps, мониторинг, Feature store

Дрейф данных (англ. data drift) — изменение свойств данных, поступающих в модель машинного обучения, по сравнению с данными, на которых она обучалась. Модель неявно предполагает, что мир остаётся таким же, как в обучающей выборке; когда это перестаёт быть правдой — меняются пользователи, сезон, цены, интерфейс сайта или источник данных, — качество предсказаний падает. Опасность в том, что модель не выдаёт ошибок: она продолжает уверенно отвечать, только всё менее точно. Обнаружение дрейфа — одна из главных задач мониторинга в MLOps.

Виды дрейфа

Пусть модель учит зависимость P(y | x) — вероятность ответа y при признаках x.[1]

Вид Что меняется Пример
Ковариатный сдвиг (data drift) распределение признаков P(x) приложение вышло в новый регион — другие возраст и доход клиентов
Сдвиг меток (prior shift) доля классов P(y) доля мошеннических транзакций выросла вдвое
Дрейф концепции (concept drift) сама зависимость P(y | x) после изменения правил те же признаки означают другое поведение

Дрейф бывает внезапным (поменялся формат поля в источнике, пандемия), постепенным (медленная смена аудитории), сезонным (праздники, выходные) и повторяющимся. Отдельный и очень частый случай — не настоящий дрейф, а поломка конвейера: признак начал приходить пустым, в других единицах или с ошибкой в джойне.

Как обнаруживать

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

Распределения признаков. Для каждого признака сравнивают распределение в продакшене за окно (день, неделю) с эталоном — обучающей выборкой или «хорошим» периодом:[2]

  • PSI (Population Stability Index) — популярен в кредитном скоринге; по традиции PSI < 0,1 — стабильно, 0,1–0,25 — заметное изменение, > 0,25 — серьёзный сдвиг;
  • тест Колмогорова — Смирнова для числовых признаков и хи-квадрат для категориальных — на больших объёмах срабатывают на любые мелочи, поэтому смотрят и на величину эффекта;
  • расстояние Вассерштейна и дивергенция Дженсена — Шеннона — меры величины сдвига.

Распределение предсказаний. Резкое изменение доли положительных ответов или средней уверенности модели — дешёвый и полезный сигнал.

Оценка качества без меток. Методы вроде CBPE в NannyML оценивают ожидаемую точность по калиброванным вероятностям модели.[3]

Проверки данных. Доля пропусков, диапазоны значений, новые категории, схема — их проверяют до модели (Great Expectations, Pandera).

Пример

import numpy as np

def psi(expected, actual, bins=10):
    edges = np.quantile(expected, np.linspace(0, 1, bins + 1))
    edges[0], edges[-1] = -np.inf, np.inf
    e = np.histogram(expected, edges)[0] / len(expected)
    a = np.histogram(actual, edges)[0] / len(actual)
    e, a = np.clip(e, 1e-6, None), np.clip(a, 1e-6, None)
    return float(np.sum((a - e) * np.log(a / e)))

psi(train_df["income"], prod_df["income"])   # > 0.25 — повод разбираться

На практике используют готовые библиотеки: Evidently строит отчёты по всем признакам, NannyML, whylogs и Alibi Detect решают похожие задачи; облачные платформы предлагают встроенный мониторинг моделей.[4] Метрики дрейфа можно экспортировать в Prometheus и настраивать алерты так же, как для сервисов.

Что делать при дрейфе

  1. Проверить данные. Сначала исключить поломку конвейера или источника — это самая частая причина.
  2. Оценить влияние. Дрейф неважного признака может не влиять на качество; смотрят на важность признака и косвенные метрики.
  3. Переобучить модель на свежих данных — по расписанию или по срабатыванию мониторинга. Нужна воспроизводимая процедура обучения (версии данных, конвейер, валидация перед выкладкой).
  4. Пересмотреть признаки, если связь изменилась принципиально, — например, убрать признак, зависящий от изменившегося процесса.
  5. Откатиться к предыдущей модели или к простому правилу, если новая версия хуже.

Дрейф в системах с LLM

Для приложений на языковых моделях дрейф проявляется иначе: меняются темы и формулировки запросов пользователей, устаревают документы в базе знаний RAG, а провайдер может обновить модель. Здесь мониторят распределение эмбеддингов запросов, долю отказов и регулярно прогоняют наборы evals.

См. также

Источники

  1. Gama et al. — A Survey on Concept Drift Adaptation (ACM Computing Surveys, 2014)
  2. Evidently AI — Data drift: what it is and how to detect it
  3. NannyML — Performance estimation without ground truth
  4. Google Cloud — Vertex AI Model Monitoring
  5. Sculley et al. — Hidden Technical Debt in Machine Learning Systems (NeurIPS 2015)