[PYTHON] Génération d'échantillons virtuels anti-réels: "DiCE"

introduction

L'interprétation du modèle ML (Machine Learning) est un enjeu important dans le domaine des affaires. En développant un modèle ML avec une précision d'estimation élevée et en évaluant la «correspondance entre la sortie et la quantité de caractéristiques», Il sera possible de proposer des mesures qui auront un effet commercial. ex: "Conditions pour le chef de projet" (quantité de fonctionnalités) qui augmentent la "probabilité de succès" (sortie)

Ces dernières années, divers algorithmes tels que "ELI5", "LIME" et "SHAP" ont été développés comme méthodes d'interprétation des modèles ML. Le contenu de ces algorithmes est "le calcul de la contribution de la caractéristique à la sortie", et dans une telle "évaluation de la contribution", l'interprétation du modèle est limitée à la "description de la relation entre la sortie et la caractéristique". , Il est difficile de générer des exemples d'entités pour l'optimisation de la sortie.

"DiCE" développé par Microsoft Research est un algorithme d'interprétation de modèle qui considère le virtuel anti-réel, et est un algorithme qui permet l'échantillonnage de quantité de caractéristiques pour obtenir la sortie souhaitée. Il diffère des autres algorithmes en ce qu'il fournit des matériaux directs par génération d'échantillons.

Dans ce blog, nous reprendrons "DiCE", qui est un algorithme d'interprétation de modèle qui considère le virtuel anti-réel, et résumerons les grandes lignes de la compréhension de l'algorithme en souscrivant au papier original et au contrôle de fonctionnement par implémentation.

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

table des matières

--Introduction ―― Quelle est l'interprétation du modèle ML?

Quelle est l'interprétation du modèle ML?

Dans l'apprentissage supervisé, le modèle d'apprentissage renvoie l'étiquette prédite pour les données données. Pour le moment, les points suivants ne sont pas clairs en ML.

・ Le résultat de la prédiction obtenu à partir du modèle d'apprentissage est-il correct? ・ Êtes-vous capable d'apprendre correctement la relation causale du phénomène?

Afin "d'acquérir la fiabilité de ML" et "une utilisation pratique sûre", il est nécessaire d'évaluer la correspondance entre la quantité de caractéristiques et la sortie (variable objective) afin de résoudre la question ci-dessus. Dans ce blog, l'évaluation de cette correspondance est exprimée comme "interprétation du modèle ML".

機会学習に解釈とは
Figure: Quelle est l'interprétation du modèle ML?

Soit dit en passant, le nombre d'articles sur le thème «interprétabilité du ML» a été multiplié par quatre au cours des 20 dernières années. Il est possible que la population de ML ait simplement augmenté avec l'application pratique du développement de la théorie des modèles de ML, mais il semble que ce soit un sujet qui attire un certain nombre d'intérêts. Source: https://beenkim.github.io/papers/BeenK_FinaleDV_ICML2017_tutorial.pdf

Présentation de "DiCE"

・ Qu'est-ce que DiCE?

MS.PNG

Un cadre pour énumérer des échantillons virtuels anti-réels fournis par Microsoft Research: bibliothèque Python

pip install dice_ml

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

・ Concept DiCE: "Interprétation du modèle ML" par "génération d'échantillons virtuels anti-réels"

Anti-réel virtuel: en supposant le contraire du fait. Comment dire quelque chose comme "Et si ..."

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

Figure: Interprétation du modèle ML par modèle virtuel anti-réel

Actuellement, des algorithmes pour décrire la "relation entre la sortie et les quantités de caractéristiques" comme "ELI5", "LIME" et "SHAP" sont en cours de développement. Le concept de base de chaque algorithme est "le calcul de la contribution des caractéristiques à la sortie", et la relation avec la sortie peut être interprétée à partir des valeurs "positive / négative" et "grande / petite" de la contribution.

