1 도입 — Rubin 1987 의 혁신
Donald B. Rubin 의 1987 Multiple Imputation for Nonresponse in Surveys 가 결측 처리의 표준 을 만들었다. 핵심: 결측을 여러 번 다르게 대체하여 불확실성 반영.
이 글은 (a) MI 의 절차, (b) Rubin’s rules 통합, (c) 다변량 MI (MICE), (d) 실무 권장을 다룬다.
2 Multiple Imputation 의 정의
결측 자료를 여러 다른 값 으로 \(M\) 회 대체 (보통 \(M = 5 \sim 20\)). 각 imputed dataset 분석 후 결과 통합.
3 단계:
- Imputation: 결측을 \(M\) 회 다른 값으로 대체 → \(M\) 개 완전 자료
- Analysis: 각 자료에서 분석 (회귀, 검정 등)
- Pooling: \(M\) 개 결과 통합 (Rubin’s rules)
2.1 MI 의 통계적 정당성
Rubin: MI 는 결측의 사후 예측 분포 (posterior predictive distribution) 에서 표집. 베이즈 추론의 응용.
작동 조건:
- MAR 또는 MCAR (Imputation model 에 결측 메커니즘 반영 시)
- Imputation model 이 적절히 명시
2.2 왜 여러 번 대체하는가
단일 대체의 문제: 결측 불확실성 무시 → SE 과소.
MI 의 해법: 변동 을 가진 다중 대체 → SE 가 결측 불확실성 반영.
비유: 모르는 정답을 5 번 다르게 추측하고, 5 번의 결과를 평균 + 변동도 측정.
- 추측이 모두 비슷 → 결측이 예측 가능 → SE 작음
- 추측이 매우 다름 → 결측이 불확실 → SE 큼
이 불확실성 측정 이 단일 대체 (single imputation) 가 못하는 것.
A/B 테스트의 segment 분석에서 일부 사용자 정보 결측 → MI 로 5 번 대체. 효과 추정의 진정한 불확실성 반영.
3 MI 절차 — 단변량 사례
3.1 Step 1 — Imputation
결측 변수 \(X\) 의 모형:
\[ X_{\text{missing}} = \beta_0 + \beta_1 Z_1 + \cdots + \beta_p Z_p + \varepsilon \]
다른 변수 \(Z\) 들로 회귀 모형. 베이즈 또는 부트스트랩으로 모수의 사후 분포 추출.
3.2 Step 2 — \(M\) 회 반복
각 반복:
- 모수 분포에서 \(\hat{\beta}\) 추출
- \(\varepsilon\) 분포에서 무작위 잔차 추가
- 결측값 = \(\hat{\beta}_0 + \hat{\beta}_1 Z_1 + \cdots + \varepsilon\)
이 절차로 \(M\) 개 다른 imputed dataset.
3.3 Step 3 — Pooling (Rubin’s Rules)
각 imputed dataset 에서 분석 → \(M\) 개 추정값 \(\hat{\theta}_m\), \(\widehat{\text{Var}}(\hat{\theta}_m)\).
점추정 (\(M\) 개 평균):
\[ \bar{\hat{\theta}} = \frac{1}{M} \sum_{m=1}^{M} \hat{\theta}_m \]
Within-imputation variance:
\[ \bar{V}_W = \frac{1}{M} \sum_{m=1}^{M} \widehat{\text{Var}}(\hat{\theta}_m) \]
Between-imputation variance:
\[ V_B = \frac{1}{M-1} \sum_{m=1}^{M} (\hat{\theta}_m - \bar{\hat{\theta}})^2 \]
Total variance:
\[ V_T = \bar{V}_W + \left(1 + \frac{1}{M}\right) V_B \]
95 % CI:
\[ \bar{\hat{\theta}} \pm t_{\nu} \cdot \sqrt{V_T} \]
여기서 \(\nu\) 는 보정된 자유도.
3.4 Total Variance 의 의미
\(V_T\) 가 결측의 두 가지 불확실성 합산:
- \(\bar{V}_W\): 각 imputation 내 표본 불확실성 (자료가 완전했어도 있을)
- \(V_B\): imputation 간 변동 (결측 자체의 불확실성)
이 결합 이 단일 대체와의 차이.
4 다변량 MI — MICE 알고리즘
4.1 동기
여러 변수가 결측인 경우. 각 변수가 다른 변수 로 의존.
4.2 MICE (Multivariate Imputation by Chained Equations)
각 결측 변수를 다른 변수 로 회귀. 순차 반복:
- 각 변수의 결측을 임시값 (평균 등) 으로 초기화
- 변수 \(X_1\): \(X_1 \sim \text{regress}(X_2, X_3, \ldots, X_p)\) → 결측 갱신
- 변수 \(X_2\): \(X_2 \sim \text{regress}(X_1, X_3, \ldots, X_p)\) → 결측 갱신
- … 모든 변수 한 번씩
- 수렴까지 1 ~ 4 반복
각 반복이 full conditional 모형.
4.3 사용 도구
- Python:
sklearn.experimental.IterativeImputer,miceforest - R:
mice패키지 (van Buuren) — 표준 - Stata:
mi impute chained
4.4 사례
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
import pandas as pd
import numpy as np
# 가상 자료 (결측 있음)
np.random.seed(42)
n = 1000
df = pd.DataFrame({
'age': np.random.uniform(20, 80, n),
'bmi': np.random.normal(25, 5, n),
'income': np.random.lognormal(10, 0.5, n),
'outcome': np.random.normal(50, 10, n)
})
# 일부 결측 추가
df.loc[np.random.choice(n, 100, replace=False), 'bmi'] = np.nan
df.loc[np.random.choice(n, 80, replace=False), 'income'] = np.nan
# MICE
imputer = IterativeImputer(max_iter=10, random_state=42, sample_posterior=True)
# 다중 대체 (5 회)
imputed_datasets = []
for m in range(5):
imputer_m = IterativeImputer(max_iter=10, random_state=m, sample_posterior=True)
imputed = pd.DataFrame(imputer_m.fit_transform(df), columns=df.columns)
imputed_datasets.append(imputed)
# 각 imputed dataset 에서 분석
import statsmodels.api as sm
estimates = []
ses = []
for imputed in imputed_datasets:
X = sm.add_constant(imputed[['age', 'bmi', 'income']])
model = sm.OLS(imputed['outcome'], X).fit()
estimates.append(model.params['bmi'])
ses.append(model.bse['bmi'])
# Rubin's rules
M = 5
theta_bar = np.mean(estimates)
V_W = np.mean(np.array(ses)**2)
V_B = np.var(estimates, ddof=1)
V_T = V_W + (1 + 1/M) * V_B
# 95 % CI
import scipy.stats as stats
df_pool = (M - 1) * (1 + V_W / ((1 + 1/M) * V_B))**2 # Barnard-Rubin
ci = (theta_bar - stats.t.ppf(0.975, df_pool) * np.sqrt(V_T),
theta_bar + stats.t.ppf(0.975, df_pool) * np.sqrt(V_T))
print(f"BMI 계수 점추정: {theta_bar:.4f}")
print(f"Total SE: {np.sqrt(V_T):.4f}")
print(f"95 % CI: ({ci[0]:.4f}, {ci[1]:.4f})")이 코드가 MICE + Rubin’s rules 의 전체 절차.
5 When Worth — MI 가 가치 있을 때
Woodward Ch.14.13 의 when worth 결정 트리:
결측 처리 결정:
↓
결측률?
< 5 %, MCAR → Listwise deletion (간단)
5 % 이상 → MI 권장
↓
결측 메커니즘?
MCAR → Listwise OK, MI 안전
MAR → MI 필수
MNAR → MI + 민감도 분석
↓
분석 형태?
단순 기술 → Mean imputation 가능 (limit)
회귀·검정 → MI
복잡 모형 (mixed, longitudinal) → MI
↓
표본 크기?
매우 큰 자료 (n > 10000) → MI 비싸지만 가능
작은 자료 → MI + 신중
6 \(M\) 의 선택
\(M\) (imputation 횟수) 결정:
| \(M\) | 사용 시점 |
|---|---|
| 5 | 표준 (Rubin 1987 권장) |
| 10 | 결측률 높음 (20 % +) |
| 20 ~ 50 | 정밀 분석 (논문) |
| 100+ | 매우 작은 표본 또는 매우 정밀 |
큰 \(M\) 일수록 정확성 향상, 계산 비용 증가. 수확 체감.
7 진단 도구
7.1 Convergence
MICE 반복이 수렴 했는지 확인. 평균/분산이 안정.
7.2 분포 비교
Imputed 값과 관측 값의 분포 비교. 너무 다르면 모형 부적절.
7.3 Sensitivity Analysis
다른 imputation model 또는 \(M\) 으로 결과 비교.
8 A/B 테스트의 응용
8.1 시나리오 — 사용자 segment 결측
# 사용자 자료에 일부 segment 결측 (예: tenure 변수의 20 %)
import pandas as pd
import numpy as np
n = 5000
df = pd.DataFrame({
'variant': np.random.choice([0, 1], n),
'age': np.random.uniform(18, 70, n),
'tenure': np.random.uniform(0, 5, n), # 일부 결측
'revenue': np.random.normal(100, 30, n)
})
# 결측 (MAR — 신규 사용자에서 더 자주 결측)
mask = np.random.random(n) < 0.05 + 0.15 * (df['age'] < 25)
df.loc[mask, 'tenure'] = np.nan
# MI + 분석
# (위 코드 패턴 적용)8.2 시나리오 — 시간 결측 (time-series)
연속 측정의 일부 시점 결측. MICE 의 시계열 변형 사용.
9 MI 의 한계
9.1 한계 1 — Imputation Model 의존
MI 의 정확성은 imputation model 의 적절성 에 의존. 잘못된 모형 → 잘못된 imputation.
9.2 한계 2 — MNAR 처리
순수 MI 는 MAR 가정. MNAR 에서는 추가 모델링 필요.
9.3 한계 3 — 계산 비용
큰 자료 + 많은 변수 + 큰 \(M\) → 시간 소요.
9.4 한계 4 — 모형 호환성
분석 모형과 imputation 모형이 호환 해야 함. 예: 이차항 사용 시 imputation 도 이차 포함.
10 CONSORT 와 MI
CONSORT 권고 (임상시험):
- 결측 자료의 처리 방법 명시
- Sensitivity analysis 보고
- Primary 분석은 ITT (또는 modified ITT)
MI 가 ITT 분석의 표준 도구.
11 MI 의 자세한 절차
11.1 Imputation Model 선택
각 변수의 결측을 어떤 모형으로 대체할지:
| 변수 유형 | 권장 모형 |
|---|---|
| 연속 (정규) | 선형 회귀 |
| 연속 (비정규) | Predictive Mean Matching (PMM) |
| 이진 | Logistic 회귀 |
| 순서형 | Ordered logistic |
| 명목형 | Multinomial logistic |
| 카운트 | Poisson 또는 negative binomial |
각 변수 유형에 맞는 적절한 분포.
11.2 Predictive Mean Matching (PMM)
# PMM 의 단순 절차
# 1. 결측 자료의 *예측값* 계산
# 2. 같은 *예측값* 의 관측 자료에서 *실제 값* 무작위 선택
# 3. 그 값으로 결측 대체
# 장점: 분포 형태 보존 (변환 가정 X)
# 단점: 작은 자료에서 변동 작음PMM 이 비정규 자료의 표준. R mice 의 기본값.
11.3 Convergence Diagnostics
MICE 의 반복이 수렴 했는지 진단.
11.4 진단 — Imputed vs Observed
Imputed 값과 관측 값의 분포 비교.
12 \(M\) 결정의 정량적 가이드
12.1 Rule of Thumb
M ≈ 100 × (결측률)
예시: - 5 % 결측: \(M = 5\) - 20 % 결측: \(M = 20\) - 50 % 결측: \(M = 50\)
이 규칙이 대략적 가이드. 정밀 분석은 더 큰 \(M\).
12.2 Bodner 2008 의 분석
연구: 결측률 \(\gamma\) 에 따른 적정 \(M\).
| 결측률 | 권장 \(M\) |
|---|---|
| 5 % | 5 |
| 10 % | 10 |
| 20 % | 20 |
| 30 % | 50 |
| 50 % | 100 |
큰 결측률에서 대량 imputation 필요.
13 MI 와 Sensitivity Analysis
MAR 가정이 현실적이지 않을 수 있음. Sensitivity analysis 권장.
13.1 Pattern-Mixture Model
결측의 모형 을 다양하게 시도. 각 모형 가정 하의 결과 비교.
13.2 Tipping Point Analysis
결과가 유의하지 않게 되는 결측 메커니즘 가정 탐색.
1. MAR 가정 분석 → 결과 (예: 효과 +5)
2. MNAR 가정 (결측이 outcome 과 강하게 연관)
→ 결측 환자의 outcome 을 *극단적* 으로 가정
3. 결과가 *반전* 되는 가정 강도 측정
4. 그 가정이 *현실적* 인지 평가
이 분석이 결과의 robustness.
13.3 Fully Conditional Specification
PMM 의 일반화. 각 변수마다 조건부 모형.
14 A/B 테스트의 MI 응용
import pandas as pd
import numpy as np
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from scipy import stats
np.random.seed(42)
n = 5000
# 가상 자료
df = pd.DataFrame({
'variant': np.random.choice([0, 1], n),
'age': np.random.uniform(18, 70, n),
'tenure': np.random.uniform(0, 5, n),
'category': np.random.choice(['A', 'B', 'C'], n),
})
df['revenue'] = (50 + 5 * df['variant'] + 0.5 * df['age'] +
2 * df['tenure'] + np.random.normal(0, 30, n))
# 결측 (MAR — 신규 사용자에서 더 자주)
mask_age = (df['tenure'] < 1) & (np.random.random(n) < 0.20)
df.loc[mask_age, 'age'] = np.nan
# MI (5 회)
M = 5
estimates = []
ses = []
# 카테고리는 dummy 로
df_dummy = pd.get_dummies(df, columns=['category'], drop_first=True)
for m in range(M):
imputer = IterativeImputer(max_iter=10, random_state=m, sample_posterior=True)
imputed = pd.DataFrame(imputer.fit_transform(df_dummy), columns=df_dummy.columns)
# 분석
import statsmodels.api as sm
X = sm.add_constant(imputed[['variant', 'age', 'tenure']])
model = sm.OLS(imputed['revenue'], X).fit()
estimates.append(model.params['variant'])
ses.append(model.bse['variant'])
# Rubin's rules
theta_bar = np.mean(estimates)
V_W = np.mean(np.array(ses)**2)
V_B = np.var(estimates, ddof=1)
V_T = V_W + (1 + 1/M) * V_B
# 자유도 (Barnard-Rubin)
df_pool = (M - 1) * (1 + V_W / ((1 + 1/M) * V_B))**2
# 95 % CI
ci = (theta_bar - stats.t.ppf(0.975, df_pool) * np.sqrt(V_T),
theta_bar + stats.t.ppf(0.975, df_pool) * np.sqrt(V_T))
print(f"Variant 효과 추정: {theta_bar:.3f}")
print(f"Total SE: {np.sqrt(V_T):.3f}")
print(f"95 % CI: ({ci[0]:.3f}, {ci[1]:.3f})")이 코드가 완전한 MI 분석. 결측 처리 + 분석 + 결과 통합.
15 Phase A 의 마무리 — Bootstrap, Permutation, MI 통합
이 시리즈 (A-WOO14-1 ~ 7) 가 컴퓨터 집약적 방법의 3 도구를 통합 다뤘다.
| 도구 | 목적 | 핵심 통찰 |
|---|---|---|
| Bootstrap | 추정 + CI | 자료 자체에서 표집 분포 |
| Permutation | 가설 검정 | 라벨 셔플로 영가설 분포 |
| MI | 결측 처리 | 다중 대체로 불확실성 반영 |
이 세 도구가 현대 통계 분석의 핵심 무기. A/B 테스트, 임상시험, 역학 모두에 적용.
16 핵심 정리 — Phase A 마무리
Phase A 전체 (46 편) 의 통합 메시지:
- 무작위 배정 이 검정 분포의 발판 (Maxwell Ch.2)
- 모형 비교 가 ANOVA·회귀·대비의 통합 골격 (Maxwell Ch.3-5)
- 임상 결정 이 다중성 보정의 기준 (Schulz Ch.1, 19)
- 사전 산정 이 표본 크기의 정직성 (Schulz Ch.11, Woodward Ch.8)
- 컴퓨터 집약 이 분포 가정의 한계 우회 (Buisson Ch.7, Woodward Ch.14)
이 5 가지 원칙이 현대 실험 설계와 분석의 토대.
17 관련 주제
선행 지식
Phase A 와 연결
- 모든 Phase A 글
- 다음 단계: Phase D (Hernan 인과추론), Phase F (Kohavi A/B), Phase H (통계 모델링)
다른 카테고리 연결