관측 데이터 인과효과 추정을 위한 DML과 TMLE

DML과 TMLE의 정규화 점수, 교차적합, 타깃팅 갱신을 비교하고 관측 데이터 인과효과 추정의 가정과 운영 진단을 정리한다.

2026-08-14 · 최초 발행 2024-04-29

관측 데이터에서 효과를 추정할 때 필요한 전제

처치 T가 결과 Y에 미치는 평균처치효과(ATE)나 조건부 효과(CATE)를 구하려면, 결과·처치·공변량으로 구성된 (Y, T, X) 데이터를 다룬다. 여기서 X는 교란을 통제하기 위한 공변량 집합이다.

추정은 다음 가정 위에서 성립한다.

  • 일관성/불간섭(SUTVA) 가정
  • 조건부 독립성, 즉 무교란 가정: Y(t) ⟂ T | X
  • 거의 모든 X에서 0 < P(T=1|X) < 1이 성립하는 양의성(positivity)

DML과 TMLE는 이 조건 아래에서 누이선스 모형을 머신러닝으로 추정하면서도, 효과 추정과 통계적 추론을 함께 다루도록 설계된 방법이다.

교차적합으로 누이선스 오차를 분리하는 DML

Double Machine Learning(DML)은 Neyman 정규화(orthogonality) 점수를 사용한다. 이 점수는 누이선스 추정 오차에 1차로 민감하지 않도록 구성된다.

표본을 여러 폴드로 나누고, 각 폴드에서는 나머지 데이터로 결과모형 m(X)와 성향점수 g(X)를 학습한다. 학습에 쓰이지 않은 폴드에서 정규화 점수를 계산한 뒤, 폴드별 결과를 합쳐 효과와 표준 오차를 산출한다. 교차적합은 과적합에서 비롯되는 편향을 줄이고 표준 오차 계산을 수월하게 한다.

누이선스가 L2 오차율 n^(-1/4) 이상으로 추정되면 ATE 추정량은 루트-엔 수렴과 정규 근사를 만족한다. 누이선스 학습자에는 랜덤포레스트, 부스팅, 신경망 등 임의의 ML 모델을 사용할 수 있으며, 특성 공학이나 정규화와도 결합하기 쉽다.

집단 또는 클러스터 구조가 있다면 로버스트 분산을 고려해야 한다. 점근 정규성 기반 신뢰구간과 부트스트랩도 활용할 수 있다.

플러그인 추정을 보정하는 TMLE

Targeted Maximum Likelihood Estimation(TMLE)은 초기 결과모형 Q와 성향점수 g를 결합한 뒤, 영향함수 제약을 충족하도록 타깃팅 갱신을 수행한다.

먼저 Q0(X, T)를 추정하고 g(X)를 학습한다. 이후 clever covariate H(T, X)를 사용한 소규모 보정 회귀로 결과모형을 갱신하고, 타깃팅된 Q*에서 ATE 같은 파라미터를 플러그인 방식으로 구한다.

이 과정은 파라미터에 정렬된 최소 변경으로 플러그인 일관성을 유지하며, 확률 경계인 [0,1]도 보존한다. 결과모형 또는 성향모형 가운데 하나라도 올바르면 일관성을 기대할 수 있고, 둘 다 양호하면 반-모수 효율 한계에 도달한다.

극단 성향점수에는 절단(truncation)과 clever covariate 스케일링을 적용할 수 있다. 갱신이 수렴하지 않으면 학습자를 단순화하는 선택지가 있다.

추정 전에 확인할 진단 항목

양의성 위반 여부는 성향점수 분포로 확인한다. 공변량 밸런싱은 SMD와 IPTW 진단을 통해 점검할 수 있다. 결측이나 표본 치우침이 있다면 다중대치, 가중 샘플링, 안정화 가중치를 사용한다.

교차적합을 적용하는 경우에는 시드를 고정하고, 누이선스 학습 데이터와 본추정 데이터를 분리하는 원칙을 지켜야 한다. 분석 결과만 남기는 것이 아니라 특성 파생 로직과 시점 일치 여부도 기록해야 정보누수를 막을 수 있다.

선택 기준은 데이터와 운영 제약에서 갈린다

