Comment effectuer une validation croisée pour les performances du modèle dans R



En statistiques, nous construisons souvent des modèles pour deux raisons :

  • Comprendre la relation entre une ou plusieurs variables prédictives et une variable de réponse.
  • Utiliser un modèle pour prédire les observations futures.

La validation croisée est utile pour estimer dans quelle mesure un modèle est capable de prédire les observations futures.

Par exemple, nous pouvons construire un modèle de régression linéaire multiple qui utilise l’âge et le revenu comme variables prédictives et le statut de défaut de paiement comme variable de réponse. Dans ce cas, nous souhaiterons peut-être adapter le modèle à un ensemble de données, puis utiliser ce modèle pour prédire, en fonction du revenu et de l’âge d’un nouveau demandeur, la probabilité qu’il ne rembourse pas son prêt.

Pour déterminer si le modèle a une forte capacité prédictive, nous devons l’utiliser pour faire des prédictions sur des données qu’il n’a jamais vues auparavant. Cela nous permettra d’estimer l’ erreur de prédiction du modèle.

Utilisation de la validation croisée pour estimer l’erreur de prédiction

La validation croisée fait référence à différentes manières dont nous pouvons estimer l’erreur de prédiction. L’approche générale de la validation croisée est la suivante :

1. Mettez de côté un certain nombre d’observations dans l’ensemble de données – généralement 15 à 25 % de toutes les observations.
2. Ajuster (ou « entraîner ») le modèle sur les observations que nous conservons dans l’ensemble de données.
3. Testez dans quelle mesure le modèle peut faire des prédictions sur les observations que nous n’avons pas utilisées pour entraîner le modèle.

Mesurer la qualité d’un modèle

Lorsque nous utilisons le modèle ajusté pour faire des prédictions sur de nouvelles observations, nous pouvons utiliser plusieurs métriques différentes pour mesurer la qualité du modèle, notamment :

R-carré multiple : cela mesure la force de la relation linéaire entre les variables prédictives et la variable de réponse. Un multiple R au carré de 1 indique une relation linéaire parfaite tandis qu’un multiple R au carré de 0 n’indique aucune relation linéaire. Plus le multiple R au carré est élevé, plus les variables prédictives sont capables de prédire la variable de réponse.

Erreur quadratique moyenne (RMSE) : mesure l’erreur de prédiction moyenne réalisée par le modèle lors de la prédiction de la valeur d’une nouvelle observation. Il s’agit de la distance moyenne entre la valeur réelle d’une observation et la valeur prédite par le modèle. Des valeurs inférieures pour RMSE indiquent un meilleur ajustement du modèle.

Erreur absolue moyenne (MAE) : il s’agit de la différence absolue moyenne entre la valeur réelle d’une observation et la valeur prédite par le modèle. Cette métrique est généralement moins sensible aux valeurs aberrantes que le RMSE. Des valeurs plus faibles pour MAE indiquent un meilleur ajustement du modèle.

Implémentation de quatre techniques de validation croisée différentes dans R

Nous expliquerons ensuite comment implémenter les techniques de validation croisée suivantes dans R :

1. Approche de l’ensemble de validation
2. Validation croisée k fois
3. Laissez une validation croisée de côté
4. Validation croisée k fois répétée

Pour illustrer comment utiliser ces différentes techniques, nous utiliserons un sous-ensemble de l’ensemble de données R intégré mtcars :

#define dataset
data <- mtcars[ , c("mpg", "disp", "hp", "drat")]

#view first six rows of new data
head(data)

#                   mpg disp  hp drat
#Mazda RX4         21.0  160 110 3.90
#Mazda RX4 Wag     21.0  160 110 3.90
#Datsun 710        22.8  108  93 3.85
#Hornet 4 Drive    21.4  258 110 3.08
#Hornet Sportabout 18.7  360 175 3.15
#Valiant           18.1  225 105 2.76

Nous allons construire un modèle de régression linéaire multiple en utilisant disp , hp et drat comme variables prédictives et mpg comme variable de réponse.

Approche de l’ensemble de validation

L’ approche de l’ensemble de validation fonctionne comme suit :

1. Divisez les données en deux ensembles : un ensemble est utilisé pour entraîner le modèle (c’est-à-dire estimer les paramètres du modèle) et l’autre ensemble est utilisé pour tester le modèle. Généralement, l’ensemble de formation est généré en sélectionnant au hasard 70 à 80 % des données, et les 20 à 30 % restants des données sont utilisés comme ensemble de test.

2. Créez le modèle à l’aide de l’ensemble de données d’entraînement.
3. Utilisez le modèle pour faire des prédictions sur les données de l’ensemble de test.
4. Mesurez la qualité du modèle à l’aide de métriques telles que R-carré, RMSE et MAE.

Exemple:

L’exemple suivant utilise l’ensemble de données que nous avons défini ci-dessus. Tout d’abord, nous divisons les données en
un ensemble de formation et un ensemble de test, utilisant 80 % des données comme ensemble de formation et les 20 % restants des données comme ensemble de test. Ensuite, nous construisons le modèle à l’aide de l’ ensemble de formation. Ensuite, nous utilisons le modèle pour faire des prédictions sur l’ensemble de test. Enfin, nous mesurons la qualité du modèle à l’aide du R-carré, du RMSE et du MAE.

