Estimando desempenho com validação cruzada

Modelagem com tidymodels em R

David Svancer

Data Scientist

Conjuntos de treino e teste

 

Criar conjuntos de treino e teste é o primeiro passo do processo

  • Evita overfitting
    • Dados de treino para ajustar o modelo
    • Dados de teste para avaliar o modelo

 

Desvantagem

  • Apenas uma estimativa de desempenho do modelo

 

Diagrama de partição para criar conjuntos de treino e teste

Modelagem com tidymodels em R

Validação cruzada K-fold

Técnica de reamostragem para explorar o desempenho do modelo

  • Fornece K estimativas de desempenho durante o ajuste do modelo

 

Partição de dados em conjuntos de treino e teste

Modelagem com tidymodels em R

Validação cruzada K-fold

Técnica de reamostragem para explorar o desempenho do modelo

  • Fornece K estimativas de desempenho durante o ajuste
  • Os dados de treino são particionados aleatoriamente em K conjuntos de tamanho semelhante
  • Os folds são usados para realizar K iterações de ajuste e avaliação

 

Partição dos dados de treino em folds de validação cruzada

Modelagem com tidymodels em R

Machine learning com validação cruzada

Executando validação cruzada 5-fold

  • Cinco iterações de treino e avaliação do modelo

 

Iteração um da validação cruzada 5-fold

Modelagem com tidymodels em R

Machine learning com validação cruzada

Executando validação cruzada 5-fold

  • Cinco iterações de treino e avaliação do modelo
  • Iteração 1
    • Fold 1 reservado para avaliação e folds 2 a 5 para treino

 

Iteração um da validação cruzada 5-fold

Modelagem com tidymodels em R

Machine learning com validação cruzada

Executando validação cruzada 5-fold

  • Cinco iterações de treino e avaliação do modelo
  • Iteração 1
    • Fold 1 reservado para avaliação e folds 2 a 5 para treino
  • Iteração 2
    • Fold 2 reservado para avaliação

 

Iteração dois da validação cruzada 5-fold

Modelagem com tidymodels em R

Machine learning com validação cruzada

Executando validação cruzada 5-fold

  • Cinco iterações de treino e avaliação do modelo
  • Iteração 1
    • Fold 1 reservado para avaliação e folds 2 a 5 para treino
  • Iteração 2
    • Fold 2 reservado para avaliação

 

Cinco estimativas de desempenho no total

 

Iteração cinco da validação cruzada 5-fold

Modelagem com tidymodels em R

Criando folds de validação cruzada

A função vfold_cv()

  • Dados de treino
  • Número de folds, v
  • Variável de estratificação, strata
  • Execute set.seed() antes de vfold_cv() para reprodutibilidade
  • splits
    • Coluna de lista com objetos de divisão de dados para criar folds
set.seed(214)
leads_folds <- vfold_cv(leads_training,

v = 10,
strata = purchased)
leads_folds
#  10-fold cross-validation using stratification 
# A tibble: 10 x 2
   splits            id    
   <list>            <chr> 
 1 <split [896/100]> Fold01
 2 <split [896/100]> Fold02
 3 <split [896/100]> Fold03
 . ................  ......
 9 <split [897/99]>  Fold09
10 <split [897/99]>  Fold10
Modelagem com tidymodels em R

Treinando modelos com validação cruzada

A função fit_resamples()

  • Treine um modelo parsnip ou objeto workflow
  • Forneça os folds de validação cruzada, resamples
  • Função de métrica opcional, metrics
    • Padrão: acurácia e ROC AUC

 

Cada métrica é estimada 10 vezes

  • Uma estimativa por fold
  • Média na coluna mean
leads_rs_fit <- leads_wkfl %>%

fit_resamples(resamples = leads_folds,
metrics = leads_metrics)
leads_rs_fit %>% collect_metrics()
# A tibble: 3 x 5
  .metric .estimator  mean     n std_err
  <chr>   <chr>      <dbl> <int>   <dbl>
1 roc_auc binary     0.823    10  0.0147
2 sens    binary     0.786    10  0.0203
3 spec    binary     0.855    10  0.0159
Modelagem com tidymodels em R

Resultados detalhados da validação cruzada

A função collect_metrics()

  • Passar summarize = FALSE retorna todas as estimativas de métricas para cada fold da validação cruzada
  • 30 combinações no total (3 métricas x 10 folds)
    • A coluna .metric identifica a métrica
    • A coluna .estimate traz o valor estimado por fold
rs_metrics <- leads_rs_fit %>% 
  collect_metrics(summarize = FALSE)

rs_metrics
# A tibble: 30 x 4
   id     .metric .estimator .estimate
   <chr>  <chr>   <chr>          <dbl>
 1 Fold01 sens    binary         0.861
 2 Fold01 spec    binary         0.891
 3 Fold01 roc_auc binary         0.885
 4 Fold02 sens    binary         0.778
 5 Fold02 spec    binary         0.969
 6 Fold02 roc_auc binary         0.885
# ... with 24 more rows
Modelagem com tidymodels em R

Resumindo os resultados da validação cruzada

A função collect_metrics() retorna um tibble

  • Os resultados podem ser resumidos com dplyr
    • Comece com rs_metrics
    • Forme grupos por valores de .metric
    • Calcule estatísticas resumo com summarize()
rs_metrics %>%

group_by(.metric) %>%
summarize(min = min(.estimate), median = median(.estimate), max = max(.estimate), mean = mean(.estimate), sd = sd(.estimate))
# A tibble: 3 x 6
 .metric   min  median   max   mean     sd
  <chr>   <dbl>  <dbl>  <dbl>  <dbl>   <dbl>
1 roc_auc 0.758  0.806  0.885  0.823   0.0466
2 sens    0.667  0.792  0.861  0.786   0.0642
3 spec    0.810  0.843  0.969  0.855   0.0502
Modelagem com tidymodels em R

Metodologia de validação cruzada

Modelos treinados com fit_resamples() não geram previsões para novos dados

  • A função predict() não aceita objetos de reamostragem

Finalidade de fit_resample()

  • Explorar e comparar o perfil de desempenho de diferentes tipos de modelo
  • Selecionar o melhor tipo e focar no ajuste do modelo
predict(leads_rs_fit,
        new_data = leads_test)

Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to 
  an object of class 
  "c('resample_results', 
      'tune_results',  
      'tbl_df', 
      'tbl', 'data.frame')"
Modelagem com tidymodels em R

Vamos praticar!

Modelagem com tidymodels em R

Preparing Video For Download...