모델 성능 시각화

R에서 tidymodels로 모델링하기

David Svancer

Data Scientist

혼동 행렬 그리기

autoplot()으로 히트맵

  • 혼동 행렬 객체를 autoplot()에 전달
  • type'heatmap'으로 설정
  • 가장 큰 빈도를 강조해 시각화

 

conf_mat(leads_results,
         truth = purchased,
         estimate = .pred_class) %>%

autoplot(type = 'heatmap')

혼동 행렬 히트맵

R에서 tidymodels로 모델링하기

모자이크 그래프

autoplot()으로 모자이크

  • type'mosaic'으로 설정
  • 각 세로 막대는 열의 실제 결과 값 100%를 의미
  • 시각화 내용
    • 민감도

 

conf_mat(leads_results,
         truth = purchased,
         estimate = .pred_class) %>% 
  autoplot(type = 'mosaic')

혼동 행렬 모자이크 그래프 민감도 막대

R에서 tidymodels로 모델링하기

모자이크 그래프

autoplot()으로 모자이크

  • type'mosaic'으로 설정
  • 각 세로 막대는 열의 실제 결과 값 100%를 의미
  • 다음을 시각화
    • 민감도
    • 특이도
conf_mat(leads_results,
         truth = purchased,
         estimate = .pred_class) %>% 
  autoplot(type = 'mosaic')

혼동 행렬 모자이크 그래프 특이도 막대

R에서 tidymodels로 모델링하기

확률 임계값

이진 분류의 기본 임계값은 0.5

  • 양성 클래스 확률이 0.5 이상이면 양성으로 예측함

 

leads_results

  • .pred_yes가 0.5 이상이면 tidymodelspredict().pred_class를 'yes'로 설정
leads_results
# A tibble: 332 x 4
   purchased .pred_class .pred_yes .pred_no
   <fct>     <fct>           <dbl>    <dbl>
 1 no        no             0.134     0.866
 2 yes       yes            0.729     0.271
 3 no        no             0.133     0.867
 4 no        no             0.0916    0.908
 5 yes       yes            0.598     0.402
 6 no        no             0.128     0.872
 7 yes       no             0.112     0.888
 8 no        no             0.169     0.831
 9 no        no             0.158     0.842
10 yes       yes            0.520     0.480
# ... with 322 more rows
R에서 tidymodels로 모델링하기

임계값별 성능 탐색

임계값 범위에서 분류 모델은 어떻게 성능이 달라지나?

  • 테스트 결과의 .pred_yes 열에 있는 고유 임계값들
    • 각 임계값에 대해 특이도와 민감도 계산

 

threshold specificity sensitivity
0 0 1
0.11 0.01 0.98
0.15 0.05 0.97
... ... ...
0.84 0.89 0.08
0.87 0.94 0.02
0.91 0.99 0
1 1 0
R에서 tidymodels로 모델링하기

임계값별 성능 시각화

ROC(수신자 조작 특성) 곡선

  • 확률 임계값 전반의 성능을 시각화

 

  • 테스트 결과의 고유 임계값에 대해 민감도 vs (1 - 특이도)

민감도 대 1-특이도

R에서 tidymodels로 모델링하기

임계값별 성능 시각화

ROC(수신자 조작 특성) 곡선

  • 확률 임계값 전반의 성능을 시각화

 

  • 테스트 결과의 고유 임계값에 대해 민감도 vs (1 - 특이도)
    • 실제 양성 중 정답 비율 vs 실제 음성 중 오답 비율(오분류 비율)

ROC 곡선

R에서 tidymodels로 모델링하기

ROC 곡선

최적 성능은 점 (0, 1)

  • 이상적으로는 모든 임계값에서 좌상단 가장자리 근처의 점을 생성해야 함

이상적인 ROC 곡선

R에서 tidymodels로 모델링하기

ROC 곡선

최적 성능은 점 (0, 1)

  • 이상적으로는 모든 임계값에서 좌상단 가장자리 근처의 점을 생성해야 함

 

부진한 성능

  • 모든 임계값에서 민감도와 (1 - 특이도)가 동일
    • 공정한 동전 던지기와 같은 무작위 예측에 해당

성능이 낮은 ROC 곡선

R에서 tidymodels로 모델링하기

ROC 곡선 요약

ROC 곡선 아래 면적(ROC AUC)은 분류 모델의 ROC 정보를 하나의 수치로 요약

성능을 학점처럼 해석 가능

  • A - [0.9, 1]
  • B - [0.8, 0.9)
  • C - [0.7, 0.8)
  • D - [0.6, 0.7)
  • F - [0.5, 0.6)

ROC 곡선 아래 면적

R에서 tidymodels로 모델링하기

임계값별 성능 계산

roc_curve() 함수

  • 첫 인수로 결과 tibble을 받음
  • 실제 정답 범주가 있는 truth
  • 양성 클래스 확률 열
    • leads_results.pred_yes

 

  • .pred_yes의 모든 고유 임계값에 대한 특이도와 민감도를 담은 tibble 반환
leads_results %>% 
  roc_curve(truth = purchased, .pred_yes)
# A tibble: 331 x 3
   .threshold specificity sensitivity
        <dbl>       <dbl>       <dbl>
 1     -Inf       0             1    
 2     0.0871     0             1    
 3     0.0888     0.00472       1    
 4     0.0893     0.00943       1    
 5     0.0896     0.0142        1    
 6     0.0902     0.0142        0.992
 7     0.0916     0.0142        0.983
 8     0.0944     0.0189        0.983
# ... with 323 more rows
R에서 tidymodels로 모델링하기

ROC 곡선 그리기

roc_curve() 결과를 autoplot()에 전달하면 ROC 곡선을 그림

 

leads_results %>% 
  roc_curve(truth = purchased, .pred_yes) %>% 
  autoplot()

R에서 tidymodels로 모델링하기

ROC AUC 계산

yardstickroc_auc() 함수로 ROC AUC 계산

  • 모델 결과 tibble
  • truth
  • 양성 클래스 확률 열
roc_auc(leads_results,
        truth = purchased,
        .pred_yes)
# A tibble: 1 x 3
  .metric  .estimator .estimate
  <chr>      <chr>       <dbl>
1 roc_auc    binary      0.763
R에서 tidymodels로 모델링하기

Ayo berlatih!

R에서 tidymodels로 모델링하기

Preparing Video For Download...