Flux de travail en Machine Learning

Modéliser avec tidymodels en R

David Svancer

Data Scientist

Classification avec des arbres de décision

Les arbres de décision découpent l'espace des prédicteurs en zones rectangulaires

Découpage binaire récursif

  • Algorithme qui segmente l'espace des prédicteurs en zones rectangulaires non chevauchantes

Nuage de points des données de lead scoring

Modéliser avec tidymodels en R

Classification avec des arbres de décision

Les arbres de décision découpent l'espace des prédicteurs en zones rectangulaires

Découpage binaire récursif

  • Algorithme qui segmente l'espace des prédicteurs en zones rectangulaires non chevauchantes
  • Les coupes sont ajoutées itérativement
    • Coupes horizontales ou verticales

Nuage avec première coupe d'arbre de décision

Modéliser avec tidymodels en R

Classification avec des arbres de décision

Les arbres de décision découpent l'espace des prédicteurs en zones rectangulaires

Découpage binaire récursif

  • Algorithme qui segmente l'espace des prédicteurs en zones rectangulaires non chevauchantes
  • Les coupes sont ajoutées itérativement
    • Coupes horizontales ou verticales

Nuage avec deuxième coupe d'arbre de décision

Modéliser avec tidymodels en R

Classification avec des arbres de décision

Les arbres de décision découpent l'espace des prédicteurs en zones rectangulaires

Découpage binaire récursif

  • Algorithme qui segmente l'espace des prédicteurs en zones rectangulaires non chevauchantes
  • Les coupes sont ajoutées itérativement
    • Coupes horizontales ou verticales

Nuage avec troisième coupe d'arbre de décision

Modéliser avec tidymodels en R

Classification avec des arbres de décision

Les arbres de décision découpent l'espace des prédicteurs en zones rectangulaires

Découpage binaire récursif

  • Algorithme qui segmente l'espace des prédicteurs en zones rectangulaires non chevauchantes
  • Les coupes sont ajoutées itérativement
    • Coupes horizontales ou verticales

 

Produit des zones rectangulaires distinctes

  • En classification, on prédit la classe majoritaire

Nuage avec quatre zones de prédiction rectangulaires

Modéliser avec tidymodels en R

Schémas d'arbres

  • Nœuds internes
    • Coupes de l'arbre de décision (boîtes foncées)
  • Nœuds terminaux
    • Zones non découpées davantage
    • Boîtes vertes et violettes

Schéma d'arbre de décision

Les nœuds internes sont en pointillés et les nœuds terminaux sont des zones rectangulaires en surbrillance

Nuage avec quatre zones de prédiction rectangulaires

Modéliser avec tidymodels en R

Spécification du modèle

Spécification de modèle dans parsnip

  • decision_tree()
    • Interface générale pour les modèles d'arbres de décision dans parsnip
    • Moteur courant : 'rpart'
    • Mode : 'classification' ou 'regression'
      • Pour les données de lead scoring, il faut 'classification'
dt_model <- decision_tree() %>% 

set_engine('rpart') %>%
set_mode('classification')
Modéliser avec tidymodels en R

Recette d'ingénierie des variables

Transformations des données pour le lead scoring

  • Encodées dans un objet recipe
    • Supprimer la multicolinéarité
    • Normaliser les prédicteurs numériques
    • Créer des variables indicatrices pour les prédicteurs nominaux

Deux objets R à gérer

  • Modèle parsnip et spécification recipe
  • Les combiner en un seul objet simplifierait la vie
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
Data Recipe
Inputs:
      role #variables
   outcome          1
 predictor          6

Operations:
Correlation filter on all_numeric()
Centering and scaling for all_numeric()
Dummy variables from all_nominal(), -all_outcomes()
Modéliser avec tidymodels en R

Combiner modèles et recettes

Le package workflows sert à rationaliser le processus de modélisation

  • Combine un modèle parsnip et un objet recipe en un seul objet workflow

 

