Модель работала год, а потом начала ошибаться: кейс из практики
ML-модель кредитного скоринга, задеплоенная в production, первые полгода давала accuracy 94%. Через восемь месяцев процент одобрений вырос на 15%, а просрочки — на 20%. Метрики модели всё ещё были высокими, но бизнес терял деньги. Причина — data drift: изменился портрет заёмщика из-за нового кредитного продукта банка. Модель считала риск низким, а по факту — высоким. Мы внедрили мониторинг на Evidently и Grafana, настроили алерты на PSI > 0.2 и автоматическое переобучение. Через месяц ситуацию исправили, сэкономив компании около $45k–65k.
Model monitoring — это детектирование деградации до катастрофы. Мы занимаемся этим уже более 5 лет и реализовали свыше 30 проектов по мониторингу ML-моделей. Своевременное обнаружение дрейфа может сэкономить компании около $9k–13k в год.
Как отличить data drift от model drift?
Data drift (concept drift на входе) — входные данные изменились относительно тренировочных. Пример: модель обнаружения мошенничества обучалась на транзакциях за прошлый год, а в текущем появился новый паттерн атак. Входные признаки имеют другое распределение.
Model drift (performance drift) — качество предсказаний деградировало. Accuracy, F1, AUC ROC падают. Для детектирования нужен ground truth — реальные ответы. Задержка ground truth — главная сложность: для кредитного скоринга ответ «кредит погашен» приходит через месяцы. Data drift можно детектировать сразу (без labels), model drift — только когда появляется ground truth.
Что выбрать: Evidently или Arize?
| Инструмент | Тип | Интеграция | Стоимость |
|---|---|---|---|
| Evidently AI | Open-source | Простая (Python, Prometheus) | Бесплатно |
| WhyLabs | Open-source core | Лёгкая (профилирование) | Freemium |
| Arize AI | SaaS | Enterprise (UI, объяснимость) | Подписка |
| MLflow | Open-source | Через log_metrics | Бесплатно |
Для большинства проектов мы выбираем Evidently + Grafana + Prometheus — гибко, дёшево, self-hosted. Если нужно enterprise-решение с поддержкой — Arize. Evidently разворачивается в 2 раза быстрее конкурентов, а стоимость владения в 3 раза ниже.
Пошаговая настройка дрейф-мониторинга на Evidently
- Подготовка эталонного датасета — срез тренировочных данных или первого периода production.
- Настройка отчёта — выбор метрик дрейфа для каждого признака.
- Интеграция с Prometheus — экспорт метрик как gauges.
- Создание дашборда в Grafana — визуализация дрейфа по фичам.
- Настройка алертов — пороговые значения и нотификации в Slack/Telegram.
from evidently import ColumnMapping
from evidently.report import Report
from evidently.metric_preset import DataDriftPreset
from evidently.metrics import ColumnDriftMetric
reference_data = pd.read_parquet("s3://ml-data/reference/reference_data.parquet")
current_data = fetch_recent_predictions(hours=24)
column_mapping = ColumnMapping(
target='label',
prediction='prediction',
numerical_features=['age', 'income', 'credit_score'],
categorical_features=['region', 'product_type'],
)
report = Report(metrics=[
DataDriftPreset(),
ColumnDriftMetric(column_name='income'),
ColumnDriftMetric(column_name='credit_score'),
])
report.run(
reference_data=reference_data,
current_data=current_data,
column_mapping=column_mapping,
)Evidently использует статистические тесты: PSI (Population Stability Index) — порог > 0.2 сигнализирует о сдвиге; Wasserstein distance — для числовых признаков; Chi-square test — для категориальных; KS test — для числовых, чувствителен к локальным изменениям.
Evidently documentation (evidentlyai.com) и статья на Wikipedia о Concept drift — полезные источники для углублённого изучения.
Какой тест выбрать?
Если данных мало (< 1000) — используйте KS-тест. Если много — PSI. Для категориальных признаков — Chi-square. В Evidently есть автоматический выбор по умолчанию, но мы рекомендуем задавать явно для каждого признака.
Экспорт метрик в Prometheus
from prometheus_client import Gauge, start_http_server
import schedule
drift_score = Gauge('model_feature_drift_score', 'PSI drift score per feature', ['feature', 'model'])
data_quality_score = Gauge('model_data_quality_score', 'Data quality score', ['model'])
def run_drift_check():
report = generate_drift_report()
results = report.as_dict()
for metric in results['metrics']:
if metric['metric'] == 'ColumnDriftMetric':
feature = metric['result']['column_name']
score = metric['result']['drift_score']
drift_score.labels(feature=feature, model='credit-scoring-v2').set(score)
schedule.every(1).hours.do(run_drift_check)
start_http_server(8080) Алерты на деградацию модели
- alert: FeatureDataDrift
expr: model_feature_drift_score{model="credit-scoring-v2"} > 0.2
for: 2h
labels:
severity: warning
team: ml
annotations:
summary: "Data drift detected in feature {{ $labels.feature }}"
description: "PSI = {{ $value }}, threshold 0.2. Consider retraining."
- alert: ModelAccuracyDegradation
expr: model_accuracy_rolling_7d < 0.85
for: 1h
labels:
severity: critical
Shadow mode: безопасное сравнение моделей
Прежде чем деплоить новую модель, запустите её в shadow mode: production-трафик обрабатывается старой моделью, новая обрабатывает тот же трафик параллельно, но результаты не используются — только логируются.
def predict(features: dict) -> float:
result = production_model.predict(features)
if shadow_mode_enabled():
shadow_result = new_model.predict(features)
log_shadow_prediction(
features=features,
production_pred=result,
shadow_pred=shadow_result,
)
return resultShadow mode накапливает статистику для принятия решения о переключении без риска для бизнеса. Это позволяет сравнить модели на реальных данных и избежать ошибок, которые могут стоить миллионы.
Почему data drift опасен для бизнеса?
Незамеченный data drift приводит к финансовым потерям. В одном из проектов мы обнаружили, что из-за дрейфа модель кредитного скоринга одобряла рискованных заёмщиков, что привело к убыткам в 15% портфеля (около $18k–26k). Внедрение мониторинга сократило потери на 80% в первый же месяц.
Что входит в работу по настройке model monitoring
Полный чек-лист работ
- Аудит текущей инфраструктуры — какие модели в production, какие метрики, есть ли ground truth.
- Формирование эталонного датасета (reference baseline) — снимки тренировочных данных или первые 2 недели production.
- Data drift pipeline — Evidently + scheduled jobs + Prometheus exporter.
- Ground truth pipeline — сбор реальных ответов и расчёт model metrics.
- Grafana дашборды — drift scores по features, model performance over time, distribution plots.
- Алерты и SLO — пороговые значения и нотификации (Slack, Telegram).
- Документация и передача знаний — runbook, инструкция по добавлению новой модели.
Сроки и опыт
| Масштаб проекта | Срок |
|---|---|
| 1–3 модели, табличные данные | 3–4 дня |
| 5–10 моделей, mixed типы данных | 1–1,5 недели |
| Полноценная MLOps-платформа | 2–3 недели |
Стоимость зависит от сложности: оценим ваш проект. Свяжитесь с нами для консультации. Мы — команда с более чем 5-летним опытом в ML и DevOps, реализовали 30+ систем мониторинга. Обращайтесь — поможем настроить качественный мониторинг, который реально спасает бизнес от убытков. Закажите внедрение прямо сейчас.







