Aller au contenu

Partie 3 – Classification : Random Forest, SVM, ROC et AUC

  • 13h00 – 15h00
  • Théorie 40 min · TP 7 50 min · partage 15 min
  • Slides 24 à 32

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 : la sagesse des foulesSVM : la meilleure frontière
PrincipeDes dizaines d’arbres, chacun entraîné sur un échantillon et un sous-ensemble de features différents. Les arbres votentCherche la frontière qui sépare les deux classes avec la plus grande marge
Pourquoi ça marcheUn arbre seul sur-apprend facilement ; 50 arbres se trompent chacun différemment et leurs erreurs se compensentPlusieurs droites sépareraient les nuages ; celle qui laisse le plus de marge généralise mieux
SortiesUne probabilité et l’importance des featuresUne décision (pas de probabilité)
RéglagesRobuste, peu de réglages (numTrees, maxDepth)Normaliser les features avant (StandardScaler)
Dans SparkRandomForestClassifierLinearSVC : 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ère

Autres classifieurs disponibles : LogisticRegression, GBTClassifier, NaiveBayes, MultilayerPerceptronClassifier.

Random Forest, pourboire oui / non, seuil 0,5, sur les 17 963 courses de test payées par carte :

Prédit : pourboirePrédit : rien
Réel : pourboire5 595 vrais positifs (VP)3 789 faux négatifs (FN)
Réel : rien2 780 faux positifs (FP)5 799 vrais négatifs (VN)
MétriqueFormuleValeurLecture
Exactitude (accuracy)(VP + VN) / total63 %Bonnes réponses sur l’ensemble
PrécisionVP / (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èleAUC
Random Forest (50 arbres, profondeur 6)0,70
LinearSVC0,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 label

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.

  1. Un détecteur de fraude répond toujours « pas de fraude ». Exactitude : 99 %. Bon modèle ?
  2. Mon modèle fait 99 % en train et 60 % en test. Que se passe-t-il ?
  3. Pour prédire la durée d’une course, puis-je utiliser l’heure d’arrivée ?
  4. 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.

CasCe qui se passeRemède
Les pourboires en espèces ne sont pas enregistrésAvec 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 tarifEn régression, R² = 0,976 : excellent, mais total_amount n’est connu qu’après la courseRetirer 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.

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.

  • 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.