Workflow di machine learning

Modellazione con tidymodels in R

David Svancer

Data Scientist

Classificazione con alberi decisionali

Gli alberi decisionali segmentano lo spazio dei predittori in aree rettangolari

Suddivisione binaria ricorsiva

  • Algoritmo che divide lo spazio dei predittori in aree rettangolari non sovrapposte

Scatter dei dati di lead scoring

Modellazione con tidymodels in R

Classificazione con alberi decisionali

Gli alberi decisionali segmentano lo spazio dei predittori in aree rettangolari

Suddivisione binaria ricorsiva

  • Algoritmo che divide lo spazio dei predittori in aree rettangolari non sovrapposte
  • Gli split si aggiungono iterativamente
    • Tagli orizzontali o verticali

Dispersione con il primo split dell'albero decisionale

Modellazione con tidymodels in R

Classificazione con alberi decisionali

Gli alberi decisionali segmentano lo spazio dei predittori in aree rettangolari

Suddivisione binaria ricorsiva

  • Algoritmo che divide lo spazio dei predittori in aree rettangolari non sovrapposte
  • Gli split si aggiungono iterativamente
    • Tagli orizzontali o verticali

Dispersione con il secondo split dell'albero decisionale

Modellazione con tidymodels in R

Classificazione con alberi decisionali

Gli alberi decisionali segmentano lo spazio dei predittori in aree rettangolari

Suddivisione binaria ricorsiva

  • Algoritmo che divide lo spazio dei predittori in aree rettangolari non sovrapposte
  • Gli split si aggiungono iterativamente
    • Tagli orizzontali o verticali

Dispersione con terzo split dell'albero decisionale

Modellazione con tidymodels in R

Classificazione con alberi decisionali

Gli alberi decisionali segmentano lo spazio dei predittori in aree rettangolari

Suddivisione binaria ricorsiva

  • Algoritmo che divide lo spazio dei predittori in aree rettangolari non sovrapposte
  • Gli split si aggiungono iterativamente
    • Tagli orizzontali o verticali

 

Produce aree rettangolari distinte

  • Per la classificazione, si predice la classe di maggioranza

Dispersione con quattro aree rettangolari di predizione

Modellazione con tidymodels in R

Diagrammi ad albero

  • Nodi interni
    • Split dell’albero (riquadri scuri)
  • Nodi terminali
    • Aree non ulteriormente suddivise
    • Riquadri verdi e viola

Diagramma di un albero decisionale

I nodi interni sono linee tratteggiate e i nodi terminali sono aree rettangolari evidenziate

Dispersione con quattro aree rettangolari di predizione

Modellazione con tidymodels in R

Specificazione del modello

Specificazione del modello in parsnip

  • decision_tree()
    • Interfaccia generale per modelli ad albero in parsnip
    • Motore comune: 'rpart'
    • Modalità: 'classification' o 'regression'
      • Per i lead scoring serve 'classification'
dt_model <- decision_tree() %>% 

set_engine('rpart') %>%
set_mode('classification')
Modellazione con tidymodels in R

Ricetta di feature engineering

Trasformazioni dei dati per il lead scoring

  • Codificate in un oggetto recipe
    • Rimuovere multicollinearità
    • Normalizzare i predittori numerici
    • Creare dummy per i predittori nominali

Due oggetti R da gestire

  • Modello parsnip e specifica recipe
  • Unirli in un unico oggetto semplifica il lavoro
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()
Modellazione con tidymodels in R

Combinare modelli e ricette

Il pacchetto workflows snellisce il processo di modellazione

  • Combina un modello parsnip e un oggetto recipe in un singolo oggetto workflow

 

Inizializza con workflow()

  • Aggiungi il modello con add_model()
  • Aggiungi la recipe con add_recipe()
    • Deve essere una specifica, non una recipe addestrata
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
Modellazione con tidymodels in R

Addestramento del modello con workflows

Addestrare un oggetto workflow

  • Passa il workflow a last_fit() e fornisci lo split dei dati
  • Vedi i risultati con collect_metrics()

Dietro le quinte

  • Creati training e test set
  • recipe addestrata e applicata
  • Albero decisionale addestrato sui training data
  • Predizioni e metriche sul test set
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
Modellazione con tidymodels in R

Raccogliere le predizioni

Un workflow addestrato con last_fit() può essere passato a collect_predictions()

  • Produce risultati dettagliati sul test set
  • Come prima, usalo con yardstick per metriche personalizzate
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
# ... con altre 327 righe
Modellazione con tidymodels in R

Esplorare metriche personalizzate

Crea un set di metriche personalizzate con metric_set()

  • Area sotto la ROC, sensibilità e specificità

 

Passa i dataset di predizioni a leads_metrics() per calcolare le metriche

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
Modellazione con tidymodels in R

Dataset sui default dei prestiti

Dati finanziari su prestiti ai consumatori di una banca

  • Variabile target: 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 
# ... con altre 867 righe
Modellazione con tidymodels in R

Costruiamo workflow, mettiamoci alla prova!

Modellazione con tidymodels in R

Preparing Video For Download...