[PYTHON] Anti-reale virtuelle Probengenerierung: "DiCE"

Einführung

Die Interpretation des ML-Modells (Machine Learning) ist ein wichtiges Thema im Geschäftsbereich. Durch die Entwicklung eines ML-Modells mit hoher Schätzgenauigkeit und die Bewertung der "Entsprechung zwischen Ausgabe und Merkmalsmenge" Es wird möglich sein, Maßnahmen zu entwickeln, die geschäftliche Auswirkungen haben. Beispiel: "Projektleiterbedingungen" (Merkmale), die die "Erfolgswahrscheinlichkeit" erhöhen (Ausgabe)

In den letzten Jahren wurden verschiedene Algorithmen wie "ELI5", "LIME" und "SHAP" als Methoden zur Interpretation von ML-Modellen entwickelt. Der Inhalt dieser Algorithmen ist "Berechnung des Beitrags von Merkmalen zur Ausgabe", und bei einer solchen "Bewertung von Beiträgen" beschränkt sich die Interpretation des Modells auf "Beschreibung der Beziehung zwischen der Ausgabe und den Merkmalen". , Es gibt einen Punkt, an dem es schwierig ist, Beispielfunktionen für die Ausgabeoptimierung zu generieren.

"DiCE", entwickelt von Microsoft Research, ist ein Modellinterpretationsalgorithmus, der Anti-Real-Virtual berücksichtigt, und ein Algorithmus, der es ermöglicht, Stichproben von Merkmalsmengen zu erhalten, um die gewünschte Ausgabe zu erhalten. Es unterscheidet sich von anderen Algorithmen darin, dass es direkte Materialien durch Probengenerierung liefert.

In diesem Blog werden wir "DiCE", einen Modellinterpretationsalgorithmus, der Anti-Real-Virtual berücksichtigt, aufgreifen und die Umrisse des Algorithmusverständnisses zusammenfassen, indem wir das Originalpapier abonnieren und die Funktionsprüfung durch Implementierung durchführen.

反実仮想モデルによる説明
Quelle: https://www.microsoft.com/en-us/research/project/dice/

Inhaltsverzeichnis

--Einführung ――Was ist die Interpretation des ML-Modells?

Wie ist die Interpretation des ML-Modells?

Beim überwachten Lernen gibt das Trainingsmodell das vorhergesagte Etikett für die angegebenen Daten zurück. Zu diesem Zeitpunkt sind die folgenden Punkte in ML unklar.

・ Ist das aus dem Lernmodell erhaltene Vorhersageergebnis korrekt? ・ Können Sie den Kausalzusammenhang des Phänomens richtig lernen?

Um "Zuverlässigkeit von ML zu erlangen" und "sichere praktische Verwendung" zu erreichen, ist es notwendig, die Entsprechung zwischen Merkmalen und Ausgabe (Zielvariable) zu bewerten, um die obigen Fragen zu lösen. In diesem Blog wird die Bewertung dieser Korrespondenz als "Interpretation des ML-Modells" ausgedrückt.

機会学習に解釈とは
Abbildung: Wie ist die Interpretation des ML-Modells?

Abgesehen davon hat sich die Anzahl der Arbeiten zum Thema "ML-Interpretierbarkeit" in den letzten 20 Jahren etwa vervierfacht. Es ist möglich, dass die ML-Population mit der praktischen Anwendung der Entwicklung der ML-Modelltheorie einfach zugenommen hat, aber es scheint, dass es sich um ein Thema handelt, das eine bestimmte Anzahl von Interessen auf sich zieht. Quelle: https://beenkim.github.io/papers/BeenK_FinaleDV_ICML2017_tutorial.pdf

Übersicht über "DiCE"

・ Was ist DiCE?

MS.PNG

Ein Framework zum Auflisten von anti-realen virtuellen Beispielen, das von der Microsoft Research: Python-Bibliothek bereitgestellt wird

pip install dice_ml

Quelle: https://www.microsoft.com/en-us/research/project/dice/

