Doubly robust estimation — IPW와 outcome 모델의 결합으로 인과 추정 안정화
PSM·IPW는 propensity 모델이 틀리면 무너지고, 회귀는 outcome 모델이 틀리면 무너집니다. doubly robust는 두 모델을 결합해 둘 중 하나만 맞으면 정직한 효과 추정. 마케팅 인과 분석의 안전판.
무작위 배정이 안 되는 자리에 인과 효과를 추정하려면 두 가지 길이 있습니다 — propensity 모델 기반(PSM·IPW) 또는 outcome 모델 기반(회귀). 두 길은 각각 서로 다른 자리에서 깨집니다. doubly robust(이중 안전) 추정은 두 모델을 결합해, 둘 중 하나만 맞으면 정직한 효과 추정을 보장합니다. 마케팅 인과 분석의 안전판.
마케터가 이 글을 읽어야 하는 이유: 인과 분석 결과를 회의에서 신뢰성 있게 보고하려면 “이 추정의 모델 가정 중 어느 게 깨져도 결과가 무너지는가”를 먼저 답해야 합니다. doubly robust는 그 답이 “둘 다 깨져야 무너진다”라 회의 신뢰도가 한 단계 올라갑니다.
1. PSM·IPW가 흔들리는 자리
PSM이나 IPW(역확률 가중)는 propensity score 를 정확히 추정한다는 가정에 의존합니다.
propensity 모델이 틀리면 매칭·가중이 잘못되고 효과 추정이 편향됩니다.
흔한 자리:
- 비선형 관계 (로지스틱이 아닌 GBM 필요)
- 변수가 너무 많음 (overfitting)
- 관측 변수 부족 (unmeasured confounder)
2. Outcome 회귀가 흔들리는 자리
다른 길은 outcome을 직접 모델링하는 것. 를 회귀로 추정하고, 과 의 차이를 효과로.
outcome 모델이 틀리면 회귀 계수가 편향되고 효과 추정도 무너집니다.
흔한 자리:
- 비선형 outcome (회귀 가정 위반)
- interaction 효과 미포함
- 결과 변수의 분포 가정 위반
3. Doubly robust의 한 줄 직관
두 모델을 결합해 어느 하나만 맞으면 정직한 추정을 보장.
둘 다 잘 추정하면 효율 최고, 하나만 맞아도 unbias, 둘 다 틀리면 무너짐.
수식으로(AIPW = Augmented IPW):
- 첫 두 항: IPW 보정 (residual에 가중)
- 세 번째 항: outcome 모델의 직접 추정
핵심: propensity 모델이 정확하면 첫 두 항이 정직. outcome 모델이 정확하면 세 번째 항이 정직. 둘 다 틀려야 무너짐.
4. AIPW vs 단순 IPW·회귀 비교
같은 데이터에 세 추정량을 적용하면 어떻게 다른지.
| 추정량 | propensity 정확 | outcome 정확 | 결과 |
|---|---|---|---|
| IPW | ✓ | ✗ | 정직 |
| 회귀 | ✗ | ✓ | 정직 |
| IPW | ✗ | ✗ | 편향 |
| 회귀 | ✗ | ✗ | 편향 |
| AIPW | ✓ | ✗ | 정직 |
| AIPW | ✗ | ✓ | 정직 |
| AIPW | ✗ | ✗ | 편향 |
AIPW가 IPW와 회귀의 위험 분산. 한 모델이 흔들려도 다른 모델이 받쳐주는 구조.
5. 코드 한 묶음 — Python AIPW 구현
이게 글에 박는 유일한 코드입니다.
import numpy as npimport pandas as pdfrom sklearn.linear_model import LogisticRegressionfrom sklearn.ensemble import GradientBoostingRegressor
# df: T(노출), X(특성), Y(결과)features = ["age", "past_purchases", "visits_30d", "is_mobile"]X = df[features].valuesT = df["treated"].valuesY = df["outcome"].values
# 1. propensity 모델 — Logistic 또는 GBMps_model = LogisticRegression(max_iter=1000)ps_model.fit(X, T)p_hat = ps_model.predict_proba(X)[:, 1]
# clipping (extreme weights 방지)p_hat = np.clip(p_hat, 0.05, 0.95)
# 2. outcome 모델 — 노출별 별도 학습model_1 = GradientBoostingRegressor().fit(X[T==1], Y[T==1])model_0 = GradientBoostingRegressor().fit(X[T==0], Y[T==0])mu_1 = model_1.predict(X)mu_0 = model_0.predict(X)
# 3. AIPW 추정term1 = T * (Y - mu_1) / p_hatterm2 = (1 - T) * (Y - mu_0) / (1 - p_hat)term3 = mu_1 - mu_0
ate_dr = np.mean(term1 - term2 + term3)print(f"Doubly Robust ATE = {ate_dr:.4f}") # 예: 0.0184
# bootstrap 95% CIn_boot = 1000boot_estimates = []for _ in range(n_boot): idx = np.random.choice(len(Y), len(Y), replace=True) p_b = np.clip(ps_model.predict_proba(X[idx])[:, 1], 0.05, 0.95) mu1_b = model_1.predict(X[idx]) mu0_b = model_0.predict(X[idx]) t1 = T[idx] * (Y[idx] - mu1_b) / p_b t2 = (1 - T[idx]) * (Y[idx] - mu0_b) / (1 - p_b) t3 = mu1_b - mu0_b boot_estimates.append(np.mean(t1 - t2 + t3))
ci_lo, ci_hi = np.percentile(boot_estimates, [2.5, 97.5])print(f"95% CI: ({ci_lo:.4f}, {ci_hi:.4f})")매칭이 필요 없고, 두 모델을 합치는 한 단계 추가만으로 인과 추정의 안전 마진이 폭발적으로 늘어납니다.
6. Cross-fitting — 데이터 누수 방지
AIPW의 한 가지 함정: 같은 데이터로 propensity 모델 + outcome 모델 + 효과 추정을 모두 하면 데이터 누수가 발생할 수 있음. cross-fitting이 표준 해결책.
데이터를 K개 fold로 나눠, fold 1로 모델 학습 → fold 2에서 예측 → 결과 사용. 모든 fold에 대해 반복.
이 절차로 데이터 누수 없이 AIPW를 계산. Double Machine Learning(DML) 프레임워크에 들어가는 핵심 아이디어.
7. 마케팅 자리에서 AIPW의 자리
7-1. 광고 노출 lift 추정 (관측 데이터)
무작위 lift study가 어려운 자리에서 PSM 대신 AIPW. 두 모델 모두 GBM·random forest로 학습하면 비선형 패턴 자연스럽게 잡음.
7-2. CRM 캠페인 효과
이메일·푸시 발송 대상 vs 비대상 차이 추정. 발송이 무작위가 아닌 자리에 AIPW가 표준.
7-3. 옴니채널 노출 결합 효과
여러 채널의 결합 효과 추정. 각 채널별 propensity·outcome 모델을 결합해 채널 간 상호작용까지 분석.
7-4. 신규 채널의 인과 효과
lift study가 운영되지 않는 신규 채널의 인과 추정에서 AIPW의 가치가 큼.
| 자리 | 도구 |
|---|---|
| 무작위 lift study 가능 | lift study |
| 관측 풍부, 신뢰성 중요 | AIPW |
| 시계열 자연실험 있음 | DiD |
| 정책 cutoff 있음 | RDD |
DiD, RDD, AIPW가 인과추론 도구상자에 함께.
8. EconML·DoubleML 라이브러리
직접 구현 대신 표준 라이브러리 활용 추천.
8-1. EconML (Microsoft)
LinearDML, CausalForestDML, OrthoForest 등 다양한 doubly robust 추정량. cross-fitting 자동.
8-2. DoubleML (Bach et al.)
Python·R 양쪽 지원. 추론 통계량(표준오차) 자동 계산.
8-3. CausalML (Uber)
Uplift 모델·CATE 추정 통합. 마케팅 자리에 자주 사용.
# EconML 예시from econml.dml import LinearDML
est = LinearDML(model_t=LogisticRegression(), model_y=GradientBoostingRegressor())est.fit(Y=Y, T=T, X=X)ate = est.ate(X=X)라이브러리 사용 시 표준 추정량과 inference가 함께 따라와 운영 효율이 좋음.
9. 마치며 — 인과 추정의 안전 마진
doubly robust는 인과 추정의 안전 마진을 한 단계 올리는 표준 기법입니다. PSM·IPW의 propensity 모델 위험과 회귀의 outcome 모델 위험을 동시에 분산. 두 모델 중 하나만 맞으면 정직한 추정. 마케팅 인과 분석을 회의 보고에 안정적으로 가져가려면 AIPW를 표준 도구로 두는 게 좋습니다.
다음 분기에 한 번만 시도해 볼 만한 것은 이미 PSM·IPW로 추정한 캠페인 효과 자리에 AIPW를 추가로 돌려 결과 차이를 비교하는 흐름입니다. 두 결과가 비슷하면 추정의 robustness가 확인되고, 다르면 어느 모델 가정에 의존했는지가 드러납니다.
다음에 읽을 글
- Propensity score matching — IPW의 기반 도구
- Heterogeneous treatment effects — 평균 효과 너머의 개인별 효과
- DiD 인과추론 — 시계열 자연실험
참고
- Robins, Rotnitzky & Zhao (1994), “Estimation of regression coefficients when some regressors are not always observed”: https://www.jstor.org/stable/2290910
- Chernozhukov et al. (2018), “Double/debiased machine learning”: https://academic.oup.com/ectj/article/21/1/C1/5056401
- EconML: https://econml.azurewebsites.net/
- DoubleML: https://docs.doubleml.org/
- CausalML: https://causalml.readthedocs.io/
통계·ML 카테고리의 다른 글
전체 보기 →-
2026·05·10
마케팅 실험 플랫폼 설계 — 사내 A/B 시스템의 5가지 원칙
광고 플랫폼 자체 A/B로는 부족하고 외부 SaaS는 비쌉니다. 사내 마케팅 실험 플랫폼을 설계할 때 깔아야 할 split assignment·exposure log·SRM 검정·sequential safe·메타 표준 5가지 원칙.
-
2026·05·09
Bayesian A/B 테스트 심화 — prior 잡는 법과 HDI 해석
베이지안 A/B는 "p-value < 0.05"가 아니라 "B가 A보다 좋을 확률 0.92"를 줍니다. 그 확률이 정직하려면 prior를 잘 잡아야 하고, HDI를 잘못 읽으면 함정이 옵니다. 마케터 시선에서 prior·posterior·HDI 정리.
-
2026·05·09
Heterogeneous treatment effects — 평균 효과 너머의 개인별 효과
A/B 평균 효과 +5%p가 모든 사람에게 같지 않습니다. 일부에게는 +20%p, 일부에게는 -3%p. CATE·uplift forest로 효과의 이질성을 추정해 타겟 마케팅을 정밀화하는 흐름.
-
2026·05·09
Power analysis와 MDE — 실험 시작 전에 표본·기간을 정직하게 잡는 법
A/B 시작 전 "표본 얼마나 모아야?"의 답이 power analysis. 검출력 80%로 검출 가능한 최소 효과(MDE)를 미리 계산해 실험 기간·해석 한도를 명확히 잡는 흐름.