Trotz des KI -Hype verlassen sich viele Technologieunternehmen immer noch stark auf maschinelles Lernen, um kritische Anwendungen zu betreiben, von personalisierten Empfehlungen bis hin zur Erkennung von Betrug.

Ich habe aus erster Hand gesehen, wie unentdeckte Drifts zu erheblichen Kosten führen können – verpasste Betrugserkennung, verlorene Einnahmen und suboptimale Geschäftsergebnisse, um nur einige zu nennen. Es ist daher von entscheidender Bedeutung, eine robuste Überwachung vorhanden zu haben, wenn Ihr Unternehmen eingesetzt hat oder plant, Modelle für maschinelles Lernen in Produktion einzusetzen.

Unentdeckt Modelldrift kann zu erheblichen finanziellen Verlusten, operativen Ineffizienzen und sogar zu einem Schaden an den Ruf eines Unternehmens führen. Um diese Risiken zu mildern, ist es wichtig, eine effektive Modellüberwachung zu haben, die betrifft:

  • Monitoring -Modellleistung
  • Überwachungsfunktionsverteilungen
  • Sowohl univariate als auch multivariate Drifts nachweisen

Ein intestine implementiertes Überwachungssystem kann dazu beitragen, Probleme frühzeitig zu identifizieren und viel Zeit, Geld und Ressourcen zu sparen.

In diesem umfassenden Leitfaden werde ich einen Rahmen für das Nachdenken und die Umsetzung von effektivem Rahmen geben Modellüberwachunghelfen Ihnen dabei, potenzielle Probleme voraus zu sein und die Stabilität und Zuverlässigkeit Ihrer Modelle in der Produktion zu gewährleisten.

Was ist der Unterschied zwischen Characteristic -Drift und Rating -Drift?

Der Rating -Drift bezieht sich auf eine allmähliche Änderung der Verteilung der Modellwerte. Wenn dies deaktiviert bleibt, kann dies zu a führen Rückgang der Modellleistungim Laufe der Zeit das Modell weniger genau.

Andererseits tritt eine Funktion des Merkmals auf, wenn ein oder mehrere Funktionen Änderungen in der Verteilung erleben. Diese Änderungen der Merkmalswerte können die zugrunde liegenden Beziehungen beeinflussen, die das Modell gelernt hat, und führen letztendlich zu ungenauen Modellvorhersagen.

Simulation von Rating -Verschiebungen

Um Herausforderungen bei der Erkennung von Betrugserkennung in der realen Welt zu modellieren, habe ich einen synthetischen Datensatz mit fünf Finanztransaktionsfunktionen erstellt.

Der Referenzdatensatz repräsentiert die ursprüngliche Verteilung, während die Produktionsdatensatz führt Verschiebungen ein, um eine Erhöhung der Erhöhung zu simulieren Hochwertige Transaktionen ohne Pin-Überprüfung auf neueren Konten, Dies zeigt eine Zunahme des Betrugs.

Jede Funktion hat unterschiedliche zugrunde liegende Verteilungen:

  • Transaktionsmenge: Log-normale Verteilung (rechtsschwanger mit einem langen Schwanz)
  • Kontoalter (Monate): CLIT Normalverteilung zwischen 0 und 60 (unter der Annahme eines 5-jährigen Unternehmens)
  • Zeit seit der letzten Transaktion: Exponentialverteilung
  • Transaktionszahl: Poisson -Verteilung
  • Eingegebener PIN: Binomiale Verteilung.

Um die Modellwerte zu nähern, habe ich diesen Merkmalen zufällig Gewichte zugewiesen und eine Sigmoidfunktion angewendet, um Vorhersagen zwischen 0 und 1. zu beschränken. Dies ahmt nach, wie ein logistisches Regressionsbetrugsmodell Risikobewertungen erzeugt.

Wie in der folgenden Darstellung gezeigt:

  • Driftete Funktionen: Transaktionsbetrag, Kontoalter, Transaktionszahl und eingegebene PIN Alle erfahrenen Verschiebungen in Verteilung, Skala oder Beziehungen.
Verteilung von drifteten Merkmalen (Bild des Autors)
  • Stabile Funktion: Zeit seit der letzten Transaktion blieb unverändert.
