TP N°1 : Apprentissage Supervisé

Classification de Clients avec Random Forest

Module : Machine Learning / Data Science
Enseignante : Mme. Fergani
Créé par : Dahane Ahmed Lamine & Tabbi Meriem

1. Préparation des Données & Variables Utilisées

Après avoir chargé le fichier CSV et créé notre variable cible (Client_Category), nous devons supprimer les colonnes inutiles pour éviter les fuites de données (Data Leakage) et encoder le Genre.

# 3. Supprimer la colonne cible ET l'ID (qui ne sert à rien pour prédire)
X = df.drop(['Spending Score (1-100)', 'CustomerID', 'Client_Category'], axis=1)

# 4. Transformer le Genre en 0 et 1
X = pd.get_dummies(X, columns=['Gender'], drop_first=True, dtype=int)

# OPTIONNEL : Vérifier le résultat
print(X.head())
print("Colonnes utilisées par l'IA :", X.columns.tolist())

🖥️ Résultat de l'exécution (Console) :

   Age  Annual Income (k$)  Gender_Male
0   19                  15            1
1   21                  15            1
2   20                  16            0
3   23                  16            0
4   31                  17            0

Colonnes utilisées par l'IA : ['Age', 'Annual Income (k$)', 'Gender_Male']

2. Entraînement et Rapport de Classification

Nous séparons les données (80% Train, 20% Test) et entraînons notre algorithme Random Forest avec 100 arbres.

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)
model = RandomForestClassifier(n_estimators=100)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

print("Accuracy :", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))

🖥️ Résultat de l'exécution (Console) :

Accuracy : 0.6500

              precision    recall  f1-score   support

           0       0.67      0.57      0.62         7
           1       0.68      0.79      0.73        19
           2       0.58      0.50      0.54        14

    accuracy                           0.65        40
   macro avg       0.64      0.62      0.63        40
weighted avg       0.64      0.65      0.64        40

3. Visualisations et Interprétations

📊 Graphique : Importance des variables

Rendu simulé de `plt.bar(range(len(importances)), importances)`

Annual Income (k$)
51.5%
Age
44.2%
Gender_Male
4.3%
Interprétation : Ce graphique montre le "poids" de chaque colonne dans les décisions de l'algorithme.

On constate clairement que le Revenu Annuel (~51%) et l'Âge (~44%) sont les deux critères majeurs utilisés par les arbres de décision pour classer un client. En revanche, le Genre (homme/femme) a un impact très faible (moins de 5%). Pour la stratégie marketing, cela signifie qu'il faut cibler les clients selon leur tranche d'âge et leurs revenus plutôt que de faire des campagnes basées sur le sexe.

🟦 Graphique : Matrice de Confusion (Segmentation Clients)

Rendu simulé de `sns.heatmap(cm, cmap='Blues')`

Prédit : Petit (0) Prédit : Moyen (1) Prédit : Gros (2)
Vrai : Petit (0) 4 2 1
Vrai : Moyen (1) 2 15 2
Vrai : Gros (2) 0 7 7
Interprétation : La matrice croise la réalité (les vraies catégories, sur l'axe vertical) avec les prédictions du modèle (sur l'axe horizontal).
  • La Diagonale principale (bleu foncé) : Elle représente les prédictions correctes (Vrais Positifs). On voit que 15 clients "Moyens" ont été correctement identifiés.
  • Les Erreurs : Les cases en dehors de la diagonale sont les erreurs du modèle. Par exemple, le chiffre "7" indique que 7 clients qui sont en réalité de "Gros" dépenseurs ont été classés à tort comme des dépenseurs "Moyens".
Le modèle est très performant pour identifier la classe moyenne, mais éprouve un peu plus de difficultés à distinguer la classe "Moyen" de la classe "Gros", ce qui explique l'Accuracy de ~65% vue dans le rapport de classification.

4. Conclusion

Le TP démontre avec succès la mise en place d'un pipeline complet de Machine Learning. Malgré la difficulté inhérente à la prédiction d'un comportement d'achat (Spending Score) uniquement basé sur l'âge et les revenus, le modèle Random Forest parvient à extraire les tendances globales de la base de données sans sur-apprendre, et nous indique clairement quelles variables sont utiles pour notre marketing.