R로 배우는 Feature Engineering
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
높이에 대한 단순 회귀 모델을 만듭니다
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()
이 모델은 데이터를 전혀 설명하지 못합니다!
시간 대비 높이의 선형회귀

물체의 높이는 다음 공식의 포물선 경로를 따릅니다.
$y(t) = y_0 + v_0t - \frac{g}{2}t^2$.
여기서 $y$는 시각 $t$에서의 높이, $y_0$, $v_0$, $g$는 각각 초기 높이, 초기 속도, 중력가속도입니다.
높이가 시간과 시간의 제곱 모두에 의존함을 반영하여 모델을 적합할 수 있습니다.
mutate()는 첫 번째 인수로 데이터 프레임을 받고, 데이터 프레임에 추가할 새 변수 정의를 받습니다.
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
새 특성과 기존 특성을 함께 사용해 회귀 모델을 하나 더 만듭니다.
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()
다른 모델로 바꾸지 않고도 큰 개선입니다.
시간 및 time_2에 따른 높이

R로 배우는 Feature Engineering