特徴量エンジニアリングとは?

Rで学ぶ特徴量エンジニアリング

Jorge Zazueta

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

特徴量エンジニアリングとは?

特徴量エンジニアリングは、

  • 作成、
  • 変換、
  • 抽出、そして
  • 選択により

モデルの性能と解釈性を高める手法です。

時間に対する物体の高さ

# 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
Rで学ぶ特徴量エンジニアリング

なぜ特徴量を設計するのか?

まず高さの単回帰モデルを作ります。

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

可視化しておおまかな精度を確認します。

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

このモデルはデータを全く表せていません。

高さと時間の線形回帰。

当てはまりの悪さを示す、高さ vs. 時間の線形回帰。

Rで学ぶ特徴量エンジニアリング

mutate() の使い方

物体の高さは次の式で表される放物線運動に従います。

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

ここで $y$ は時刻 $t$ の高さ、$y_0$・$v_0$・$g$ はそれぞれ初期高さ、初速度、重力加速度です。

高さは時間と時間の二乗の双方に依存すると考えてモデル化します。

mutate() は、データフレームを第1引数に取り、追加する新しい変数を定義します。

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
Rで学ぶ特徴量エンジニアリング

作成した特徴量で予測する

新しい特徴量を元の特徴量と併せて、別の回帰モデルを作成します。

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

そして新しい予測を可視化します。

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

別モデルに頼らず大きく改善しました。

高さ vs. time と time_2

Rで学ぶ特徴量エンジニアリング

Passons à la pratique !

Rで学ぶ特徴量エンジニアリング

Preparing Video For Download...