すべてをまとめる

Rで学ぶ特徴量エンジニアリング

Jorge Zazueta

Research Professor. Head of the Modeling Group at the School of Economics, UASLP

標準的なプロセスのモデリングフロー

典型的な高レベルのモデリング手順。

モデリングプロセスのフローチャート。

Rで学ぶ特徴量エンジニアリング

標準的なプロセスのモデリングフロー

典型的な高レベルのモデリング手順。

モデリングプロセスのワークフロー(特徴量エンジニアリングを強調)。

Rで学ぶ特徴量エンジニアリング

準備

まず基本的な前準備と分割を行います。

loans <- # 基本の前処理
  loans %>%
  mutate(across(where(is_character),
                  as_factor)) %>%
  mutate(across(Credit_History,
                  as_factor))

set.seed(123) # データ分割を設定
split <- initial_split(loans, 
        strata = Loan_Status)
test <- testing(split)
train <- training(split)
glimpse(train)
Rows: 460
Columns: 13
$ Loan_ID           <fct> LP001003...
$ Gender            <fct> Male, Ma...
$ Married           <fct> Yes, No,...
$ Dependents        <fct> 1, 0, 0,...
$ Education         <fct> Graduate...
$ Self_Employed     <fct> No, No, ...
$ ApplicantIncome   <dbl> 4583, 18...
$ CoapplicantIncome <dbl> 1508, 28...
$ LoanAmount        <dbl> 128, 114...
$ Loan_Amount_Term  <dbl> 360, 360...
$ Credit_History    <fct> 1, 1, 0,...
$ Property_Area     <fct> Rural, R...
$ Loan_Status       <fct> N, N, N,...
Rで学ぶ特徴量エンジニアリング

前処理

レシピは短くても複雑でも構いません。

recipe <- recipe(Loan_Status ~ .,
data = train) %>%
  update_role(Loan_ID, 
  new_role = "ID") %>%
  step_normalize(all_numeric_predictors()) %>% 
  step_impute_knn(all_predictors()) %>%
  step_dummy(all_nominal_predictors())
recipe
Recipe

入力:

      役割 #variables
        ID          1
   outcome          1
 predictor         11

処理:

all_numeric_predictors() の中心化とスケーリング
all_predictors() の k近傍法による補完
all_nominal_predictors() のダミー変数化
Rで学ぶ特徴量エンジニアリング

モデル

ワークフローを設定

lr_model <- logistic_reg() %>%
  set_engine("glmnet") %>%
  set_args(mixture = 1, penalty = tune())

lr_penalty_grid <- grid_regular(
  penalty(range = c(-3, 1)),
  levels = 30)

lr_workflow <-
  workflow() %>%
  add_model(lr_model) %>%
  add_recipe(recipe)
lr_workflow
--Workflow -------------------------------
前処理: Recipe
モデル: logistic_reg()

-- 前処理 -------------------------------
Recipe ステップ数: 3
- step_normalize()
- step_impute_knn()
- step_dummy()

-- モデル --------------------------------
ロジスティック回帰モデル仕様(分類)

主な引数:
  penalty = tune()
  mixture = 1
計算エンジン: glmnet
Rで学ぶ特徴量エンジニアリング

評価

Lasso の罰則をチューニング

lr_tune_output <- tune_grid( 
  lr_workflow,
  resamples = vfold_cv(train, v = 5),
  metrics = metric_set(roc_auc),
  grid = penalty_grid)

autoplot(tune_output)

ROC_AUC と正則化

ROC_AUC と正則化の関係を示すチャート。

Rで学ぶ特徴量エンジニアリング

評価

最終モデルの学習

best_penalty <-
select_by_one_std_err(lr_tune_output,
metric = 'roc_auc', desc(penalty)) 

lr_final_fit<-
finalize_workflow(lr_workflow, best_penalty) %>%
  fit(data = train)

lr_final_fit %>%
  augment(test) %>% 
  class_evaluate(truth = Loan_Status,
              estimate = .pred_class,
                         .pred_Y)

評価指標

# A tibble: 2 × 3
  .metric  .estimator .estimate
  <chr>    <chr>          <dbl>
1 accuracy binary         0.818
2 roc_auc  binary         0.813
Rで学ぶ特徴量エンジニアリング

Let's practice!

Rで学ぶ特徴量エンジニアリング

Preparing Video For Download...