Overfitting

Connaissez-vous l’overfitting ?

Théophile L

Théophile L

3 min

Dans cet article, nous vous présentons un des écueils des algorithmes d’apprentissage supervisé, le surapprentissage ou overfitting en anglais.

Qu’est-ce que l’overfitting?

L’overfitting est le risque pour un modèle d’apprendre “par cœur” les données d’entraînement. De cette manière, il risque de ne pas savoir généraliser à des données inconnues

Par exemple, un modèle qui retourne l’étiquette pour les données d’entraînement et une variable aléatoire pour les données non connues aurait de très bonnes performances pendant l’entraînement, mais pas pour de nouvelles données.

Quand risque-t-il d’apparaître ?

L’overfitting peut arriver quand le modèle choisi est trop complexe par rapport à la taille du jeu de données. 

Par exemple, le modèle choisi ici est une régression polynomiale qui se force à passer par le plus de points possibles des données d’entraînements car le degré choisi est trop important. Il délaisse ainsi de nombreux points non vus pendant l’entraînement. Sur les données d’entraînement, ce modèle a d’excellents résultats, mais sur des données non vues, l’erreur quadratique risque d’être énorme.

Regression Polynomiale

Comment éviter l’overfitting ?

Pour éviter l’overfitting, il faut donc réévaluer le modèle à chaque fois sur des données non vues pendant l’entraînement. 

Une bonne pratique est de séparer son jeu de données initiales en un jeu d’entraînement (train set) et un jeu de test (test set). Le premier servira à entraîner le modèle. Le jeu de test constitué de données non vues (unseen data) servira donc à tester la manière dont se généralise le modèle.

On ne pourra conclure sur les performances du modèle qu’avec les performances du jeu de test, et non pas avec les performances sur le jeu d’entraînement qui risque d’être appris par cœur.

Comment choisir les données d’entraînement et de test ?

La manière la plus simple et la plus utilisée consiste à séparer les données aléatoirement. Le module sklearn.model_selection de Python propose à cet effet la fonction train_test_split. En lui fournissant un jeu de données, cette fonction crée une partition de celui-ci ce qui permet d’obtenir le jeu de test et le jeu d’entraînement.

Cheat Sheet Scikit Learn Preprocessing
Cheat Sheet Scikit Learn : Preprocessing

Cependant, cette séparation se fait de manière aléatoire. Il existe donc un risque de créer par hasard des jeux de données non représentatifs. 

Pour éviter de valider un modèle sur des données non représentatives, une méthode est de reproduire la procédure d’entraînement sur un jeu puis de tester sur un autre jeu plusieurs fois, puis de moyenner les résultats. Cela permet de moyenner les effets aléatoires et d’obtenir une estimation de la performance sur des données non vues aléatoirement choisies.

Cette validation de modèle s’appelle la validation croisée ou cross validation en anglais.

Une validation croisée est composée de plusieurs folds. Chaque fold est une partition du jeu de données en deux ensembles (jeu d’entraînement et jeu de test). La validation croisée consiste pour chaque fold à entraîner le modèle sur le jeu d’entraînement puis de l’évaluer sur le jeu de test. 

Nous pouvons ensuite estimer la performance du modèle en évaluant la performance des prédicteurs de chaque fold sur le jeu de test de chacun des folds, puis en moyennant leurs performances. 

Cette approche permet également d’accéder à l’écart-type de ces performances, ce qui permet de se faire une bonne idée de la variabilité du modèle en fonction du jeu d’entraînement. Si la variabilité est élevée, alors il faudra faire d’autant plus attention au choix de notre jeu d’entraînement. Au contraire, avec une faible variabilité, le choix du jeu d’entraînement n’a pas beaucoup d’importance.

Quelles sont les sources d’erreur d’un modèle ?

Pour un modèle de régression, le premier critère d’évaluation est l’erreur quadratique moyenne ou MSE pour mean squared error en anglais. 

Notre jeu de données D est constitué de n réalisations (xi, yi) d’un vecteur aléatoire de même loi qu’un couple de variables aléatoires (X,Y) qui sont reliés par la relation Y = f(X) + eps avec eps une variable aléatoire d’espérance nulle et de variance sigma², c’est-à-dire le bruit des données.

On peut décomposer l’erreur quadratique moyenne sur D d’un estimateur comme la somme :

  • Du carré du biais de l’estimateur (qui quantifie à quel point les étiquettes prédites sont loin de la réalité)
  • De la variance de l’estimateur (qui quantifie comment varie les étiquettes pour un même individu selon les données d’entrée)
  • De la variance du bruit aussi appelée erreur irréductible

Ainsi, un estimateur biaisé avec une faible variance peut obtenir de meilleures performances qu’un estimateur non biaisé avec une grande variance. 

Dans de très nombreux cas, l’overfitting apparaît dans les cas où l’on choisit un estimateur peu biaisé avec une forte variance. Des modèles complexes peuvent posséder ces caractéristiques comme les régressions polynomiales de trop grand ordre (cf schéma 1). Le choix de modèles plus simples et a priori “moins bons” car biaisés, peut donc permettre d’obtenir de meilleures performances si leur variance est faible !

Si vous voulez en apprendre plus sur l’overfitting et l’intelligence artificielle appliquée aux images :