
Avez-vous remarqué que les modèles « complexes » comme Random Forest, Gradient Boosting ou Neural Network sont de plus en plus accessibles? C’est une bonne chose puisque ces algorithmes donnent généralement de très bons résultats. En revanche, un de leur inconvénient c’est leur effet Black Box : impossible d’expliquer dans le détail les règles de calcul de ces modèles.
Bien sûr on peut calculer l’importance des variables pour expliquer un peu le modèle mais sans aide il est difficile d’aller plus loin. Et cette aide, ce sont les modèles d’interprétabilité (interpretability) qui vont nous l’apporter.
J’ai testé LIME (Local Interpretable Model-Agnostic Explanations) qui est une librairie Python et je vous en parle dans cet article.
Comme toujours je vais prendre un exemple simple. Pour tester LIME j’ai utilisé le Dataset Titanic qui définit si les passagers du Titanic ont survécu ou non en fonction de plusieurs variables (Sexe, Âge, Classe, …).
Petite mise en situation : vous venez de créer un Random Forest sur vos données d’apprentissage, vous l’avez testé sur vos données de test et tout semble OK pour vous.
Pour vérifier que le modèle a du sens, vous calculez l’importance des variables.

Tout cela parait cohérent donc vous décidez d’appliquer votre modèle sur un nouveau jeu de données. Vous sélectionnez un individu, vous voyez que le modèle a prédit qu’il survivrait et vous voulez comprendre pourquoi le modèle a fait ce choix.
Cet individu est une femme de 27 ans, est ce que c’est pour cette raison qu’elle a une bonne probabilité de survie? Difficile à dire pour l’instant, voyons ce que LIME peut donner.

LIME va générer aléatoirement de nouveaux individus fictifs proches de l’individu sélectionné et va pondérer ces individus en fonction de leur proximité avec lui.

LIME calcule leur survie en fonction de votre modèle.

Pour finir LIME calcule un modèle linéaire sur la base de ces nouvelles données.

Le modèle linéaire que LIME a créé est facile à interpréter et nous permet donc d’avoir une explication pour cet individu. En effet, LIME permet d’avoir une estimation locale. Les résultats ci-dessus ne sont vrais que pour cet individu. Par exemple pour un autre individu, on pourrait avoir ce résultat :

Revenons en à notre 1er individu : grâce au modèle linéaire, on comprend donc spécifiquement pourquoi cet individu a une bonne chance de survie. C’est le cas parce que c’est une femme et malgré le fait qu’elle soit en 3e classe et qu’elle n’ait pas de cabine pour voyager il est probable qu’elle survive. Dans notre exemple l’âge n’a finalement pas d’influence sur le choix de l’algorithme.

Et voilà le tour est joué !
Grâce à Lime vous pouvez expliquer facilement les raisons pour lesquels chaque individu a été scoré de telle ou telle manière.
LIME va même plus loin et permet de travailler également sur la reconnaissance d’image. Pour chaque image, LIME vous montre les zones que l’algorithme a utilisé pour faire son choix.
Avant de terminer je vous montre le vrai résultat LIME via Python. La critique que je ferais pour la version actuelle de LIME c’est que le résultat affiche les variables utilisées pour la création du modèle et non pas les variables initiales. J’aurai aimé pouvoir affiché Sex=’female’ plutôt que ma variable modifiée Sex_Encoded=’0′

Pour en savoir plus :
Merci pour cette explication très claire
Super intéréssant ! Le Machine Learning interpretability c’est de plus en plus important dans n’importe quel projet de ML.
Sur la même ligné il ya shapley : https://github.com/slundberg/shap