[PYTHON] J'ai lu l'article de SHAP

introduction

J'ai cherché SHAP.

Les références

  1. Le document qui proposait SHAP https://arxiv.org/abs/1705.07874 --Explication de la valeur shapley https://dropout009.hatenablog.com/entry/2019/11/20/091450

En me concentrant sur l'article 1 montré dans les références, j'expliquerai ce qu'est SHAP en référence à 6, 7 et 8. Puisque l'explication des termes est abstraite dans l'article 1, il est plus facile à comprendre en regardant les exemples concrets de l'article 7.

Aperçu

  1. Comment est-ce? Proposition de valeurs SHAP (SHapley Additive exPlanations), qui est un cadre intégré d'interprétation des prévisions.

  2. Qu'est-ce qui est étonnant par rapport aux recherches précédentes? Il existe de nombreuses méthodes pour définir l'importance des quantités de caractéristiques, mais les relations entre les méthodes n'étaient pas bien comprises. La méthode proposée dans cet article peut trouver une solution unique basée sur une certaine théorie, et la nouvelle classe intègre six méthodes existantes.

  3. Où est le «kimo» de la technologie et de la méthode? (1) Une nouvelle classe d'échelles d'importance des caractéristiques additives a été identifiée. (2) Il a été montré que cette classe a une solution unique et possède certaines propriétés souhaitables.

Papier principal

Disons que le modèle que vous voulez décrire est $ f (\ boldsymbol {x}) $.

y = f(\boldsymbol{x})

Soit le modèle explicable $ g (\ boldsymbol {x '}) $. Dans la méthode ci-dessous, la quantité de caractéristiques pour expliquer le $ f (\ boldsymbol {x}) $ attendu, qui est la sortie, pour chaque entrée $ \ boldsymbol {x} $, et non l'importance de la quantité de caractéristiques pour l'ensemble des données. Trouvez l'importance de. Ces méthodes sont appelées méthodes locales. Par exemple, LIME est des méthodes locales.

Les modèles explicables utilisent souvent des fonctions de carte pour simplifier l'entrée $ \ boldsymbol {x} $ du modèle d'origine à l'entrée $ \ boldsymbol {x '} $ du modèle explicable.

\boldsymbol{x} = h_{\boldsymbol{x}}(\boldsymbol{x}')

Ici, la fonction map est une fonction qui dépend de la valeur d'entrée, car elle a l'indice $ \ boldsymbol {x} $. Cette simplification le traduit en un format d'entrée de $ \ boldsymbol {x '} $ qui vous permet d'interpréter quelle partie de l'entrée du modèle original $ \ boldsymbol {x} $ contribue à la prédiction. Par exemple, si l'entrée est Bag of Words (BOW) et que vous voulez savoir quels mots contribuent à la prédiction, il vous suffit de saisir la présence ou l'absence du mot dans l'entrée $ \ boldsymbol {x} $. Par conséquent, la simplification consiste à convertir une valeur de fréquence non nulle en 1. De plus, l'entrée simplifiée $ \ boldsymbol {x '} $ peut être retournée à l'entrée d'origine avec $ h_ {\ boldsymbol {x}} $. C'est parce que $ h_ {\ boldsymbol {x}} $ a des informations sur l'entrée locale $ \ boldsymbol {x} $.

Simplification: [1, 2, 1, 1, 2, 1, 1, 0, 0, 0] \rightarrow [1, 1, 1, 1, 1, 1, 1, 0, 0, 0] \\
h_{\boldsymbol{x}}: [1, 1, 1, 1, 1, 1, 1, 0, 0, 0] \rightarrow [1, 2, 1, 1, 2, 1, 1, 0, 0, 0] = \boldsymbol{x} \odot \boldsymbol{x'}

Si l'entrée est une image et que vous souhaitez savoir quelle partie de l'image contribue à la prédiction, corrigez les parties continues adjacentes et exprimez la présence ou l'absence du patch en 1/0. Lors du retour à l'espace d'entrée d'origine avec $ h_ {\ boldsymbol {x}} $, la partie patch (1 partie) doit être convertie en l'image d'origine. La partie autre que le patch (partie 0) est retournée avec une couleur de fond appropriée, qui sera expliquée plus loin. Pour l'explication de ce domaine, le blog de Référence 8 est très utile.

Les méthodes locales sont $ g (\ boldsymbol {z '}) \ simeq f (h_ {\ boldsymbol {x}} (\ boldsymbol {\ quand il devient $ \ boldsymbol {x}' \ simeq \ boldsymbol {z} '$ x} ')) Détermine le poids de $ g $ pour qu'il soit $.

Dans l'article 1 , nous allons construire un modèle explicable par une méthode appelée méthodes d'attribution de caractéristiques additives. La simplification se limite à la conversion en variables binaires. Par conséquent, le modèle explicable est une fonction linéaire de variables binaires.

g(z') = \phi_0 + \sum_{i=1}^M\phi_i z_i'

Où $ z '\ in \ {0,1 \} ^ M $ est une entité simplifiée et $ \ phi_i \ in \ mathbb {R} $ est un coefficient qui représente l'effet de l'entité. Dans ce modèle, l'effet de chaque caractéristique est représenté par $ \ phi_i $, et les effets de toutes les caractéristiques sont additionnés pour approximer la sortie du modèle d'origine.

Le coefficient $ \ phi_i $ peut être déterminé de manière unique afin de satisfaire les conditions suivantes.

  \begin{aligned}
  f(\boldsymbol{x}) = g(\boldsymbol{x}') &= \phi_0 + \sum_{i=1}^M\phi_i x_i' \\
  \boldsymbol{x} &= h_\boldsymbol{x}(\boldsymbol{x}') \\
  \end{aligned}
  x' = 0 \Rightarrow\phi_i=0

$ f_x (\ boldsymbol {z} ') = f (h_ \ boldsymbol {x} (\ boldsymbol {z}')) $, abrégé en $ z_i '= 0 $, $ \ boldsymbol {z}' J'écrirai \ backslash i $. Pour deux modèles quelconques $ f, f '$

  f_\boldsymbol{x}'(\boldsymbol{z}') -   f_\boldsymbol{x}'(\boldsymbol{z}'\backslash i)
  \geq f_\boldsymbol{x}(\boldsymbol{z}') -   f_\boldsymbol{x}(\boldsymbol{z}'\backslash i) \ \ \mathrm{for \ all \ inputs } \ \boldsymbol{z}' \in \{0,1\}^M

Lorsque cale, alors $ \ phi_i (f ', \ boldsymbol {x}) \ geq \ phi_i (f, \ boldsymbol {x}) $ tient. Cela nécessite que $ \ phi_i $ augmente également ou reste le même si le modèle est modifié de sorte que la contribution marginale de la fonctionnalité $ i $ augmente ou reste la même (indépendamment des autres fonctionnalités). Je suis.

On sait que le seul modèle explicable peut être déterminé en imposant les trois conditions ci-dessus.

\phi_i(f, \boldsymbol{x}) = \sum_{\boldsymbol{z}'\subseteq \boldsymbol{x}'}\frac{|\boldsymbol{z}'|!(M-|\boldsymbol{z}'|-1)!}{M!}[f_\boldsymbol{x}(\boldsymbol{z}')-f_\boldsymbol{x}(\boldsymbol{z}'\backslash i)]

ici|\boldsymbol{z}'|Est1Le nombre d'ingrédients qui sont\boldsymbol{z}' \subseteq \boldsymbol{x}Est\boldsymbol{x}'Tous les sous-ensembles de composants non nuls de\boldsymbol{z'}ベクトルを表しています。これEst combined cooperative game theory の結果から得られるもので、&\phi_i&Est下記のShapley Values と呼ばれるものに一致しています。

\phi_i = \sum_{\mathcal{S}\subseteq \mathcal{N}\backslash i}\frac{1}{\frac{N!}{S!(N-S-1)!}}\left( v\left(\mathcal{S}\cup\{i\}\right) - v\left(\mathcal{S}\right) \right)

iciS=|\mathcal {S}|N=|\mathcal {N}|vEst une fonction d'utilité et la constante de normalisation est\mathcal{N} \backslash iLe nombre de modèles pour le tri.

D'après les résultats ci-dessus, il a été constaté que les méthodes d'attribution de fonctionnalités additives sont uniques à un $ h_ \ boldsymbol {x} $ donné. À l'inverse, les indicateurs qui ne sont pas basés sur les valeurs de Shapley sont considérés comme indésirables car ils ne remplissent pas les trois conditions que devrait avoir l'importance des caractéristiques.

SHAP (SHapley Additive exPlanation) Values

Considérez la valeur SHAP comme une mesure unifiée de l'importance des fonctionnalités. Ceci est une approximation du modèle original $ f $ dans l'équation des valeurs de Shapley à une fonction d'espérance conditionnelle.

f_\boldsymbol{x}(\boldsymbol{z}') \equiv f(h_\boldsymbol{x}(\boldsymbol{z}')) \rightarrow E[f(\boldsymbol{z})|z_S] \\

E[f(\boldsymbol{z})|z_S]Tout d'abord, l'indiceSEst\boldsymbol{z}'Représente l'index de l'élément différent de zéro de.z_SEst、確率変数\boldsymbol{z}Contre l'indexSEntrez le composant correspondant àxCela signifie le fixer avec la valeur de. Par exemple\boldsymbol{z}'=[1,1,0,0,...]Si,S=\\{1,2\\}Suivant,E[f(\boldsymbol{z})|z_S]=E[f(\boldsymbol{z})|z_{1,2}]=E[f(\boldsymbol{z})|z_1=x_1, z_2=x_2]Ce sera.

Expliquez pourquoi vous devez le remplacer par une fonction attendue. La fonction de mappage $ h_ \ boldsymbol {x} (\ boldsymbol {z} ') = z_S $ est une opération qui supprime strictement les fonctionnalités qui ne sont pas incluses dans l'index $ S $. En effet, lors du mappage de l'espace d'entrée du modèle explicable vers l'espace des fonctionnalités d'origine, il peut être judicieux de remplacer la pièce non incluse dans l'index $ S $ par une autre valeur. Parce qu'il y a. Par exemple, dans le cas d'une image, faut-il remplacer toutes les parties qui ne correspondent pas au patch par 0? Ou devrait-il être remplacé par 255? .. D'autre part, dans le cas d'une analyse de régression multiple, le défaut de la quantité de caractéristiques peut être remplacé par 0 car la suppression du terme de la quantité de caractéristiques du modèle équivaut à définir la quantité de caractéristiques sur 0, mais la plupart des modèles sont comme ça. Les valeurs manquantes ne peuvent pas être traitées naturellement. Par conséquent, la fonction de mappage ne fait pas de la partie non incluse dans l'index $ S $ une valeur manquante, mais alloue la valeur aléatoirement en fonction de la distribution des données. Cela permet au modèle de saisir des données. Cela fait de la valeur prédite $ f $ du modèle une fonction attendue conditionnelle à $ z_S $.

Le calcul de la valeur SHapley telle que définie est difficile car cela coûte beaucoup d'argent. ($ \ Sum_ {\ boldsymbol {z} '\ subseteq \ boldsymbol {x}'} $ est l'ordre exponentiel). Cependant, vous pouvez approximer les valeurs SHAP en combinant les informations des méthodes d'attribution des fonctionnalités additives. Utilisez l'indépendance des fonctions et la linéarité du modèle lors des approximations.

\begin{aligned}
E[f(\boldsymbol{z})|z_S] =& E[f(\boldsymbol{z})|z_S]\\
=& E_{\bar z_S}[f(z_S, \bar z_S)] \because \mathrm{Quantité de fonction indépendante} \\
=& f(z_S, E[\bar z_S]) \because \mathrm{Le modèle est linéaire}
\end{aligned}

Dans l'article, six méthodes sont présentées comme le résultat d'approximation de SHAP, ce qui signifie que ces méthodes sont intégrées.

Shapley sampling values Le document est ici. Abandonné pour cause de charge.

Kernel SHAP

Le noyau SHAP est calculé en 5 étapes.

Le noyau SHAP est défini par l'expression suivante:

\pi_\boldsymbol{x}(\boldsymbol{z}') = \frac{M-1}{_MC_{|\boldsymbol{z}'|}|\boldsymbol{z}'|(M-|\boldsymbol{z}'|)}

Résolvez le problème d'optimisation avec une fonction de perte pondérée.

L(f, g, \pi_\boldsymbol{x}) = \sum_{\boldsymbol{z}'\in Z}\left[ f(h_\boldsymbol{x}(\boldsymbol{z}')) - g(\boldsymbol{z}') \right]^2 \pi_\boldsymbol{x}(\boldsymbol{z}')

