FLTauR - Construction de modèles de prévision sous r avec le package caret
1. Construction de modèles de prévision sous R avec le package caret
Groupe FLtauR - Vendredi 7 Mars 2014
Conseil en Management de
l’Information
Goulven Salic
www.bluestone.fr
55 rue du Faubourg Montmartre – 75009 Paris
+33 (0)1 53 25 02 10
contact@bluestone.fr
2. Sommaire
Introduction
1. Que fait caret?
2. Exemple « pratique »: scoring bancaire (données GermanCredit )
Traitements préliminaires
Modèle 1: k-plus proches voisins
Modèle 2: régression pls
Modèle 3: forêt aléatoire
3. Fonctionnalités supplémentaires de caret
Conclusion
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
2
3. Introduction
Comment créer un modèle de prévision performant ?
La création d’un modèle de prévision performant est
un processus complexe
Erreur de prévision
Fort biais,
Faible variance
Faible biais,
Forte variance
Echantillon à scorer
De très nombreux de modèles de prévision sont disponibles dans R,
avec chacun leurs spécificités d’utilisation
Beaucoup de modèles de prévision présentent un risque de surapprentissage
Echantillon d’apprentissage
Complexité « optimale » au
sens de la prévision
Complexité du modèle (exemple:
nombre de variables)
caret propose un cadre commun pour évaluer et
comparer une centaine de modèles
Séparation apprentissage/test équilibrée
Choix du modèle optimal par ré-échantillonnage
Sélection de variables, pré-traitement, mesure de l’importance des
variables a posteriori…
Avertissement: ce package n’a d’intérêt que pour des modèles avancés
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
3
4. Introduction
Dans quel contexte utiliser caret ?
Le package R caret (classification and regression training) est une boîte à outil qui
uniformise et rationalise les différentes étapes du processus de création de modèle
En entrée
Variable à prédire Y (ou à « scorer »):
numérique (régression) : ex. consommation,
revenu…
Catégorielle (classification): ex. solvabilité,
survie à un naufrage…
Variables explicatives X
En sortie
Prévision de Y
Mesure de la performance du
modèle retenu
Bonus:
Choix du modèle (arbres,
régression pls, SVM, LASSO,
réseau de neurones,…)
Choix des paramètres de ce
modèle
Potentiellement nombreuses
De qualité variable (valeurs manquantes)
Importance des différentes variables
…
En termes de données:
Base d’estimation: connaissance de X et Y
Base à « scorer »: connaissance de X
uniquement
Apprentissage
Validation
Test
Base à scorer
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
Base enrichie
07/03/2014
4
5. Introduction
| Le choix d’un paramètre de complexité est une étape clé de la création d’un modèle
Exemple de modèle: k-plus proches voisins
Principe: Prévision de Y = Moyenne des k plus proches voisins dans
l’espace des X
Paramètre de complexité: k
Impact de l’évolution de ce paramètre:
Si k est petit (exemple k=1): le modèle est spécifique aux données
d’apprentissage, il y’a un risque que le modèle soit mauvais sur un
nouvel échantillon
Si k est grand (exemple k=10): le modèle renverra souvent la même
valeur (faible variance) mais présentera un fort biais
Tout l’art est de trouver le bon compromis
?
3 plus proches
voisins
Autre exemple (par analogie) : régression linéaire
k = nombre de variables de la régression
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
5
6. Sommaire
Introduction
1. Que fait caret?
2. Exemple « pratique »: scoring bancaire (données GermanCredit )
Traitements préliminaires
Modèle 1: k-plus proches voisins
Modèle 2: régression pls
Modèle 3: forêt aléatoire
3. Fonctionnalités supplémentaires de caret
Conclusion
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
6
7. Que fait caret?
| Fonctionnalité principale (fonction train) : estimation par ré-échantillonnage et validation croisée
L’intérêt principal de caret est d’automatiser
le choix de modèle par validation croisée
Algorithme de sélection de la version optimale
d’un modèle
Plusieurs variantes de validation croisée existent (bootstrap,
validation croisée simple…)
Ici: présentation de la validation croisée (dite k-fold)
répétée
Dans la pratique, il s’agit aussi de choisir parmi
plusieurs types de modèles
Une approche consiste à appliquer cette procédure sur
plusieurs modèles candidats puis à retenir le meilleur
Définition par l’utilisateurs d’un ensemble de versions du modèle à tester
Pour chacune de ces versions:
Pour chaque répétition de l’échantillonnage
Découpage de l’apprentissage en k morceaux de taille
égale
k fois: sélection d’un des k morceaux, estimation du
modèle sur les k-1 morceaux restants et prévision sur le
morceau sélectionné
Fin des itérations
Calcul d’une erreur moyenne sur les k prévisions
Fin du test de chaque version
Choix de la version optimale en termes de prévision
Estimation du modèle final sur l’ensemble des données pour application
Algorithme de choix parmi plusieurs modèles
Définir une liste de modèles (pls, réseaux de neurones, knn…)
Pour chaque modèle:
Découpage apprentissage/test (70%/30%)
Choix de la meilleure version sur l’échantillon
d’apprentissage
Mesure de l’erreur sur l’échantillon de test
Sélection du meilleur modèle
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
7
8. Que fait caret?
| Autre fonctionnalité importante: découpage apprentissage/test équilibré
Lors du découpage apprentissage/test, il est
préférable d’avoir un échantillon
d’apprentissage représentatif:
caret reproduit dans l’échantillon d’apprentissage la
même répartition des Y que dans l’ensemble de la
population
caret permet également de reproduire une structure
proche sur les variables explicatives X (différent d’un
tirage stratifié, approche dite de dissimilarité maximale)
Autres fonctionnalités intéressantes:
Pré-traitement: centrage et réduction, complétion de
valeurs manquantes, transformation de Box-Cox
Sélection de variables a priori
Mesure de l’importance des variables d’un modèle a
posteriori
Calcul parallèle
Découpage apprentissage/test pour des séries
temporelles
Ajout de modèles et méthodes d’apprentissages
personnalisés
Mesure de performance a posteriori sur l’échantillon de
test
En résumé: caret est une boîte à outil qui
centralise les méthodes utiles du machine
learning et donne un cadre commun pour le
test de beaucoup de modèles
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
8
9. Sommaire
Introduction
1. Que fait caret?
2. Exemple « pratique »: scoring bancaire (données GermanCredit )
Traitements préliminaires
Modèle 1: k-plus proches voisins
Modèle 2: régression PLS
Modèle 3: forêts aléatoires
3. Fonctionnalités supplémentaires de caret
Conclusion
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
9
10. Exemple « pratique »:
Description du jeu de données:
Code
Jeu de donnée GermanCredit présent dans le
package:
1 000 observations
61 variables explicatives (variables
catégorielles recodées en plusieurs variables
binaires)
Variable cible: « Bon » ou « Mauvais » payeur
Découpage et choix de l’approche de
validation croisée:
Découpage: 70% d’apprentissage équilibré sur le
classe de payeur
Méthode d’apprentissage: 10 répétitions de
validation croisée sur 1/10 des données
library( caret)
# Donnees
data( GermanCredit)
# Découpage apprentissage test
inTrain <- createDataPartition( y = GermanCredit$Class,
p = 0.70,
list = F)
# Echantillons d'apprentissage et de test
training <- GermanCredit[ inTrain, ]
test <- GermanCredit[ -inTrain, ]
# Creation de l’objet de controle de la method de validation
# croisée
cvCtrl <- trainControl( method = "repeatedcv",
number = 10,
repeats = 10)
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
10
11. Exemples
library(caret)
| 1- k plus proches voisins
Code
knnGrid <- data.frame( .k = 1:150)
Description brève du modèle:
knnFit <- train( Class ~ .,
data = training,
method = "knn",
tuneGrid = knnGrid,
trControl = cvCtrl)
plot( knnFit)
Prévision de Y = moyenne des k voisins dans
l’espace des X
Paramètre de complexité: nombre de voisins k
# Mesure finale du taux de bien classés sur l'échantillon de test
prevKnn <- predict( knnFit, newdata = test)
tauxBienClasses <- sum( prevKnn == test$Class)/length( prevKnn )
3 plus proches
voisins
# tauxBienClasses = 0.71
?
Paramètres de complexité (ou versions du modèle) testés
Console
Accuracy (Repeated Cross-Validation)
0.70
700 samples
61 predictors
2 classes: 'Bad', 'Good‘
k
1
2
3
No pre-processing
4
Resampling: Cross-Validation (10 fold, repeated 5
10 times)
6
0.68
0.66
0.64
0.62
Summary of sample sizes: 630, 630, 630, 630,
630, 630, ...
0.60
Resampling results across tuning parameters:
0
50
100
150
Accuracy Kappa
0.618 0.0866
0.603 0.0599
0.633 0.0792
0.637 0.0936
0.658 0.102
0.652 0.083
Accuracy SD Kappa SD
0.0502
0.107
0.0587
0.126
0.051
0.109
0.0506
0.108
0.0458
0.0987
0.0433
0.105
...
Accuracy was used to select the optimal model
using the largest value.
The final value used for the model was k = 70.
#Neighbors
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
11
12. Exemples
library(caret)
| 2- Régression pls
plsGrid = data.frame( .ncomp = 1:30)
Description brève du modèle:
Code
plsFit <- train( Class ~ .,
data = training,
method = "pls",
tuneGrid = plsGrid,
trControl = cvCtrl)
plot( plsFit)
plsFit
Régression sur les composante principales de X
avec prise en compte de la corrélation avec Y
Paramètre de complexité: nombre de
composantes pls (au maximum égal nombre de
variables)
# Mesure finale du taux de bien classés sur l'échantillon de test
prevPls <- predict( plsFit, newdata = test)
tauxBienClasses <- sum( prevPls == test$Class)/length( prevPls)
# tauxBienClasses = 0.7366667
Accuracy (Repeated Cross-Validation)
Paramètres de complexité (ou versions du modèle) testés
Console
700 samples
61 predictors
2 classes: 'Bad', 'Good'
0.76
2
3
4
5
6
No pre-processing
7
Resampling: Cross-Validation (10 fold, repeated
8
10 times)
9
10
0.74
0.72
Summary of sample sizes: 630, 630, 630, 630,
630, 630, ...
0.70
0
5
10
15
#Components
20
25
30
0.701
0.707
0.77
0.761
0.756
0.76
0.763
0.761
0.762
0.0748 0.0245
0.0783
0.105 0.0305
0.0968
0.402 0.0461
0.127
0.391 0.0423
0.114
0.381 0.0425
0.115
0.396 0.0446
0.116
0.401 0.0422
0.112
0.395 0.0401
0.104
0.397 0.0394
0.102
…
ncomp Accuracy Kappa Accuracy SD Kappa Accuracy was used to select the optimal model using
the largest value.
SD
The final value used for the model was ncomp = 4.
1 0.707 0.0693 0.0202
0.0672
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
12
13. Exemples
Code
| 3- Forêt aléatoire
rfFit <- train( Class ~ .,
data = training,
method = "rf",
tuneLength = 20,
trControl=trainControl( method = "repeatedcv",
number = 5,
repeats = 5))
rfFit
plot( rfFit)
Description brève du modèle:
Construction de plusieurs arbres de décision qui
à chaque nœuds utilisent un nombre aléatoire de
variables explicatives puis moyenne des arbres
obtenus pour la prévision
Paramètre de complexité: nombre de variables
explicatives tirées aléatoirement à chaque étape
# Mesure finale du taux de bien classés sur l'échantillon de test
prevRf = predict( rfFit, newdata = test)
tauxBienClasses = sum( prevRf == test$Class)/length( prevRf)
tauxBienClasses
# tauxBienClasses = 0.77
Paramètres de complexité (ou versions du modèle) testés
Console
Accuracy (Repeated Cross-Validation)
0.75
61 predictors
2 classes: 'Bad', 'Good'
0.74
0.73
0.72
0
10
20
30
40
#Randomly Selected Predictors
50
60
5 0.746 0.284 0.0267
0.0833
8 0.745 0.302 0.0262
0.0758
11 0.746 0.315 0.0317
0.0924
No pre-processing
14 0.743 0.316 0.0311
0.0899
Resampling: Cross-Validation (5 fold, repeated 5 17 0.75 0.337 0.0311
0.0888
times)
20 0.747 0.329 0.031
0.092
…
Summary of sample sizes: 560, 560, 560, 560,
560, 560, ...
Accuracy was used to select the optimal model
using the largest value.
Resampling results across tuning parameters: The final value used for the model was
mtry = 17.
mtry Accuracy Kappa Accuracy SD Kappa SD
2 0.717 0.0782 0.0122
0.0539
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
13
14. Sommaire
Introduction
1. Que fait caret?
2. Exemple « pratique »: scoring bancaire (données GermanCredit )
Traitements préliminaires
Modèle 1: k-plus proches voisins
Modèle 2: régression pls
Modèle 3: forêt aléatoire
3. Fonctionnalités supplémentaires de caret
Conclusion
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
14
15. Fonctionnalités supplémentaires
| Pré-traitement
library(caret)
Un pré-traitement est parfois nécessaire
pour:
# 1- Pré-traitement en amont
preProcValues <- preProcess( training[,!( colnames( training) == "Class")],
method = c( "center", "scale"))
Enrichir les données (présence de valeurs
manquantes)
Transformer les données pour les besoins d’un type
particulier de modèles (données centrées-réduites
pour les réseaux de neurones, transformation de
Box-Cox pour « normaliser » les variables explicatives
caret permet ce genre de traitements
selon deux modes:
Code
# Autres méthodes: "knnImpute", "bagImpute",
# "BoxCox", "YeoJohnson" ...
trainTransformedDesc <- predict(preProcValues,training)
# 2- Pré-traitement pendant l'estimation du modèle
plsFit2 <- train( Class ~ .,
data = training,
preProcess = c("center", "scale"),
method = "pls",
tuneLength = 10,
trControl = cvCtrl)
# Autres pré-traitements possibles en amont: recodage # des
variables catégorilles en variables binaires #(recodage de plein
rang)
En amont du modèle (modification des données
d’apprentissage)
Au moment de l’estimation du modèle
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
15
16. Fonctionnalités supplémentaires
| Importance des variables
Code
caret permet également de mesurer après
estimation du modèle les variables les plus
influentes:
Les métriques spécifiques à chaque modèles sont mises
en œuvre
Le résultat est normalisé sur une échelle de 1 à 100
comparable d’un modèle à l ’autre.
# Importance des variables du modèle pls
varImp(plsFit)
# Importance des variables du modèle knn
varImp(knnFit)
Console
Console
Le package permet également d’effectuer
une sélection de variable a priori
Basé sur des tirages aléatoires de groupes de variables
N’est applicable qu’à certains modèles (par exemple, le
modèle LASSO consiste en tant que tel en une sélection
de variables)
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
16
17. Fonctionnalités supplémentaires
| Calcul parallèle, séries temporelles
caret permet d’accélérer les procédures
de ré-échantillonnage en parallélisant les
tâches
Les différents échantillons tirés étant indépendants,
la parallélisation ne pose pas de problème théorique
Utilisation du package doParallel (marche également
avec doMC ou doMPI selon la plateforme)
Possibilité de faire du ré-échantilonnage
sur des données temporelles
Un re-échantillonnage classique n’est pas adapté à
des données temporelles
Possibilité d’effectuer différents découpages où
l’échantillon d’apprentissage est situé
chronologiquement avant l’échantillon de test
Remarque : pour l’instant, pas de prise en charge des
modèles de séries temporelles univariés classiques
(ARIMA, ARCH, …)
Code
library(doParallel)
nbCores <- 2
cl <- makeCluster( nbCores)
registerDoParallel(cl)
plsFit <- train( Class ~ .,
data = training,
allowParallel = T,
method = "pls",
tuneLength = 25)
stopCluster(cl)
Code
data(economics)
myTimeControl <- trainControl(method="timeslice",
initialWindow=36,
horizon=12,
fixedWindow=TRUE
)
plsFitTime <- train( unemploy~pce+pop+psavert ,
data=economics,
method="pls",
preProc= c("center", "scale"),
trControl=myTimeControl
)
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
17
18. Sommaire
Introduction
1. Que fait caret?
2. Exemple « pratique »: scoring bancaire (données GermanCredit )
Traitements préliminaires
Modèle 1: k-plus proches voisins
Modèle 2: régression pls
Modèle 3: forêt aléatoire
3. Fonctionnalités supplémentaires de caret
Conclusion
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
18
19. Conclusion
| Avantages et inconvénients du package caret
Inconvénients:
Avantages:
Applicable à presque toutes les méthodes existant en
machine learning
Ecriture simple des différents processus de sélection de
modèles
Package régulièrement maintenu et faisant l’objet d’une
attention croissante dans la communauté R (useR! 2013)
Débuggage : dépend du package du modèle que l’on
cherche à estimer (qualité variable selon les modèles, les
méthodes principales sont néanmoins fiables)
Temps de calcul (cela est propre à toute approche de rééchantillonnage)
Pour aller plus loin:
http://caret.r-forge.r-project.org/
http://cran.r-project.org/web/packages/caret/vignettes/caret.pdf
www.jstatsoft.org/v28/i05/paper
http://appliedpredictivemodeling.com/
http://www.stanford.edu/~hastie/local.ftp/Springer/OLD//ESLII_print4.pdf
FLTAUR – MODÈLES DE PRÉVISION SOUS R AVEC LE PACKAGE CARET
07/03/2014
19