Wat is feature engineering?

Feature engineering in R

Jorge Zazueta

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

Wat is feature engineering?

Feature engineering is de kunst en wetenschap van

  • creëren,
  • transformeren,
  • extraheren en
  • selecteren

van variabelen om modelprestatie en interpreteerbaarheid te verbeteren.

Hoogte van een object als functie van tijd

# A tibble: 100 × 2
    time height
   <dbl>  <dbl>
 1 0       0   
 2 0.101   3.85
 3 0.202  17.7 
 4 0.303  15.1 
 5 0.404  20.0 
 6 0.505  32.6 
 7 0.606  30.8 
 8 0.707  26.6 
 9 0.808  33.8 
10 0.909  39.2 
# ... with 90 more rows
# ℹ Use `print(n = ...)` to see more rows
Feature engineering in R

Waarom features engineeren?

We maken een simpel regressiemodel van hoogte

lr_height <- lm(height ~ time,
                data = height)

en plotten het om de nauwkeurigheid visueel te beoordelen.

df <- height %>% 
bind_cols(lr_pred = predict(lr_height))

df %>%
  ggplot(aes(x = time, y = height)) +
  geom_point() +
  geom_line(aes(y = lr_pred), 
            color = "blue", lwd = .75)+
    theme_classic()

Ons model stelt zwaar teleur bij het weergeven van de data!

Lineaire regressie van hoogte vs. tijd.

Linear regression of height vs. time illustrating lack of fit.

Feature engineering in R

mutate() gebruiken

De hoogte van een object volgt een parabolisch pad, gegeven door:

$y(t) = y_0 + v_0t - \frac{g}{2}t^2$.

Waarbij $y$ de hoogte op tijd $t$ is, en $y_0$, $v_0$ en $g$ respectievelijk de starthoogte, beginsnelheid en valversnelling zijn.

We kunnen het model fitten met hoogte als functie van tijd én tijd in het kwadraat.

mutate() neemt een data frame als eerste argument en de definitie van een nieuwe variabele die wordt toegevoegd.

df_2 <- df %>% mutate(time_2 = time^2)
# A tibble: 100 × 4
    time height lr_pred time_2
   <dbl>  <dbl>   <dbl>  <dbl>
 1 0       0       80.8 0     
 2 0.101   3.85    80.9 0.0102
 3 0.202  17.7     81.0 0.0408
 4 0.303  15.1     81.1 0.0918
Feature engineering in R

Voorspellen met de engineered feature

We maken een nieuw regressiemodel met onze nieuwe feature plus de originele.

lr_height_2 <- 
lm(height ~ time + time_2, data = df_2)

En we plotten de nieuwe voorspelling.

df_2 <- df_2 %>%
    bind_cols(lr2_pred = predict(lr_height_2))
df_2 %>%
  ggplot(aes(x = time, y = height)) +
  geom_point() +
  geom_line(aes(y = lr2_pred), 
      col = "blue", lwd = .75) +
  theme_classic()

Dat is een flinke verbetering zonder een ander model te gebruiken.

Hoogte vs. tijd en time_2

Feature engineering in R

Laten we oefenen!

Feature engineering in R

Preparing Video For Download...