Linear SHAP

Dans le modèle linéaire $ f (\ boldsymbol {x}) = \ sum_ {j = 1} w_j x_j + b $, si les caractéristiques sont indépendantes, la valeur SHAP sera la suivante. La dérivation est détaillée dans l'annexe dans cet article.

\begin{aligned}
\phi_0(f, \boldsymbol{x}) &= b \\
\phi_i(f, \boldsymbol{x}) &= w_i(x_i - E[x_i])
\end{aligned}

Low-Order SHAP (Je ne sais pas de quoi tu parles) Même dans le cas de la régression linéaire, si Kernel SHAP est utilisé, seul $ \ mathcal O (2 ^ M + M ^ 3) $ doit être calculé, il est donc plus efficace de faire une approximation qui rend les caractéristiques indépendantes (cette approximation est Low- Commandez SHAP?).

Max SHAP Il dit qu'il y a des documents joints, mais n'est-ce pas? Alors je ne sais pas. Il est écrit aux critiques que c'est faux.

Deep SHAP Il prétend que SHAP peut être calculé pour la couche Dense et la couche Maxpool, et cela signifie que SHAP peut être calculé par propagation arrière (est-ce possible dans la partie non linéaire?).

en conclusion

L'arbre de décision peut calculer SHAP efficacement. Avec LightGBM et Xgboost, vous pouvez facilement générer SHAP avec la bibliothèque de la référence 4.

Recommended Posts

J'ai lu l'article de SHAP
Je vois, je vais lire le processus UNIX
J'ai lu l'implémentation de range (Objects / rangeobject.c)
J'ai lu et implémenté les variantes de UKR
Lire la documentation OpenCV
J'ai compté les grains
J'ai lu la référence Chainer (mise à jour de temps en temps)
J'ai examiné l'arborescence des appareils
Lire l'exemple de keras mnist
J'ai tweeté depuis le terminal!
J'ai essayé de toucher l'API Qiita
J'ai essayé la bibliothèque changefinder!
J'ai téléchargé la source python
Je veux lire la version html de la version "OpenCV-Python Tutorials" OpenCV 3.1
J'ai essayé de numériser le tampon estampé sur papier en utilisant OpenCV
sphinx-Read the Docs intégration pour apidoc
Je me suis perdu dans le labyrinthe
J'ai essayé le roman Naro API 2
J'ai installé la plateforme IoT "Rimotte"
J'ai étudié le mécanisme de connexion flask!
Exécutez Pylint et lisez les résultats
J'ai participé au tour de qualification ISUCON10!
Papier: Traitement intracérébral de la musique
Comment lire l'ensemble de données SNLI
J'ai essayé le tutoriel TensorFlow 2ème
Demandez à python de lire la sortie de la commande
J'ai essayé de calculer l'intégrale de probabilité (I à l'intégrale)
J'ai lu PEP 613 (alias de type explicite)
J'ai étudié à quoi ressemble la lunette
J'ai aimé le tweet avec python. ..
J'ai lu PEP 612 (Variables de spécification des paramètres)
J'ai essayé l'API du roman Naruro
[Python] Lire le code source de Flask
J'ai essayé de déplacer le ballon
J'ai écrit la pile en Python
J'ai essayé d'estimer la section.
Je ne connais pas l'erreur de valeur
J'ai étudié la superposition de l'arborescence des appareils
J'ai vérifié le montant de la taxe sur les cadeaux
J'ai lu le dictionnaire de synonymes Sudachi avec Pandas et essayé de rechercher des synonymes