モデル性能の可視化

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 列にある一意のしきい値
    • 各しきい値で特異度と感度を算出

 

しきい値 特異度 感度
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 情報を1つの数値に要約します

成績評価風の目安

  • 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 によるモデリング

演習に進みましょう!

R での tidymodels によるモデリング

Preparing Video For Download...