Налаштування моніторингу дрифту моделі (Data Drift, Concept Drift)

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Налаштування моніторингу дрифту моделі (Data Drift, Concept Drift)
Середній
~3-5 днів
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1288
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1123
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    590
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    860

Налаштування моніторингу дрейфу моделі (Data Drift, Concept Drift)

Деградація ML-моделі в production рідко буває миттєвою — вона відбувається поступово, і без спеціалізованого моніторингу команда помічає проблему занадто пізно: коли бізнес-метрики вже впали. Моніторинг дрейфу дозволяє виявити зміни в даних або поведінці моделі на ранній стадії.

Типи дрейфу

Data drift (covariate shift) — зміна розподілу вхідних ознак. Модель бачить дані, що відрізняються від тих, на яких вона навчалася. Приклад: сезонні зміни поведінки покупців змінюють розподіл ознаки "середній час між покупками".

Concept drift — зміна залежності між ознаками та цільовою змінною. Приклад: схеми шахрайства змінюються, і ознаки, які раніше надійно передбачали шахрайство, втрачають передбачувальну силу.

Label drift — зміна розподілу цільової змінної. Приклад: частка позитивних прикладів у задачі бінарної класифікації значно змінилася.

Prediction drift — зміна розподілу передбачень моделі. Можна моніторити без розмічених даних.

Статистичні тести для виявлення дрейфу

Тест Застосування Поріг
Kolmogorov-Smirnov Неперервні ознаки p-value < 0.05
Chi-squared Категоріальні ознаки p-value < 0.05
PSI (Population Stability Index) Бінарні/категоріальні PSI > 0.2 — сильний дрейф
Jensen-Shannon Divergence Будь-які розподіли JS > 0.1
Maximum Mean Discrepancy Багатовимірний дрейф Залежить від kernel

Інструменти моніторингу

Evidently AI — бібліотека з відкритим кодом для генерування звітів про дрейф:

from evidently.report import Report
from evidently.metric_preset import DataDriftPreset, ModelQualityPreset

report = Report(metrics=[
    DataDriftPreset(),
    ModelQualityPreset(),
])

report.run(
    reference_data=training_data,
    current_data=production_data_last_week
)
report.save_html("drift_report.html")

Whylogs / WhyLabs — легка бібліотека для логування статистичних профілів даних в реальному часі. Мінімальна надлишкова вага на production-інференс.

Arize AI, Fiddler, Arthur — комерційні платформи з готовими панелями управління, сигналами та можливістю розмітки production-даних.

Grafana + Prometheus — користувацький моніторинг, де метрики дрейфу експортуються як Prometheus-метрики.

Моніторинг без ground truth

Класична проблема: в production ground truth (правильна відповідь) з'являється з затримкою або взагалі не з'являється. Без розмічених даних можна моніторити:

  • Prediction drift — зміна розподілу передбачень
  • Feature drift — зміна розподілу вхідних ознак
  • Confidence distribution — зміна впевненості моделі
  • Business proxy metrics — наприклад, CTR як проксі для якості рекомендацій

Налаштування сигналів

# Інтеграція з Grafana Alerting
def compute_psi(expected, actual, buckets=10):
    expected_hist, _ = np.histogram(expected, bins=buckets, density=True)
    actual_hist, _ = np.histogram(actual, bins=buckets, density=True)
    # Згладжування для уникнення ділення на нуль
    expected_hist = np.where(expected_hist == 0, 1e-6, expected_hist)
    actual_hist = np.where(actual_hist == 0, 1e-6, actual_hist)
    psi = np.sum((actual_hist - expected_hist) * np.log(actual_hist / expected_hist))
    return psi

# Експорт до Prometheus
psi_value = compute_psi(reference_feature, production_feature)
prometheus_client.Gauge('model_feature_psi', 'PSI for feature X').set(psi_value)

Сигнали налаштовуються в Grafana: PSI > 0.2 — попередження, PSI > 0.25 — критичний із сповіщенням у Slack/PagerDuty.

Процес реагування

При виявленні дрейфу: 1) аналіз змін у даних, 2) рішення про переnavigation або інженерне виправлення ознак, 3) якщо concept drift — може знадобитися перепроектування архітектури моделі. Моніторинг без процесу реагування марний — важливо заздалегідь описати runbook для кожного типу сигналу.