Skip to the content.

Arbres de décision

Principe dans le cas d’un arbre défini manuellement

Un arbre de décision est un modèle relativement simple lorsqu’il s’agit de prendre une décision dans un contexte supervisé, compte tenu de caractéristiques :

Étant donné plusieurs caractéristiques, et un ensemble d’exemple labelisés : On observe une seule caractéristique, qui permet de découper l’ensemble d’exemple en deux groupes.

Le plus simple pour bien comprendre cette notion, est de prendre un exemple :

La figure qui suit présente un cas de classification à deux classes : les patients atteints de problèmes cardiaques ou non, en fonction de deux caractéristiques. J’ai extrait 20 exemples de la base Heart Disease Cleveland, et choisi 2 caractéristiques seulement : thalac et oldpeak.

problème de classification simplifié

Un arbre de décision va choisir une caractéristique pour séparer cet ensemble au mieux, selon les classes. On pourrait par exemple choisir de tester si talach est supérieur ou pas à 147, ce qui me donnerait la figure suivante :

Arbres de décision, test 1

On voit que la partie gauche est correcte (tous les exemples sont de la classe bleue, on ne peut pas rêver mieux). Les exemples de la partie droite sont, en revanche, relativement mélangés. On va ajouter un test supplémentaire, pour les séparer. On cherche, parmi les caractéristiques, celle qui permet de séparer au mieux ces exemples (et le seuil associé). Par exemple, on prendrait oldpeak > 1.6, ce qui nous amènerait à la figure suivante :

Arbres de décision, test 2

À partir de là, soit on considère que ce n’est pas si mal, soit on continue. Si l’on continue, on cherche, parmi les 3 groupes actuel, quel test, sur quelle caractéristique, permettrait d’améliorer l’homogénéité des groupes. On pourrait s’intéresser au groupe en haut à droite, et décider que l’on va découper selon talach > 180, ce qui donnerait la figure suivante :

Arbres de décision, test 3

On peut s’arrêter là, ou continuer.

Dans un premier temps, je vais m’arrêter là, pour vous présenter l’arbre de décision ainsi construit. Dans la figure qui suit, on présente les différents tests et leurs enchaînements. Ces tests sont les ronds dans mon arbre. Les nœuds finaux de mon arbre (les feuilles de l’arbre) correspondent à la décision devant être prise dans ce cas-là. Ils sont représentés par des carrés, dont la couleur est celle la classe choisie.

exemple d'arbre de décision

Apprentissage automatique d’un arbre

L’objectif de cette section est d’automatiser la détermination des tests composant l’arbre, à partir de la base d’apprentissage.

Le principe est assez clair, on l’a entrevu dans la présentation des arbres définis manuellement.

C’est un problème récursif. Compte tenu d’un ensemble de points labelisés, il faut déterminer le meilleur test pour séparer cet ensemble en deux sous ensembles, dont les classes seront aussi homogènes que possibles.

Depuis le début de ce cours, je ne cesse de vous indiquer que « chercher la meilleure solution » peut souvent se ramener à un problème d’optimisation. C’est ce que nous ferons une fois de plus.

Il faut :

Commençons par la procédure d’optimisation.

Procédure d’optimisation :

En l’occurrence, la procédure d’optimisation est ici relativement simple. Nous allons simplement évaluer tous les tests possibles (en optimisation, on parle de recherche exhaustive).

Pour vous expliquer pourquoi c’est possible, et comment nous le ferons, je vous remet ci-dessous la figure correspondant à notre base d’apprentissage précédente.

problème de classification simplifié

Chaque test se fait sur une seule caractéristique, par comparaison à un seuil, et séparera l’ensemble des exemples en deux groupes.

Considérons une caractéristique, par exemple \(x\), sur les abscisses de notre figure. Combien de tests puis-je envisager ?

Si l’on classe les \(n\) exemples par ordre croissant de \(x\), on obtient un ensemble \([x_1..x_n]\). Deux seuils tombant entre \(x_i\) et \(x_{i+1}\) sépareront l’ensemble en des groupes identiques et seront donc équivalents en termes de qualité. Pour disposer d’un peu de robustesse aux fluctuations des exemples, nous pouvons choisir, parmi tous ces seuils équivalents, le milieu de \([x_i, x_i+1]\).

