Université Mohammed Ier Cours : Machine Learning
École Nationale de TP N°: 4
l’Intelligence Artificielle et Filière : IA, GINF, ROC, IRSI
du Digital, Berkane Pr. BOUTAHIR Mohamed
A.U : 2025–2026 Khalifa
TP 4 : Algorithmes de Classification (KNN & Arbres de
Décision)
Objectifs Pédagogiques
- KNN (K-Nearest Neighbors) : Comprendre l’importance de la mise à l’échelle
des données et l’impact du paramètre K.
- Arbres de Décision : Apprendre à interpréter des règles de décision explicites
(”Si... Alors...”) et gérer des variables catégorielles.
- Interprétation : Savoir lire une matrice de confusion multiclasse et visualiser un
arbre.
1 Exercice 1 : K-Nearest Neighbors (KNN)
Objectif : Classification de téléphones mobiles par gamme de prix.
1.1 Présentation du Problème
Le KNN est un algorithme basé sur la proximité. Pour classer un nouveau téléphone, l’algo-
rithme regarde les K téléphones les plus similaires (voisins) dans l’espace des caractéristiques
(RAM, batterie, etc.).
Visualisation du KNN
Figure 1: Principe de vote majoritaire des voisins les plus proches.
1
Dataset : ”Mobile Price Classification”
Lien : [Link]
Tâche : Prédire la variable price range (0, 1, 2, 3) en fonction des caractéristiques techniques.
1.2 Préparation et Standardisation
Consignes d’importation :
1. Importez pandas, numpy, [Link] et seaborn.
2. Chargez le fichier [Link] dans un DataFrame nommé df.
3. Séparez les variables explicatives (X) de la variable cible (y = ’price range’).
Étape critique : La Standardisation
En KNN, la distance est reine. La variable ram (jusqu’à 4000 Mo) est 1000 fois plus grande que
n cores (1 à 8). Sans mise à l’échelle, la RAM écrasera toutes les autres variables dans le calcul
de distance.
Question 1.1
Pourquoi est-il crucial de standardiser les données AVANT de les diviser en Train/Test
ou APRÈS ? (Réfléchissez à la ”fuite de données” ou data leakage).
Code d’aide pour la standardisation :
1 from sklearn . preprocessing import StandardScaler
2 from sklearn . model_selection import train_test_split
3
4 # Normalisation ( Moyenne =0 , Variance =1)
5 scaler = StandardScaler ()
6 X_scaled = scaler . fit_transform ( X )
7
8 # Division : 80% E n t r a n e m e n t , 20% Test
9 X_train , X_test , y_train , y_test = train_test_split (
10 X_scaled , y , test_size =0.2 , random_state =42
11 )
1.3 Recherche du meilleur K (Elbow Method)
Nous allons tester plusieurs valeurs de K pour trouver celle qui maximise la précision.
Code d’aide :
1 from sklearn . neighbors import KNeighborsClassifier
2
3 scores = []
4 k_range = range (1 , 21) # On teste K de 1 à 20
5
6 for k in k_range :
7 knn = KNeighborsClassifier ( n_neighbors = k )
8 knn . fit ( X_train , y_train )
9 scores . append ( knn . score ( X_test , y_test ) )
10
11 # Affichage graphique
12 plt . plot ( k_range , scores , marker = ’o ’)
13 plt . xlabel ( ’ Valeur de K ’)
14 plt . ylabel ( ’ Accuracy ’)
15 plt . grid ( True )
16 plt . show ()
2
1.4 Interprétation des Résultats
Choisissez le meilleur K (le point le plus haut sur la courbe) et ré-entraı̂nez le modèle final.
Affichez la matrice de confusion.
Aide à l’interprétation : Matrice de Confusion
Une matrice de confusion 4 × 4 montre les erreurs de classement.
- Diagonale : Prédictions correctes (ex: Prédit Classe 2, Réalité Classe 2).
- Hors Diagonale : Erreurs.
- Analyse : Si vous voyez beaucoup d’erreurs entre la classe 1 (Medium) et la classe
2 (High), c’est ”normal” car les prix sont proches. Une erreur entre classe 0 (Low)
et 3 (Very High) serait très grave (le modèle n’a rien compris).
Question 1.2 : Votre modèle fait-il des erreurs ”graves” (confusion entre classes éloignées)
ou ”acceptables” (confusion entre classes voisines) ?
3
2 Exercice 2 : Arbres de Décision
Objectif : Prédire l’attrition client (Customer Churn).
2.1 Présentation du Problème
Nous travaillons pour une entreprise de télécommunications. L’objectif est de prédire si un client
va se désabonner (Churn = Yes) ou rester (Churn = No) le mois prochain. Les arbres de décision
divisent la population en segments de plus en plus purs.
Exemple d’Arbre de Décision
Racine : Le contrat est-il ’Month-to-month’ ?
↙ (OUI) (NON) ↘
Internet = Fibre ? Ancienneté ¿ 2 ans ?
↙ ↘ ↙ ↘
CHURN STAY CHURN STAY
Figure 2: Structure hiérarchique d’un arbre de décision.
Dataset : ”Telco Customer Churn”
Lien : [Link]
Variables clés : tenure (ancienneté), MonthlyCharges, Contract, PaymentMethod.
2.2 Nettoyage et Encodage
Contrairement au KNN, les arbres gèrent bien les variables non standardisées, mais ils nécessitent
que toutes les entrées soient numériques.
Consignes :
1. Chargez le fichier WA Fn-UseC -[Link].
2. Nettoyage : La colonne TotalCharges contient parfois des espaces vides. Forcez la conver-
sion en numérique : df[’TotalCharges’] = [Link] numeric(df[’TotalCharges’], errors=’coerce’)
puis remplissez les NaN avec 0.
3. Encodage : Transformez les variables textuelles (Contract, PaymentMethod, Gender, etc.)
en nombres.
- Utilisez [Link] dummies(df) pour le One-Hot Encoding (recommandé pour les va-
riables sans ordre).
- Ou LabelEncoder pour la variable cible Churn (Yes=1, No=0).
2.3 Entraı̂nement et Visualisation
Entraı̂nez un arbre de décision avec une profondeur maximale limitée (max depth=3) pour qu’il
reste lisible.
Code d’aide :
1 from sklearn . tree import DecisionTreeClassifier , plot_tree
2
3 # Entra nement
4 modele_arbre = De ci si onT re eC las si fi er ( max_depth =3 , criterion = ’ gini ’ ,
random_state =42)
4
5 modele_arbre . fit ( X_train , y_train )
6
7 # Visualisation Graphique
8 plt . figure ( figsize =(20 ,10) )
9 plot_tree ( modele_arbre ,
10 feature_names = X . columns ,
11 class_names =[ ’ Stay ’ , ’ Churn ’] ,
12 filled = True ,
13 rounded = True ,
14 fontsize =10)
15 plt . show ()
2.4 Interprétation de l’Arbre
Analysez le graphique généré ci-dessus. Chaque rectangle (nœud) contient des informations
cruciales.
Comment lire un nœud ?
- Condition : La règle en haut (ex: Contract Month-to-month <= 0.5). Si VRAI,
on va à gauche, sinon à droite.
- Gini : L’impureté. 0 = Parfaitement pur (tous les clients sont de la même classe).
0.5 = Mélange égal.
- Samples : Combien de clients sont dans ce nœud.
- Value : La répartition [Nombre Stay, Nombre Churn].
- Class : La classe majoritaire (la prédiction finale si on s’arrête là).
Question 2.1 : Quelle est la variable à la racine (tout en haut) ? C’est le facteur le plus
déterminant pour prédire le départ d’un client. Est-ce le type de contrat, le prix ou l’ancienneté
?
Question 2.2 : Identifiez un profil type de client ”à risque”. (Exemple : ”Les clients avec
un contrat mensuel et une facture ¿ 70$ ont une forte probabilité de partir”).
3 Comparaison Finale
Algorithme KNN Arbre de Décision
Nécessite de standardiser les données. Fonctionne sans standardisation.
Boı̂te noire (difficile d’expliquer pourquoi). Boı̂te blanche (Règles claires).
Lent à la prédiction (doit mesurer les dis- Très rapide à la prédiction.
tances).
Performance dépend de K. Performance dépend de la profondeur.
Table 1: Synthèse rapide