Alan bilgisini kullanarak yeni özellikler oluşturma

R'da Feature Engineering

Jorge Zazueta

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

Alan bilgisinin önemi

Alan bilgisi, belirli bir model veya görev için ilgili ve faydalı özellikleri belirlememizi ve oluşturmamızı sağlar.

Özellik mühendisliği, mevcut girdilerden yeni özellikler üretmektir.

Alan bilgisi örnekleri:

  • Finans: İflasın temel belirleyicileri
  • Tıp: Belirli bir tedavi için ilgili önceden var olan durumlar
  • Pazarlama: Bir tüketici grubunun ayırt edici özellikleri
R'da Feature Engineering

Mesleki deneyime dayalı değişkenler oluşturma

Aşağıdaki özellik vektörüne göre otel iptallerini tahmin etmek istiyoruz:

features <- 
c("IsCanceled", "LeadTime",
  "arrival_date",
  "StaysInWeekendNights",
  "StaysInWeekNights",
  "PreviousCancellations",
  "PreviousBookingsNotCanceled",
  "ReservedRoomType",
  "AssignedRoomType","BookingChanges",
  "DepositType","CustomerType",
  "ADR","TotalOfSpecialRequests")

Ham veriden özellikler

arrival_date üzerinden bilgilendirici özellikler üretebiliriz.

Varış tarihi, haftanın günü, hafta, ay ve tatil olarak ayrıştırılabilir

Ancak bu hızla zahmetli olur. Otomatikleştirmemiz gerekir!

R'da Feature Engineering

tidymodels çerçevesi

tidymodels tabanlı bir iş akışı kullanacağız: tidyverse ilkelerine dayalı modelleme ve makine öğrenmesi paketleri (1); odak noktamız özellik mühendisliği olacak.

Basit tidymodels iş akışı: veriyi yükle, modeli tanımla, veriyi ayır, recipe ayarla, iş akışında birleştir, iş akışını eğit ve performansı değerlendir.

Daha fazlası: www.tidymodels.org

1 [Tidyverse rehber ilkeleri.](https://design.tidyverse.org/unifying-principles.html)
R'da Feature Engineering

Analiz için veriyi hazırlama

Verilerimizi hazırlayarak başlayalım.

cancelations <- 
  cancelations %>% 
  mutate(across(where(is_character),as.factor))
set.seed(123)
split <- cancellations %>% 
    initial_split(
    strata = "IsCanceled")
train <- training(split)
test <- testing(split)

prop parametresi eğitim/test ayrımını değiştirir (varsayılan 3/4).

initial_split(data, prop = 3/4, strata = NULL)

train ve test kümelerinin iptal oranlarının benzer olduğunu doğrulayın.

train %>% 
  select(IsCanceled) %>% table() %>% 
  prop.table()

IsCanceled
        0         1 
0.5826946 0.4173054
test %>% 
  select(IsCanceled) %>% table() %>% 
  prop.table()

IsCanceled
        0         1 
0.5827788 0.4172212
R'da Feature Engineering

Bir iş akışı oluşturma

Modeli tanımlayalım

lr_model <- logistic_reg()

Bir recipe oluşturun

lr_recipe <- 
  recipe(IsCanceled ~., data = train) %>%
  update_role(Agent, new_role = "ID" ) %>%
  step_date(arrival_date, 
      features = c("dow", "week", "month")) %>%
  step_holiday(arrival_date, 
      holidays = timeDate::listHolidays("US")) %>%
  step_rm(arrival_date) %>%
  step_dummy(all_nominal_predictors())

lr_recipe yazdırın

DNT_CURLY_TAG_3

Recipe

Inputs:
      role #variables
        ID          1
   outcome          1

 predictor         13

Operations:
Date features from arrival_date
Holiday features from arrival_date
Variables removed arrival_date
Dummy variables from all_nominal_predictors()
R'da Feature Engineering

Bir iş akışı oluşturma

Modeli ve recipe’i bir workflow nesnesinde birleştirin.

lr_workflow <- 
  workflow()%>%
  add_model(lr_model)%>%
  add_recipe(lr_recipe)

İş akışını eğitin

lr_fit <- 
  lr_workflow %>%
  fit(data = train)
R'da Feature Engineering

Bir iş akışı oluşturma

Modelimizi özetlemek için tidy(lr_fit) kullanabiliriz.

# A tibble: 65 × 5
   term                        estimate std.error statistic   p.value
   <chr>                          <dbl>     <dbl>     <dbl>     <dbl>
 1 (Intercept)                 -1.92     0.228        -8.43 3.57e- 17
 2 LeadTime                     0.00414  0.000268     15.4  1.16e- 53
 3 StaysInWeekendNights         0.0860   0.0382        2.25 2.45e-  2
 4 StaysInWeekNights            0.0804   0.0185        4.34 1.40e-  5
 5 PreviousCancellations        2.39     0.147        16.2  2.45e- 59
 6 PreviousBookingsNotCanceled -0.440    0.0450       -9.77 1.45e- 22
 7 BookingChanges              -0.449    0.0463       -9.69 3.18e- 22
 8 ADR                          0.0104   0.000782     13.2  4.85e- 40
 9 TotalOfSpecialRequests      -0.727    0.0316      -23.0  5.29e-117
10 arrival_date_week            0.0245   0.0171        1.43 1.53e-  1
# … with 55 more rows
# ℹ Use `print(n = ...)` to see more rows
R'da Feature Engineering

Model performansını değerlendirme

Artık modelimizin performansını değerlendirebiliriz.

lr_aug <- lr_fit %>% augment(test)

bind_rows(
  lr_aug %>% 
  roc_auc(truth = IsCanceled,.pred_0),
  lr_aug %>% 
  accuracy(truth = IsCanceled,.pred_class))
# A tibble: 2 × 3
  .metric  .estimator .estimate
  <chr>    <chr>          <dbl>
1 roc_auc  binary         0.842
2 accuracy binary         0.782
lr_aug %>%
  roc_curve(truth = IsCanceled, .pred_0) %>%
  autoplot()

Modelimizin Alıcı İşletim Karakteristiği (ROC) Eğrisi.

R'da Feature Engineering

Hadi pratik yapalım!

R'da Feature Engineering

Preparing Video For Download...