Ainsi, si l’on a \(n\) exemples, sur une caractéristique, nous n’avons que \(n-1\) tests possibles à évaluer.

Je vous ai représenté dans la figure suivantes ces tests possibles, par des droites verticales. Ce sont les droites dont l’abscisse est le milieu de deux exemples qui se succèdent.

tests possibles sur x

Ce raisonnement peut se tenir sur chaque caractéristique de notre problème.

Ainsi, si l’on a \(n\) exemples, dans un espace de dimension \(d\), pour construire un nœud de l’arbre, nous aurons \((n-1) \times d\) tests possibles à évaluer.

Voyons maintenant comment on évalue la qualité des sous ensembles crées par un test donné.

Mesure de la qualité des sous ensembles

C’est l’un des points qui diffère entre les différents algorithmes. Vous vous en doutez, il existe une multitude de variantes des arbres de décisions. Dans ce cours, je cherche surtout à vous donner une certaine culture sur ces techniques, sans forcément chercher à entrer dans les détails mathématiques les plus subtils de certaines versions.

Il faut que cette mesure de qualité :

Il y a eu de très nombreuses recherches sur ces problèmes, et de non moins nombreuses solutions.

On pourra notamment s’intéresser à l’indice de Gini (utilisé par l’algorithme CART) ou à l’entropie (utilisée par l’algorithme C4.5). Ces deux algorithmes sont les plus connus parmi les arbres de décision. Les notions d’indice de Gini et d’entropie sont décrites ci-dessous.

Soit un sous ensemble de point, dans lequel les \(m\) classes possibles apparaissent chacune avec une probabilité \(p_i\).

L’indice de Gini de ce sous ensemble est : \(\sum_{i=1}^m p_i. (1-p_i)\) Plus il est grand (proche de 1), plus la classe est homogène.

Le test retenu comme optimal est celui qui maximise la moyenne des indices de Gini des deux sous-ensembles qu’il crée.

Dans le cas de l’entropie, qui nous vient de la Théorie de l’Information et mesure globalement le désordre associé à une variable aléatoire, le calcul est légèrement différent.

L’entropie d’un sous ensemble est : \(\sum_{i=1}^m - p_i. log_2(p_i)\) Plus elle est faible (proche de 0), plus la classe est homogène.

Nous savons donc maintenant, pour un ensemble de point donnés, choisir le test qui le découpe de façon optimale selon l’une des caractéristiques. De façon récursive, nous pouvons donc calculer automatiquement un arbre de décision pleinement développé.

Détermination de la taille de l’arbre

On l’a vu, il est parfois inutile, voire contreproductif d’utiliser un arbre pleinement développé. Nous pouvons envisager deux solutions pour choisir l’arbre final :

C’est souvent la seconde solution qui sera utilisée, en mesurant si le gain en termes d’indice de Gini (par exemple) apporté par chaque test est vraiment conséquent.

Conclusion sur les arbres de décision

Les arbres de décision occupent une place importante dans l’histoire de l’apprentissage automatique, mais pas seulement dans ce domaine. Les raisons de leur succès sont :

Les entreprises en raffolent. Pour vous donner une idée, la version manuelle des arbres de décision est aujourd’hui encore enseignée comme un processus d’aide à la décision pour les futurs cadres.

Je soupçonne fort les grands groupes de s’en servir pour mettre au point les cartes de questions utilisées par les centres d’appels délocalisés auxquels ils sous-traitent leur service après-vente. Vous savez : « Avez vous redémarré votre appareil ? Si oui, observez vous un clignotement… ». Notez que, dans ce cas, on finit relativement souvent dans la feuille « Je dois en référer à un technicien compétent… » .

En apprentissage automatique, c’est une technique assez ancienne (C4.5 date de 1993). En dépit de son âge, C4.5 (ou CART qui lui est assez semblable) restait, en 2008, dans le top 10 des algorithmes d’exploration de données. Un peu délaissés ces dernières années du fait de l’avènement des réseaux de neurones, les arbres de décision sont néanmoins un des outils qu’il faut avoir sous la main, si l’on veut évaluer rapidement les performances que l’on peut obtenir sur un jeu de données.

Ceci d’autant plus que Python les implémente directement sous la forme des objets DecisionTreeClassifier de sklearn, qui rend leur utilisation très simple.