Cependant, d'un autre côté, il n'est pas possible de calculer la "quantité de caractéristique optimale" pour l'optimisation de la sortie uniquement par "description de la relation entre la sortie et la quantité de caractéristique" dans laquelle seul le "degré de contribution" est calculé.

Par exemple, considérons le cas où un modèle d'apprentissage automatique qui effectue un «examen de prêt de prêt» comme indiqué dans la figure met en œuvre le jugement de prêt de tout candidat. Les caractéristiques de tout candidat sont caractérisées par des variables telles que «âge», «éducation» et «antécédents d'emprunt», et le modèle d'apprentissage automatique détermine les prêts du candidat sur la base de modèles pré-appris. ..

Et supposons que le modèle décide que le prêt du candidat est «rejeté».

Dans ce cas, l'algorithme d'interprétation conventionnel peut expliquer "pourquoi le candidat a été rejeté", mais ne peut pas donner une proposition concrète de "comment ce candidat peut-il emprunter?".

La solution à ce problème est le concept de base de DiCE: "Anti-real virtual sample generation".

Avec DiCE, il est possible de générer un échantillon virtuel anti-réel à partir d'un modèle ML existant et de présenter un plan d'amélioration directe. Source: https://qiita.com/OpenJNY/items/ef885c357b4e0a1551c0

Description et implémentation de l'algorithme DiCE

· Des données d'utilisation

Dans ce blog, nous utiliserons les données «Bank Marketing Data Set from UCI Machine Learning Repository» pour expliquer l'algorithme DiCE. usi.PNG

Ces données sont des données qui décrivent les quantités de caractéristiques et les jugements de prêt pour plusieurs membres de la société, et la variable objective y est définie sur prêt = {0: Non, 1: Oui}.

Tableau: Ensemble de données de marketing bancaire: afficher uniquement certaines colonnes de l'ensemble de données loan_data.PNG Source: http://archive.ics.uci.edu/ml/datasets/Bank+Marketing#

・ Débit jusqu'à l'échantillonnage

La définition du problème et la politique d'échantillonnage dans cette explication sont présentées ci-dessous.

(Problème de réglage)

    1. Certains candidats ne peuvent pas emprunter de prêt (prêt = 0: Non)
  1. Un modèle ML a été développé pour apprendre les prêts et les fonctionnalités.
    1. Les candidats échantillonnent les conditions de prêt = 1: Oui (virtuel anti-réel) à partir du modèle.

