single
Виявлення на основі моделі
Свайпніть щоб показати меню
Виявлення дрейфу на основі моделі — це практичний спосіб ідентифікації змін у розподілах даних за допомогою класифікаторів машинного навчання.
- Навчання класифікатора — наприклад, логістичної регресії — для розрізнення референсних (історичних) даних та поточних (нових) даних;
- Об’єднання обох наборів даних і призначення міток:
0для референсних і1для поточних; - Класифікатор навчається виявляти систематичні відмінності між двома групами;
- Якщо класифікатор добре розділяє набори даних, це свідчить про зсув або дрейф між розподілами.
Цей підхід на основі моделі особливо цінний для складних або багатовимірних даних, де традиційні статистичні тести можуть бути недостатньо чутливими для виявлення тонких змін.
12345678910111213141516171819202122232425262728293031323334import 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 = поточний). Навчіть простий класифікатор для прогнозування походження; якщо модель добре їх розділяє, ймовірно має місце зміщення розподілу.
Кроки:
- Згенерувати синтетичні дані
refіnew(надано). - Створити доменні мітки
y_domain(0 дляref, 1 дляnew) і об'єднати уX. - Розділити на train/test (
test_size=0.3,random_state=42). - Навчити
LogisticRegression(max_iter=1000, random_state=0). - Отримати ймовірності на тестовій вибірці; обчислити
auc_score = roc_auc_score(...). - Встановити
drift_detected = (auc_score >= 0.65)і вивести розміри, AUC, прапорець.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат