Дрейф данных
| Виды | ковариатный сдвиг, сдвиг меток, дрейф концепции |
|---|---|
| Метрики | 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 и настраивать алерты так же, как для сервисов.
Что делать при дрейфе
- Проверить данные. Сначала исключить поломку конвейера или источника — это самая частая причина.
- Оценить влияние. Дрейф неважного признака может не влиять на качество; смотрят на важность признака и косвенные метрики.
- Переобучить модель на свежих данных — по расписанию или по срабатыванию мониторинга. Нужна воспроизводимая процедура обучения (версии данных, конвейер, валидация перед выкладкой).
- Пересмотреть признаки, если связь изменилась принципиально, — например, убрать признак, зависящий от изменившегося процесса.
- Откатиться к предыдущей модели или к простому правилу, если новая версия хуже.
Дрейф в системах с LLM
Для приложений на языковых моделях дрейф проявляется иначе: меняются темы и формулировки запросов пользователей, устаревают документы в базе знаний RAG, а провайдер может обновить модель. Здесь мониторят распределение эмбеддингов запросов, долю отказов и регулярно прогоняют наборы evals.
См. также
Источники
- Gama et al. — A Survey on Concept Drift Adaptation (ACM Computing Surveys, 2014)
- Evidently AI — Data drift: what it is and how to detect it
- NannyML — Performance estimation without ground truth
- Google Cloud — Vertex AI Model Monitoring
- Sculley et al. — Hidden Technical Debt in Machine Learning Systems (NeurIPS 2015)