(Politique d'échantillonnage) Préparez le vecteur de stockage c pour l'échantillon virtuel anti-réel et calculez la sortie f (c) du modèle ML. → Définir une fonction de perte qui devient plus petite lorsque le label devient la classe souhaitée (prêt = 1) → Extraire l'échantillon c lors de la prise de la valeur extrême. = Échantillon virtuel anti-réel

問題設定.png Figure: Définition du problème et flux d'échantillonnage

・ Concept d'algorithme

DiCE a une certaine ingéniosité mise en œuvre pour minimiser la fonction d'optimisation ci-dessus. J'expliquerai ces sept concepts ici. De plus, les formules qui apparaissent ci-dessous sont tirées du document original. Source: https://www.microsoft.com/en-us/research/publication/explaining-machine-learning-classifiers-through-diverse-counterfactual-examples/

    1. "Faisabilité" Même si un échantillon trop éloigné du vecteur de fait (prêt = 0: Non) est échantillonné comme un vecteur virtuel anti-réel (c), il est irréaliste et ne peut pas être réalisé.

Par conséquent, DiCE ajoute la distance entre le vecteur (prêt = 0: Non) et le vecteur virtuel anti-réel (c) à la fonction d'évaluation, et l'optimise pour que la distance ne devienne pas trop éloignée. 望まないデータ群.png

  1. ** "La diversité" ** Lors de l'échantillonnage de plusieurs vecteurs virtuels anti-réels (c), il est préférable d'avoir différents modèles de sélection, et je ne veux pas que des vecteurs similaires soient inclus.

Par conséquent, nous définissons la distance entre plusieurs vecteurs virtuels anti-réels (c_i) et optimisons la valeur autant que possible.

反実仮想モデルによる説明
    1. ** "Adopter la perte de charnière pour la fonction de perte" ** La fonction d'indication qui est parfois utilisée pour SVM etc. est utilisée comme perte. honge_yloss.PNG
  1. ** "Distinction entre les variables continues et les variables catégorielles" ** DiCE calcule la distance entre les données multidimensionnelles et définit la «faisabilité» et la «diversité» (1.2.). À ce moment-là, la distance est calculée séparément pour la variable continue qui prend une distribution continue et la variable catégorielle qui est transformée en variable fictive en raison de la différence dans la méthode de distribution (probablement ... cela peut être faux).

  2. ** "Ajustement du poids de la quantité d'entités en calculant la distance en tenant compte de la dispersion (variable continue)" ** Lorsqu'on considère la distance entre les vecteurs multidimensionnels, la valeur moyenne (ou valeur médiane) seule ne peut pas mesurer la distance appropriée entre les groupes de données. En effet, si la variance est différente pour chaque variable dimensionnelle, la distance du groupe de données changera en raison de la dispersion des données. Dans de tels cas, il est nécessaire de considérer la distance compte tenu de la dispersion telle que la distance de Maharabis. DiCE utilise la "Variation de la valeur moyenne: MAD", qui est plus robuste que la valeur moyenne, pour convertir la distance liée aux variables continues en un type de dispersion considéré. dist_cont.PNG

MAD:median absolute deviation

Si la pondération n'est pas effectuée pour les variables avec un MAD élevé, des «fluctuations de valeur dans une plage plus large» se produiront, ce qui entraînera l'échantillonnage de quantités de caractéristiques irréalistes.

  1. ** "Sélection des fonctionnalités à modifier" ** En tant que véritable problème d'échantillonnage virtuel anti-réel, il existe des fonctionnalités qui ne peuvent pas être modifiées.
  1. ** "Le compromis entre faisabilité et diversité" **

La fonction d'optimisation définie par DiCE a des hyperparamètres qui fixent les poids de «faisabilité» et de «diversité». En ajustant cette valeur, chaque rapport peut être modifié. (Bien que cela ne soit pas décrit dans ce rapport, il semble qu'il existe un indice d'évaluation pour un échantillonnage utile, donc je pense que le réglage des paramètres peut être effectué en utilisant cet index.)

dist_cat.PNG

・ Définition de la fonction d'optimisation

Après avoir considéré le concept ci-dessus, définissez la fonction à optimiser.

La fonction d'optimisation peut être décrite comme suit, en considérant la logique d'échantillonnage du vecteur virtuel anti-réel (c_i) et de chaque concept. opt_function.PNG λ1 et λ2 sont des hyper paramètres

・ Essayez d'utiliser DiCE

Maintenant, générons un échantillon virtuel anti-réel en utilisant DiCE.

Cette implémentation fait référence au document Microsoft (GitHub). Source: 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)
#Lire les données et rendre la variable objective fictive
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

#Définir la structure de données pour DiCE
d = dice_ml.Data(dataframe=data, continuous_features=['age', 'balance'], outcome_name='loan')
#Modèle d'apprentissage ML
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})
#Fournir un modèle ML à l'objet DiCE
backend = 'TF'+tf.__version__[0] # TF1
m = dice_ml.Model(model=model, backend=backend)
#Modèle d'échantillonnage virtuel anti-réel
exp = dice_ml.Dice(d, m)
#Paramètre d'instance de requête: définition de la valeur de référence pour le virtuel anti-réel (je comprends cela)
query_instance = {'age':20,
                  'job':'blue-collar',
                  'marital':'single',
                  'education':'secondary',
                  'default':'no',
                  'balance': 129,
                  'housing':'yes'}
