특성 엔지니어링

R에서 tidymodels로 모델링하기

David Svancer

Data Scientist

recipes 패키지로 특성 엔지니어링

recipes로 하는 특성 엔지니어링 워크플로

R에서 tidymodels로 모델링하기

변수 타입·역할 지정

 

열 역할 정의

  • 모든 변수에 결과(outcome)·예측 변수 역할 지정

변수 타입 결정

  • 수치형 데이터
  • 범주형 데이터

 

recipe() 함수로 수행

 

recipe 함수로 레시피 지정

R에서 tidymodels로 모델링하기

데이터 전처리 단계

필요한 전처리 단계 추가

  • 결측치 대치
  • 데이터 변환
    • 수치형 변수 중심화·스케일링
  • 새 변수 생성
    • 변수 비율 계산
  • 등 다양함

각 단계는 개별 step_*() 함수로 추가

 

step 함수로 데이터 변환 추가

1 https://recipes.tidymodels.org/reference/index.html
R에서 tidymodels로 모델링하기

전처리 단계 훈련

recipe 객체는 보통 학습 데이터에 대해 훈련됩니다

  • 데이터 변환을 추정
    • 수치형 열의 평균·표준편차로 중심화와 스케일링
    • 새 열 생성 공식을 저장해 새 데이터에 적용

 

prep() 함수로 레시피를 훈련합니다

 

prep 함수는 학습 데이터로 특성 엔지니어링 단계를 훈련합니다

R에서 tidymodels로 모델링하기

새 데이터에 레시피 적용

훈련된 전처리 변환을 모두 적용

  • 모델링용 학습·테스트 데이터에 적용
  • 향후 예측을 위한 새 데이터 소스에 적용
    • ML 알고리즘은 훈련 시와 동일한 데이터 형식을 요구합니다

 

bake() 함수로 레시피를 적용합니다

 

bake 함수는 훈련된 레시피를 새 데이터에 적용합니다

R에서 tidymodels로 모델링하기

간단한 특성 엔지니어링 파이프라인

리드 스코어링 데이터에서 total_time 로그 변환

  • 큰 값에 흔한 변환
  • 값 범위를 압축하고 변동성을 감소
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
R에서 tidymodels로 모델링하기

레시피 객체 만들기

recipe() 함수

  • 모델식
    • 변수 역할 지정
  • data 인수
    • 변수의 데이터 타입 결정

 

recipe 객체에 step_log()를 추가해 로그 변환 단계 삽입

  • 변환 변수 total_time 선택, 로그 밑 지정
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
R에서 tidymodels로 모델링하기

변수 역할과 타입 살피기

summary()recipe 객체 전달

  • 변수 정보를 담은 티블 생성
  • type
    • 변수의 데이터 타입 표시
    • 'nominal'은 범주형을 의미
  • role
    • 모델링용 변수 역할 표시
    • 입력 모델식에 따라 지정
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
R에서 tidymodels로 모델링하기

레시피 객체 훈련

prep() 함수

  • 첫 인수로 recipe 객체를 받음
  • training 인수
    • 전처리 단계를 학습할 데이터 지정

 

훈련된 recipe 객체 출력

  • 훈련된 단계는 [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]
R에서 tidymodels로 모델링하기

학습 데이터 변환

bake() 함수

  • 첫 인수는 훈련된 recipe 객체
  • new_data 인수
    • 훈련된 레시피를 적용할 데이터
  • 학습 데이터
    • leads_training으로 레시피를 훈련
    • 기본적으로 변환된 데이터는 prep()이 보관
    • new_dataNULL을 전달해 추출
  • 변환된 데이터를 담은 티블 반환
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
R에서 tidymodels로 모델링하기

새 데이터 변환

recipe 훈련에 쓰지 않은 데이터셋 변환

  • 데이터셋을 new_data 인수에 전달
  • 훈련된 recipe가 모든 단계를 새 데이터에 적용
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
R에서 tidymodels로 모델링하기

이제 굽기 시작해 봅시다!

R에서 tidymodels로 모델링하기

Preparing Video For Download...