Analyse des effets des méthodes d’échantillonnage sur la performance du modèle
L’analyse des effets des méthodes d’échantillonnage sur la performance du modèle consiste à évaluer comment des techniques comme le sous-échantillonnage ou le sur-échantillonnage influencent la précision du modèle, en particulier pour les classes minoritaires. Cela permet de comprendre si l’échantillonnage améliore ou détériore la capacité du modèle à faire des prédictions équilibrées et précises.
Fonctions :
-
L'évaluation de l'impact des méthodes d'échantillonnage (comme le sur-échantillonnage ou le sous-échantillonnage) sur la performance d'un modèle est essentielle pour comprendre leur efficacité. Avant de recourir à une méthode d'échantillonnage, le modèle peut être biaisé par la classe majoritaire, produisant des résultats incorrects. Après l'échantillonnage, l'objectif est d'observer si le modèle améliore sa capacité à classer correctement la classe minoritaire, tout en maintenant ou en améliorant la performance globale. L'analyse est généralement effectuée en comparant les métriques de performance du modèle avant et après l'échantillonnage, telles que : La précision, rappel et f-mesure sur chaque classe, La matrice de confusion, Le score AUC-ROC. Étapes de l'analyse : Modèle avant échantillonnage : Entraînez un modèle sans appliquer de méthode d'échantillonnage pour observer ses performances sur les données déséquilibrées. Échantillonnage : Appliquez une méthode d'échantillonnage (par exemple, SMOTE, RandomUnderSampler, etc.) pour équilibrer les classes. Modèle après échantillonnage : Entraînez à nouveau le modèle sur les données échantillonnées et comparez les performances.
Importation :
from sklearn.metrics import classification_report from imblearn.over_sampling import SMOTE from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier
Attributs :
Métrique Description classification_report
Un rapport détaillé qui affiche la précision, le rappel, la f-mesure et le support pour chaque classe. roc_auc
La surface sous la courbe ROC, qui évalue la capacité du modèle à discriminer entre les classes. confusion_matrix
La matrice de confusion affiche les vrais positifs, les vrais négatifs, les faux positifs et les faux négatifs. Exemple de code :
from sklearn.metrics import classification_report, roc_auc_score, confusion_matrix from imblearn.over_sampling import SMOTE from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier # Diviser les données en ensembles d'entraînement et de test X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 1. Entraîner un modèle sans échantillonnage model = RandomForestClassifier(random_state=42) model.fit(X_train, y_train) # Prédictions avant échantillonnage y_pred_before = model.predict(X_test) # Affichage des métriques avant l'échantillonnage print("Métriques avant l'échantillonnage :") print(classification_report(y_test, y_pred_before)) print("AUC-ROC avant l'échantillonnage:", roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])) print("Matrice de confusion avant l'échantillonnage:") print(confusion_matrix(y_test, y_pred_before)) # 2. Appliquer SMOTE pour le sur-échantillonnage smote = SMOTE(sampling_strategy='auto', random_state=42) X_train_resampled, y_train_resampled = smote.fit_resample(X_train, y_train) # Entraîner à nouveau le modèle avec les données échantillonnées model.fit(X_train_resampled, y_train_resampled) # Prédictions après échantillonnage y_pred_after = model.predict(X_test) # Affichage des métriques après l'échantillonnage print("\nMétriques après l'échantillonnage :") print(classification_report(y_test, y_pred_after)) print("AUC-ROC après l'échantillonnage:", roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])) print("Matrice de confusion après l'échantillonnage:") print(confusion_matrix(y_test, y_pred_after))
Explication du code :
- Séparation des données : Les données sont séparées en ensembles d'entraînement (
X_train
,y_train
) et de test (X_test
,y_test
) avec une répartition de 70/30. - Modèle sans échantillonnage : Un modèle
RandomForestClassifier
est entraîné sur les données déséquilibrées. Les prédictions sont effectuées et les résultats sont affichés avec les métriques de classification, le score AUC-ROC, et la matrice de confusion. - Application de SMOTE : SMOTE est utilisé pour générer des exemples synthétiques dans la classe minoritaire. Les données d'entraînement sont ainsi équilibrées avant de réentraîner le modèle.
- Modèle après échantillonnage : Après l'échantillonnage, le modèle est réentraîné sur les données échantillonnées, et les mêmes métriques sont calculées pour observer l'effet de l'échantillonnage.
Interprétation des Résultats
- Métriques de classification : Comparez les scores de précision, rappel et f-mesure avant et après l'échantillonnage. Un modèle sur-échantillonné (comme avec SMOTE) a généralement un meilleur rappel pour la classe minoritaire, mais peut présenter une précision plus faible si l'overfitting se produit.
- AUC-ROC : La surface sous la courbe ROC peut montrer si le modèle a amélioré sa capacité à discriminer entre les classes après échantillonnage. Si la courbe ROC est plus proche de 1 après échantillonnage, cela signifie que le modèle est plus performant.
- Matrice de confusion : L'analyse de la matrice de confusion permet de visualiser les faux positifs et faux négatifs. Un bon modèle après échantillonnage aura moins de faux négatifs pour la classe minoritaire.
Remarques
- Avantages de l’échantillonnage : L'échantillonnage permet de réduire le biais des modèles vis-à-vis de la classe majoritaire, en particulier pour les classificateurs sensibles à la distribution des classes (comme les forêts aléatoires et les SVM).
- Problèmes de surapprentissage : Le sur-échantillonnage, en particulier avec des techniques comme SMOTE et ADASYN, peut entraîner un surapprentissage si les données générées sont trop similaires aux données existantes.
- Sélection du modèle : Certains modèles peuvent être plus sensibles aux données déséquilibrées que d'autres. Il est donc important de tester différents modèles et techniques d’échantillonnage pour évaluer leur performance sur les données spécifiques.
- Séparation des données : Les données sont séparées en ensembles d'entraînement (