Résumé
Dans cet article, nous comparons l'exécution d'un arbre de décision dans Python et dans JMP et montrons comment créer un arbre de décision personnalisé dans JMP en appliquant des critères mathématiques pour déterminer le paramètre sur lequel chaque branche doit se diviser. Ce niveau de personnalisation n'est pas disponible dans Python, ce qui rend JMP essentiel pour créer des modèles robustes où le fractionnement des paramètres n'est pas laissé au hasard. De plus, cette personnalisation vous permet de tirer parti de votre expertise en la matière pour justifier la sélection du paramètre de fractionnement à chaque branche, en particulier lorsque plusieurs candidats présentent une capacité similaire à fractionner efficacement les données.
Cet exemple utilise l'ensemble de données Wine, un exemple de classification généralement disponible dans la bibliothèque Scikit-learn. Il contient les résultats d'une analyse chimique de vins cultivés dans la même région en Italie mais issus de trois cultivars (types de raisin) différents : étiquetés 0, 1 et 2. Dans l'ensemble de données, 13 techniques de caractérisation chimique ont été exécutées sur chaque échantillon, notamment la quantité de flavonoïdes (un type de phénol), l'intensité de la couleur du vin, la teneur en cendres, la teinte, la teneur en alcool, etc.
L’objectif ? Créer un modèle de classification par arbre de décision permettant d’identifier la provenance du vin avec le moins de tests de caractérisation possible et à moindre coût.
Utilisation de Python
Commençons par voir ce que nous obtenons en créant un modèle d'arbre de décision en Python. (Le script est joint à ce post.) Le modèle résultant peut être représenté graphiquement avec matplot lib, comme indiqué ci-dessous. Le premier modèle est classé en fonction de l'intensité de la couleur, de la proline, de la teneur en cendres, des flavonoïdes et de la teneur en alcool.

À moins que la valeur aléatoire ne soit définie sur une certaine valeur, l'arbre aura un aspect différent à chaque nouvelle exécution, comme indiqué ci-dessous. Bien que cela soit normal, ce n'est pas pratique, car vous souhaiterez peut-être choisir le meilleur ensemble de tests de caractérisation qui sont rapides et/ou peu coûteux à exécuter. Dans cet exemple, il n'y a aucun moyen de contrôler la fonction où la division se produit ou à quelle valeur.
|
État aléatoire = 2
|
État aléatoire = 14
|
État aléatoire = 24
|
|
|
|
|
Tests nécessaires : intensité de la couleur, proline, teneur en alcool, flavonoïdes
|
Tests nécessaires : intensité de la couleur, proline, cendres, alcalinité des cendres, acide malique, teneur en alcool, flavonoïdes
|
Tests nécessaires : intensité de la couleur, proline, od280/od315, flavonoïdes, alcalinité des cendres
|
Utilisation de JMP
Voyons si JMP peut faire un meilleur travail lors de la sélection des tests de caractérisation.
Lors de l'exécution de la plateforme Decision Tree dans JMP, accédez à Analyser > Modélisation prédictive > Partitionner. Définissez la partie Validation sur 0,3 et cochez les cases Informative Missing et Ordinal Restricts Order.

Le rapport ressemblera à ceci. Cliquez sur OK.

Cliquer sur Go produit cet arbre de décision :

Comme en Python, refaire l’analyse crée une autre structure pour l’arbre de décision.
Alors, que peut-on faire pour créer un modèle moins aléatoire, basé sur certaines préférences concernant les méthodes de caractérisation utilisées ? Nous allons ignorer les divisions et choisir les paramètres nous-mêmes.
Tout d'abord, nous allons cliquer sur le bouton Prune. En cliquant sur Prune, vous pouvez revenir en arrière et supprimer une branche à la fois. Ensuite, cliquez sur la liste des candidats et classez les entités selon leur critère de division G^2 ou Logworth, ce qui vous permet d'analyser quels paramètres sont en haut de la liste.
Ci-dessous, vous pouvez voir les différents candidats à la séparation, avec les flavonoïdes en tête de liste, suivis de l'od280/od315, des phénols totaux et de la proline.

La valeur G^2 nous indique que le modèle choisira les flavonoïdes comme critère de division. Si vous cliquez sur Split, la division de la branche se fera en utilisant une valeur de flavonoïdes de 1,41.
Ensuite, développez la liste des candidats sous flavonoïdes < 1,41. L'intensité de la couleur est maintenant en haut de la liste. Cependant, il est peut-être plus facile de mesurer la teinte plutôt que l'intensité de la couleur ; si c'est le cas, cliquez sur le triangle rouge et cliquez sur Séparer spécifique. Vous pouvez ensuite choisir le paramètre pour le fractionnement (dans ce cas, la teinte) et cliquer sur OK.

Le nouvel arbre, qui est ci-dessous, indique que si le niveau de flavonoïdes est inférieur à 1,41 et la teinte inférieure à 0,906, il y a 0,98 probabilité que le vin soit issu du cépage n°2. En revanche, lorsque la teinte est supérieure à 0,906, il est fort probable qu'il provienne du cépage de type 1. Lorsque le niveau de flavonoïdes est supérieur à 1,41, il y a presque 50-50 chances que le cépage soit 0 ou 1. Continuons donc la division ici.

Sous flavonoïdes >=1,41, regardez les candidats et leurs niveaux de G^2. L'alcool et la proline ont une valeur de G^2 similaire. Comme il est plus facile de tester l'alcool, faites la distinction au niveau de l'alcool. Cela révèle qu'il y a 91 % de chances que le vin provienne du raisin de type 0 si la teneur en alcool est supérieure à 13,5.

Le modèle d'arbre de décision final créé est ci-dessous. Nous avons maintenant besoin de moins de tests de caractérisation pour identifier le type de raisin et les tests choisis sont plus faciles à réaliser sans adopter une approche de boîte noire pour choisir ces paramètres. Les règles de décision peuvent ensuite être facilement enregistrées et partagées avec d'autres.