디지털 마케팅에서는 오디언스 타깃팅 변경의 ATE나 ATT를 추정할 수 있다. 피처가 많고 비선형 상호작용이 강하면 ML 누이선스로 이를 포착한다. 과적합과 누이선스 편향을 완화해야 한다면 DML이, 플러그인 추정의 안정성과 확률 경계 보존이 중요하다면 TMLE가 맞는다.

헬스케어 관찰연구에서는 약물 효과나 치료 프로토콜 변경을 평가할 때 교란 통제와 양의성 진단이 필수다. 결측이나 희소 이벤트가 있으면 TMLE의 타깃팅 갱신과 절단이 안정화에 쓰일 수 있다.

금융·리스크 정책에서는 신용 한도나 사기 탐지 정책 변경의 효과를 추정한다. 고차원 특성과 시간 변화를 제어해야 하므로, DML로 신속히 추정한 다음 핵심 KPI는 TMLE로 정밀하게 추정하는 방식도 가능하다.

분석 파이프라인에서 DML과 TMLE가 만나는 지점

입력으로는 관측 데이터 (Y, T, X), 분석 파라미터(ATE/ATT/CATE), 양의성과 누락 데이터 정책 같은 품질 제약이 필요하다. DML은 폴드 외부에서 m, g를 학습하고 정규화 점수를 집계한다. TMLE은 초기 Qg를 추정한 뒤 clever covariate를 구성해 갱신 회귀를 수행한다.

출력에는 추정치와 신뢰구간뿐 아니라 성향점수 분포, 밸런싱, 영향함수 분포, 민감도 분석 결과를 포함한다.

DMLTMLE입력: (Y, T, X), 파라미터 정의방법 선택표본 K-분할폴드 외부로 m(X), g(X) 학습정규화 점수 계산폴드 집계 표준 오차초기 Q(X,T) 추정g(X) 추정clever covariate H 계산타깃팅 갱신(플럭추에이션)출력: ATE, CI, 진단
관점 DML TMLE
편향·분산 정규화 점수로 1차 편향을 제거하고, 교차적합으로 일반화를 높인다. 분산은 폴드 수와 누이선스 품질에 민감하다. 타깃팅으로 플러그인 일관성을 유지하며 이중강건성을 제공한다. 두 모형이 정확하면 효율 한계에 도달한다.
연산과 확장 폴드 처리를 병렬화하기 쉬워 대규모·고차원 데이터에 적합하다. Q, g 학습과 갱신 단계가 필요해 연산과 파이프라인 관리가 늘어난다.
이론적 조건 누이선스 수렴률 조건에서 루트-엔 정규성을 갖는다. 결과 또는 성향모형 가운데 하나가 올바르면 일관성을 갖고, 둘 다 정확하면 효율성을 얻는다.
극단 성향점수 극단 PS에 다소 민감하므로 점수 안정화와 트리밍이 필요하다. g 절단과 clever covariate를 통해 상대적으로 안정적이다.
구현과 검증 구현이 비교적 단순하고 DoubleML, EconML 같은 패키지를 활용할 수 있다. 학습 곡선이 있으며 진단과 갱신 절차를 명시적으로 관리해야 한다.

Python으로 DML ATE를 추정하는 예시

Python 3.10+, doubleml>=0.6.2, scikit-learn>=1.4, numpy/pandas를 전제로 한다. 데이터는 결과 y, 0/1 처치 d, 공변량 DataFrame X로 둔다. 라이브러리 버전은 최신 정보 확인이 필요하다.

# pip install doubleml scikit-learn pandas numpy
import numpy as np
import pandas as pd
from sklearn.linear_model import LassoCV, LogisticRegressionCV
from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier
from doubleml import DoubleMLData, DoubleMLATE

# 예시용 시뮬레이션 데이터
np.random.seed(42)
n, p = 3000, 20
X = np.random.normal(size=(n, p))
# 성향점수: 비선형
ps = 1 / (1 + np.exp(-(X[:,0] - 0.5*X[:,1] + 0.2*X[:,2]**2)))
d = np.random.binomial(1, ps)
# 결과모형: 비선형 + 처치효과 2.0
y = (2.0 * d + X[:,0] + 0.5*X[:,1]**2 + np.sin(X[:,2]) + np.random.normal(size=n))

df = pd.DataFrame(X, columns=[f"x{i}" for i in range(p)])
df["d"] = d
df["y"] = y

# DoubleML 데이터 객체
dml_data = DoubleMLData(df, y_col="y", d_cols="d")

# 누이선스 학습자: m(X)와 g(X)
ml_g = LogisticRegressionCV(cv=5, max_iter=2000, solver='lbfgs')
ml_m = RandomForestRegressor(n_estimators=500, min_samples_leaf=5, n_jobs=-1)

# DML ATE
dml_ate = DoubleMLATE(dml_data, ml_g=ml_g, ml_m=ml_m, n_folds=5, score='ATE')
dml_ate.fit()

print("ATE estimate:", dml_ate.coef[0])
print("Std. Error:", dml_ate.se[0])
print("95% CI:", dml_ate.confint(level=0.95))
# 간단한 양의성 진단: 성향점수 분포
from sklearn.model_selection import KFold
kf = KFold(n_splits=5, shuffle=True, random_state=42)
# 외부추정 대략 구현(패키지가 내부 처리하므로 여기선 요약만)

폴드 수는 5~10을 권장하며, 반복 교차적합으로 분산을 안정화할 수 있다. 성향점수가 극단화되면 [0.01,0.99] 같은 트리밍이나 안정화 가중치를 적용한다.

R에서 TMLE ATE를 구하는 예시

R >= 4.2와 tmle>=1.5.0 또는 tmle3를 사용할 수 있다. SuperLearner를 선택한다면 SL 라이브러리가 필요하며, 라이브러리 버전은 최신 정보 확인이 필요하다.

# install.packages(c("tmle", "SuperLearner"))
library(tmle)
library(SuperLearner)

set.seed(42)
n <- 3000; p <- 20
X <- replicate(p, rnorm(n))
ps <- 1 / (1 + exp(-(X[,1] - 0.5*X[,2] + 0.2*X[,3]^2)))
A <- rbinom(n, 1, ps)
Y <- 2.0*A + X[,1] + 0.5*X[,2]^2 + sin(X[,3]) + rnorm(n)

W <- as.data.frame(X)
colnames(W) <- paste0("x", 1:p)

# Super Learner 라이브러리 (간단 예시)
SL.lib <- c("SL.glm", "SL.randomForest")

# TMLE 실행: gbound으로 극단 PS 절단
fit <- tmle(Y=Y, A=A, W=W,
            Q.SL.library=SL.lib,
            g.SL.library=SL.lib,
            family="gaussian",
            gbound=c(0.01, 0.99))

summary(fit)
# ATE 추정치: fit$estimates$ATE$psi
# 95% CI: fit$estimates$ATE$CI

clever covariate가 큰 값으로 폭주하면 gbound를 강화하거나 더 단순한 학습자를 사용한다. SuperLearner는 시드를 고정하고 후보 학습자 수를 제한해 재현성을 관리한다.

기대할 수 있는 추정 품질과 운영상 대가

정규화와 타깃팅 갱신은 1차 편향을 줄인다. 시뮬레이션 기준으로 단순 회귀 대비 MSE가 2050% 감소할 수 있으며, 이는 데이터 구조와 양의성 수준에 따라 달라진다. 누이선스 품질이 양호하고 가정이 충족되면 95% 커버리지를 ±25% 범위에서 달성할 수 있다.

두 방법 모두 임의의 ML을 누이선스로 결합해 고차원·비선형 구조에 대응한다. 교차적합과 타깃팅 절차는 재현 가능한 추론 체계를 만드는 기반이 된다.

운영에서는 PII 비식별화, 접근 통제, 실험·분석 로그의 버전관리를 수행한다. 성향점수 히스토그램과 콴타일 컷으로 양의성을 진단하고, 트리밍 임계값에 대한 민감도 분석을 병행한다. 매장이나 병원처럼 클러스터 구조가 있으면 군집 로버스트 분산 또는 부트스트랩을 적용한다.

DML은 구현과 확장에 유리한 대신 극단 PS와 폴드 설계에 민감하다. TMLE은 안정적인 플러그인 추정과 효율성을 제공하지만, 갱신 단계 및 튜너블 파라미터 관리 비용을 감수해야 한다.

인과 추론DMLTMLE성향점수머신러닝