L’algorithme Random Forest (forêt aléatoire) fait partie de la famille des modèles d’agrégation et donne de très bons résultats dans la plupart des problématiques de prédiction. Je vous propose dans ce tutoriel de voir comment appliquer un algorithme Random Forest avec R de la préparation des données jusqu’à la restitution des résultats.
Avant d’aller plus loin, il est quasiment indispensable de comprendre comment fonctionne l’algorithme Random Forest.
Quand utiliser un algorithme Random Forest ?
Vous pouvez l’utiliser aussi bien pour les classifications (variable à prédire qualitative) que pour les régressions (variable à prédire quantitative).
Tutoriel Random Forest avec R :
Nous allons utiliser le dataset Iris qui est disponible directement via R et qui est assez simple. L’objectif est de prédire l’espèce d’Iris (Setosa, Versicolor, Virginica) en fonction des caractéristiques de la fleur.
C’est parti :
1) Pour commencer nous allons charger 2 librairies :
- RandomForest qui va permettre de faire le modèle
- Plotly pour faire des graphiques visuels
# Chargement de la librairie
library(randomForest)
library(plotly)
2) On charge ensuite les données..
et on jette un coup d’oeil à la répartition des variables. Nous avons ici une variable à prédire (Species) et 4 variables quantitatives qui vont nous permettre de calculer la probabilité que chaque fleur appartienne à une des espèces. Comme nous avons peu de variables, on peut se permettre de faire un peu d’exploration en affichant les histogrammes de chacune d’entre elles. Ça nous permet d’identifier s’il y a des valeurs extrêmes ou aberrantes à corriger. Ceci dit, cet algorithme est peu influencé par les variables extrêmes.
Donc à moins d’avoir des choses vraiment aberrantes vous pouvez tester sans correction. Pour cet exemple on considère que tout le travail de préparation des données (enrichissement, dédoublonnage, création de nouveaux indicateurs,…) a déjà été fait.
# Chargement des données data(iris) # description des données summary(iris) plot_ly (x=iris$Sepal.Length, type = "histogram") plot_ly (x=iris$Sepal.Width, type = "histogram") plot_ly (x=iris$Petal.Length,type = "histogram") plot_ly (x=iris$Petal.Width, type = "histogram")![]()
3) On applique l’algorithme Random Forest sur les données
Plusieurs paramètres sont à définir et peuvent être ajustés pour optimiser l’algorithme :
- Le nombre d’arbres que la modèle va utiliser – ntree
- Le nombre de variables testées à chaque division d’un noeud – mtry (vous vous souvenez? Random Forest tire aléatoirement les variables qu’il va utiliser pour chaque division d’un noeud. Si ce n’est pas clair, vous pouvez (re)lire l’article Random Forest, comment ça marche?)
Comme nous avons peu de variables explicatives, nous allons utiliser un modèle avec 100 arbres et une sélection de 2 variables par divisions :
# Algorithme Random Forest iris_RandomForest <- randomForest(Species~.,data=iris, ntree = 100, mtry = 2, na.action = na.roughfix)
4) On analyse les résultats et la performance du modèle
Affichons les résultats de l’algorithme, on y retrouve :
- Les paramètres du modèle Number of trees=ntree et No. of variables tried at each split=mtry
- L’erreur Out Of Bag qui est utilisée pour mesurer la performance des modèles d’agrégation. Il s’agit de l’erreur moyenne calculée, à chaque fois, sur les échantillons qui n’ont pas servis à calculer le modèle.
- La matrice de confusion qui permet d’avoir une vision plus détaillée de la performance du modèle. On peut lire en ligne les valeurs réelles et en colonne les valeurs prédites par l’algorithme. Ainsi, les valeurs sur la diagonale correspondent à de bonnes prédictions tandis que les autres valeurs ont mal été prédites. Ici, on voit par exemple que 5 Virginicas ont été prédites comme étant des Versicolors.
# Résultats de l'algoritme
print(iris_RandomForest)
5) Si besoin, on optimise le modèle
Vous pouvez maintenant modifier les paramètres de l’algorithme pour essayer de diminuer l’Out Of Bag error. Vous pouvez modifier à la main les paramètres pour améliorer le modèle ou utiliser la méthode Grid Search. Une fois que les résultats conviennent, nous allons pouvoir expliciter un peu plus l’algorithme pour être en mesure de l’expliquer.
6) On restitue les résultats
Que serons nous en mesure de donner / d’expliquer aux futurs utilisateurs du modèle ?
- L’importance des variables dans le modèle, pour cela nous allons utiliser l’indice Mean Decrease Gini. Plus cet indicateur est élevé plus la variable est importante dans le modèle (il mesure la diminution de l’indice de Gini si l’on n’intégrait plus cette variable dans le modèle)
- Le lien entre les variables les plus importantes et la variable à prédire
- La performance du modèle avec la matrice de confusion qui est plus détaillée que l’Out Of Bar error.
#Variables d'importance iris_RandomForest$importance[order(iris_RandomForest$importance[, 1], decreasing = TRUE), ] # Impact de Petal.Length et de Petal.Width sur Species plot_ly(data = iris, x = ~Species, y = ~Petal.Length, type ='bar') plot_ly(data = iris, x = ~Species, y = ~Petal.Width,type ='bar')
Bien sur les résultats bruts donnés par R ne sont pas présentables et il faut encore les travailler un peu pour avoir un résultat simple :
Il est toujours important de faire valider vos résultats par des personnes qui connaissent la problématique que vous modélisez. Certaines variables pourraient intervenir dans votre modèle mais pourraient ne pas être pertinentes d’un point de vue métier.
Si vous n’êtes pas convaincus par la performance de Random Forest, vous pouvez refaire le même travail en appliquant un arbre de décision avec R.
Ping : Random Forest, tutoriel pas à pas avec Python – Lovely Analytics