การแปลงฟีเจอร์ที่ใช้บ่อย

Feature Engineering in R

Jorge Zazueta

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

การแปลงสองตระกูล

Box-Cox

  • ใช้แปลงตัวแปรที่ไม่เป็นการแจกแจงปกติให้ใกล้เคียงการแจกแจงปกติมากขึ้น
  • ครอบคลุมการแปลงหลายรูปแบบ เช่น ส่วนกลับ, log, รากที่สอง และรากที่สาม
  • ใช้ได้เฉพาะกับค่าที่เป็นบวกเท่านั้น

สมการการแปลง Box-Cox

Yeo-Johnson

  • มีคุณสมบัติคล้าย Box-Cox
  • รองรับค่าศูนย์และค่าลบได้
  • สำหรับ $y$ ที่เป็นบวก จะเทียบเท่ากับ Box-Cox ของ $y+1$

สมการการแปลง Yeo-Johnson

Feature Engineering in R

ชุดข้อมูล loans_num

glimpse(loans_num)
Rows: 480
Columns: 6
$ Loan_Status       <fct> N, Y, Y, Y, Y, Y, N, Y, N, Y, Y, N, Y, Y, N...
$ ApplicantIncome   <dbl> 4583, 3000, 2583, 6000, 5417, 2333, 3036, 4...
$ CoapplicantIncome <dbl> 1508, 0, 2358, 0, 4196, 1516, 2504, 1526, 1...
$ LoanAmount        <dbl> 128, 66, 120, 141, 267, 95, 158, 168, 349, ...
$ Loan_Amount_Term  <dbl> 360, 360, 360, 360, 360, 360, 360, 360, 360...
$ Credit_History    <fct> 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0...
Feature Engineering in R

การนำการแปลงไปใช้

สูตรพื้นฐาน

lr_recipe_plain <- # Define recipe
  recipe(Loan_Status ~., data = train)
lr_workflow_plain <- # Bundle workflows
  workflow() %>%
  add_model(lr_model) %>%
  add_recipe(lr_recipe_plain)
lr_fit_plain <- # fit and augment
  lr_workflow_plain %>%
  fit(train)

ประเมินประสิทธิภาพ

lr_aug_plain %>% # Assess
  class_evaluate(truth = Loan_Status,
                 estimate = .pred_class,
                 .pred_N)
# A tibble: 2 × 3
  .metric  .estimator .estimate
  <chr>    <chr>          <dbl>
1 accuracy binary         0.817
2 roc_auc  binary         0.641
Feature Engineering in R

การนำการแปลงไปใช้

สูตร Box-Cox

lr_recipe_BC <- # Define recipe
  recipe(Loan_Status ~., data = train) %>%
  step_BoxCox(all_numeric())
lr_workflow_BC <- # Bundle workflows
  workflow() %>%
  add_model(lr_model) %>%
  add_recipe(lr_recipe_BC)
lr_fit_BC <- # fit and augment
  lr_workflow_BC %>%
  fit(train)

ข้อความเตือน

Box-Cox ไม่สามารถประมวลผลค่าที่ไม่เป็นบวกได้

Warning messages:
1: Non-positive values in selected
variable. 
2: No Box-Cox transformation could be 
estimated for: `CoapplicantIncome`
Feature Engineering in R

การนำการแปลงไปใช้

สูตร Box-Cox (ครั้งที่สอง)

คราวนี้ยกเว้น CoappliantIncome เพื่อหลีกเลี่ยงข้อความเตือน

lr_recipe_BC <- # Define recipe
  recipe(Loan_Status ~., data = train) %>%
  step_BoxCox(all_numeric(), 
              -CoapplicantIncome)
lr_workflow_BC <- # Bundle workflows
  workflow() %>%
  add_model(lr_model) %>%
  add_recipe(lr_recipe_BC)
lr_fit_BC <- # fit and augment
  lr_workflow_BC %>%
  fit(train)

ประเมินประสิทธิภาพ

lr_aug_BC %>% # Assess
  class_evaluate(truth = Loan_Status,
                 estimate = .pred_class,
                 .pred_N)
# A tibble: 2 × 3
  .metric  .estimator .estimate
  <chr>    <chr>          <dbl>
1 accuracy binary         0.817
2 roc_auc  binary         0.599
Feature Engineering in R

การนำการแปลงไปใช้

สูตร Yeo-Johnson

lr_recipe_YJ <- # Define recipe
  recipe(Loan_Status ~., data = train) %>%
  step_YeoJohnson(all_numeric())
lr_workflow_YJ <- # Bundle workflows
  workflow() %>%
  add_model(lr_model) %>%
  add_recipe(lr_recipe_YJ)
lr_fit_YJ <- # fit and augment
  lr_workflow_YJ %>%
  fit(train)

ประเมินประสิทธิภาพ

lr_aug_YJ %>% # Assess
  class_evaluate(truth = Loan_Status,
                 estimate = .pred_class,
                 .pred_N)
# A tibble: 2 × 3
  .metric  .estimator .estimate
  <chr>    <chr>          <dbl>
1 accuracy binary         0.817
2 roc_auc  binary         0.700
Feature Engineering in R

มาฝึกกันเถอะ!

Feature Engineering in R

Preparing Video For Download...