Feature engineering

Modelleren met tidymodels in R

David Svancer

Data Scientist

Feature engineering met het recipes-pakket

Feature-engineeringworkflow met recipes

Modelleren met tidymodels in R

Variabeletype en rollen specificeren

 

Kolomrollen definiëren

  • Wijs alle variabelen de rol outcome of predictor toe

Variabeletype bepalen

  • Numeriek
  • Categorisch

 

Dit doe je met de functie recipe()

 

Een recipe specificeren met de recipe-functie

Modelleren met tidymodels in R

Preprocessingstappen voor data

Benodigde preprocessingstappen toevoegen

  • Imputatie van missende data
  • Datatransformaties
    • Centreren en schalen van numerieke variabelen
  • Nieuwe variabelen maken
    • Verhoudingen tussen variabelen berekenen
  • En nog veel meer...

Elke stap voeg je toe met een aparte step_*()-functie

 

Datatransformaties toevoegen met step-functies

1 https://recipes.tidymodels.org/reference/index.html
Modelleren met tidymodels in R

Preprocessingstappen trainen

recipe-objecten worden getraind op een gegevensbron, meestal de trainingsset

  • Datatransformaties worden geschat
    • Gemiddelde en standaarddeviatie van numerieke kolommen voor centreren en schalen
    • Formules voor nieuwe kolommen worden opgeslagen om op nieuwe data toe te passen

 

Recipes train je met de prep()-functie

 

De prep-functie traint feature-engineeringstappen met de trainingsset

Modelleren met tidymodels in R

Recipes toepassen op nieuwe data

Pas alle getrainde preprocessingtransformaties toe

  • Op de train- en testsets voor modelleren
  • Op nieuwe databronnen voor toekomstige voorspellingen
    • ML-algoritmen vereisen hetzelfde dataformaat als bij training voor nieuwe voorspellingen

 

Recipes pas je toe met de bake()-functie

 

De bake-functie past een getrainde recipe toe op nieuwe databronnen

Modelleren met tidymodels in R

Eenvoudige feature-engineeringpipeline

Logtransformeer total_time in lead-scoringdata

  • Veelgebruikte transformatie voor grote waarden
  • Verkleint de spreiding en reduceert variantie
leads_training
# A tibble: 996 x 7
   purchased  total_visits  total_time  pages_per_visit  total_clicks  lead_source    us_location
   <fct>          <dbl>       <dbl>           <dbl>          <dbl>         <fct>          <fct>      
 1 yes             7          1148            7              59        direct_traffic     west       
 2 no              5           228            2.5            25        email              southeast  
 3 no              7           481            2.33           21        organic_search     west       
 4 no              4           177            4              37        direct_traffic     west       
 5 no              2          1273            2              26        email              midwest         
# ... with 991 more rows
Modelleren met tidymodels in R

Een recipe-object opbouwen

De functie recipe()

  • Modelformule
    • Wijs variabelrollen toe
  • Argument data
    • Bepaalt datatypes van variabelen

 

Geef het recipe-object door aan step_log() om een logstap toe te voegen

  • Selecteer variabele total_time en specificeer de logbasis
leads_log_rec <- recipe(purchased ~ ., 
                       data = leads_training) %>% 

step_log(total_time, base = 10)
leads_log_rec
Data Recipe
Inputs:
      role #variables
   outcome          1
 predictor          6

Operations:

Log transformation on total_time
Modelleren met tidymodels in R

Variabelrollen en -types verkennen

Een recipe-object doorgeven aan summary()

  • Maakt een tibble met variabele-info
  • Kolom type
    • Geeft datatype van variabele
    • 'nominal' staat voor categorische variabelen
  • Kolom role
    • Geeft modelrollen weer
    • Toegekend op basis van de modelformule
leads_log_rec %>% 
  summary()
# A tibble: 7 x 4
  variable        type     role       source  
  <chr>           <chr>    <chr>      <chr>   
1 total_visits    numeric  predictor  original
2 total_time      numeric  predictor  original
3 pages_per_visit numeric  predictor  original
4 total_clicks    numeric  predictor  original
5 lead_source     nominal  predictor  original
6 us_location     nominal  predictor  original
7 purchased       nominal  outcome    original
Modelleren met tidymodels in R

Een recipe-object trainen

De functie prep()

  • Neemt een recipe-object als eerste argument
  • Argument training
    • Specificeert de data waarop stappen getraind worden

 

Een getraind recipe-object printen

  • Getrainde stappen staan als [trained]
leads_log_rec_prep <- leads_log_rec %>% 
  prep(training = leads_training)
leads_log_rec_prep
Data Recipe
Inputs:
      role #variables
   outcome          1
 predictor          6

Training data contained 996 data points and 
no missing data.

Operations:
Log transformation on total_time [trained]
Modelleren met tidymodels in R

De trainingsdata transformeren

De functie bake()

  • Eerste argument is een getraind recipe-object
  • Argument new_data
    • Data waarop de getrainde recipe wordt toegepast
  • Trainingsdata
    • leads_training trainde de recipe
    • Standaard bewaart prep() de getransformeerde data
    • Geef NULL door aan new_data om die op te vragen
  • Geeft een tibble met getransformeerde data terug
leads_log_rec_prep %>% 
  bake(new_data = NULL)
# A tibble: 996 x 7
  total_visits total_time ... us_location  purchased
    <dbl>       <dbl>     ...   <fct>       <fct>
 1     7        3.06      ...   west         yes
 2     5        2.36      ...   southeast    no
 3     7        2.68      ...   west         no
 4     4        2.25      ...   west         no
 5     2        3.10      ...   midwest      no
# ... with 991 more rows
Modelleren met tidymodels in R

Nieuwe data transformeren

Datasets transformeren die niet tijdens recipe-training zijn gebruikt

  • Geef de dataset door aan het argument new_data
  • De getrainde recipe past alle stappen toe op nieuwe bronnen
leads_log_rec_prep %>% 
  bake(new_data = leads_test)
# A tibble: 332 x 7
 total_visits  total_time ... us_location  purchased
     <dbl>       <dbl>    ...  <fct>       <fct>
 1     8          2       ...  west         no
 2     4          3.13    ...  northeast    yes
 3     3          2.25    ...  west         no
 4     2          1.20    ...  midwest      no
 5     9          3.01    ...  west         yes
# ... with 327 more rows
Modelleren met tidymodels in R

Aan de bak!

Modelleren met tidymodels in R

Preparing Video For Download...