Accueil / Factory / Algos ML / Validation croisée — factory / algos ML / évaluation des modèles

VALIDATION CROISÉE.

Une méthode pour mesurer honnêtement la performance d'un modèle : on le teste sur des données qu'il n'a pas vues, plusieurs fois, en faisant tourner la partie mise de côté. On obtient une erreur moyenne et sa variabilité, au lieu d'un seul chiffre qui dépend du hasard du découpage. C'est le juge de paix pour choisir entre deux modèles.

ÉvaluationChoix de modèleSurapprentissagePetits jeux de donnéesNiveau : débutant

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceEstimation fiable de l'erreur réelle, surtout sur petits volumes
InterprétabilitéUne erreur moyenne et sa dispersion, faciles à présenter
VitesseCoût multiplié par le nombre de blocs (5 ou 10 fois)
Facilité de réglageUn seul choix : le nombre de blocs, 5 ou 10 par défaut
Tolérance aux données brutesIndifférente aux données ; c'est le modèle testé qui compte
EN 30 SECONDES

Un professeur qui interrogerait ses élèves sur les exercices corrigés en classe mesurerait leur mémoire, pas leur niveau. Il fait 5 contrôles, chacun sur un chapitre que la classe n'a pas révisé ce jour-là, et fait la moyenne.

1. On découpe en k blocs

Les lignes sont réparties au hasard en k blocs de même taille, souvent 5 ou 10. En classification, on garde la même proportion de chaque classe dans chaque bloc (découpage stratifié).

2. On entraîne k fois

À chaque tour, un bloc est mis de côté, le modèle apprend sur les autres puis est noté sur le bloc écarté. Chaque ligne sert une fois de test, et k - 1 fois d'entraînement.

3. On fait la moyenne

La moyenne des k notes estime la performance sur des données nouvelles. Leur écart-type dit si l'écart entre deux modèles est réel ou dû au hasard du découpage.

LE CAS MÉTIER

choix de modèle · réseau de magasins
EN ENTRÉE

400 magasins, deux modèles candidats

Pour prévoir le CA d'un magasin à partir de sa surface, de son budget publicitaire, de ses concurrents et de sa zone, l'équipe hésite entre une régression linéaire et une Random Forest.

EN SORTIE

Une erreur par modèle, avec sa variabilité

Sur le jeu d'exemple, en validation croisée à 10 blocs, la régression linéaire se trompe de 57 k€ en moyenne et la Random Forest de 75 k€. L'écart est bien supérieur à la variabilité entre blocs : le modèle simple gagne.

CE QU'ON MESURE

Ne jamais noter un modèle sur ses données d'entraînement

Notée sur les magasins qu'elle a appris, la Random Forest affiche 27 k€ d'erreur, presque trois fois moins qu'en validation croisée. C'est le piège classique : le modèle a mémorisé, pas appris.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Comparer deux modèles, ou deux jeux de variables, à armes égales
  • Petits jeux de données, où un seul découpage apprentissage / test est trop aléatoire
  • Régler des hyperparamètres (grid search, optimisation bayésienne) sans toucher au jeu de test final
  • Présenter une performance avec sa marge d'incertitude

NON

  • Séries temporelles : un découpage au hasard fait prédire le passé avec le futur, utiliser une validation glissante
  • Lignes liées entre elles (plusieurs achats d'un même client) : grouper par client pour éviter les fuites
  • Très gros volumes et modèles longs à entraîner : un seul jeu de validation suffit
  • Préparation des données faite sur toute la base avant le découpage : elle fuit dans les blocs de test
LES 4 CHOIX QUI COMPTENT

Noms donnés pour Python (scikit-learn). En R, une boucle sur les blocs suffit, ou les packages rsample et mlr3 pour aller plus loin.

Nombre de blocs : n_splits

5 ou 10. Plus de blocs : chaque modèle apprend sur plus de données, mais le calcul est plus long. Répéter la validation croisée avec plusieurs découpages (RepeatedKFold) stabilise encore le résultat.

Découpage : StratifiedKFold / GroupKFold / TimeSeriesSplit

Stratifié pour une classe rare, groupé quand plusieurs lignes concernent le même client ou magasin, chronologique pour les séries temporelles.

Métrique : scoring

Choisir la mesure qui a un sens métier : erreur absolue en euros, AUC pour un score, rappel pour la fraude. La validation croisée ne corrige pas une mauvaise métrique.

Pipeline

Mise à l'échelle, imputation et sélection de variables doivent être refaites dans chaque bloc. Dans scikit-learn, les mettre dans un Pipeline passé à cross_val_score.

LE CODE MINIMAL

jeu d'exemple : magasins.csv ↓
# CA des magasins : validation croisée en R
library(randomForest)

magasins <- read.csv("magasins.csv")
magasins$zone <- factor(magasins$zone)
formule <- ca_k ~ surface_m2 + budget_pub_k + nb_concurrents + zone

# 10 blocs : chaque magasin sert 9 fois à l'entraînement et 1 fois au test
set.seed(42)
bloc <- sample(rep(1:10, length.out = nrow(magasins)))
erreur_lm <- erreur_rf <- numeric(10)
for (k in 1:10) {
  train <- magasins[bloc != k, ]
  test <- magasins[bloc == k, ]
  erreur_lm[k] <- mean(abs(test$ca_k - predict(lm(formule, data = train), test)))
  erreur_rf[k] <- mean(abs(test$ca_k - predict(randomForest(formule, data = train, ntree = 300), test)))
}
cat("Régression linéaire : erreur moyenne", round(mean(erreur_lm), 1), "k€, écart-type entre blocs", round(sd(erreur_lm), 1), "\n")
cat("Random Forest       : erreur moyenne", round(mean(erreur_rf), 1), "k€, écart-type entre blocs", round(sd(erreur_rf), 1), "\n")

# Piège : l'erreur mesurée sur les données d'entraînement flatte la forêt
foret <- randomForest(formule, data = magasins, ntree = 300)
cat("Random Forest, erreur sur ses propres données :", round(mean(abs(magasins$ca_k - predict(foret, magasins))), 1), "k€\n")

QUESTIONS FRÉQUENTES

Qu'est-ce que la validation croisée k-fold ?

Les données sont découpées en k blocs. Le modèle est entraîné k fois, chaque fois sur k - 1 blocs, et évalué sur le bloc restant. La moyenne des k résultats estime la performance sur des données nouvelles, de façon plus stable qu'un découpage unique.

Faut-il encore un jeu de test si l'on fait de la validation croisée ?

Oui, dès que la validation croisée sert à choisir un modèle ou des réglages. Le score du meilleur candidat est alors légèrement optimiste, puisqu'il a été retenu parce qu'il était bon. Un jeu de test mis de côté dès le départ donne le verdict final.

Combien de blocs choisir en validation croisée ?

5 ou 10 sont les valeurs standard. Avec très peu de données, on peut monter jusqu'au leave-one-out, où chaque ligne est testée seule, mais le résultat est plus variable et le calcul plus long. Avec beaucoup de données, 5 blocs suffisent.

LES ALGOS VOISINS

à comparer avant de choisir
l'étape suivante

Grid search / random search

Utilise la validation croisée pour noter chaque combinaison de réglages et garder la meilleure.

Voir la fiche →
le modèle testé

Random Forest

Son score hors du sac (OOB) donne une estimation proche de la validation croisée, sans entraînement supplémentaire.

Voir la fiche →
le gagnant du jour

Régression linéaire

Sur 400 lignes et des relations presque linéaires, le modèle simple bat souvent les modèles complexes.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →