機械学習ワークフロー

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

David Svancer

Data Scientist

決定木による分類

決定木は予測子空間を長方形領域に分割する

再帰的二分割

  • 予測子空間を非重複の長方形領域に分割するアルゴリズム

リードスコアリングの散布図

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

決定木による分類

決定木は予測子空間を長方形領域に分割する

再帰的二分割

  • 予測子空間を非重複の長方形領域に分割するアルゴリズム
  • 分割は反復的に追加
    • 水平または垂直のカットポイント

最初の決定木分割の散布図

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

決定木による分類

決定木は予測子空間を長方形領域に分割する

再帰的二分割

  • 予測子空間を非重複の長方形領域に分割するアルゴリズム
  • 分割は反復的に追加
    • 水平または垂直のカットポイント

2回目の決定木分割の散布図

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

決定木による分類

決定木は予測子空間を長方形領域に分割する

再帰的二分割

  • 予測子空間を非重複の長方形領域に分割するアルゴリズム
  • 分割は反復的に追加
    • 水平または垂直のカットポイント

3回目の決定木分割を示す散布図

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

決定木による分類

決定木は予測子空間を長方形領域に分割する

再帰的二分割

  • 予測子空間を非重複の長方形領域に分割するアルゴリズム
  • 分割は反復的に追加
    • 水平または垂直のカットポイント

 

明確な長方形領域を生成

  • 分類では、過半数クラスを予測

4つの長方形予測領域の散布図

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

木構造の図

  • 内部ノード
    • 決定木の分割(濃色の枠)
  • 終端ノード
    • これ以上分割されない領域
    • 緑と紫の枠

決定木の図

内部ノードは破線、終端ノードは強調表示された長方形領域

4つの長方形予測領域の散布図

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

モデル指定

parsnipでのモデル指定

  • decision_tree()
    • parsnipの決定木モデル用インターフェース
    • 一般的なエンジンは'rpart'
    • モードは'classification'または'regression'
      • リードスコアリングには'classification'が必要
dt_model <- decision_tree() %>% 

set_engine('rpart') %>%
set_mode('classification')
R での tidymodels によるモデリング

特徴量エンジニアリングのレシピ

リードスコアリング用データの変換

  • recipeオブジェクトに定義
    • 多重共線性を除去
    • 数値予測子を正規化
    • 名義予測子をダミー化

管理するRオブジェクトは2つ

  • parsnipモデルとrecipeの指定
  • 1つにまとめると運用が容易
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()
R での tidymodels によるモデリング

モデルとレシピの結合

workflowsパッケージはモデリング工程を簡素化するためのもの

  • parsnipモデルとrecipeを1つのworkflowに結合

 

workflow()で初期化

  • add_model()でモデルを追加
  • add_recipe()recipeを追加
    • 学習済みではなく「指定」である必要あり
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
R での tidymodels によるモデリング

ワークフローでの学習

workflowオブジェクトの学習

  • last_fit()workflowとデータ分割オブジェクトを渡す
  • 評価結果はcollect_metrics()で確認

舞台裏

  • 学習用・テスト用データを作成
  • recipeを学習し適用
  • 決定木を学習データで訓練
  • テストデータで予測と指標を算出
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
R での tidymodels によるモデリング

予測の収集

last_fit()で学習したworkflowcollect_predictions()に渡せる

  • テストデータでの詳細結果を生成
  • これまで同様、yardstick関数でカスタム指標を評価可能
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
R での tidymodels によるモデリング

カスタム指標の検討

metric_set()でカスタム指標セットを作成

  • ROC曲線下面積、感度、特異度

 

予測データをleads_metrics()に渡して指標を計算

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
R での tidymodels によるモデリング

ローン延滞データセット

銀行の個人向けローンの財務データ

  • 目的変数は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
R での tidymodels によるモデリング

ワークフローを作って練習しましょう!

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

Preparing Video For Download...