Initialisé avec la fonction workflow()

  • Ajouter le modèle avec add_model()
  • Ajouter l'objet recipe avec add_recipe()
    • Doit être une spécification, pas une recipe entraînée
leads_wkfl <- workflow() %>%

add_model(dt_model) %>%
add_recipe(leads_recipe)
leads_wkfl
== Workflow =====================
Preprocessor: Recipe
Model: decision_tree()
-- Preprocessor -----------------
3 Recipe Steps
* step_corr()
* step_normalize()
* step_dummy()
-- Model --------------------------
Decision Tree Model Specification (classification)
Computational engine: rpart
Modéliser avec tidymodels en R

Ajuster un modèle avec workflows

Entraîner un objet workflow

  • Passer le workflow à last_fit() et fournir l'objet de découpe des données
  • Voir les résultats d'évaluation avec collect_metrics()

En coulisses

  • Création des jeux d'entraînement et de test
  • recipe entraînée et appliquée
  • Arbre de décision entraîné sur l'entraînement
  • Prédictions et métriques sur le test
leads_wkfl_fit <- leads_wkfl %>% 
  last_fit(split = leads_split)

leads_wkfl_fit %>% collect_metrics()
# A tibble: 2 x 3
  .metric  .estimator .estimate
  <chr>    <chr>          <dbl>
1 accuracy binary         0.771
2 roc_auc  binary         0.775
Modéliser avec tidymodels en R

Collecter les prédictions

Un workflow entraîné avec last_fit() peut être passé à collect_predictions()

  • Produit des résultats détaillés sur les données de test
  • Comme avant, utilisable avec les fonctions yardstick pour explorer des métriques personnalisées
leads_wkfl_preds <- leads_wkfl_fit %>% 
  collect_predictions()

leads_wkfl_preds
# A tibble: 332 x 6
   id          .pred_yes .pred_no  .row .pred_class purchased
  <chr>           <dbl>   <dbl>    <int>   <fct>       <fct>
train/test split  0.120    0.880     2      no          no
train/test split  0.755    0.245    17      yes         yes
train/test split  0.120    0.880    21      no          no
train/test split  0.120    0.880    22      no          no
train/test split  0.755    0.245    24      yes         yes
# ... with 327 more rows
Modéliser avec tidymodels en R

Explorer des métriques personnalisées

Créer un jeu de métriques personnalisé avec metric_set()

  • Aire sous la courbe ROC, sensibilité et spécificité

 

Passer les prédictions à leads_metrics() pour calculer les métriques

leads_metrics <- metric_set(roc_auc, sens, spec)

leads_wkfl_preds %>% leads_metrics(truth = purchased, estimate = .pred_class, .pred_yes)
# A tibble: 3 x 3
  .metric .estimator .estimate
  <chr>   <chr>          <dbl>
1 sens    binary         0.75 
2 spec    binary         0.783
3 roc_auc binary         0.775
Modéliser avec tidymodels en R

Jeu de données : défaut de prêt

Données financières sur des prêts à la consommation en banque

  • La variable cible est loan_default

 

loans_df
# A tibble: 872 x 8
loan_default  loan_purpose   missed_payment_2_yr loan_amount interest_rate installment annual_income debt_to_income
 <fct>           <fct>            <fct>             <int>        <dbl>         <dbl>         <dbl>       <dbl>
 no        debt_consolidation      no              25000         5.47          855.         62823        39.4 
 yes       medical                 no              10000        10.2           364.         40000        24.1 
 no        small_business          no              13000         6.22          442.         65000        14.0 
 no        small_business          no              36000         5.97         1152.        125000         8.09
 yes       small_business          yes             12000        11.8           308.         65000        20.1 
# ... with 867 more rows
Modéliser avec tidymodels en R

Passons à la pratique : créons des workflows !

Modéliser avec tidymodels en R

Preparing Video For Download...