Workflows en Machine Learning

Modélisation 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 régions rectangulaires

Découpage binaire récursif

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

Nuage de points des données de pointage des prospects

Modélisation avec tidymodels en R

Classification avec des arbres de décision

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

Découpage binaire récursif

  • Algorithme qui segmente l'espace des prédicteurs en régions rectangulaires non chevauchantes
  • Les coupures de décision s'ajoutent de façon itérative
    • Points de coupure horizontaux ou verticaux

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

Modélisation avec tidymodels en R

Classification avec des arbres de décision

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

Découpage binaire récursif

  • Algorithme qui segmente l'espace des prédicteurs en régions rectangulaires non chevauchantes
  • Les coupures de décision s'ajoutent de façon itérative
    • Points de coupure horizontaux ou verticaux

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

Modélisation avec tidymodels en R

Classification avec des arbres de décision

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

Découpage binaire récursif

  • Algorithme qui segmente l'espace des prédicteurs en régions rectangulaires non chevauchantes
  • Les coupures de décision s'ajoutent de façon itérative
    • Points de coupure horizontaux ou verticaux

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

Modélisation avec tidymodels en R

Classification avec des arbres de décision

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

Découpage binaire récursif

  • Algorithme qui segmente l'espace des prédicteurs en régions rectangulaires non chevauchantes
  • Les coupures de décision s'ajoutent de façon itérative
    • Points de coupure horizontaux ou verticaux

 

Produit des régions rectangulaires distinctes

  • En classification, on prédit la classe majoritaire

Nuage avec quatre régions de prédiction rectangulaires

Modélisation avec tidymodels en R

Schémas d'arbres

  • Nœuds internes
    • Coupures de l'arbre de décision (boîtes foncées)
  • Nœuds terminaux
    • Régions non subdivisées
    • Boîtes vertes et mauves

Schéma d'arbre de décision

Les nœuds internes sont des lignes en pointillé et les nœuds terminaux sont des régions rectangulaires mises en évidence

Nuage avec quatre régions de prédiction rectangulaires

Modélisation avec tidymodels en R

Spécification du modèle

Spécification de modèle dans parsnip

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

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

Recette d'ingénierie des variables

Transformations des données pour le pointage des prospects

  • Encodées dans un objet recipe
    • Retirer la multicolinéarité
    • Normaliser les prédicteurs numériques
    • Créer des variables factices 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
Recette de données
Entrées :
      rôle #variables
   issue           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

Combiner modèles et recettes

Le paquet workflows sert à simplifier 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 =====================
Préprocesseur : Recipe
Modèle : decision_tree()
-- Préprocesseur -----------------
3 étapes Recipe
* step_corr()
* step_normalize()
* step_dummy()
-- Modèle --------------------------
Spécification du modèle Decision Tree (classification)
Moteur de calcul : rpart
Modélisation avec tidymodels en R

Ajuster des modèles avec workflows

Entraîner un objet workflow

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

En coulisse

  • Jeux d'entraînement et de test créés
  • recipe entraînée et appliquée
  • Arbre de décision entraîné sur l'entraînement
  • Prédictions et mesures 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élisation avec tidymodels en R

Recueillir 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, peut s'employer avec les fonctions yardstick pour explorer des mesures 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élisation avec tidymodels en R

Explorer des mesures personnalisées

Créer un ensemble de mesures personnalisé avec metric_set()

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

 

Passer les jeux de prédictions à leads_metrics() pour calculer les mesures

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élisation avec tidymodels en R

Ensemble de données sur le défaut de paiement

Données financières sur des prêts à la consommation dans une 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élisation avec tidymodels en R

Passons à la pratique : créer des workflows !

Modélisation avec tidymodels en R

Preparing Video For Download...