Rで学ぶ特徴量エンジニアリング
Jorge Zazueta
Research Professor. Head of the Modeling Group at the School of Economics, UASLP
典型的な高レベルのモデリング手順。

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

まず基本的な前準備と分割を行います。
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,...
レシピは短くても複雑でも構いません。
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() のダミー変数化
ワークフローを設定
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
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 と正則化

最終モデルの学習
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で学ぶ特徴量エンジニアリング