Verteilung des stabilen Merkmals (Bild des Autors)
  • Driptte Ergebnisse: Infolge der drifteten Merkmale hat sich auch die Verteilung der Modellbewertungen geändert.
Verteilung der Modellwerte (Bild des Autors)

Mit diesem Setup können wir analysieren, wie sich die Funktionsdrift -Drifts in der Produktion auswirkt.

Erkennungsmodell -Rating -Drift mit PSI erkennen

Um die Modellbewertungen zu überwachen, habe ich die Populationsstabilitätsindex (PSI) verwendet, um zu messen, wie viel Modell -Rating -Verteilung im Laufe der Zeit verschoben wurde.

PSI arbeitet durch Binning Steady -Modellwerte und verglichen den Anteil der Bewertungen in jedem Bin zwischen Referenz- und Produktionsdatensätzen. Es vergleicht die Unterschiede in den Anteilen und deren logarithmischen Verhältnissen, um eine einzelne Zusammenfassung Statistik zu berechnen, um die Drift zu quantifizieren.

Python Durchführung:

# Outline perform to calculate PSI given two datasets
def calculate_psi(reference, manufacturing, bins=10):
  # Discretize scores into bins
  min_val, max_val = 0, 1
  bin_edges = np.linspace(min_val, max_val, bins + 1)

  # Calculate proportions in every bin
  ref_counts, _ = np.histogram(reference, bins=bin_edges)
  prod_counts, _ = np.histogram(manufacturing, bins=bin_edges)

  ref_proportions = ref_counts / len(reference)
  prod_proportions = prod_counts / len(manufacturing)
  
  # Keep away from division by zero
  ref_proportions = np.clip(ref_proportions, 1e-8, 1)
  prod_proportions = np.clip(prod_proportions, 1e-8, 1)

  # Calculate PSI for every bin
  psi = np.sum((ref_proportions - prod_proportions) * np.log(ref_proportions / prod_proportions))

  return psi
  
# Calculate PSI
psi_value = calculate_psi(ref_data('model_score'), prod_data('model_score'), bins=10)
print(f"PSI Worth: {psi_value}")

Nachfolgend finden Sie eine Zusammenfassung, wie PSI -Werte interpretiert werden sollen:

  • Psi <0,1: Keine Drift oder eine sehr geringfügige Drift (Verteilungen sind quick identisch).
  • 0,1 ≤ psi <0,25: Einige Drift. Die Verteilungen sind etwas anders.
  • 0,25 ≤ psi <0,5: Gemäßigte Drift. Eine merkliche Verschiebung zwischen Referenz- und Produktionsverteilungen.
  • PSI ≥ 0,5: Signifikante Drift. Es gibt eine große Verschiebung, was darauf hinweist, dass sich die Verteilung der Produktion erheblich aus den Referenzdaten geändert hat.
Histogramm der Modell -Rating -Verteilungen (Bild des Autors)

Der PSI -Wert von 0,6374 schlägt eine signifikante Drift zwischen unseren Referenz- und Produktionsdatensätzen vor. Dies entspricht dem Histogramm der Modell -Rating -Verteilungen, die die Verschiebung in Richtung höherer Produktionswerte visuell bestätigen – auf einen Anstieg der riskanten Transaktionen hinweisen.

Erkennungsfunktionsdrift

Kolmogorov-Smirnov-Take a look at für numerische Merkmale

Der Kolmogorov-Smirnov (KS) -Take a look at ist meine bevorzugte Methode zum Erkennen von Drift in numerischen Merkmalen, da dies der Fall ist nicht parametrisch, Das heißt, es geht nicht um eine Normalverteilung.

Der Take a look at vergleicht die Verteilung einer Funktion in den Referenz- und Produktionsdatensätzen, indem die maximale Differenz zwischen den empirischen kumulativen Verteilungsfunktionen (ECDFs) gemessen wird. Die resultierende KS -Statistik reicht von 0 bis 1:

  • 0 zeigt keinen Unterschied zwischen den beiden Verteilungen an.
  • Werte näher an 1 deuten auf eine größere Verschiebung hin.

Python -Implementierung:

# Create an empty dataframe
ks_results = pd.DataFrame(columns=('Characteristic', 'KS Statistic', 'p-value', 'Drift Detected'))

