수치 예측 변수

R에서 tidymodels로 모델링하기

David Svancer

Data Scientist

상관된 예측 변수

상관은 두 수치형 변수 간 선형 관계의 강도를 측정합니다

  • -1에서 1 사이
  • 예측 변수가 -1 또는 1에 가까우면 상관이 높습니다

    • 중복 정보를 제공합니다
    • 모델 적합 문제(다중공선성) 발생

     

ggplot(leads_training,
       aes(x = pages_per_visit, y = total_clicks)) + 
  geom_point()  + 
  labs(title = 'Total Clicks vs Average Page Visits',
       y = 'Total Clicks', x = 'Average Pages per Visit')

리드 스코어링 데이터에서 페이지당 방문 수 대비 총 클릭 수 산점도

R에서 tidymodels로 모델링하기

상관된 예측 변수 찾기

상관 행렬 계산

  • select_if() 함수에 데이터셋을 전달합니다
    • 인수로 is.numeric 제공
  • cor() 함수에 전달합니다
leads_training %>%

select_if(is.numeric) %>%
cor()
              total_visits total_time pages_per_visit total_clicks
total_visits        1.00       0.01            0.43         0.42
total_time          0.01       1.00            0.02         0.01
pages_per_visit     0.43       0.02            1.00         0.96
total_clicks        0.42       0.01            0.96         1.00
R에서 tidymodels로 모델링하기

상관된 예측 변수 처리

recipes로 다중공선성 제거

  • recipe()recipe 객체 지정
  • step_corr()에 전달
    • 모든 수치형 열 추가
      • 열 이름을 쉼표로 구분
    • 상관 threshold 제공
      • 절대값 기준
      • 임계값 0.9는 0.9 이상 또는 -0.9 이하의 상관을 제거합니다
leads_cor_rec <- recipe(purchased ~ .,
                        data = leads_training) %>%

step_corr(total_visits, total_time, pages_per_visit, total_clicks, threshold = 0.9)
leads_cor_rec
Data Recipe
Inputs:
      role #variables
   outcome          1
 predictor          6

Operations:
Correlation filter on total_visits,..., total_clicks
R에서 tidymodels로 모델링하기

유형별 예측 변수 선택

  • all_outcomes()
    • 결과 변수를 선택합니다
  • all_numeric()
    • 모든 수치형 변수를 선택합니다
      • 결과 변수가 수치형이면 포함됩니다

recipe 단계에서 수치 예측 변수를 선택하려면

  • step_*() 함수에 all_numeric()을 전달합니다
  • 결과 변수가 수치형이면 -all_outcomes()도 함께 전달합니다
leads_cor_rec <- recipe(purchased ~ .,
                        data = leads_training) %>%

step_corr(all_numeric(), threshold = 0.9)
leads_cor_rec
Data Recipe
Inputs:
      role #variables
   outcome          1
 predictor          6

Operations:
Correlation filter on all_numeric()
R에서 tidymodels로 모델링하기

레시피 학습과 적용

  • prep()으로 학습합니다
    • 학습용으로 leads_training 제공
  • bake()로 적용합니다
    • leads_test에서 pages_per_visit가 제거됩니다
    • 향후 모든 데이터에서도 pages_per_visit가 제거됩니다
leads_cor_rec %>% 

prep(training = leads_training) %>%
bake(new_data = leads_test)
# A tibble: 332 x 6
total_visits total_time total_clicks ... purchased
    <dbl>       <dbl>        <dbl>   ...   <fct>
 1   8          100           24     ...    no
 2   4          1346          22     ...    yes
 3   3          176           27     ...    no
 4   2          16            12     ...    no
 5   9          1022          12     ...    yes
# ... with 327 more rows
R에서 tidymodels로 모델링하기

정규화

수치형 변수 중심화와 표준화

  • 평균을 뺍니다
  • 표준편차로 나눕니다
  • 데이터를 표준편차 단위로 변환합니다
    • 변환된 변수는 평균 0, 표준편차 1이 됩니다

leads_trainingtotal_time 변수

  • 웹사이트에 1,273초는 평균 대비 1.19 표준편차 큽니다

 

leads_training의 total_time 변수를 정규화한 예시

R에서 tidymodels로 모델링하기

데이터 전처리 단계 결합하기

recipes로 수치 예측 변수 정규화

  • step_normalize()
    • 열 이름 또는 all_numeric() 선택자
    • 학습 데이터의 평균과 표준편차를 새 데이터에 적용

여러 step_*() 함수를 recipe에 추가할 수 있습니다

  • 순서가 중요합니다
leads_norm_rec <- recipe(purchased ~ .,
                         data = leads_training) %>%

step_corr(all_numeric(), threshold = 0.9) %>% step_normalize(all_numeric())
leads_norm_rec
Data Recipe
Inputs:
      role #variables
   outcome          1
 predictor          6

Operations:
Correlation filter on all_numeric()
Centering and scaling for all_numeric()
R에서 tidymodels로 모델링하기

테스트 데이터 변환

pages_per_vist가 제거되고 수치 예측 변수가 정규화됩니다

leads_norm_rec %>% 
  prep(training = leads_training) %>% 
  bake(new_data = leads_test)
# A tibble: 332 x 6
 total_visits  total_time  total_clicks  lead_source   us_location  purchased
      <dbl>      <dbl>        <dbl>        <fct>          <fct>      <fct>    
 1    0.864     -0.984     -0.360        direct_traffic   west        no       
 2   -0.151      1.33      -0.506        direct_traffic   northeast   yes      
 3   -0.405     -0.843     -0.140        organic_search   west        no       
 4   -0.659     -1.14      -1.24         email            midwest     no       
 5    1.12       0.725     -1.24         direct_traffic   west        yes           
# ... with 327 more rows
R에서 tidymodels로 모델링하기

연습해 봅시다!

R에서 tidymodels로 모델링하기

Preparing Video For Download...