데이터 변동성 복제

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

Michal Oleszak

Machine Learning Engineer

대치 데이터의 변동성

여백 플롯: "Height" 대 "Weight" 산점도에서 둘 중 하나라도 대치된 값은 다른 색으로 표시됨.

  • 대치값에 변동성이 없음.
  • 관측 데이터의 변동성을 대치에서도 재현해야 함.
  • 모형 기반 대치에서는 같은 예측변수면 같은 대치값이 나옴.
  • 해결책: 조건부분포에서 표본추출.
R에서 대치(Imputation)로 결측치 다루기

예측이란 무엇인가

대부분의 통계 모형은 반응변수의 조건부분포를 추정합니다:

$p(y|X)$

단일 예측 시, 조건부분포를 요약합니다:

  • 선형회귀: 조건부분포의 기댓값.
  • 로지스틱 회귀: 최대 확률 범주.

대신 이 분포에서 표본추출하면 변동성을 높일 수 있습니다.

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

조건부분포에서 표본추출

정규분포의 확률밀도함수 그래프. 평균 25가 강조됨.

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

조건부분포에서 표본추출

표: 로지스틱 회귀의 예측확률(모든 행 0.7), 0.5 초과 여부(TRUE), 임계값 기반 대치값(모두 1), 조건부분포에서 추출한 대치값(대부분 1, 일부 0).

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

로지스틱 회귀 대치

과제: 로지스틱 회귀로 nhanesPhysActive 대치

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
R에서 대치(Imputation)로 결측치 다루기

로지스틱 회귀 대치

과제: 로지스틱 회귀로 nhanesPhysActive 대치

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
R에서 대치(Imputation)로 결측치 다루기

로지스틱 회귀 대치

과제: 로지스틱 회귀로 nhanesPhysActive 대치

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
R에서 대치(Imputation)로 결측치 다루기

로지스틱 회귀 대치

과제: 로지스틱 회귀로 nhanesPhysActive 대치

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
preds <- ifelse(preds >= 0.5, 1, 0)
R에서 대치(Imputation)로 결측치 다루기

로지스틱 회귀 대치

과제: 로지스틱 회귀로 nhanesPhysActive 대치

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
preds <- ifelse(preds >= 0.5, 1, 0)
nhanes_imp[missing_physactive, "PhysActive"] <- preds[missing_physactive]
R에서 대치(Imputation)로 결측치 다루기

로지스틱 회귀 대치

대치값의 분포:

table(preds[missing_physactive])
 1 
26

관측 PhysActive의 분포:

table(nhanes$PhysActive)
  0   1 
181 610
R에서 대치(Imputation)로 결측치 다루기

범주 확률에서 표본추출

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
preds <- ifelse(preds >= 0.5, 1, 0)
nhanes_imp[missing_physactive, "PhysActive"] <- preds[missing_physactive]
R에서 대치(Imputation)로 결측치 다루기

범주 확률에서 표본추출

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")

nhanes_imp[missing_physactive, "PhysActive"] <- preds[missing_physactive]
R에서 대치(Imputation)로 결측치 다루기

범주 확률에서 표본추출

nhanes_imp <- hotdeck(nhanes)
missing_physactive <- is.na(nhanes$PhysActive)
logreg_model <- glm(PhysActive ~ Age + Weight + Pulse, 
                    data = nhanes_imp, family = binomial)
preds <- predict(logreg_model, type = "response")
preds <- rbinom(length(preds), size = 1, prob = preds)
nhanes_imp[missing_physactive, "PhysActive"] <- preds[missing_physactive]
R에서 대치(Imputation)로 결측치 다루기

범주 확률에서 표본추출

대치값의 분포:

table(preds[missing_physactive])
0  1 
5 21

관측 PhysActive의 분포:

table(nhanes$PhysActive)
  0   1 
181 610
R에서 대치(Imputation)로 결측치 다루기

데이터 변동성 복제를 연습해 봅시다!

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

Preparing Video For Download...