#load dplyr library used for data manipulation
library(dplyr)

#load caret library used for partitioning data into training and test set
library(caret)

#make this example reproducible
set.seed(0)

#define the dataset
data <- mtcars[ , c("mpg", "disp", "hp", "drat")]

#split the dataset into a training set (80%) and test set (20%).
training_obs <- data$mpg %>% createDataPartition(p = 0.8, list = FALSE)

train <- data[training_obs, ]
test <- data[-training_obs, ]

# Build the linear regression model on the training set
model <- lm(mpg ~ ., data = train)

# Use the model to make predictions on the test set
predictions <- model %>% predict(test)

#Examine R-squared, RMSE, and MAE of predictions
data.frame(R_squared = R2(predictions, test$mpg),
           RMSE = RMSE(predictions, test$mpg),
           MAE = MAE(predictions, test$mpg))

#  R_squared     RMSE     MAE
#1 0.9213066 1.876038 1.66614

Lorsque l’on compare différents modèles, celui qui produit le RMSE le plus bas sur l’ensemble de test est le modèle préféré.

Avantages et inconvénients de cette approche

L’avantage de l’approche des ensembles de validation est qu’elle est simple et efficace sur le plan informatique. L’inconvénient est que le modèle est construit en utilisant uniquement une partie des données totales. Si les données que nous oublions de l’ensemble de formation contiennent des informations intéressantes ou précieuses, le modèle n’en tiendra pas compte.

Approche de validation croisée k-fold

L’ approche de validation croisée k-fold fonctionne comme suit :

1. Divisez aléatoirement les données en k « plis » ou sous-ensembles (par exemple, 5 ou 10 sous-ensembles).
2. Entraînez le modèle sur toutes les données, en laissant de côté un seul sous-ensemble.
3. Utilisez le modèle pour faire des prédictions sur les données du sous-ensemble qui a été laissé de côté.
4. Répétez ce processus jusqu’à ce que chacun des k sous-ensembles ait été utilisé comme ensemble de test.
5 . Mesurez la qualité du modèle en calculant la moyenne des k erreurs de test. Ceci est connu
comme erreur de validation croisée.

Exemple

Dans cet exemple, nous divisons d’abord les données en 5 sous-ensembles. Ensuite, nous ajustons le modèle en utilisant toutes les données sauf un sous-ensemble. Ensuite, nous utilisons le modèle pour faire des prédictions sur le sous-ensemble qui a été laissé de côté et enregistrons l’erreur de test (en utilisant R-carré, RMSE et MAE). Nous répétons ce processus jusqu’à ce que chaque sous-ensemble ait été utilisé comme ensemble de test. Ensuite, nous calculons simplement la moyenne des 5 erreurs de test.

#load dplyr library used for data manipulation
library(dplyr)

#load caret library used for partitioning data into training and test set
library(caret)

#make this example reproducible
set.seed(0)

#define the dataset
data <- mtcars[ , c("mpg", "disp", "hp", "drat")]

#define the number of subsets (or "folds") to use
train_control <- trainControl(method = "cv", number = 5)

#train the model
model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control)

#Summarize the results
print(model)

#Linear Regression 
#
#32 samples
# 3 predictor
#
#No pre-processing
#Resampling: Cross-Validated (5 fold) 
#Summary of sample sizes: 26, 25, 26, 25, 26 
#Resampling results:
#
#  RMSE      Rsquared   MAE     
#  3.095501  0.7661981  2.467427
#
#Tuning parameter 'intercept' was held constant at a value of TRUE

Avantages et inconvénients de cette approche

L’avantage de l’approche de validation croisée k fois par rapport à l’approche de l’ensemble de validation est qu’elle construit le modèle plusieurs fois différentes en utilisant à chaque fois différents morceaux de données, nous n’avons donc aucune chance d’omettre des données importantes lors de la construction du modèle.

La partie subjective de cette approche consiste à choisir la valeur à utiliser pour k, c’est-à-dire le nombre de sous-ensembles en lesquels diviser les données. En général, des valeurs de k plus faibles entraînent un biais plus élevé mais une variabilité plus faible, tandis que des valeurs de k plus élevées conduisent à un biais plus faible mais une variabilité plus élevée.

En pratique, k est généralement choisi comme étant égal à 5 ou 10, car ce nombre de sous-ensembles tend à éviter simultanément trop de biais et trop de variabilité.

Approche de validation croisée Leave One Out (LOOCV)

L’ approche LOOCV fonctionne de la manière suivante :

1. Construisez le modèle en utilisant toutes les observations de l’ensemble de données sauf une.
2. Utilisez le modèle pour prédire la valeur de l’observation manquante. Enregistrez l’erreur de test de cette prédiction.
3. Répétez ce processus pour chaque observation de l’ensemble de données.
4. Mesurez la qualité du modèle en calculant la moyenne de toutes les erreurs de prédiction.

