모형 기반 결측치 대체 접근법

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

Michal Oleszak

Machine Learning Engineer

모형 기반 대체

  • 각 변수를 다른 통계 모형으로 대체합니다.
  • 데이터의 알려진 관계를 반영할 수 있습니다.
R에서 대치(Imputation)로 결측치 다루기

모형 기반 대체 절차

  • 변수들을 반복합니다.
  • 각 변수에 대해 이를 설명하는 모형을 만듭니다.
  • 모형으로 결측값을 예측합니다.
  • 원래 결측이던 위치만 각 변수를 순환하며 대체합니다.
R에서 대치(Imputation)로 결측치 다루기

모형 기반 대체 단계별 진행

네 개 변수(A, B, C, D)와 다섯 행이 있는 데이터 프레임. 두 변수(A와 C)에 각 두 개의 결측이 있으며, 모두 다른 행에 위치.

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

모형 기반 대체 단계별 진행

네 개 변수(A, B, C, D)와 다섯 행이 있는 데이터 프레임. A의 결측값이 대체됨.

  1. A의 결측값을 예측합니다.
R에서 대치(Imputation)로 결측치 다루기

모형 기반 대체 단계별 진행

네 개 변수(A, B, C, D)와 다섯 행이 있는 데이터 프레임. A와 C의 결측값이 모두 대체됨.

  1. A의 결측값을 예측합니다.
  2. A에서 대체된 값을 관측값으로 간주하고 C의 결측값을 예측합니다.
R에서 대치(Imputation)로 결측치 다루기

모형 기반 대체 단계별 진행

네 개 변수(A, B, C, D)와 다섯 행이 있는 데이터 프레임. 더미 데이터로 채워져 있으며, C의 결측값이 대체됨.

  1. A의 결측값을 예측합니다.
  2. A에서 대체된 값을 관측값으로 간주하고 C의 결측값을 예측합니다.
  3. C에서 대체된 값을 관측값으로 간주하고, 원래 결측이던 A를 다시 예측합니다.
  4. 수렴할 때까지 반복합니다.
R에서 대치(Imputation)로 결측치 다루기

모형 선택 방법

각 변수의 모형은 변수 유형에 따라 다릅니다:

  • 연속형 변수 - 선형회귀
  • 이진 변수 - 로지스틱 회귀
  • 범주형 변수 - 다항 로지스틱 회귀
  • 계수형 변수 - 포아송 회귀
R에서 대치(Imputation)로 결측치 다루기

단일 선형회귀 대체

nhanes에서 HeightWeight를 선형모형으로 대체합니다:

library(simputation)
nhanes_imp <- impute_lm(nhanes, Height + Weight ~ .)

정말 대체되었는지 확인합니다:

nhanes_imp %>% 
  is.na() %>% 
  colSums()
Age     Gender     Weight     Height   Diabetes    TotChol      Pulse PhysActive 
  0          0         32         30          1         85         32         26
R에서 대치(Imputation)로 결측치 다루기

선형회귀 대체 실습

hotdeck으로 결측을 초기화하고 결측 위치를 저장합니다:

nhanes_imp <- hotdeck(nhanes)
missing_height <- nhanes_imp$Height_imp
missing_weight <- nhanes_imp$Weight_imp

HeightWeight를 5회 반복하며, 원래 결측이던 위치만 대체합니다:

for (i in 1:5) {
  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes_imp, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes_imp, Weight ~ Age + Gender + Height)
}
R에서 대치(Imputation)로 결측치 다루기

수렴 감지



for (i in 1:5) {

  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)


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

수렴 감지

diff_height <- c()
diff_weight <- c()
for (i in 1:5) {

  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)


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

수렴 감지

diff_height <- c()
diff_weight <- c()
for (i in 1:5) {
  prev_iter <- nhanes_imp
  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)


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

수렴 감지

diff_height <- c()
diff_weight <- c()
for (i in 1:5) {
  prev_iter <- nhanes_imp
  nhanes_imp$Height[missing_height] <- NA
  nhanes_imp <- impute_lm(nhanes, Height ~ Age + Gender + Weight)
  nhanes_imp$Weight[missing_weight] <- NA
  nhanes_imp <- impute_lm(nhanes, Weight ~ Age + Gender + Height)
  diff_height <- c(diff_height, mapc(prev_iter$Height, nhanes_imp$Height))
  diff_weight <- c(diff_weight, mapc(prev_iter$Weight, nhanes_imp$Weight))
}
R에서 대치(Imputation)로 결측치 다루기

수렴 감지

두 개 선이 있는 선 그래프로, Pulse와 TotChol 변수용. x축은 반복 횟수, y축은 반복 간 대체값의 평균 절대 백분율 변화를 표시. 첫 반복 후 두 변수 모두 변화가 있으나, 2회차부터 변화 없음.

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

선형회귀 대체를 연습해 봅시다!

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

Preparing Video For Download...