Version DRAFT d'une formation Data Scientist que j'ai conçue à partir de sources diverses (voir références bibliographiques à la fin de chaque diapositive).
La formation est destinée aux personnes possédant des bases (~BAC+2) en statistiques et programmation (j'utilise R).
Je reste ouvert à tout commentaire, critique et correction. Je continuerai à mettre à jour les diapositives et à en ajouter d'autres si j'ai le temps.
2. Objectifs
Comprendre les principes de construction des arbres de décision
Comprendre la différence entre les arbres de régression et de classification
Connaître les limites des arbres de décision
Comprendre comment le bagging est une solution aux limites des arbres de décision
Comprendre comment random forest (forêt d’arbres aléatoires) en se basant sur le principe de
bagging, est une autre solution aux limites des arbres de décision
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 2
3. Sommaire
• Introduction aux arbres de décision
• Arbres de régression
• Arbres de classification
• Exemple de partitionnement avec l’index d’entropie de Shannon
• Post-élagage
• Avantages et limites des arbres de décision
• Bagging et forêt d’arbres
• Bibliographie
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 3
4. Introduction aux arbres de décision
• Méthode classique en apprentissage supervisé
• Modèle qui prédit la valeur d'une réponse (ou
variable-cible) depuis la valeur de plusieurs
descripteurs (ou variables prédictives)
• Les arbres de classification (Classification Tree)
permettent de prédire à quelle classe la réponse
appartient.
• Les arbres de régression (Regression Tree) permettent de
prédire une quantité réelle.
• Interprétabilité, facile à expliquer, suit un processus de
prise de décision plus « naturel » …
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 4
nœuds
intérieurs
feuilles ou nœuds
terminaux
branche
nœud racine
5. Introduction aux arbres de décision
• L'arbre est construit en séparant l'ensemble des données en sous-ensembles (ou régions Rj) en
fonction de la valeur d'une variable prédictive.
• Ce processus est répété sur chaque sous-ensemble obtenu de manière récursive, il s'agit donc
d'un partitionnement récursif.
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 5
James and al., An introduction to Statistical Learning, ISBN 9781461471370, Springer, 2014
6. Introduction aux arbres de décision
• Les algorithmes divisent l'arbre du sommet vers les feuilles
en choisissant à chaque étape une variable d'entrée qui
réalise le meilleur partage de l'ensemble d'objets
• Pour choisir la variable de séparation sur un nœud, les
algorithmes testent les différentes variables d'entrée
possibles et sélectionnent celle qui maximise un critère
donné.
• Algorithme glouton (greedy): recherche à chaque nœud de
l'arbre le partage optimal, dans le but d'obtenir le meilleur
partage possible sur l'ensemble de l'arbre de décision
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 6
James and al., An introduction to Statistical Learning, ISBN 9781461471370, Springer, 2014
7. Arbres de régression
• Critère de partitionnement: trouver les régions
Rj qui minimisent le RSS donné par
• est la moyenne de la réponse dans la
région Rj
• Toute observation se trouvant dans la région Rj
aura la même prédiction
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 7
James and al., An introduction to Statistical Learning, ISBN 9781461471370, Springer, 2014
8. Arbres de classification
• Critère de partitionnement: recours à des
heuristiques basées sur la mesure d’impureté
d’un ensemble
• mesure nulle, si les observations sont homogènes,
appartenant à une même classe
• mesure maximale, si les observations sont
reparties de manière égale sur toutes les classes
• Index Gini
• Index de l’entropie
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 8
proportions d’observations
appartenant à la classe k = {1, .. K}
classe
… et c’est le gain d’entropie associé à une
variable que l’on utilisera comme critère
pour le partitionnement.
algorithme CART
algorithmes ID3 et C4.5
11. Exemple de partitionnement
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 11
pour cette partie de l’exemple:
• A = variable Gender
• Modalités(A) = {Male, Female}
Ev = sous ensemble d’observations de E admettant v
comme modalité relativement à la variable A
Travel Cost
Expensive Standard Cheap
(racine)
12. Exemple de partitionnement
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 12
3 sous ensembles Ev
admettant v comme
modalité relativement à la
variable Travel Cost
Travel Cost
Expensive Standard Cheap
(racine)
Car Train
14. Exemple de partitionnement
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 14
Travel Cost
Expensive Standard Cheap
Car Train Gender
Male Female
15. Exemple de partitionnement
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 15
2 sous ensembles Ev
admettant v comme
modalité relativement à la
variable Gender
Travel Cost
Expensive Standard Cheap
Train Gender
Male Female
Bus Car Ownership
0 1
Bus Train
Car
16. R package rpart
unArbre <- rpart(formula = RainTomorrow ~ ., data = train_data)
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 16
…
…
CLASS
17. R package rpart
n= 293
node), split, n, loss, yval, (yprob)
* denotes terminal node
1) root 293 47 No (0.83959044 0.16040956)
2) Cloud3pm< 7.5 272 29 No (0.89338235 0.10661765)
4) WindSpeed3pm< 42.5 265 22 No (0.91698113 0.08301887)
8) Pressure3pm>=1006.15 252 16 No (0.93650794 0.06349206)
16) Humidity9am< 94.5 244 12 No (0.95081967 0.04918033)
32) Cloud3pm< 5.5 167 2 No (0.98802395 0.01197605) *
33) Cloud3pm>=5.5 77 10 No (0.87012987 0.12987013)
66) MaxTemp< 28.6 70 5 No (0.92857143 0.07142857) *
67) MaxTemp>=28.6 7 2 Yes (0.28571429 0.71428571) *
17) Humidity9am>=94.5 8 4 No (0.50000000 0.50000000) *
9) Pressure3pm< 1006.15 13 6 No (0.53846154 0.46153846) *
5) WindSpeed3pm>=42.5 7 0 Yes (0.00000000 1.00000000) *
3) Cloud3pm>=7.5 21 3 Yes (0.14285714 0.85714286) *
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 17
graphique généré avec package rattle,
fonction fancyRpartPlot
18. Post-élagage
• Problématique: on peut obtenir un arbre très complexe,
• problème de surajustement (overfitting)
• performance pauvre en généralisation
• Idée: élaguer après la construction de l’arbre entier,
• éliminer en remontant les sous-arbres, optimisant un certain critère d’élagage en vue d’améliorer les
performances en généralisation.
• Nombreuses méthodes.
• Minimal Cost-Complexity Pruning (MCCP) (Breiman et al.,84)
• Reduced Error Pruning (REP) (Quinlan,87,93)
• Minimum Error Pruning (MEP) (Niblett & Bratko,86)
• Critical Value Pruning (CVP) (Mingers,87)
• Pessimistic Error Pruning (PEP) (Quinlan,87)
• Error-Based Pruning (EBP) (Quinlan,93) (utilisé dans C4.5)
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 18
19. Post-élagage: Cost Complexity Pruning
Minimal Cost-Complexity Pruning (MCCP) (Breiman et al.,84)
• Nous générons un arbre de régression T0 large et complexe (donc |T0| grand)
• Au lieu de considérer chaque sous-arbre possible, nous considérons une séquence d’arbres
indexés par un paramètre non négatif α (cost complexity parameter)
• Chaque valeur α de correspond à un sous-arbre T ⊂ T0 tel que
est le plus petit possible.
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 19
nombre de feuilles ou complexité
du sous-arbre
Rm est la région correspondante au
m-ième nœud interne
20. Post-élagage: Cost Complexity Pruning
Minimal Cost-Complexity Pruning (MCCP) (Breiman et al.,84)
• On définit les valeurs α = {0, …, αr } que l’on souhaite tester.
• A fur et à mesure que l’on augment la valeur de α on supprime des branches et l’on obtient une
séquence d’arbres (fonction de α)
• On applique une validation croisée (k-fold cross-validation) pour obtenir le meilleur α
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 20
21. Post-élagage: Cost Complexity Pruning
• n
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 21
James and al., An introduction to Statistical Learning, ISBN 9781461471370, Springer, 2014
MSE car on est dans le cas
d’un arbre de régression. Si
classification, alors on
aurait un taux d’erreur de
classification
arbre T0
22. R package rpart
>printcp(unArbre)
Classification tree:
rpart(formula = RainTomorrow ~ ., data = train_data)
Variables actually used in tree construction:
[1] Cloud3pm Humidity9am MaxTemp Pressure3pm WindSpeed3pm
Root node error: 47/293 = 0.16041
n= 293
CP nsplit rel error xerror xstd
1 0.319149 0 1.00000 1.00000 0.13365
2 0.148936 1 0.68085 0.68085 0.11360
3 0.015957 2 0.53191 0.57447 0.10534
4 0.010000 6 0.46809 0.63830 0.11041
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 22
5 variables utilisées pour le
partitionnement
nb. de RainTomorrow = 'Yes' / nb. total d’observations
dans l’ensemble d’apprentissage
l’algorithme s’arrête si xerror repart à la hausse. On peut
également afficher une corbe avec plotcp(unArbre)
on prend le Root node error comme une base 100,
alors le premier split réduit l’erreur de validation croisée (cross
validation error ou xerror) à 68
cross-validation error
par défaut: 10-fold
24. R package rpart
>printcp(unArbre)
Classification tree:
rpart(formula = RainTomorrow ~ ., data = train_data)
Variables actually used in tree construction:
[1] Cloud3pm Humidity9am MaxTemp Pressure3pm WindSpeed3pm
Root node error: 47/293 = 0.16041
n= 293
CP nsplit rel error xerror xstd
1 0.319149 0 1.00000 1.00000 0.13365
2 0.148936 1 0.68085 0.68085 0.11360
3 0.015957 2 0.53191 0.57447 0.10534
4 0.010000 6 0.46809 0.63830 0.11041
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 24
CP: cost complexity (α)
α = 0.015957 pour le min(xerror) = 0.57, alors on peut
faire un élagage (pruning) avec la fonction
ArbreElague <- prune(unArbre, cp = 0.016)
cross-validation error
25. R package rpart
>pred <- predict(ArbreElague, newdata = test_data, type = "class")
# confusion matrix
>confusion <- table(pred, test_data$RainTomorrow)
>confusion
pred No Yes
No 128 28
Yes 9 6
# misclassification error
>1 - sum(diag(confusion))/sum(confusion)
0.2163
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 25
26. Avantages et limites des arbres de
décision
Facile à expliquer aux gens, surtout aux managers ! … même plus facile à expliquer qu’une
régression linéaire
L’affichage de l’arbre facilite fortement l’interprétation surtout lorsque l’arbre est de petit
taille.
Les arbres peuvent gérer aussi bien les variables quantitatives et que les catégorielles sans
besoin de numériser les modalités des dernières.
L’exactitude de la prévision n’est pas aussi bonne que celle des autres méthodes supervisées
(régressions linéaire, régressions logistique, etc.)
Les arbres de décisions ne sont pas robustes: un petit changement dans les données
d’apprentissage peut largement modifier l’arbre généré.
• Solutions: bagging, random forest
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 26
27. Bagging et forêt d’arbres décisionnels
• On fait tourner en parallèle un grand nombre d’arbres de
décisions construits aléatoirement, avant de les moyenner.
• Random forest fait partie de la famille d’algorithmes
générateurs d’ensembles tels que bagging et boosting.
Bagging
• Echantillonnage avec remplacement (boostrap) de
l’ensemble d’apprentissage; une observation peut
apparaître plusieurs fois dans un même échantillon (bag).
• Chaque bag contient ~2/3 des observations de l’ensemble
d’apprentissage; ~1/3 des observations restera en dehors
du bag (out-of-bag ou OOB)
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 27
28. Bagging et forêt d’arbres décisionnels
Bagging
• Pas besoin d’élagage, car on contrôle la variance
avec bagging.
• Alors on peut « faire pousser » des gros arbres !
• L’algorithme construit des centaines d’arbres
décisionnels et les combine en un seul modèle.
• Dans le cas d’une classification, on prendra
comme résultat le vote majoritaire.
• Dans le cas d’une régression, on prendra comme
résultat la moyenne.
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 28
29. Bagging et forêt d’arbres décisionnels
Bagging
• Soit une observation qui se trouve dans
plusieurs ensembles OOB, alors on peut prévoir
cette observation moyennant tous les modèles
(arbres) construits avec les bag correspondants.
• Si on applique cette méthode à chaque
observation se trouvant dans plusieurs
ensembles OOB, on peut alors calculer alors
une erreur OOB ou OOB error rate.
• Soit on boostrap la totalité des données et on
valide avec les OOB pour chaque observation.
• Soit partitionnement aléatoire « apprentissage
+ test » et on boostrap l’ensemble
d’apprentissage.
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 29
X1 X2 X3 X4 Y
bag N
X1 X2 X3 X4 Y
bag 1
X1 X2 X3 X4 Y
bag 2
…
échantillonnage avec remplacement
une observation peut être présente plusieurs fois dans un même bag
X1 X2 X3 X4 Y X1 X2 X3 X4 Y X1 X2 X3 X4 Y
…TEST TEST TEST
X1 X2 X3 X4 Y X1 X2 X3 X4 Y X1 X2 X3 X4 Y
…OOB 1 OOB 2 OOB N
30. Bagging et forêt d’arbres décisionnels
Random forest
• En termes statistiques, si les arbres sont
décorrélés, cela permet de réduire la
variance des prévisions.
• Comme pour le bagging, on construit des
arbres de décision sur des échantillons
bootstrap.
• Au moment d’effectuer le partitionnement
on ne considère que m variables (m < p) pris
aléatoirement.
• Une nouvelle sélection aléatoire de m
variables est effectuée à chaque split.
• m ~ p/3 (régression), m ~ 𝒑 (classification)
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 30
X1 X2 X3 X4 Y
bag N
X1 X2 X3 X4 Y
bag 1
X1 X2 X3 X4 Y
bag 2
…
échantillonnage avec remplacement
une observation peut être présente plusieurs fois dans un même bag
X1 X2 X3 X4 Y X1 X2 X3 X4 Y X1 X2 X3 X4 Y
…TEST TEST TEST
X1 X2 X3 X4 Y X1 X2 X3 X4 Y X1 X2 X3 X4 Y
…OOB 1 OOB 2 OOB N
splits avec m
variables à
chaque fois
splits avec m
variables à
chaque fois
splits avec m
variables à
chaque fois
auchoix,voirslide
précédent
31. Bagging et forêt d’arbres décisionnels
Bagging ou Random Forest
• L’importance des variables (variable importance)
• Cas de régression
• On peut calculer de combien le RSS a diminué dû aux
splits effectués avec la variable considérée; on
moyenne le résultat sur le nombre d’arbres
correspondants.
• Cas de classification
• On peut calculer de combien l’index de Gini à
diminué dû aux splits effectués avec la variable
considérée; on moyenne le résultat sur le nombre
d’arbres correspondants.
• Plus le résultat est grand plus la variable est
« importante »
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 31
Mean Decrease Accuracy
Mean Decrease Gini
32. Bagging et forêt d’arbres décisionnels
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 32
James and al., An introduction to Statistical
Learning, ISBN 9781461471370, Springer, 2014
33. R package randomForest
>bagging1 <- randomForest(RainTomorrow ~ .,
data=na.omit(train_data),
mtry=20,
importance=TRUE)
>forest1 <- randomForest(RainTomorrow ~ .,
data=na.omit(train_data),
importance=TRUE)
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 33
pour faire du bagging on
split avec toutes les
variables: mtry=20
(ici 20 variables)
pour faire du random forest
soit on spécifie le nb de
variables avec mtry,
soit on ne spécifie rien et
mtry = 𝑝 par défaut
(ici 20 variables)
note: pour une régression mtry=p/3 par défaut
34. R package randomForest
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 34
>forest1
Call:
randomForest(formula = RainTomorrow ~ .,
data = na.omit(train_data), importance =
TRUE)
Type of random forest:
classification
Number of trees: 500
No. of variables tried at each split: 4
OOB estimate of error rate: 12.08%
Confusion matrix:
No Yes class.error
No 210 7 0.03225806
Yes 25 23 0.52083333
>bagging1
Call:
randomForest(formula = RainTomorrow ~ .,
data = na.omit(train_data), mtry = 20,
importance = TRUE)
Type of random forest:
classification
Number of trees: 500
No. of variables tried at each split: 20
OOB estimate of error rate: 13.58%
Confusion matrix:
No Yes class.error
No 204 13 0.05990783
Yes 23 25 0.47916667
36. R package randomForest
>imp.df <- as.data.frame(importance(forest1, type = 2))
>imp.df$vars <- row.names(imp.df)
>imp.df %>% arrange(desc(MeanDecreaseGini))
MeanDecreaseGini vars
1 9.4715806 Pressure3pm
2 7.1163744 Humidity3pm
3 6.9656402 Sunshine
4 6.0338563 Cloud3pm
5 5.7112460 WindGustSpeed
6 5.5796392 Humidity9am
…
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 36
pour une classification on
considère l’index de Gini
37. Bibliographie
• James and al., An introduction to Statistical Learning, ISBN 9781461471370, Springer, 2014
• Williams G., Data Mining with Rattle and R, ISBN 9781441998897, Springer, 2011
30/06/2016 BORIS GUARISMA - FORMATION DATA SCIENTIST - FORÊT D'ARBRES DÉCISIONNELS 37