Aller au contenu

Quiz 07 – Classification : Random Forest, SVM, matrice de confusion et AUC

  • Jour 2
  • 20 questions
  • Seuil de réussite : 70 %
  • 21 flashcards

Contenus évalués : construction du label binaire du pourboire et taux de pourboire sur les courses payées par carte ; features `nuit` et rôle du `StandardScaler` ; hyperparamètres `numTrees` et `maxDepth` du Random Forest et grille du `CrossValidator` ; choix entre Random Forest et LinearSVC ; lecture du pipeline ajusté et de `featureImportances` ; lecture de la matrice de confusion, précision, rappel, `weightedRecall` et exactitude trompeuse ; effet du seuil de décision ; courbe ROC, colonne `probability`, seuils par quantiles, AUC = 0,5 et interprétation d'une AUC de 0,70 ; sur-apprentissage et fuite de données avec `payment_type`.

Une seule bonne réponse par question. Toutes les valeurs citées sont celles des TP de la formation. Le corrigé détaillé s’affiche après la correction. Ce quiz prépare le QCM de validation des acquis du dernier jour.

Question 1

Dans le TP 7, tu as construit la colonne cible avec cette ligne. Que contient label ?

.withColumn("label", (F.col("tip_amount") > 0).cast("double"))
Question 2

Juste après la préparation des données, le TP te fait exécuter cette ligne. Que mesure-t-elle ?

print(df.agg(F.avg("label")).first()[0])
Question 3

Le pipeline du TP 7 se termine par RandomForestClassifier(numTrees=50, maxDepth=6). Que fixent ces deux hyperparamètres ?

Question 4

Les AUC du Random Forest et de LinearSVC sont presque égales. Pourquoi le TP te fait-il sauvegarder le Random Forest dans out/modele_pourboire ?

Question 5

Tu affiches la matrice de confusion avec rf_pred.groupBy("label").pivot("prediction").count(). Pour obtenir le rappel de la classe 1 (pourboire), tu prends le nombre de courses avec label = 1.0 et prediction = 1.0, et tu le divises par :

Question 6

Quiz flash d'avant le TP 7 : un détecteur de fraude répond toujours « pas de fraude » et affiche une exactitude de 99 %. Quel est le bon diagnostic ?

Question 7

Après l'entraînement, BinaryClassificationEvaluator(metricName="areaUnderROC") renvoie une AUC de 0,5. Que conclus-tu ?

Question 8

Pour tracer la courbe ROC, le TP signale que les probabilités du Random Forest sont concentrées entre 0,3 et 0,7. Il te fait donc prendre comme seuils numpy.quantile(p, numpy.linspace(0, 1, 50)) plutôt que 20 seuils réguliers. Pourquoi ?

Question 9

Un modèle obtient 99 % en entraînement et 60 % en test. Quel diagnostic et quelle action retiens-tu ?

Question 10

Un collègue propose de retirer le filtre payment_type = 1, de garder toutes les courses et d'ajouter payment_type comme feature. L'AUC monte fortement. Qu'en penses-tu ?

Question 11

Dans le corrigé, l'importance des features est lue avec ces deux lignes. Que contient rf ?

rf = rf_model.stages[-1]
rf.featureImportances
Question 12

La feature nuit est construite ainsi. Quelle valeur prend-elle pour une course prise en charge à 4 h 50, puis pour une course prise en charge à 20 h 00 ?

.withColumn("heure", F.hour("tpep_pickup_datetime"))
.withColumn("nuit", ((F.col("heure") >= 20) | (F.col("heure") < 5)).cast("double"))
Question 13

Pour la courbe ROC, tu récupères le score de chaque course avec vector_to_array("probability")[1]. Pourquoi l'indice 1 ?

Question 14

Dans le corrigé, la liste des seuils de la courbe ROC se termine par une valeur ajoutée à la main. À quoi sert ce dernier seuil 1.01 ?

seuils = list(np.quantile(p, np.linspace(0, 1, 50))) + [1.01]
Question 15

Le corrigé place un StandardScaler avant les deux classifieurs, avec le commentaire « indispensable pour la SVM ». Pourquoi ?

Question 16

Le corrigé affiche weightedRecall avec MulticlassClassificationEvaluator. Le rappel de la classe 1 que tu as calculé à la main à partir de la matrice de confusion ne donne pas la même valeur. Pourquoi ?

Question 17

Tu modifies la grille du bonus en ajoutant une valeur à maxDepth. Combien de modèles la validation croisée entraîne-t-elle pour comparer les combinaisons, sans compter le réentraînement final du meilleur modèle ?

grille = (ParamGridBuilder()
          .addGrid(rf.numTrees, [20, 50])
          .addGrid(rf.maxDepth, [4, 6, 8])
          .build())
cv = CrossValidator(..., estimatorParamMaps=grille, evaluator=auc, numFolds=3, seed=1)
Question 18

La matrice de confusion du TP utilise le seuil 0,5. Tu abaisses ce seuil à 0,4 sans réentraîner le Random Forest. Qu'est-ce qui change ?

Question 19

Le service marketing veut une liste de courses annoncées « pourboire » dans laquelle presque toutes en reçoivent vraiment, quitte à en oublier beaucoup. Quelle métrique surveilles-tu, et comment règles-tu le seuil du Random Forest ?

Question 20

Ton Random Forest atteint une AUC de 0,70 : le critère de réussite du TP (AUC > 0,65) est atteint. Ton responsable te demande comment faire mieux. Que proposes-tu en priorité ?

Cliquez sur une carte pour la retourner. Mélangez-les pour une révision active.

1 / 21

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.