Crearea de noi caracteristici folosind cunoștințele de domeniu

Ingineria caracteristicilor în R

Jorge Zazueta

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

Importanța cunoștințelor de domeniu

Cunoștințele de domeniu ne permit să identificăm și să creăm caracteristici relevante și utile pentru un model sau sarcină specifică.

Ingineria caracteristicilor presupune crearea de noi variabile de intrare din cele existente.

Exemple de cunoștințe de domeniu:

  • Financiar: Factorii determinanți ai falimentului
  • Medical: Condiții preexistente relevante pentru un tratament specific
  • Marketing: Caracteristici distinctive ale unui grup de consumatori
Ingineria caracteristicilor în R

Crearea variabilelor pe baza experienței profesionale

Dorim să prezicem anulările hoteliere pe baza următorului vector de caracteristici:

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

Caracteristici din datele brute

Putem genera caracteristici informative dinarrival_date.

Data de sosire poate fi descompusă în ziua săptămânii, săptămână, lună și sărbătoare

Acest proces devine rapid repetitiv. Este nevoie de automatizare!

Ingineria caracteristicilor în R

Cadrul tidymodels

Vom utiliza un flux de lucru bazat pe tidymodels, o colecție de pachete pentru modelare și învățare automată conform principiilor tidyverse (1), cu accent pe ingineria caracteristicilor.

Flux de lucru tidymodels: încărcarea datelor, declararea modelului, împărțirea datelor, definirea rețetei, integrarea în flux, antrenarea și evaluarea performanței.

Puteți afla mai multe la www.tidymodels.org

1 [Principiile directoare ale Tidyverse.](https://design.tidyverse.org/unifying-principles.html)
Ingineria caracteristicilor în R

Pregătirea datelor pentru analiză

Să începem prin pregătirea datelor.

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

Parametrul prop poate fi folosit pentru a modifica proporția date de antrenament/test (implicit este 3/4).

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

Verificați că seturile train și test au proporții similare de rezervări anulate.

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
Ingineria caracteristicilor în R

Construirea unui flux de lucru

Declarați modelul

lr_model <- logistic_reg()

Creați rețeta

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())

Afișați lr_recipe

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()
Ingineria caracteristicilor în R

Construirea unui flux de lucru

Combinați modelul și rețeta într-un obiect workflow.

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

Antrenați fluxul de lucru

lr_fit <- 
  lr_workflow %>%
  fit(data = train)
Ingineria caracteristicilor în R

Construirea unui flux de lucru

Putem folosi tidy(lr_fit) pentru a rezuma modelul nostru.

# 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
Ingineria caracteristicilor în R

Evaluarea performanței modelului

Putem evalua acum performanța modelului nostru.

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()

Curba ROC a modelului nostru.

Ingineria caracteristicilor în R

Să exersăm!

Ingineria caracteristicilor în R

Preparing Video For Download...