Machine learning workflows

Modelagem com tidymodels em R

David Svancer

Data Scientist

Classificação com árvores de decisão

Árvores de decisão segmentam o espaço dos preditores em regiões retangulares

Divisão binária recursiva

  • Algoritmo que segmenta o espaço dos preditores em regiões retangulares não sobrepostas

Dispersão dos dados de lead scoring

Modelagem com tidymodels em R

Classificação com árvores de decisão

Árvores de decisão segmentam o espaço dos preditores em regiões retangulares

Divisão binária recursiva

  • Algoritmo que segmenta o espaço dos preditores em regiões retangulares não sobrepostas
  • Divisões são adicionadas iterativamente
    • Cortes horizontais ou verticais

Dispersão com a primeira divisão da árvore

Modelagem com tidymodels em R

Classificação com árvores de decisão

Árvores de decisão segmentam o espaço dos preditores em regiões retangulares

Divisão binária recursiva

  • Algoritmo que segmenta o espaço dos preditores em regiões retangulares não sobrepostas
  • Divisões são adicionadas iterativamente
    • Cortes horizontais ou verticais

Dispersão com a segunda divisão da árvore

Modelagem com tidymodels em R

Classificação com árvores de decisão

Árvores de decisão segmentam o espaço dos preditores em regiões retangulares

Divisão binária recursiva

  • Algoritmo que segmenta o espaço dos preditores em regiões retangulares não sobrepostas
  • Divisões são adicionadas iterativamente
    • Cortes horizontais ou verticais

Dispersão com a terceira divisão da árvore

Modelagem com tidymodels em R

Classificação com árvores de decisão

Árvores de decisão segmentam o espaço dos preditores em regiões retangulares

Divisão binária recursiva

  • Algoritmo que segmenta o espaço dos preditores em regiões retangulares não sobrepostas
  • Divisões são adicionadas iterativamente
    • Cortes horizontais ou verticais

 

Produz regiões retangulares distintas

  • Para classificação, prevê a classe majoritária

Dispersão com quatro regiões retangulares de predição

Modelagem com tidymodels em R

Diagramas de árvores

  • Nós internos
    • Divisões da árvore de decisão (caixas escuras)
  • Nós terminais
    • Regiões que não são mais divididas
    • Caixas verdes e roxas

Diagrama de árvore de decisão

Nós internos são linhas tracejadas e nós terminais são regiões retangulares destacadas

Dispersão com quatro regiões retangulares de predição

Modelagem com tidymodels em R

Especificação do modelo

Especificação do modelo em parsnip

  • decision_tree()
    • Interface geral para modelos de árvore de decisão em parsnip
    • Engine comum é 'rpart'
    • Modo pode ser 'classification' ou 'regression'
      • Para dados de lead scoring, usamos 'classification'
dt_model <- decision_tree() %>% 

set_engine('rpart') %>%
set_mode('classification')
Modelagem com tidymodels em R

Receita de engenharia de atributos

Transformações de dados para lead scoring

  • Codificadas em um objeto recipe
    • Remover multicolinearidade
    • Normalizar preditores numéricos
    • Criar variáveis dummies para preditores nominais

Dois objetos R para gerenciar

  • Modelo parsnip e especificação da recipe
  • Unir em um único objeto facilitaria a vida
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()
Modelagem com tidymodels em R

Combinando modelos e receitas

O pacote workflows foi feito para agilizar o processo de modelagem

  • Combina um modelo parsnip e um objeto recipe em um único objeto workflow

 

Inicialize com a função workflow()

  • Adicione o modelo com add_model()
  • Adicione a recipe com add_recipe()
    • Deve ser a especificação, não uma recipe treinada
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
Modelagem com tidymodels em R

Ajuste de modelo com workflows

Treinando um objeto workflow

  • Passe o workflow para last_fit() e forneça o objeto de divisão dos dados
  • Veja os resultados de avaliação com collect_metrics()

Por trás dos panos

  • Conjuntos de treino e teste são criados
  • A recipe é treinada e aplicada
  • A árvore de decisão é treinada com os dados de treino
  • Predições e métricas no teste
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
Modelagem com tidymodels em R

Coletando predições

Um workflow treinado com last_fit() pode ser passado para collect_predictions()

  • Gera resultados detalhados no conjunto de teste
  • Como antes, pode ser usado com funções do yardstick para explorar métricas personalizadas de desempenho
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
Modelagem com tidymodels em R

Explorando métricas personalizadas

Crie um conjunto de métricas personalizado com metric_set()

  • Área sob a curva ROC, sensibilidade e especificidade

 

Passe os dados de predição para leads_metrics() para calcular as métricas

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
Modelagem com tidymodels em R

Conjunto de dados de inadimplência de empréstimos

Dados financeiros de empréstimos ao consumidor em um banco

  • A variável de saída é 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
Modelagem com tidymodels em R

Vamos praticar a criação de workflows!

Modelagem com tidymodels em R

Preparing Video For Download...