# Loop by all options and carry out the Ok-S take a look at
for col in numeric_cols:
    ks_stat, p_value = ks_2samp(ref_data(col), prod_data(col))
    drift_detected = p_value < 0.05
		
		# Retailer ends in the dataframe
    ks_results = pd.concat((
        ks_results,
        pd.DataFrame({
            'Characteristic': (col),
            'KS Statistic': (ks_stat),
            'p-value': (p_value),
            'Drift Detected': (drift_detected)
        })
    ), ignore_index=True)

Im Folgenden finden Sie ECDF -Diagramme der vier numerischen Funktionen in unserem Datensatz:

ECDFs von vier numerischen Merkmalen (Bild des Autors)

Betrachten wir das Konto-Alter-Characteristic als Beispiel: Die X-Achse repräsentiert das Kontoalter (0-50 Monate), während die y-Achse das ECDF sowohl für Referenz- als auch für die Produktionsdatensätze zeigt. Der Produktionsdatensatz verdrängt gegenüber neueren Konten, da sie einen größeren Anteil an Beobachtungen mit niedrigerem Kontoalter aufweist.

Chi-Quadrat-Take a look at für kategoriale Merkmale

Um Verschiebungen in kategorialen und booleschen Funktionen zu erkennen, benutze ich den Chi-Quadrat-Take a look at gerne.

Dieser Take a look at vergleicht die Frequenzverteilung einer kategorialen Funktion in den Referenz- und Produktionsdatensätzen und gibt zwei Werte zurück:

  • Chi-Quadrat-Statistik: Ein höherer Wert zeigt eine größere Verschiebung zwischen Referenz- und Produktionsdatensätzen an.
  • P-Wert: Ein p-Wert unter 0,05 legt nahe, dass der Unterschied zwischen Referenz- und Produktionsdatensätzen statistisch signifikant ist und die potenzielle Merkmalsdrift anzeigt.

Python -Implementierung:

# Create empty dataframe with corresponding column names
chi2_results = pd.DataFrame(columns=('Characteristic', 'Chi-Sq. Statistic', 'p-value', 'Drift Detected'))

for col in categorical_cols:
    # Get normalized worth counts for each reference and manufacturing datasets
    ref_counts = ref_data(col).value_counts(normalize=True)
    prod_counts = prod_data(col).value_counts(normalize=True)

    # Guarantee all classes are represented in each
    all_categories = set(ref_counts.index).union(set(prod_counts.index))
    ref_counts = ref_counts.reindex(all_categories, fill_value=0)
    prod_counts = prod_counts.reindex(all_categories, fill_value=0)

    # Create contingency desk
    contingency_table = np.array((ref_counts * len(ref_data), prod_counts * len(prod_data)))

    # Carry out Chi-Sq. take a look at
    chi2_stat, p_value, _, _ = chi2_contingency(contingency_table)
    drift_detected = p_value < 0.05

    # Retailer ends in chi2_results dataframe
    chi2_results = pd.concat((
        chi2_results,
        pd.DataFrame({
            'Characteristic': (col),
            'Chi-Sq. Statistic': (chi2_stat),
            'p-value': (p_value),
            'Drift Detected': (drift_detected)
        })
    ), ignore_index=True)

Die Chi-Quadrat-Statistik von 57,31 mit einem p-Wert von 3,72E-14 bestätigt eine große Verschiebung in unserer kategorialen Funktion. Entered PIN. Dieser Befund übereinstimmt mit dem folgenden Histogramm, das die Verschiebung visuell veranschaulicht:

Verteilung des kategorialen Merkmals (Bild des Autors)

Erkennen multivariater Verschiebungen

Spearman -Korrelation Für Verschiebungen in paarweisen Wechselwirkungen

Neben der Überwachung einzelner Characteristic -Verschiebungen ist es wichtig, zu verfolgen Verschiebungen in Beziehungen oder Interaktionen zwischen Merkmalenbekannt als multivariate Verschiebungen. Selbst wenn die Verteilungen einzelner Merkmale stabil bleiben, können multivariate Verschiebungen sinnvolle Unterschiede in den Daten signalisieren.

Standardmäßig Pandas ‚ .corr() Die Funktion berechnet die Pearson -Korrelation, die nur lineare Beziehungen zwischen Variablen erfasst. Jedoch, Beziehungen zwischen Merkmalen sind oft nichtlinear Folgen Sie dennoch einem konsequenten Pattern.