・ DiCE-Konzept: "Interpretation des ML-Modells" durch "Anti-Real Virtual Sampling Generation"

Anti-Real Virtual: Das Gegenteil davon annehmen. Wie sagt man so etwas wie "Was wäre wenn ..."

反実仮想モデルによる説明

Abbildung: Interpretation des ML-Modells durch ein anti-reales virtuelles Modell

Derzeit werden Algorithmen zur Beschreibung der "Beziehung zwischen Ausgabe- und Merkmalsgrößen" wie "ELI5", "LIME" und "SHAP" entwickelt. Das Grundkonzept jedes Algorithmus ist "Berechnung des Beitrags von Merkmalen zur Ausgabe", und die Beziehung zur Ausgabe kann aus "positiv / negativ" und "groß / klein" des Beitrags interpretiert werden.

Andererseits ist es jedoch nicht möglich, den "optimalen Merkmalsbetrag" für die Ausgabeoptimierung nur durch "Beschreibung der Beziehung zwischen dem Ausgang und dem Merkmalsbetrag" zu berechnen, in der nur der "Beitragsgrad" berechnet wird.

Stellen Sie sich zum Beispiel den Fall vor, in dem ein maschinelles Lernmodell, das eine in der Abbildung gezeigte "Prüfung der Kreditvergabe" durchführt, die Beurteilung der Kreditvergabe eines Kandidaten implementiert. Die Merkmale eines Kandidaten sind durch Variablen wie "Alter", "Bildung" und "Vergangenheit der Kreditaufnahme" gekennzeichnet, und das Modell des maschinellen Lernens bestimmt die Kreditvergabe des Kandidaten basierend auf vorgelernten Mustern. ..

Angenommen, das Modell entscheidet, dass das Darlehen des Kandidaten "abgelehnt" wird.

In diesem Fall kann der herkömmliche Interpretationsalgorithmus erklären, "warum der Kandidat abgelehnt wurde", aber keinen konkreten Vorschlag machen, "wie kann dieser Kandidat Kredite aufnehmen?".

Die Lösung für dieses Problem ist das Grundkonzept von DiCE: "Anti-Real Virtual Sample Generation".

Mit DiCE ist es möglich, aus einem vorhandenen ML-Modell eine anti-reale virtuelle Stichprobe zu generieren und einen direkten Verbesserungsplan vorzulegen. Quelle: https://qiita.com/OpenJNY/items/ef885c357b4e0a1551c0

Beschreibung und Implementierung des DiCE-Algorithmus

・ Nutzungsdaten

In diesem Blog werden wir die Daten "Bankmarketing-Datensatz aus dem UCI Machine Learning Repository" verwenden, um den DiCE-Algorithmus zu erläutern. usi.PNG

Bei diesen Daten handelt es sich um Daten, die die Merkmalsmengen und Krediturteile für mehrere Mitglieder der Gesellschaft beschreiben, und die Zielvariable y wird auf Darlehen = {0: Nein, 1: Ja} gesetzt.

Tabelle: Bankmarketing-Datensatz: Nur einige Spalten im Datensatz anzeigen loan_data.PNG Quelle: http://archive.ics.uci.edu/ml/datasets/Bank+Marketing#

・ Durchfluss bis zur Probenahme

Die Richtlinien zur Problemeinstellung und Stichprobenerfassung in dieser Erläuterung sind nachstehend aufgeführt.

(Problemstellung)

    1. Einige Kandidaten können kein Darlehen ausleihen (Darlehen = 0: Nein)
  1. Es wurde ein ML-Modell entwickelt, das die Kredit- und Merkmalsmengen lernt.
    1. Die Kandidaten probieren die Darlehensbedingungen = 1: Ja (anti-real virtuell) aus dem Modell.

(Stichprobenrichtlinie) Bereiten Sie den Speichervektor c für die anti-reale virtuelle Probe vor und berechnen Sie die Ausgabe f (c) aus dem ML-Modell. → Definieren Sie eine Verlustfunktion, die kleiner wird, wenn das Etikett die gewünschte Klasse erreicht (Darlehen = 1). → Extrahieren Sie die Probe c, wenn Sie den Extremwert nehmen. = Anti-reales virtuelles Beispiel

問題設定.png Abbildung: Problemstellung und Probenahmefluss

・ Algorithmuskonzept

DiCE verfügt über einen gewissen Einfallsreichtum bei der Minimierung der oben genannten Optimierungsfunktion. Ich werde diese sieben Konzepte hier erklären. Darüber hinaus werden die unten aufgeführten Formeln aus dem Originalpapier zitiert. Quelle: https://www.microsoft.com/en-us/research/publication/explaining-machine-learning-classifiers-through-diverse-counterfactual-examples/

    1. "Durchführbarkeit" Selbst wenn eine Stichprobe, die zu weit vom Faktenvektor entfernt ist (Darlehen = 0: Nein), als anti-realer virtueller Vektor (c) abgetastet wird, ist sie unrealistisch und kann nicht realisiert werden.

Daher wird in DiCE der Abstand zwischen dem Vektor (Darlehen = 0: Nein) und dem anti-realen virtuellen Vektor (c) zur Bewertungsfunktion hinzugefügt, und die Optimierung wird angewendet, damit der Abstand nicht zu weit wird. 望まないデータ群.png

  1. ** "Vielfalt" ** Wenn mehrere virtuelle Anti-Real-Vektoren (c) abgetastet werden, ist es besser, verschiedene Auswahlmuster zu haben, und ich möchte nicht, dass ähnliche Vektoren enthalten sind.

Daher definieren wir den Abstand zwischen mehreren anti-realen virtuellen Vektoren (c_i) und optimieren ihn so, dass der Wert so weit wie möglich ist.

反実仮想モデルによる説明
    1. ** "Hige Verlust für Verlustfunktion übernehmen" ** Die Hinweisfunktion, die manchmal für SVM usw. verwendet wird, wird als Verlust verwendet. honge_yloss.PNG
  1. ** "Unterscheidung zwischen kontinuierlichen Variablen und kategorialen Variablen" ** DiCE berechnet den Abstand zwischen mehrdimensionalen Daten und definiert "Machbarkeit" und "Diversität" (1.2.). Zu diesem Zeitpunkt wird der Abstand für die kontinuierliche Variable mit kontinuierlicher Verteilung und die kategoriale Variable, die aufgrund der unterschiedlichen Verteilungsmethode zu einer Dummy-Variablen gemacht wurde, separat berechnet (wahrscheinlich ... kann dies falsch sein).

  2. ** "Gewichtsanpassung der Merkmalsmenge durch Berechnung des Abstands unter Berücksichtigung der Streuung (kontinuierliche Variable)" ** Wenn der Abstand zwischen mehrdimensionalen Vektoren berücksichtigt wird, ist es nicht möglich, den geeigneten Abstand zwischen Datengruppen nur anhand des Durchschnittswerts (oder Medianwerts) zu messen. Dies liegt daran, dass sich der Abstand der Datengruppe aufgrund der Streuung der Daten ändert, wenn die Varianz für jede Dimensionsvariable unterschiedlich ist. In solchen Fällen ist es notwendig, die Entfernung unter Berücksichtigung der Streuung wie der Maharabis-Entfernung zu berücksichtigen. DiCE verwendet "Middle Value Variation: MAD", das robuster als der Mittelwert ist, um den Abstand in Bezug auf kontinuierliche Variablen in den vom Dispersion berücksichtigten Typ umzuwandeln. dist_cont.PNG

MAD:median absolute deviation

Wenn für Variablen mit einem großen MAD keine Gewichtung durchgeführt wird, treten "Wertschwankungen in einem größeren Bereich" auf, was dazu führt, dass unrealistische Merkmalsgrößen abgetastet werden.

  1. ** "Auswahl der zu ändernden Funktionen" ** Als echtes Problem der virtuellen Anti-Real-Abtastung gibt es Funktionen, die nicht geändert werden können.
  1. ** "Der Kompromiss zwischen Machbarkeit und Vielfalt" **

Die von DiCE definierte Optimierungsfunktion verfügt über Hyperparameter, die die Gewichte "Machbarkeit" und "Diversität" festlegen. Durch Anpassen dieses Wertes kann jedes Verhältnis geändert werden. (Obwohl es in diesem Bericht nicht beschrieben wird, scheint es einen Bewertungsindex für nützliche Stichproben zu geben, daher denke ich, dass die Parameteroptimierung mithilfe dieses Index durchgeführt werden kann.)

dist_cat.PNG

・ Definition der Optimierungsfunktion

Definieren Sie unter Berücksichtigung des obigen Konzepts die zu optimierende Funktion.

Die Optimierungsfunktion kann unter Berücksichtigung der Abtastlogik des anti-realen virtuellen Vektors (c_i) und jedes Konzepts wie folgt beschrieben werden. opt_function.PNG λ1 und λ2 sind Hyperparameter

・ Versuchen Sie es mit DiCE

Lassen Sie uns nun mit DiCE ein anti-reales virtuelles Beispiel erstellen.

Diese Implementierung bezieht sich auf das Microsoft-Dokument (GitHub). Quelle: https://www.microsoft.com/en-us/research/project/dice/

#Library import
import pandas as pd
import numpy as np
import dice_ml
import tensorflow as tf
from tensorflow import keras
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)
#Daten lesen und Zielvariablen-Dummy machen
data = pd.read_csv('bank-full.csv'
                   ,sep=';'
                   ,usecols=['age', 'job', 'marital', 'education', 'default', 'balance', 'housing','loan'])
data['loan'] = pd.get_dummies(data.loan,drop_first=True)
data.head()

loan_data.PNG

#Datenstruktur für DiCE definieren
d = dice_ml.Data(dataframe=data, continuous_features=['age', 'balance'], outcome_name='loan')
#ML-Modell lernen
train, _ = d.split_data(d.normalize_data(d.one_hot_encoded_data))
X_train = train.loc[:, train.columns != 'loan']
y_train = train.loc[:, train.columns == 'loan']

model = keras.Sequential()
model.add(keras.layers.Dense(20, input_shape=(X_train.shape[1],), kernel_regularizer=keras.regularizers.l1(0.001), activation=tf.nn.relu))
model.add(keras.layers.Dense(1, activation=tf.nn.sigmoid))
model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adam(0.01), metrics=['accuracy'])
model.fit(X_train, y_train, validation_split=0.20, epochs=100, verbose=0, class_weight={0:1,1:2})
#Stellen Sie dem DiCE-Objekt ein ML-Modell zur Verfügung
backend = 'TF'+tf.__version__[0] # TF1
m = dice_ml.Model(model=model, backend=backend)
#Anti-reales virtuelles Stichprobenmodell
exp = dice_ml.Dice(d, m)
#Einstellung der Abfrageinstanz: Festlegen des Referenzwerts für Anti-Real Virtual (ich verstehe das)
query_instance = {'age':20,
                  'job':'blue-collar',
                  'marital':'single',
                  'education':'secondary',
                  'default':'no',
                  'balance': 129,
                  'housing':'yes'}
#Generierung von anti-realem virtuellem Sampling
dice_exp = exp.generate_counterfactuals(query_instance
                                        ,total_CFs=4
                                        ,desired_class="opposite")
#total_CFs: Anzahl der zu generierenden Vektoren
#desired_Klasse: Beispielklasse, die Sie generieren möchten: Gegenteil bei Anti-Real Virtual
#Visualisierung der Probenergebnisse
dice_exp.visualize_as_dataframe()

loan_result.PNG

Wenn wir uns die Stichprobenergebnisse ansehen, können wir sehen, dass vier Stichproben mit Ergebnis = 1 für Ergebnis = 0 generiert werden. Die Darlehensspalte ist der Eingabewert für die Sigmoidfunktion, und es ist ersichtlich, dass Ergebnis = 0 ungefähr 0,3 und Ergebnis = 1 0,5 oder mehr ist.

Wenn wir uns die Merkmale ansehen, können wir feststellen, dass sich Alter, Beruf, Ehe usw. geändert haben. Sicherlich können Sie sehen, dass der von der festgelegten Abfrageinstanz abweichende Funktionsbetrag generiert wird.

Stellen Sie außerdem Folgendes ein, wenn Sie "das Gewicht für die Feature-Menge ändern" oder "die zu ändernde Feature-Menge angeben".

feature_weights = {'age': 1}#Altersgewicht → 1
features_to_vary = ['age','job']#Ändern Sie nur Alter und Beruf
dice_exp = exp.generate_counterfactuals(query_instance
                                        ,total_CFs=4
                                        ,desired_class="opposite"
                                        ,feature_weights=feature_weights
                                        ,features_to_vary=features_to_vary)

Zusammenfassung

In diesem Blog haben wir "DiCE", einen Modellinterpretationsalgorithmus, der Anti-Real-Virtual berücksichtigt, aufgegriffen und die Umrisse des Algorithmusverständnisses zusammengefasst, indem wir das Originalpapier abonniert und die Funktionsprüfung durch Implementierung durchgeführt haben. DiCE unterscheidet sich von anderen Algorithmen hinsichtlich der "direkten Materialbereitstellung durch Probengenerierung", und ich denke, es wird zur Interpretation facettenreicher Modelle beitragen. Der Inhalt des Originalpapiers ist nicht nur der beschriebene Inhalt, sondern es gibt einige Punkte, die ich noch nicht befolgt habe, und ich denke, es gibt Fehler. Ich würde es begrüßen, wenn Sie darauf hinweisen könnten.

das ist alles.

Verweise

・ Willkommen zur Dokumentation von ELI5! (ELI5) https://eli5.readthedocs.io/en/latest/ ・ "Warum sollte ich Ihnen vertrauen?": Erklären der Vorhersagen eines Klassifikators (LIME) https://arxiv.org/abs/1602.04938#:~:text=version%2C%20v3)%5D-,%22Why%20Should%20I%20Trust%20You%3F%22%3A%20Explaining,the%20Predictions%20of%20Any%20Classifier&text=In%20this%20work%2C%20we%20propose,model%20locally%20around%20the%20prediction.

・ Versuchen Sie, das Vorhersageergebnis des maschinellen Lernens mit LIME zu interpretieren https://qiita.com/fufufukakaka/items/d0081cd38251d22ffebf ・ Erklärbare KI: ELI5, LIME und SHAP (Kaggle-Kernel) https://www.kaggle.com/kritidoneria/explainable-ai-eli5-lime-and-shap ・ DiCE: Verschiedene kontrafaktische Erklärungen für Klassifikatoren für maschinelles Lernen (DiCE) https://www.microsoft.com/en-us/research/project/dice/ https://arxiv.org/pdf/1905.07697.pdf(転記してある数式はすべてここから) ・ DiCE: Interpretations- / Erklärungsmethode des maschinellen Lernmodells anhand einer anti-realen virtuellen Stichprobe https://qiita.com/OpenJNY/items/ef885c357b4e0a1551c0 ・ Einführende statistische kausale Argumentation: Judea Pearl (Autorin), Madelyn Glymour (Autorin), Nicholas P. Jewell (Autorin), Hiroshi Ochiumi (Übersetzung) https://www.amazon.co.jp/%E5%85%A5%E9%96%80-%E7%B5%B1%E8%A8%88%E7%9A%84%E5%9B%A0%E6%9E%9C%E6%8E%A8%E8%AB%96-Judea-Pearl/dp/4254122411 ・ Überblick über CounterFactual Machine Learning (Anti-Real Virtual Machine Learning) https://usaito.github.io/files/190729_sonyRD.pdf ・ Interpretierbares maschinelles Lernen: Die Aufregung, das Konkrete und die Fragen https://beenkim.github.io/papers/BeenK_FinaleDV_ICML2017_tutorial.pdf

Recommended Posts

Anti-reale virtuelle Probengenerierung: "DiCE"