Partie 3 – Classification : Random Forest, SVM, ROC et AUC
Et si on savait, avant la course, si le client laissera un pourboire ?
Quels critères vous feraient parier sur un pourboire : la distance, le quartier, l’heure ? Ce sont nos futures features.
Random Forest ou SVM ?
Section intitulée « Random Forest ou SVM ? »| Random Forest : la sagesse des foules | SVM : la meilleure frontière | |
|---|---|---|
| Principe | Des dizaines d’arbres, chacun entraîné sur un échantillon et un sous-ensemble de features différents. Les arbres votent | Cherche la frontière qui sépare les deux classes avec la plus grande marge |
| Pourquoi ça marche | Un arbre seul sur-apprend facilement ; 50 arbres se trompent chacun différemment et leurs erreurs se compensent | Plusieurs droites sépareraient les nuages ; celle qui laisse le plus de marge généralise mieux |
| Sorties | Une probabilité et l’importance des features | Une décision (pas de probabilité) |
| Réglages | Robuste, peu de réglages (numTrees, maxDepth) | Normaliser les features avant (StandardScaler) |
| Dans Spark | RandomForestClassifier | LinearSVC : frontière linéaire uniquement, pas de noyau |
Random Forest SVM Arbre 1 → oui ○ ○ ○ │ marge │ ● ● Arbre 2 → non ○ ○ ○ ○ │ │ ● ● ● Arbre 3 → oui ○ ○ │ │ ● ● Vote : 2 oui, 1 non → OUI frontièreAutres classifieurs disponibles : LogisticRegression, GBTClassifier, NaiveBayes,
MultilayerPerceptronClassifier.
Évaluer un classifieur : la matrice de confusion
Section intitulée « Évaluer un classifieur : la matrice de confusion »Random Forest, pourboire oui / non, seuil 0,5, sur les 17 963 courses de test payées par carte :
| Prédit : pourboire | Prédit : rien | |
|---|---|---|
| Réel : pourboire | 5 595 vrais positifs (VP) | 3 789 faux négatifs (FN) |
| Réel : rien | 2 780 faux positifs (FP) | 5 799 vrais négatifs (VN) |
| Métrique | Formule | Valeur | Lecture |
|---|---|---|---|
| Exactitude (accuracy) | (VP + VN) / total | 63 % | Bonnes réponses sur l’ensemble |
| Précision | VP / (VP + FP) | 67 % | Quand je dis « pourboire », j’ai raison |
| Rappel (recall) | VP / (VP + FN) | 60 % | Part des vrais pourboires retrouvés |
Lisez la matrice ligne par ligne (la réalité), puis colonne par colonne (la prédiction). Calculez la précision à la main : 5 595 / (5 595 + 2 780) ≈ 0,67.
Quelle métrique choisir ? Celle qui reflète le coût des erreurs dans votre usage.
- Notification « pensez au pourboire » aux clients prédits « rien » : un faux négatif coûte peu → viser le rappel.
- Prime au chauffeur sur la prédiction : un faux positif coûte cher → viser la précision.
- Le seuil (0,5 par défaut) arbitre : plus bas, plus de rappel et moins de précision.
Évaluer un classifieur : la courbe ROC et l’AUC
Section intitulée « Évaluer un classifieur : la courbe ROC et l’AUC » Taux de vrais positifs 1 ┤ ╭───────────── │ ╭────╯ ← modèle (chaque point = un seuil) │ ╭───╯ ⟋ │ ╭─╯ ⟋ ← hasard (AUC = 0,5) │ ╭─╯ ⟋ 0 ┼─╯──⟋──────────────────────── 0 1 Taux de faux positifs- Chaque point de la courbe est un seuil. En bas à gauche : seuil 1, on ne prédit jamais « pourboire ». En haut à droite : seuil 0, on prédit toujours « pourboire ».
- Plus la courbe monte vite, meilleur est le modèle. Chaque point correspond à une matrice de confusion différente.
- AUC = aire sous la courbe : 0,5 = hasard, 1 = parfait. Indépendante du seuil, c’est la métrique de comparaison entre modèles.
| Modèle | AUC |
|---|---|
| Random Forest (50 arbres, profondeur 6) | 0,70 |
| LinearSVC | 0,70 |
0,70 est correct pour un comportement humain avec 5 features, loin d’être parfait. Un modèle linéaire fait presque aussi bien ici.
from pyspark.ml.evaluation import BinaryClassificationEvaluator
pred = model.transform(test) # model : le pipeline ajusté sur train (corrigé tp7_classification.py)auc = BinaryClassificationEvaluator(metricName="areaUnderROC").evaluate(pred) # colonnes rawPrediction et labelQuiz flash : 4 situations, votre diagnostic
Section intitulée « Quiz flash : 4 situations, votre diagnostic »Vote à main levée ou Slido, puis une minute de débat par question. Réponses détaillées dans le quiz du jour 2.
- Un détecteur de fraude répond toujours « pas de fraude ». Exactitude : 99 %. Bon modèle ?
- Mon modèle fait 99 % en train et 60 % en test. Que se passe-t-il ?
- Pour prédire la durée d’une course, puis-je utiliser l’heure d’arrivée ?
- Mon classifieur a une AUC de 0,5. Que fait-il ?
La question 3 mérite une section entière : c’est le piège n° 1.
Piège n° 1 : la fuite de données
Section intitulée « Piège n° 1 : la fuite de données »| Cas | Ce qui se passe | Remède |
|---|---|---|
| Les pourboires en espèces ne sont pas enregistrés | Avec payment_type comme feature, l’AUC monte à 0,77… le modèle a appris « espèces ⇒ pas de pourboire ». Il a appris le mode de paiement, pas la générosité | Ne garder que les paiements par carte (payment_type = 1) |
total_amount contient déjà le tarif | En régression, R² = 0,976 : excellent, mais total_amount n’est connu qu’après la course | Retirer toute colonne calculée après l’événement |
Pour chaque feature, une seule question : la connaîtrai-je au moment de prédire ?
Le cas 1 est aussi un biais de mesure : dans les données TLC réelles, tip_amount = 0 pour les espèces. Nos
conclusions ne valent que pour les paiements par carte.
Autres fuites classiques : normaliser sur toutes les données avant le split (le Pipeline l’évite), utiliser l’heure d’arrivée pour prédire la durée.
À vous de jouer
Section intitulée « À vous de jouer »TP 7 – Prédire le pourboire (50 min) : Random Forest contre LinearSVC, AUC, matrice de confusion, courbe ROC en Matplotlib, sauvegarde du modèle pour demain.
Partage et remédiation
Section intitulée « Partage et remédiation »- AUC 0,70 : est-ce un bon modèle ? Honnête pour un comportement humain avec 5 features. On gagnerait avec la zone précise, le jour, la météo.
- Précision ou rappel : lequel privilégier ? Ça dépend de ce que coûte un faux positif par rapport à un faux négatif dans l’usage métier.
- À retenir : la métrique se choisit selon le coût des erreurs.
Pause de 15 minutes, puis la partie 4 : apprendre sans étiquette.
Dépôt des participants : formations2026/formation-spark-ml (branche participants)
Contenu pédagogique © Ambient IT · 140 Avenue Jean Lolive, 93500 Pantin · formation@ambient-it.net · +33 (0)1 48 10 09 46
Organisme de formation enregistré sous le numéro 11 75 54743 75. Cet enregistrement ne vaut pas agrément de l'État.