트리 기반 대치

R에서 대치(Imputation)로 결측치 다루기

Michal Oleszak

Machine Learning Engineer

트리 기반 대치 접근법

머신러닝 모델로 결측값을 예측합니다!

  • 비모수적 접근: 변수 간 관계에 대한 가정 없음.
  • 복잡한 비선형 패턴을 포착.
  • 단순 통계 모델보다 예측력이 좋은 경우가 많음.

본 강의: randomForest 기반 missForest 패키지 사용

R에서 대치(Imputation)로 결측치 다루기

의사결정나무

의사결정나무 도식. 예시 모델이 키와 몸무게 조합에 따라 당뇨 확률을 다르게 할당하는 과정을 보여줍니다.

R에서 대치(Imputation)로 결측치 다루기

랜덤 포레스트

랜덤 포레스트 작동 방식 도식. 원본 데이터에서 부트스트랩된 데이터셋과 무작위 열 부분집합을 만들고, 각 세트에 의사결정나무를 적합한 뒤 최종적으로 모든 트리를 집계합니다.

R에서 대치(Imputation)로 결측치 다루기

missForest 알고리즘

  1. 평균 대치로 결측값을 초기 추정합니다.
  2. 결측 비율이 적은 순으로 변수를 정렬합니다.
  3. 각 변수 x에 대해:
    • x의 관측값에 랜덤 포레스트 적합(다른 변수를 예측자로 사용).
    • 학습한 모델로 x의 결측값을 예측.
  4. 3단계를, 대치값이 거의 변하지 않을 때까지 반복합니다.
R에서 대치(Imputation)로 결측치 다루기

missForest 실습

nhanes %>% is.na() %>% colSums()
Age     Gender     Weight     Height   Diabetes    TotChol      Pulse PhysActive 
  0          0          9          8          1         85         32         26
library(missForest)
imp_res <- missForest(nhanes)
nhanes_imp  <- imp_res$ximp
nhanes_imp %>% is.na() %>% colSums()
Age     Gender     Weight     Height   Diabetes    TotChol      Pulse PhysActive 
  0          0          0          0          0          0          0          0
R에서 대치(Imputation)로 결측치 다루기

대치 오차

missForest()는 가방 밖(OOB) 대치 오차 추정을 제공합니다:

  • 연속형 변수: 정규화 평균제곱근오차(NRMSE).
  • 범주형 변수: 잘못 분류된 비율(PFC).

둘 다 값이 0에 가까울수록 좋고, 1에 가까우면 성능이 낮습니다.

imp_res <- missForest(nhanes)
imp_res$OOBerror
      NRMSE         PFC 
0.147687025 0.003676471
R에서 대치(Imputation)로 결측치 다루기

대치 오차

missForest()는 가방 밖(OOB) 대치 오차 추정을 제공합니다:

  • 연속형 변수: 정규화 평균제곱근오차(NRMSE).
  • 범주형 변수: 잘못 분류된 비율(PFC).

두 경우 모두 0에 가까울수록 좋고, 1 부근은 나쁩니다.

imp_res <- missForest(nhanes, variablewise = TRUE)
imp_res$OOBerror
    MSE       PFC       MSE       MSE       PFC       MSE       MSE       MSE 
0.00000   0.00000 285.79563  40.42142   0.00735   0.53444 129.03609   0.17576
R에서 대치(Imputation)로 결측치 다루기

속도-정확도 균형

여러 랜덤 포레스트를 학습하는 데는 시간이 많이 듭니다.

아이디어: 약간의 정확도를 포기하고 포레스트 크기를 줄여 계산 시간을 단축합니다.

  • 각 포레스트의 트리 수를 줄이기 (ntree 인자).
  • 분할에 사용하는 변수 수를 줄이기 (mtry 인자).

계산 시간 영향은 다릅니다:

  • ntree 감소는 선형적으로 줄어듭니다.
  • 변수가 많을수록 mtry 감소가 속도를 더 크게 높입니다.
R에서 대치(Imputation)로 결측치 다루기

실전 속도-정확도 균형

기본 설정:

start_time <- Sys.time()
imp_res <- missForest(nhanes)
end_time <- Sys.time()
print(imp_res$OOBerror)
print(end_time - start_time)
      NRMSE         PFC 
0.147687025 0.003676471
Time difference of 5.496582 secs

축소된 포레스트:

start_time <- Sys.time()
imp_res <- missForest(nhanes,
                      ntree = 10,
                      mtry = 2)
end_time <- Sys.time()
print(imp_res$OOBerror)
print(end_time - start_time)
      NRMSE         PFC 
0.162420139 0.007425743
Time difference of 0.516367 secs
R에서 대치(Imputation)로 결측치 다루기

Vamos praticar!

R에서 대치(Imputation)로 결측치 다루기

Preparing Video For Download...