Shapash 1.4.2: Des groupes de variables pour une compréhension facilitée de vos modèles

Thomas Bouche
OSS by MAIF
Published in
4 min readJul 5, 2021

La version 1.4.2 de Shapash est désormais disponible et la librairie s’enrichit d’une fonctionnalité de groupement de variables pour prendre de la hauteur sur l’explicabilité d’un modèle riche en variables !

Webapp Shapash

Un modèle apprend de datasets qui peuvent contenir des dizaines ou centaines de variables, avec des variables qui ont des thématiques communes. Regrouper ces variables dans l’explicabilité du modèle permet une compréhension plus facile du modèle et une meilleure navigation dans les variables et leurs influences sur le modèle.

Avec la nouvelle version de Shapash, il est désormais possible de spécifier un dictionnaire de groupe de variables, qui est utilisé dans l’analyse de l’explicabilité.

Nous allons illustrer ces fonctionnalités sur un cas d’usage avec le dataset public Kaggle : House Prices — Advanced Regression Techniques | Kaggle, (dataset d’exemple repris dans les tutoriels Shapash).
Ce dataset contient environ 70 variables descriptives d’une maison qui présentent des informations sur l’aspect et l’équipement de la maison, la localisation, les surfaces des pièces,… Par exemple, 6 variables décrivent le garage avec le type, la finition, la qualité, la surface,… Pour analyser l’explicabilité du modèle, on peut regrouper ces 6 variables sous un même intitulé “garage”, et avoir une vision globale de ce groupe de variable.

Features importance avec ou sans groupement de variables
  • Comment grouper les variables dans Shapash ?

Pour avoir accès aux différentes fonctionnalités de groupement de variables, il suffit de déclarer les variables à grouper et le nom du groupe de variables dans un dictionnaire, et de déclarer ce dictionnaire lors de la compilation de Shapash.

features_groups = {
"location": ["MSZoning", "Neighborhood", "Condition1", Condition2"],
"garage": ["GarageType","GarageYrBlt","GarageFinish","GarageArea","GarageQual","GarageCond"],
}
from shapash.explainer.smart_explainer import SmartExplainer
xpl = SmartExplainer(features_dict=house_dict)
xpl.compile(
x=X_test,
model=regressor,
preprocessing=encoder,
features_groups=features_groups
)
  • Comment naviguer dans le Webapp pour explorer les groupes ?

Pour lancer la Webapp, le code est le suivant :

app = xpl.run_app(title_story='House Prices')
Bouton d’activation des groupements

Dans la Webapp, ce bouton permet d’activer ou de désactiver les groupements des variables.

Navigation de features importance et feature contribution dans la Webapp

Dans ce graphique des features importance, les variables en orange et en gras représentent les groupes de variables. Pour avoir un détail de chaque variable du groupe, il faut cliquer sur la barre orange.

Pour revenir sur l’ensemble des variables, il faut cliquer sur le fond blanc du graphique.

Lorsque l’on sélectionne un groupe dans le graphique des feature importances, le graphique de contribution (Feature Contribution) du groupe de variables correspond à une projection sur l’axe x en utilisant une réduction de dimension t-sne. Et sur l’axe y, nous retrouvons la somme des contributions. En pointant le curseur sur un point, nous retrouvons le détail des variables les plus contributrices du groupe.

Si on clique sur l’une des variables du groupe dans le graphique des feature importances, le contribution plot affiche les contributions associées à la feature en lieu et place de la projection t-sne.

  • Restitution locale du groupement de variables :
Navigation sur le local plot de la Webapp

Le regroupement de variables s’applique également aux contributions locales. Il permet d’avoir une vision synthétique des variables contributrices.

Sur l’exemple présenté sur le graphique, le groupement de variables permet de montrer que l’ensemble des variables de surfaces contribuent à une baisse de prix de -13 000$ par rapport à la moyenne. Que les variables de localisation (+3 000$) et les variables du garage (+2 000$) contribuent positivement. De plus, les barres des contributions cachées sont très faibles (Hidden Positive contributions et Hidden Negative Contributions) avec le groupement de variables, ce qui montre que la globalité des contributions sont représentées.

Pour une restitution des contributions locales en mode API ou mode batch, les groupes de variables sont intégrés dans les objets Smartexplainer (methode to_pandas) et Smartpredictor (methode summarize). Ils peuvent être désactivés avec l’option “use_groups=False”.

predictor = xpl.to_smartpredictor()
predictor.add_input(sample_input)
predictor.summarize()

Pour les groupes de variables, la valeur est un dictionnaire de l’ensemble des valeurs des variables du groupe.

Dataframe des contributions

Pour chaque individu, la méthode summarize() du Smartpredictor fournit un DataFrame qui contient les variables triées par importance dans la contribution. Sur ces exemples ci-dessus, les principales variables contributrices, sont des variables groupées, ce qui permet de résumer plus facilement la prédiction.

Avec ces nouvelles fonctionnalités, nous espérons que Shapash puisse encore plus faciliter la compréhension d’un modèle de machine learning.

Pour plus de détails, nous vous invitons à découvrir le tutoriel sur le GitHub Shapash.

💡Partagez vos propres idées !

N’hésitez pas à vous rendre sur le GitHub de Shapash : vous y trouverez une documentation exhaustive sur cette nouvelle fonctionnalité. Vous pourrez aussi y laisser vos messages (onglet discussions) et contribuer à la solution en partageant vos propres templates ou toute autre idée.

--

--