Exemple

L’exemple suivant illustre comment utiliser perform LOOCV pour le même ensemble de données que celui utilisé dans les exemples précédents :

#load dplyr library used for data manipulation
library(dplyr)

#load caret library used for partitioning data into training and test set
library(caret)

#make this example reproducible
set.seed(0)

#define the dataset
data <- mtcars[ , c("mpg", "disp", "hp", "drat")]

#specify that we want to use LOOCV
train_control <- trainControl(method = "LOOCV")

#train the model
model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control)

#summarize the results
print(model)

#Linear Regression 
#
#32 samples
# 3 predictor
#
#No pre-processing
#Resampling: Leave-One-Out Cross-Validation 
#Summary of sample sizes: 31, 31, 31, 31, 31, 31, ... 
#Resampling results:
#
#  RMSE      Rsquared   MAE     
#  3.168763  0.7170704  2.503544
#
#Tuning parameter 'intercept' was held constant at a value of TRUE

Avantages et inconvénients de cette approche

L’avantage de LOOCV est que nous utilisons tous les points de données, ce qui réduit généralement les biais potentiels. Cependant, puisque nous utilisons le modèle pour prédire la valeur de chaque observation, cela pourrait conduire à une plus grande variabilité de l’erreur de prédiction.

Un autre inconvénient de cette approche est qu’elle doit s’adapter à un si grand nombre de modèles qu’elle peut devenir inefficace et lourde sur le plan des calculs.

Approche de validation croisée répétée k-fold

Nous pouvons effectuer une validation croisée k-fold répétée en effectuant simplement une validation croisée k-fold plusieurs fois. L’erreur finale est l’erreur moyenne du nombre de répétitions.

L’exemple suivant effectue une validation croisée 5 fois, répétée 4 fois :

#load dplyr library used for data manipulation
library(dplyr)

#load caret library used for partitioning data into training and test set
library(caret)

#make this example reproducible
set.seed(0)

#define the dataset
data <- mtcars[ , c("mpg", "disp", "hp", "drat")]

#define the number of subsets to use and number of times to repeat k-fold CV
train_control <- trainControl(method = "repeatedcv", number = 5, repeats = 4)

#train the model
model <- train(mpg ~ ., data = data, method = "lm", trControl = train_control)

#summarize the results
print(model)

#Linear Regression 
#
#32 samples
# 3 predictor
#
#No pre-processing
#Resampling: Cross-Validated (5 fold, repeated 4 times) 
#Summary of sample sizes: 26, 25, 26, 25, 26, 25, ... 
#Resampling results:
#
#  RMSE      Rsquared   MAE     
#  3.176339  0.7909337  2.559131
#
#Tuning parameter 'intercept' was held constant at a value of TRUE

Avantages et inconvénients de cette approche

L’avantage de l’approche de validation croisée répétée k fois est que pour chaque répétition, les données seront divisées en sous-ensembles légèrement différents, ce qui devrait donner une estimation encore plus impartiale de l’erreur de prédiction du modèle. L’inconvénient de cette approche est qu’elle peut nécessiter beaucoup de calculs puisque nous devons répéter le processus d’ajustement du modèle plusieurs fois.

Comment choisir le nombre de plis en validation croisée

La partie la plus subjective de la validation croisée consiste à décider du nombre de plis (c’est-à-dire de sous-ensembles) à utiliser. En général, plus le nombre de replis est petit, plus les estimations d’erreur sont biaisées, mais moins elles seront variables. À l’inverse, plus le nombre de replis est élevé, moins les estimations d’erreur sont biaisées, mais plus elles seront variables.

Il est également important de garder à l’esprit le temps de calcul. Pour chaque pli, vous devrez former un nouveau modèle, et s’il s’agit d’un processus lent, cela pourrait prendre beaucoup de temps si vous choisissez un nombre élevé de plis.

En pratique, la validation croisée est généralement effectuée avec 5 ou 10 fois, car cela permet un bon équilibre entre variabilité et biais, tout en étant également efficace sur le plan informatique.

Comment choisir un modèle après avoir effectué une validation croisée

La validation croisée est utilisée pour évaluer l’erreur de prédiction d’un modèle. Cela peut nous aider à choisir entre deux ou plusieurs modèles différents en mettant en évidence quel modèle présente l’erreur de prédiction la plus faible (basée sur le RMSE, le R au carré, etc.).

Une fois que nous avons utilisé la validation croisée pour sélectionner le meilleur modèle, nous utilisons ensuite toutes les données disponibles pour ajuster le modèle choisi. Nous n’utilisons pas les instances de modèle réelles que nous avons formées lors de la validation croisée pour notre modèle final.

Par exemple, nous pouvons utiliser la validation croisée 5 fois pour déterminer quel modèle est le meilleur à utiliser entre deux modèles de régression différents. Cependant, une fois que nous avons identifié le modèle qu’il est préférable d’utiliser, nous utilisons toutes les données pour ajuster le modèle final. En d’autres termes, nous n’oublions aucun des plis lors de la construction du modèle final.

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *