R에서 tidymodels로 모델링하기
David Svancer
Data Scientist
collect_metrics()는 기본적으로 요약 결과를 제공합니다
summarize = FALSE를 지정하면 모든 하이퍼파라미터 튜닝 결과 제공dt_tuning %>%
collect_metrics(summarize = FALSE)
# A tibble: 150 x 8
id cost_complexity tree_depth min_n .metric ... .estimate .config
<chr> <dbl> <int> <int> <chr> ... <dbl> <chr>
Fold01 0.0000000758 14 39 sens ... 0.75 Model1
Fold01 0.0000000758 14 39 spec ... 0.906 Model1
Fold01 0.0000000758 14 39 roc_auc ... 0.888 Model1
..... ............ .. .. ...... ... ..... ......
Fold10 0.00380 5 36 roc_auc ... 0.789 Model5
collect_metrics()에서 summarise = FALSE를 선택하면 tibble을 반환합니다
dplyr로 결과 탐색 용이roc_auc 지표 선택id 열로 그룹화.estimate 요약 통계 계산dt_tuning %>% collect_metrics(summarize = FALSE) %>%filter(.metric == 'roc_auc') %>%group_by(id) %>%summarize(min_roc_auc = min(.estimate), median_roc_auc = median(.estimate), max_roc_auc = max(.estimate))
# A tibble: 10 x 4
id min_roc_auc median_roc_auc max_roc_auc
<chr> <dbl> <dbl> <dbl>
Fold01 0.830 0.885 0.888
Fold02 0.857 0.882 0.885
Fold03 0.818 0.836 0.836
...... .... .... ....
Fold10 0.762 0.790 0.813
show_best() 함수
metric의 평균값 기준 상위 n개 모델 표시Model1이 우승dt_tuning %>%
show_best(metric = 'roc_auc', n = 5)
# A tibble: 5 x 9
cost_complexity tree_depth min_n .metric .estimator mean n std_err .config
<dbl> <int> <int> <chr> <chr> <dbl> <int> <dbl> <chr>
0.0000000758 14 39 roc_auc binary 0.827 10 0.0147 Model1
0.00380 5 36 roc_auc binary 0.825 10 0.0146 Model5
0.0243 5 34 roc_auc binary 0.823 10 0.0147 Model2
0.00000443 11 8 roc_auc binary 0.816 10 0.00786 Model3
0.000000600 3 5 roc_auc binary 0.814 10 0.0131 Model4
select_best() 함수
dt_tuning 결과를 select_best()에 전달metric 선택
최적 모델과 하이퍼파라미터가 담긴 tibble 반환
best_dt_model <- dt_tuning %>% select_best(metric = 'roc_auc')best_dt_model
# A tibble: 1 x 4
cost_complexity tree_depth min_n .config
<dbl> <int> <int> <chr>
0.0000000758 14 39 Model1
finalize_workflow()는 튜닝 파라미터가 있는 모델 객체를 포함한 workflow를 최종화합니다
workflow 객체 전달
설정된 하이퍼파라미터가 포함된 workflow 객체 반환
final_leads_wkfl <- leads_tune_wkfl %>% finalize_workflow(best_dt_model)final_leads_wkfl
== Workflow ========================================
Preprocessor: Recipe
Model: decision_tree()
-- Preprocessor ------------------------------------
3 Recipe Steps
* step_corr()
* step_normalize()
* step_dummy()
-- Model --------------------------------------------
Decision Tree Model Specification (classification)
Main Arguments:
cost_complexity = 0.0000000758
tree_depth = 14
min_n = 39
Computational engine: rpart
최종화된 workflow는 last_fit()과 원본 데이터 분할 객체 leads_split로 학습할 수 있습니다
비하인드 스토리
recipe 학습 및 적용leads_final_fit <- final_leads_wkfl %>% last_fit(split = leads_split)leads_final_fit %>% collect_metrics()
# A tibble: 2 x 3
.metric .estimator .estimate
<chr> <chr> <dbl>
1 accuracy binary 0.771
2 roc_auc binary 0.793
R에서 tidymodels로 모델링하기