Um dies zu erfassen, verwenden wir Spearman -Korrelation zu messen monotonische Beziehungen zwischen Merkmalen. Es erfasst, ob Funktionen zusammen ändern In konsequenter Richtung, selbst wenn ihre Beziehung nicht streng linear ist.

Um Verschiebungen in den Merkmalsbeziehungen zu bewerten, vergleichen wir:

  • Referenzkorrelation (ref_corr): Erfasst historische Merkmalsbeziehungen im Referenzdatensatz.
  • Produktionskorrelation (prod_corr): Erfasst neue Characteristic -Beziehungen in der Produktion.
  • Absoluter Unterschied in der Korrelation: Misst, wie viel Merkmalsbeziehungen zwischen Referenz- und Produktionsdatensätzen verschoben haben. Höhere Werte zeigen signifikantere Verschiebungen an.

Python -Implementierung:

# Calculate correlation matrices
ref_corr = ref_data.corr(technique='spearman')
prod_corr = prod_data.corr(technique='spearman')

# Calculate correlation distinction
corr_diff = abs(ref_corr - prod_corr)

Beispiel: Änderung der Korrelation

Schauen wir uns nun die Korrelation zwischen an transaction_amount Und account_age_in_months:

  • In ref_corrDie Korrelation beträgt 0,00095, was auf eine schwache Beziehung zwischen den beiden Merkmalen hinweist.
  • In prod_corrDie Korrelation beträgt -0,0325, was auf eine schwache unfavorable Korrelation hinweist.
  • Der absolute Unterschied in der Spearman -Korrelation beträgt 0,0335, was eine kleine, aber spürbare Verschiebung ist.

Der absolute Unterschied in der Korrelation zeigt a an Schicht in der Beziehung zwischen transaction_amount Und account_age_in_months.

Früher gab es keine Beziehung zwischen diesen beiden Merkmalen, aber der Produktionsdatensatz zeigt, dass es jetzt eine schwache unfavorable Korrelation gibt, was bedeutet, dass neuere Konten höhere Transaktionsmengen aufweisen. Das ist genau richtig!

Autocoder für komplexe, hochdimensionale multivariate Verschiebungen

Zusätzlich zur Überwachung paarweise Wechselwirkungen können wir auch nach Verschiebungen hinsichtlich weiterer Dimensionen in den Daten suchen.

Autocoder sind leistungsstarke Werkzeuge zum Erkennen Hochdimensionale multivariate Verschiebungenwo sich mehrere Merkmale gemeinsam in einer Weise ändern, die möglicherweise nicht aus der Betrachtung individueller Merkmalsverteilungen oder paarweise Korrelationen ersichtlich ist.

Ein Autocoder ist ein neuronales Netzwerk, das eine komprimierte Darstellung von Daten durch zwei Komponenten lernt:

  • Encoder: Komprimiert Eingabedaten in eine niedrigerdimensionale Darstellung.
  • Decoder: Rekonstruiert den ursprünglichen Eingang aus der komprimierten Darstellung.

Um Verschiebungen zu erkennen, vergleichen wir die rekonstruierte Ausgabe zu dem Originaleingabe und berechnen die Wiederaufbauverlust.

  • Niedriger Wiederaufbauverlust → Der AutoCodierer rekonstruiert die Daten erfolgreich, was bedeutet, dass die neuen Beobachtungen dem ähnlich sind, was sie gesehen und gelernt hat.
  • Hoher Wiederaufbauverlust → Die Produktionsdaten weicht erheblich von den gelernten Mustern ab, was auf potenzielle Drift hinweist.

Im Gegensatz zu herkömmlichen Driftkennzahlen, auf die sich konzentrieren Einzelne Merkmale oder paarweise BeziehungenAutoCoders Seize komplexe, nichtlineare Abhängigkeiten über mehrere Variablen gleichzeitig.

Python -Implementierung:

ref_features = ref_data(numeric_cols + categorical_cols)
prod_features = prod_data(numeric_cols + categorical_cols)

# Normalize the information
scaler = StandardScaler()
ref_scaled = scaler.fit_transform(ref_features)
prod_scaled = scaler.rework(prod_features)

# Cut up reference knowledge into practice and validation
np.random.shuffle(ref_scaled)
train_size = int(0.8 * len(ref_scaled))
train_data = ref_scaled(:train_size)
val_data = ref_scaled(train_size:)

# Construct autoencoder
input_dim = ref_features.form(1)
encoding_dim = 3 
# Enter layer
input_layer = Enter(form=(input_dim, ))
# Encoder
encoded = Dense(8, activation="relu")(input_layer)
encoded = Dense(encoding_dim, activation="relu")(encoded)
# Decoder
decoded = Dense(8, activation="relu")(encoded)
decoded = Dense(input_dim, activation="linear")(decoded)
# Autoencoder
autoencoder = Mannequin(input_layer, decoded)
autoencoder.compile(optimizer="adam", loss="mse")

# Prepare autoencoder
historical past = autoencoder.match(
    train_data, train_data,
    epochs=50,
    batch_size=64,
    shuffle=True,
    validation_data=(val_data, val_data),
    verbose=0
)

# Calculate reconstruction error
ref_pred = autoencoder.predict(ref_scaled, verbose=0)
prod_pred = autoencoder.predict(prod_scaled, verbose=0)

ref_mse = np.imply(np.energy(ref_scaled - ref_pred, 2), axis=1)
prod_mse = np.imply(np.energy(prod_scaled - prod_pred, 2), axis=1)

Die folgenden Diagramme zeigen die Verteilung des Rekonstruktionsverlusts zwischen beiden Datensätzen.

Verteilung des Rekonstruktionsverlusts zwischen Aktuellen und Vorhersagen (Bild des Autors)

Der Produktionsdatensatz hat einen höheren mittleren Rekonstruktionsfehler als der des Referenzdatensatzes, was auf eine Verschiebung der Gesamtdaten hinweist. Dies entspricht den Änderungen im Produktionsdatensatz mit einer höheren Anzahl neuerer Konten mit hochwertigen Transaktionen.

Zusammenfassung

Die Modellüberwachung ist eine wesentliche, aber oft übersehene Verantwortung für Datenwissenschaftler und Ingenieure für maschinelles Lernen.

Alle statistischen Methoden führten zu derselben Schlussfolgerung, die mit den beobachteten Verschiebungen in den Daten übereinstimmt: Sie erkannten Ein Pattern in der Produktion zu neueren Konten, die höherwertige Transaktionen durchführen. Diese Verschiebung führte zu höheren Modellwerten und signalisierte einen Anstieg des potenziellen Betrugs.

In diesem Beitrag habe ich Techniken zur Erkennung von Drift auf drei verschiedenen Ebenen abgedeckt:

  • Modell Rating Drift: Verwendung Bevölkerungsstabilitätsindex (Psi)
  • Individuelle Characteristic -Drift: Verwenden Kolmogorov-smirnov test für numerische Funktionen und Chi-Quadrat-Take a look at für kategorische Merkmale
  • Multivariate Drift: Verwenden Spearman -Korrelation für paarweise Interaktionen und Autoencoder Für hochdimensionale, multivariate Verschiebungen.

Dies sind nur einige der Techniken, auf die ich mich für eine umfassende Überwachung verlassen kann. Es gibt viele andere ebenso gültige statistische Methoden, die auch Drift effektiv erkennen können.

Erkennete Verschiebungen verweisen häufig auf zugrunde liegende Probleme, die weitere Untersuchungen rechtfertigen. Die Ursache könnte so schwerwiegend sein wie ein Datenerfassungsfehler oder so gering wie eine Zeitänderung wie die Zeitanpassungen für Tageslichteinsparungen.

Es gibt auch fantastische Python -Pakete wie offensichtlich.aidas automatisieren viele dieser Vergleiche. Ich glaube jedoch, dass es einen signifikanten Wert gibt, die statistischen Techniken hinter der Driftkennung eingehend zu verstehen, anstatt sich ausschließlich auf diese Instruments zu verlassen.

Wie ist der Modellüberwachungsprozess an Orten, an denen Sie gearbeitet haben?


Möchten Sie Ihre KI -Fähigkeiten aufbauen?

👉🏻 Ich leite die AI Weekender Und Schreiben Sie wöchentliche Weblog -Beiträge zu Knowledge Science, AI -Wochenendprojekten, Karriereberatung für Fachleute in Daten.


Ressourcen

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert