Tout savoir sur L'overfitting

Les performances et la précision d’un modèle de Machine Learning sont souvent mesurées par ses erreurs de prédiction. Ainsi, il est considéré bon s’il est capable de généraliser correctement sur des données inconnues. Pourtant, certains facteurs peuvent contribuer à ce que les algorithmes génèrent des performances médiocres, comme l’overfitting et l’underfitting.

L’overfitting, un phénomène fréquent dans le Machine Learning

L’overfitting, ou surajustement, est un problème fréquent dans les domaines du Machine Learning et de la modélisation des données. On y fait référence lorsqu’un modèle apprend à partir des données d’entraînement avec une précision excessive. Il mémorise alors aussi le bruit ou les irrégularités présents dans les données. Sa capacité à généraliser sur de nouvelles données s’en trouve donc affectée. 

Plutôt que de saisir des schémas généraux, le modèle s’adapte de manière excessive aux caractéristiques des données d’entraînement. S’il affiche une performance exceptionnelle sur les données d’entraînement, il présente généralement une performance médiocre face à de nouvelles données, y compris celles de test ou de validation. À l’inverse, on parle d’underfitting lorsqu’il est trop simpliste pour capturer les modèles sous-jacents.

Overfitting : les causes de cette anomalie dans l’ajustement des modèles

Il existe plusieurs facteurs pouvant causer un phénomène de surajustement.

Quantité de données d’apprentissage et complexité du modèle

L’utilisation d’un faible nombre d’exemples de formation peut entraîner du surajustement. Le modèle est susceptible de trop s’adapter à des informations spécifiques. À l’inverse, un trop grand nombre de caractéristiques peut également contribuer au problème d’ajustement. Les algorithmes trop complexes ont en effet tendance à s’adapter excessivement. Ils peuvent retenir des détails insignifiants au regard de l’ensemble. Il s’agit ainsi de trouver le juste milieu.

Absence de prétraitement des données d’apprentissage

L’absence de prétraitement d’un training data set est une erreur fréquente dans le processus de Machine Learning. Cette étape fondamentale garantit des données d’entraînement propres, pertinentes et adaptées à la tâche. Dans les ensembles comprenant de nombreuses caractéristiques, la réduction de la dimensionnalité est essentielle pour éviter une surcharge du modèle.

Biais de segmentation dans les données d’apprentissage

Le biais de segmentation dans les données de training est une problématique courante. Elle survient quand l’échantillon ou sample utilisé n’est pas suffisamment représentatif de l’ensemble de la population à partir de laquelle il est tiré.

Reconnaître les signes d’un problème d’overfitting dans votre data set

Vous pouvez identifier des signes de surapprentissage en fonction de certains paramètres :

  • des résultats élevés sur les données d’entraînement, mais faibles sur celles de test ;
  • une courbe d’erreur d’entraînement qui continue de diminuer tandis que la courbe d’erreur de validation stagne ou augmente ;
  • un écart important entre les performances du modèle sur les données d’entraînement et de validation ;
  • des prédictions précises sur les données d’entraînement, mais qui ne généralise pas bien avec de nouvelles données ;
  • une variance élevée des poids ou des paramètres du modèle, notamment si ces variables varient considérablement d’une itération de training à l’autre.

 

Conséquences d’un ajustement excessif des modèles sur la qualité des prédictions

Un surajustement a un impact significatif sur la précision des prédictions. Comme nous l’avons vu précédemment, un modèle qui en présente des signes s’est adapté de manière excessive au training data set.

Ses prédictions deviennent alors extrêmement imprécises lorsqu’il se retrouve confronté à de nouvelles données. En mettant l’accent sur des détails spécifiques, il peut perdre de vue les caractéristiques générales devant guider la prédiction. Comme il ne généralise pas ses connaissances à de nouvelles observations, des erreurs de prédiction importantes peuvent survenir.

Des méthodes pour prévenir l’overfitting et améliorer les résultats

Plusieurs stratégies efficaces peuvent permettre de prévenir l’overfitting lors des étapes de construction et de training. Notez que les modèles linéaires ont une structure simple et sont alors moins susceptibles de surajuster.

Utiliser des ensembles plus larges

L’une des méthodes de prévention les plus simples est d’augmenter la quantité de data disponible pour l’entraînement. Avec des ensembles plus vastes, le modèle peut capturer des schémas plus généraux et donc moins surajuster.

Les méthodes de validation croisée

Le data set est divisé en plusieurs sous-ensembles. Le modèle est alors entraîné et évalué sur différentes combinaisons de ces sous-ensembles. Ainsi, par exemple, avec la méthode des K-fold, il est divisé en K groupes de taille égale. Il est ensuite entraîné K fois, en utilisant à chaque itération, un des groupes pour la validation et les autres comme training set. 

Réduire les caractéristiques des modèles

Il s’agit de ne sélectionner que les caractéristiques les plus pertinentes et d’éliminer les autres. En effet, plus le modèle est complexe et plus il risque d’être surajusté. 

L’arrêt précoce, ou early stopping

Cette méthode consiste à cesser l’entraînement de l’algorithme dès que ses performances sur l’ensemble de validation commencent à se détériorer. Cela permet d’éviter que le modèle ne surapprenne aux données d’entraînement.

Appliquer la régularisation

Les paramètres reçoivent une pénalité de façon à limiter leur taille ou leur complexité. La régularisation aide à prévenir le surapprentissage en encourageant le modèle à rester simple et à généraliser plus efficacement.

Utiliser des techniques d’Ensemble learning, ou Ensembling

Des méthodes d’Ensembling, comme le Bagging, le Boosting ou la combinaison de modèles hétérogènes, peuvent réduire le risque d’overfitting.

  • Bagging, ou Bootstrap Aggregating : plusieurs modèles sont formés indépendamment sur des sous-ensembles aléatoires des données d’entraînement. Chacun est entraîné sur un sample différent, où chaque exemple peut apparaître plusieurs fois ou pas du tout.
  • Boosting : avec cette technique populaire en classification et régression, plusieurs algorithmes sont formés séquentiellement. Chacun tente de corriger les erreurs de prédiction des précédents.

  • Combinaison de modèles hétérogènes : des modèles individuels utilisent différents algorithmes ou caractéristiques combinés pour former un ensemble hétérogène.

Quelques techniques efficaces pour atténuer le problème d’ajustement excessif

Une fois l’overfitting détecté, il est possible d’améliorer la généralisation du modèle en utilisant différentes techniques.

Réduire la complexité du modèle ou du réseau de neurones

Pour obtenir un modèle moins complexe, il faut généralement réduire le nombre de paramètres du modèle ou limiter sa capacité à apprendre des motifs complexes dans la data. Ainsi, les arbres de décision, qui peuvent devenir très profonds, doivent être limités pour éviter le surajustement. Vous pouvez par exemple créer un classifieur avec une profondeur maximale limitée : 

from sklearn.tree import DecisionTreeClassifiermodel = DecisionTreeClassifier(max_depth=5)

Dans les réseaux de neurones, la complexité dépend en grande partie de la taille et de la profondeur du réseau. En réduisant le nombre de couches ou de neurones, il est possible de limiter la capacité du modèle à s’adapter trop précisément. L’une des techniques consiste à créer un modèle séquentiel comportant moins de couches et de neurones.

from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Dense model = Sequential([ Dense(64, activation=’relu’, input_shape=(X_train.shape[1],)), Dense(32, activation=’relu’), Dense(1, activation=’sigmoid’)])

Il est également possible de s’appuyer sur la technique de Dropout pour régulariser les réseaux neuronaux.

from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Dense, Dropout model = Sequential([ Dense(128, activation=’relu’, input_shape=(X_train.shape[1],)), Dropout(0.5), Dense(64, activation=’relu’), Dropout(0.5), Dense(1, activation=’sigmoid’)])

Pénaliser les modèles trop complexes avec un algorithme de régulation

Cette stratégie vise à ajouter une pénalité à la fonction de coût du modèle selon la complexité de ses paramètres. Cela l’encourage à trouver des paramètres plus simples et plus généraux. La régression Ridge ajoute une pénalité L2 à la fonction de coût, contraignant ainsi le coefficient à rester faible.

from sklearn.linear_model import Ridgemodel = Ridge(alpha=0.1)

La régression Lasso ajoute une pénalité L1, ce qui encourage certains coefficients à se mettre à zéro, pour permettre la sélection de fonctionnalités.

from sklearn.linear_model import Lassomodel = Lasso(alpha=0.1)

Augmenter le volume du data set d’entraînement

Une des techniques courantes consiste à augmenter le nombre d’échantillons d’entraînement en mélangeant et en dupliquant les données existantes.

from sklearn.utils import shuffleX_train_augmented = shuffle(X_train, random_state=42)X_train_augmented = np.concatenate((X_train_augmented, X_train_augmented), axis=0)y_train_augmented = np.concatenate((y_train, y_train), axis=0)

Appliquer la validation croisée pour évaluer les performances

La cross-validation est une technique incontournable pour évaluer de manière robuste les performances des modèles de machine learning, et plus particulièrement dans le cadre d’un set limité. La fonction cross_val_score de scikit-learn permet d’évaluer un modèle de régression logistique avec une validation croisée à 5 plis.

from sklearn.model_selection import cross_val_scorefrom sklearn.linear_model import LogisticRegressionmodel = LogisticRegression()scores = cross_val_score(model, X_train, y_train, cv=5)print(« Scores de validation croisée : », scores)mean_score = scores.mean()print(« Score moyen de validation croisée : », mean_score)

Les défis de l’overfitting face aux avancées du Machine Learning

Dans le contexte du Big Data, le domaine de l’Intelligence artificielle (IA) se retrouve confronté à des data sets de plus en plus massifs. De plus, les grands modèles de langage (LLM) à la taille impressionnante et aux milliards de paramètres, sont particulièrement sujets au surajustement. Les entreprises s’appuient de plus en plus sur des informations issues de l’IA pour prendre des décisions.

Or, le préjudice peut être grave si celles-ci sont basées sur des modèles surajustés. C’est le cas notamment avec les LLM qui peuvent produire des résultats biaisés ou inappropriés. Sans compter que leur entraînement nécessite la mise en œuvre de ressources importantes. Les pertes financières en cas d’erreur peuvent s’avérer lourdes de conséquences. 

Si l’overfitting demeure un défi courant, il existe des stratégies pour en identifier la cause et améliorer la robustesse des modèles. En adoptant une approche logique et en mettant en place des techniques itératives, il est possible de développer des algorithmes d’IA de plus en plus fiables et précis.