数値予測子

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

David Svancer

Data Scientist

相関した予測子変数

相関は2つの数値変数間の線形関係の強さを測る

  • -1 から 1 の範囲
  • -1 または 1 に近い高相関の予測子

    • 冗長な情報を提供
    • モデル当てはめの問題(多重共線性)

     

ggplot(leads_training,
       aes(x = pages_per_visit, y = total_clicks)) + 
  geom_point()  + 
  labs(title = 'Total Clicks vs Average Page Visits',
       y = 'Total Clicks', x = 'Average Pages per Visit')

リードスコアリングデータにおけるページ/訪問数と総クリック数の散布図

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

相関した予測子の特定

相関行列を計算

  • データセットを select_if() に渡す
    • 引数に is.numeric を指定
  • cor() に渡す
leads_training %>%

select_if(is.numeric) %>%
cor()
              total_visits total_time pages_per_visit total_clicks
total_visits        1.00       0.01            0.43         0.42
total_time          0.01       1.00            0.02         0.01
pages_per_visit     0.43       0.02            1.00         0.96
total_clicks        0.42       0.01            0.96         1.00
R での tidymodels によるモデリング

相関した予測子の処理

recipes で多重共線性を除去

  • recipe()recipe オブジェクトを作成
  • step_corr() に渡す
    • すべての数値列を追加
      • 列名はカンマ区切り
    • 相関の threshold を指定
      • 絶対値で判定
      • 0.9 は 0.9以上 と -0.9以下 を削除
leads_cor_rec <- recipe(purchased ~ .,
                        data = leads_training) %>%

step_corr(total_visits, total_time, pages_per_visit, total_clicks, threshold = 0.9)
leads_cor_rec
Data Recipe
Inputs:
      role #variables
   outcome          1
 predictor          6

Operations:
Correlation filter on total_visits,..., total_clicks
R での tidymodels によるモデリング

型で予測子を選択

  • all_outcomes()
    • 目的変数を選択
  • all_numeric()
    • すべての数値変数を選択
      • 目的変数が数値なら含まれる

recipe の手順で数値予測子を選ぶには

  • step_*()all_numeric() を渡す
  • 目的変数が数値のときは -all_outcomes() も渡す
leads_cor_rec <- recipe(purchased ~ .,
                        data = leads_training) %>%

step_corr(all_numeric(), threshold = 0.9)
leads_cor_rec
Data Recipe
Inputs:
      role #variables
   outcome          1
 predictor          6

Operations:
Correlation filter on all_numeric()
R での tidymodels によるモデリング

レシピの学習と適用

  • prep() で学習
    • 学習用に leads_training を指定
  • bake() で適用
    • pages_per_visitleads_test から削除
    • 今後のデータでも pages_per_visit は削除
leads_cor_rec %>% 

prep(training = leads_training) %>%
bake(new_data = leads_test)
# A tibble: 332 x 6
total_visits total_time total_clicks ... purchased
    <dbl>       <dbl>        <dbl>   ...   <fct>
 1   8          100           24     ...    no
 2   4          1346          22     ...    yes
 3   3          176           27     ...    no
 4   2          16            12     ...    no
 5   9          1022          12     ...    yes
# ... with 327 more rows
R での tidymodels によるモデリング

正規化

数値変数の中心化と標準化

  • 平均を引く
  • 標準偏差で割る
  • データを標準偏差単位に変換
    • 変換後は平均0・標準偏差1

leads_trainingtotal_time

  • Web 滞在1,273秒は平均より1.19標準偏差大きい

 

leads_training の total_time を正規化する例

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

前処理ステップの組み合わせ

recipes で数値予測子を正規化

  • step_normalize()
    • 列名または all_numeric() を指定
    • 学習データの平均・標準偏差を新データに適用

複数の step_*()recipe に追加可能

  • 順序が重要
leads_norm_rec <- recipe(purchased ~ .,
                         data = leads_training) %>%

step_corr(all_numeric(), threshold = 0.9) %>% step_normalize(all_numeric())
leads_norm_rec
Data Recipe
Inputs:
      role #variables
   outcome          1
 predictor          6

Operations:
Correlation filter on all_numeric()
Centering and scaling for all_numeric()
R での tidymodels によるモデリング

テストデータの変換

pages_per_vist は削除され、数値予測子は正規化される

leads_norm_rec %>% 
  prep(training = leads_training) %>% 
  bake(new_data = leads_test)
# A tibble: 332 x 6
 total_visits  total_time  total_clicks  lead_source   us_location  purchased
      <dbl>      <dbl>        <dbl>        <fct>          <fct>      <fct>    
 1    0.864     -0.984     -0.360        direct_traffic   west        no       
 2   -0.151      1.33      -0.506        direct_traffic   northeast   yes      
 3   -0.405     -0.843     -0.140        organic_search   west        no       
 4   -0.659     -1.14      -1.24         email            midwest     no       
 5    1.12       0.725     -1.24         direct_traffic   west        yes           
# ... with 327 more rows
R での tidymodels によるモデリング

Passons à la pratique !

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

Preparing Video For Download...