Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Виявлення на основі моделі | Розділ
Виявлення та моніторинг дрейфу у виробничих ML-системах
Секція 1. Розділ 7
single

single

Виявлення на основі моделі

Свайпніть щоб показати меню

Виявлення дрейфу на основі моделі — це практичний спосіб ідентифікації змін у розподілах даних за допомогою класифікаторів машинного навчання.

  • Навчання класифікатора — наприклад, логістичної регресії — для розрізнення референсних (історичних) даних та поточних (нових) даних;
  • Об’єднання обох наборів даних і призначення міток: 0 для референсних і 1 для поточних;
  • Класифікатор навчається виявляти систематичні відмінності між двома групами;
  • Якщо класифікатор добре розділяє набори даних, це свідчить про зсув або дрейф між розподілами.

Цей підхід на основі моделі особливо цінний для складних або багатовимірних даних, де традиційні статистичні тести можуть бути недостатньо чутливими для виявлення тонких змін.

12345678910111213141516171819202122232425262728293031323334
import numpy as np import pandas as pd from sklearn.linear_model import LogisticRegression from sklearn.metrics import roc_auc_score, accuracy_score from sklearn.model_selection import train_test_split # Generate synthetic reference data (normal distribution) np.random.seed(42) reference = np.random.normal(loc=0, scale=1, size=(500, 2)) reference_labels = np.zeros(reference.shape[0]) # Generate synthetic current data (drifted: shifted mean) current = np.random.normal(loc=1.5, scale=1, size=(500, 2)) current_labels = np.ones(current.shape[0]) # Combine datasets X = np.vstack([reference, current]) y = np.concatenate([reference_labels, current_labels]) # Split into train/test for the drift detector X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Fit logistic regression classifier clf = LogisticRegression() clf.fit(X_train, y_train) # Predict and evaluate y_pred = clf.predict(X_test) y_pred_proba = clf.predict_proba(X_test)[:, 1] accuracy = accuracy_score(y_test, y_pred) auc = roc_auc_score(y_test, y_pred_proba) print("Drift Detector Accuracy:", accuracy) print("Drift Detector AUC:", auc)

Ефективність класифікатора — вимірювана такими метриками, як точність (accuracy) та AUC (площа під ROC-кривою) — безпосередньо відображає наявність дрейфу:

  • Якщо класифікатор досягає високої точності або високого AUC при розрізненні референсних і поточних даних, це означає, що розподіли досить різні, щоб модель могла їх розділити;
  • Якщо класифікатор працює майже як випадковий вгадувач (точність або AUC близько 0.5), це свідчить про відсутність або мінімальний дрейф.

Такий підхід на основі моделі забезпечує гнучкий і масштабований спосіб моніторингу зсувів розподілу, особливо у складних або багатовимірних просторах ознак, де традиційні статистичні тести можуть не виявити тонких змін.

Завдання

Проведіть, щоб почати кодувати

Вам надано два немаркованих набори даних з різних періодів: референсний зразок і поточний зразок. Розглядайте «походження набору даних» як бінарну мітку (0 = референсний, 1 = поточний). Навчіть простий класифікатор для прогнозування походження; якщо модель добре їх розділяє, ймовірно має місце зміщення розподілу.

Кроки:

  1. Згенерувати синтетичні дані ref і new (надано).
  2. Створити доменні мітки y_domain (0 для ref, 1 для new) і об'єднати у X.
  3. Розділити на train/test (test_size=0.3, random_state=42).
  4. Навчити LogisticRegression(max_iter=1000, random_state=0).
  5. Отримати ймовірності на тестовій вибірці; обчислити auc_score = roc_auc_score(...).
  6. Встановити drift_detected = (auc_score >= 0.65) і вивести розміри, AUC, прапорець.

Рішення

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 1. Розділ 7
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

some-alt