Visualisation des classes avant et après échantillonnage

Dans le cadre de la gestion des données déséquilibrées, l’échantillonnage est une technique clé pour améliorer la qualité de l’apprentissage automatique. Cependant, pour bien comprendre l’impact de ces méthodes, il est essentiel de visualiser la distribution des classes avant et après échantillonnage.


Pourquoi visualiser la distribution des classes ?

La visualisation permet d’avoir une intuition claire sur la proportion des classes dans le jeu de données. Elle aide à :


Types d’échantillonnage et leurs effets visuels

Les deux principales méthodes sont :

Visualiser la distribution avant et après échantillonnage montre clairement comment l’équilibre s’améliore ou parfois se dégrade si le choix est mal fait.


Exemple pratique en Python avec matplotlib

Voici un exemple simple illustrant la distribution des classes avant et après suréchantillonnage avec la technique SMOTE.

import matplotlib.pyplot as plt
from collections import Counter
from sklearn.datasets import make_classification
from imblearn.over_sampling import SMOTE

# Création d'un jeu de données déséquilibré
X, y = make_classification(n_samples=1000, n_features=2, n_informative=2,
                           n_redundant=0, n_clusters_per_class=1,
                           weights=[0.9, 0.1], flip_y=0, random_state=42)

# Visualisation avant échantillonnage
counter_before = Counter(y)

smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X, y)

# Visualisation après suréchantillonnage
counter_after = Counter(y_resampled)

# Tracé
fig, axes = plt.subplots(1, 2, figsize=(12, 5))

axes[0].bar(counter_before.keys(), counter_before.values(), color=['blue', 'orange'])
axes[0].set_title('Distribution avant échantillonnage')
axes[0].set_xticks([0, 1])
axes[0].set_xticklabels(['Classe majoritaire', 'Classe minoritaire'])
axes[0].set_ylabel('Nombre d\'exemples')

axes[1].bar(counter_after.keys(), counter_after.values(), color=['blue', 'orange'])
axes[1].set_title('Distribution après suréchantillonnage (SMOTE)')
axes[1].set_xticks([0, 1])
axes[1].set_xticklabels(['Classe majoritaire', 'Classe minoritaire'])

plt.tight_layout()
plt.show()

Ce code génère deux graphiques côte à côte qui montrent très clairement comment le nombre d’exemples de la classe minoritaire augmente pour équilibrer la distribution.


Interprétation des visualisations

Avant échantillonnage, on observe généralement une barre très haute pour la classe majoritaire et une barre basse pour la classe minoritaire, traduisant un déséquilibre marqué. Après application de SMOTE ou d’autres techniques, les hauteurs des barres sont beaucoup plus proches, indiquant un jeu de données plus équilibré.

Cette étape visuelle est souvent accompagnée d’évaluations statistiques mais reste essentielle pour s’assurer que l’échantillonnage a produit l’effet escompté.


Autres types de visualisations utiles


Conclusion

Visualiser les distributions des classes avant et après échantillonnage est une pratique recommandée pour mieux comprendre les données, évaluer l’impact des techniques d’échantillonnage et communiquer efficacement avec les équipes. Cela permet de prévenir des choix erronés et d’optimiser la performance finale des modèles.