#Génération d'échantillonnage virtuel anti-réel
dice_exp = exp.generate_counterfactuals(query_instance
                                        ,total_CFs=4
                                        ,desired_class="opposite")
#total_CFs: nombre de vecteurs à générer
#desired_class: exemple de classe que vous souhaitez générer: opposé dans le cas de l'anti-réel virtuel
#Visualisation des résultats des échantillons
dice_exp.visualize_as_dataframe()

loan_result.PNG

En regardant les résultats de l'échantillon, nous pouvons voir que quatre échantillons avec résultat = 1 sont générés pour résultat = 0. La colonne de prêt est la valeur d'entrée pour la fonction sigmoïde, et on peut voir que le résultat = 0 est d'environ 0,3 et le résultat = 1 est de 0,5 ou plus.

En regardant les caractéristiques, nous pouvons voir que l'âge, le travail, le mariage, etc. ont changé. Certes, vous pouvez voir que le montant de fonctionnalité différent de l'ensemble query_instance est généré.

De même, lors de la «modification du poids pour le montant de la caractéristique» ou de la «spécification de la quantité de la caractéristique à modifier», réglez comme suit.

feature_weights = {'age': 1}#âge poids → 1
features_to_vary = ['age','job']#Changer seulement l'âge et l'emploi
dice_exp = exp.generate_counterfactuals(query_instance
                                        ,total_CFs=4
                                        ,desired_class="opposite"
                                        ,feature_weights=feature_weights
                                        ,features_to_vary=features_to_vary)

Résumé

Dans ce blog, nous avons repris "DiCE", qui est un algorithme d'interprétation de modèle qui considère le virtuel anti-réel, et avons résumé les grandes lignes de la compréhension de l'algorithme en souscrivant à l'article original et au contrôle des opérations par implémentation. DiCE est différent des autres algorithmes en termes de «fourniture directe de matériel par génération d'échantillons», et je pense qu'il contribuera à l'interprétation de modèles à multiples facettes. Le contenu de l'article original n'est pas seulement le contenu décrit, mais il y a certains points que je n'ai pas encore suivis, et je pense qu'il y a des erreurs. Je vous serais reconnaissant si vous pouviez le signaler.

c'est tout.

Les références

・ Bienvenue dans la documentation d'ELI5! (ELI5) https://eli5.readthedocs.io/en/latest/ ・ "Pourquoi devrais-je vous faire confiance?": Expliquer les prédictions de tout classificateur (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.

・ Essayez d'interpréter le résultat de la prédiction de l'apprentissage automatique avec LIME https://qiita.com/fufufukakaka/items/d0081cd38251d22ffebf ・ AI explicable: ELI5, LIME et SHAP (noyau kaggle) https://www.kaggle.com/kritidoneria/explainable-ai-eli5-lime-and-shap ・ DiCE: Diverses explications contrefactuelles pour les classificateurs d'apprentissage automatique (DiCE) https://www.microsoft.com/en-us/research/project/dice/ https://arxiv.org/pdf/1905.07697.pdf(転記してある数式はすべてここから) ・ DiCE: Méthode d'interprétation / explication du modèle d'apprentissage automatique par échantillon virtuel anti-réel https://qiita.com/OpenJNY/items/ef885c357b4e0a1551c0 ・ Introductory Statistical Causal Reasoning: Judea Pearl (Auteur), Madelyn Glymour (Auteur), Nicholas P. Jewell (Auteur), Hiroshi Ochiumi (Traduction) 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 ・ Présentation de CounterFactual Machine Learning (apprentissage de machine virtuelle anti-réel) https://usaito.github.io/files/190729_sonyRD.pdf ・ Apprentissage automatique interprétable: l'agitation, le concret et les questions https://beenkim.github.io/papers/BeenK_FinaleDV_ICML2017_tutorial.pdf

Recommended Posts

Génération d'échantillons virtuels anti-réels: "DiCE"