Évaluer l'ajustement du modèle

Modélisation avec tidymodels en R

David Svancer

Data Scientist

Classification binaire

Variable cible à deux niveaux

  • Classe positive
    • Événement d'intérêt à prédire
    • « yes » dans la variable purchased
  • Classe négative

    • « no »
  • Dans tidymodels, la variable cible doit être un facteur

    • Le premier niveau est la classe positive
    • Vérifiez l'ordre avec levels()
leads_df
# A tibble: 1,328 x 7
  purchased total_visits  ...   us_location
   <fct>        <dbl>     ...     <fct>
 1 yes            7       ...     west
 2 no             8       ...     west
 3 no             5       ...     southeast
# ... with 1,325 more rows
levels(leads_df[['purchased']])
[1] "yes" "no"
Modélisation avec tidymodels en R

Matrice de confusion

 

Matrice comptant toutes les combinaisons de valeurs réelles et prédites

Prédictions correctes

  • Vrai positif (VP)
  • Vrai négatif (VN)

Erreurs de classification

  • Faux positif (FP)
  • Faux négatif (FN)

 

Matrice de confusion

Modélisation avec tidymodels en R

Mesures de classification avec yardstick

Créer des matrices de confusion et autres mesures d'ajustement avec yardstick

  • Nécessite un tibble de résultats contenant :
    • Valeurs réelles de la cible
      • purchased
    • Catégories prédites
      • .pred_class
    • Probabilités estimées de chaque catégorie
      • .pred_yes
      • .pred_no
leads_results
# A tibble: 332 x 4
   purchased .pred_class .pred_yes .pred_no
   <fct>     <fct>           <dbl>    <dbl>
 1 no        no             0.134     0.866
 2 yes       yes            0.729     0.271
 3 no        no             0.133     0.867
 4 no        no             0.0916    0.908
 5 yes       yes            0.598     0.402
 6 no        no             0.128     0.872
 7 yes       no             0.112     0.888
 8 no        no             0.169     0.831
 9 no        no             0.158     0.842
10 yes       yes            0.520     0.480
# ... with 322 more rows
Modélisation avec tidymodels en R

Matrice de confusion avec yardstick

La fonction conf_mat()

  • Tibble de résultats du modèle
  • truth : colonne des valeurs réelles
  • estimate : colonne des valeurs prédites

Régression logistique sur leads_df

  • 252 clients correctement classés sur 332 (76 %)
  • 46 faux négatifs
  • 34 faux positifs
conf_mat(leads_results,

truth = purchased,
estimate = .pred_class)
          Truth
Prediction yes  no
       yes  74  34
       no   46 178
Modélisation avec tidymodels en R

Justesse de classification

La fonction accuracy()

  • Prend les mêmes arguments que conf_mat()
  • Calcule la justesse de classification

 

$$\frac{TP + TN}{TP + TN + FP + FN}$$

 

  • Les fonctions yardstick renvoient toujours un tibble
    • .metric : type de mesure
    • .estimate : valeur calculée
accuracy(leads_results, 
         truth = purchased, 
         estimate = .pred_class)
# A tibble: 1 x 3
  .metric  .estimator .estimate
  <chr>    <chr>          <dbl>
1 accuracy binary         0.759
Modélisation avec tidymodels en R

Sensibilité

Souvent, la justesse n'est pas la meilleure mesure

  • Données leads_df
    • Tout classer « no » donne 64 % de justesse

 

Sensibilité

Part des cas positifs correctement classés

  • Pour les clients qui ont acheté, quelle proportion notre modèle a-t-il bien prédite ?
    • Moins de faux négatifs → sensibilité plus élevée

Calcul de la sensibilité

Modélisation avec tidymodels en R

Calculer la sensibilité

La fonction sens()

  • Prend les mêmes arguments que conf_mat() et accuracy()
  • Retourne la sensibilité dans la colonne .estimate
sens(leads_results, 
     truth = purchased, 
     estimate = .pred_class)
# A tibble: 1 x 3
  .metric .estimator .estimate
  <chr>   <chr>          <dbl>
1 sens    binary         0.617
Modélisation avec tidymodels en R

Spécificité

La spécificité est la part des cas négatifs correctement classés

  • Pour les clients qui n'ont pas acheté, quelle proportion notre modèle a-t-il bien prédite ?
    • Moins de faux positifs → spécificité plus élevée

 

1 - Spécificité

  • Aussi appelée taux de faux positifs (FPR)
  • Proportion de faux positifs parmi les vrais négatifs

Calcul de la spécificité

Modélisation avec tidymodels en R

Calculer la spécificité

La fonction spec()

  • Prend les mêmes arguments que sens()
  • Retourne la spécificité dans la colonne .estimate
spec(leads_results, 
     truth = purchased, 
     estimate = .pred_class)
# A tibble: 1 x 3
  .metric .estimator .estimate
  <chr>   <chr>          <dbl>
1 spec    binary         0.840
Modélisation avec tidymodels en R

Créer un ensemble de mesures

Ensembles de mesures définis par l'utilisateur

  • Fonction metric_set()
    • Crée une fonction personnalisée avec des mesures yardstick choisies
    • Passez les noms des fonctions yardstick à metric_set()
    • Utilisez la fonction pour calculer les mesures
custom_metrics <-
  metric_set(accuracy, sens, spec)
custom_metrics(leads_results, 
               truth = purchased, 
               estimate = .pred_class)
# A tibble: 3 x 3
  .metric  .estimator .estimate
  <chr>    <chr>          <dbl>
1 accuracy binary         0.759
2 sens     binary         0.617
3 spec     binary         0.840
Modélisation avec tidymodels en R

Beaucoup de mesures

Mesures pour la classification binaire

  • Large éventail de mesures

    • accuracy(), kap(), sens(), spec(), ppv(), npv(), mcc(), j_index(), bal_accuracy(), detection_prevalence(), precision(), recall(), f_meas()
  • Passez les résultats de conf_mat() à summary() pour tout calculer

 

https://yardstick.tidymodels.org/reference

conf_mat(leads_results, truth = purchased, 
         estimate = .pred_class) %>% 
  summary()
# A tibble: 13 x 3
   .metric              .estimator .estimate
   <chr>                <chr>          <dbl>
 1 accuracy             binary         0.759
 2 kap                  binary         0.466
 3 sens                 binary         0.617
 4 spec                 binary         0.840
 5 ppv                  binary         0.685
 6 npv                  binary         0.795
 7 mcc                  binary         0.468
 8 j_index              binary         0.456
 9 bal_accuracy         binary         0.728
10 detection_prevalence binary         0.325
11 precision            binary         0.685
12 recall               binary         0.617
13 f_meas               binary         0.649
Modélisation avec tidymodels en R

Passons à la pratique !

Modélisation avec tidymodels en R

Preparing Video For Download...