Flux de travail complet de modélisation

Modélisation avec tidymodels en R

David Svancer

Data Scientist

Rééchantillonnage des données

Création des ensembles d'entraînement et de test

  • initial_split()
    • Créer un objet de découpage des données
  • training()
    • Construire l'ensemble d'entraînement
  • testing()
    • Construire l'ensemble de test
leads_split <- initial_split(leads_df, 
                             strata = purchased)

leads_training <- leads_split %>% training()
leads_test <- leads_split %>% testing()
Modélisation avec tidymodels en R

Spécification du modèle

Spécifier le modèle avec parsnip

  • logistic_reg()
    • Interface générale pour les modèles de régression logistique
  • set_engine()
    • Moteur « glm »
  • set_mode()
    • purchased est une variable cible nominale
    • Le mode doit être « classification »
logistic_model <- logistic_reg() %>%

set_engine('glm') %>%
set_mode('classification')
Modèle de régression logistique 
Spécification (classification)

Moteur de calcul : glm
Modélisation avec tidymodels en R

Ingénierie des caractéristiques

Définir l'ingénierie des caractéristiques avec recipes

  • recipe()
    • Formule du modèle et données d'entraînement
  • Fonctions step_*()
    • Étapes de prétraitement séquencées
leads_recipe <- recipe(purchased ~ .,
                       data = leads_training) %>%

step_corr(all_numeric(), threshold = 0.9) %>% step_normalize(all_numeric()) %>% step_dummy(all_nominal(), -all_outcomes())
leads_recipe
Recette de données
Entrées :
      rôle nb de variables
   cible              1
 prédicteur           6

Opérations :
Filtre de corrélation sur all_numeric()
Centrage et mise à l'échelle pour all_numeric()
Variables factices à partir de all_nominal(), -all_outcomes()
Modélisation avec tidymodels en R

Entraînement de la recette

Entraîner les étapes d'ingénierie sur les données d'entraînement

  • prep()
    • Passer l'objet recipe à prep()
    • Ajouter leads_training comme données d'entraînement
leads_recipe_prep <- leads_recipe %>% 
  prep(training = leads_training)
leads_recipe_prep
Recette de données
Entrées :
      rôle nb de variables
   cible              1
 prédicteur           6
Les données d'entraînement contenaient 996 points de données 
et aucune donnée manquante.

Opérations :
Le filtre de corrélation a retiré pages_per_visit [entraîné]
Centrage et mise à l'échelle pour total_visits ... [entraîné]
Variables factices à partir de lead_source, us_location [entraîné]
Modélisation avec tidymodels en R

Prétraiter les données d'entraînement

Appliquer la recipe entraînée aux données d'entraînement et enregistrer les résultats pour l'ajustement du modèle

leads_training_prep <- leads_recipe_prep %>% 
  bake(new_data = NULL)

leads_training_prep
# A tibble: 996 x 11
total_visits  total_time   ... lead_source_email  lead_source_organic_search ...  us_location_west
     <dbl>      <dbl>                <dbl>                      <dbl>                    <dbl>        
 1    0.611      0.958      ...       0                          0            ...         1
 2    0.103     -0.747      ...       1                          0            ...         0
 3    0.611     -0.278      ...       0                          1            ...         1
 4   -0.151     -0.842      ...       0                          0            ...         1
 5   -0.659      1.19       ...       1                          0            ...         0 
# ... avec 991 lignes de plus
Modélisation avec tidymodels en R

Prétraiter les données de test

Appliquer la recipe entraînée aux données de test et enregistrer les résultats pour l'évaluation du modèle

leads_test_prep <- leads_recipe_prep %>% 
  bake(new_data = leads_test)

leads_test_prep
# A tibble: 332 x 11
 total_visits  total_time  ...  lead_source_email  lead_source_organic_search ...  us_location_west
     <dbl>      <dbl>                <dbl>                      <dbl>                    <dbl>        
 1    0.864     -0.984     ...        0                          0            ...         1
 2   -0.151      1.33      ...        0                          0            ...         0
 3   -0.405     -0.843     ...        0                          1            ...         1
 4   -0.659     -1.14      ...        1                          0            ...         0
 5    1.12       0.725     ...        0                          0            ...         1   
# ... avec 327 lignes de plus
Modélisation avec tidymodels en R

Ajustement du modèle et prédictions

Entraîner le modèle de régression logistique avec fit()

  • Utiliser l'ensemble d'entraînement prétraité, leads_training_prep

 

Obtenir des prédictions avec predict()

  • Prédire les valeurs de la cible et les probabilités estimées
  • Utiliser l'ensemble de test prétraité, leads_test_prep
logistic_fit <- logistic_model %>% 
  fit(purchased ~ .,
      data = leads_training_prep)

 

class_preds <- predict(logistic_fit, 
                       new_data = leads_test_prep,
                       type = 'class')

prob_preds <- predict(logistic_fit, 
                      new_data = leads_test_prep,
                      type = 'prob')
Modélisation avec tidymodels en R

Combiner les résultats de prédiction

Combiner les prédictions dans un ensemble de résultats pour les fonctions de métriques yardstick

  • Sélectionner la variable cible réelle, purchased, à partir de l'ensemble de test
  • Lier les prédictions avec bind_cols()
leads_results <- leads_test %>% 
  select(purchased) %>%

bind_cols(class_preds, prob_preds)
leads_results
# A tibble: 332 x 4
   purchased .pred_class .pred_yes .pred_no
   <fct>     <fct>           <dbl>    <dbl>
 1 no        no             0.257     0.743
 2 yes       yes            0.896     0.104
 3 no        no             0.0852    0.915
 4 no        no             0.183     0.817
 5 yes       yes            0.776     0.224
# ... avec 327 lignes de plus
Modélisation avec tidymodels en R

Évaluation du modèle

Évaluer la performance du modèle avec yardstick

  • Les résultats peuvent être utilisés avec toutes les fonctions de métriques yardstick pour évaluer le modèle
  • Matrice de confusion, sensibilité, spécificité et autres métriques
leads_results %>% 
  conf_mat(truth = purchased, 
           estimate = .pred_class)

 

          Vérité
Prédiction yes  no
       yes  77  34
       no   43 178
Modélisation avec tidymodels en R

Passons à la pratique !

Modélisation avec tidymodels en R

Preparing Video For Download...