관찰 연구와 식별 조건

Observational Studies — 무작위 배정 없이 인과를 추론하는 조건

관찰 연구를 조건부 무작위 실험의 유사체로 보는 관점을 소개한다. 식별 가능성(identifiability)의 세 조건 — 교환가능성, 양성, 일관성 — 이 관찰 데이터에서 어떻게 적용되고, 어떤 상황에서 위반되는지를 다룬다. Hernán & Robins (2020) Ch.3을 기반으로 작성하였다.

Experimentation
Causal Inference
저자

Kwangmin Kim

공개

2026년 03월 20일

1 정의

정의: 관찰 연구 (Observational Study)

처리 배정을 연구자가 통제하지 않는 연구 설계. 자연적으로 발생한 처리 배정을 관측하여 인과 효과를 추론한다.

  • 역학: Observational Study (Cohort, Case-Control, Cross-sectional)
  • IT: Quasi-experiment, Natural Experiment, Log Data Analysis
정의: 식별 가능성 (Identifiability)

반사실적 양 \(E[Y^a]\)가 관측 데이터의 함수로 유일하게 표현될 때, 해당 인과 효과는 식별 가능(identifiable)하다.

식별을 위한 세 가지 조건:

  1. 일관성 (Consistency): \(A_i = a \Rightarrow Y_i = Y_i^a\)
  2. 조건부 교환가능성: \(Y^a \perp\!\!\!\perp A \mid L\)
  3. 양성 (Positivity): \(\Pr[A=a \mid L=l] > 0\) for all \(l\)
역학 용어 IT 용어 비고
Observational Study Quasi-experiment, Log Analysis 관찰 연구
Unmeasured Confounding Hidden Bias, Omitted Variable Bias 측정되지 않은 교란
Target Trial Target Experiment 에뮬레이트하려는 이상적 실험
Ignorability Unconfoundedness 처리 배정 메커니즘 무시 가능
Sensitivity Analysis Robustness Check 가정 위반 정도 평가

2 개념 및 원리

2.1 관찰 연구의 핵심 문제

이전 편에서 무작위 실험은 설계 단계에서 교환가능성을 보장한다는 것을 보았다. 관찰 연구에서는 처리 배정을 연구자가 통제하지 않는다.

  • 의사가 중증 환자에게 우선적으로 이식을 배정
  • 건강한 사람이 자발적으로 운동 프로그램에 참여
  • 활발한 사용자가 자발적으로 새 기능을 사용

인과 추론이 가능하려면, 해당 연구를 조건부 무작위 실험의 유사체로 볼 수 있어야 한다 (Hernán & Robins, 2020, Ch.3).

2.2 세 가지 식별 조건

2.2.1 일관성 (Consistency)

\[ A_i = a \Rightarrow Y_i = Y_i^a \]

비교하려는 처리 값이 잘 정의된 개입(well-defined intervention)에 대응하며, 데이터의 처리 버전과 일치해야 한다.

위반 예시:

상황 문제 역학/IT
“운동이 건강에 좋은가?” “운동”이 잘 정의되지 않음 (조깅? 웨이트?) 역학
“BMI 감량의 효과” 식이 vs. 수술에 따라 결과가 다름 역학
“다크 모드가 사용 시간에 영향을 미치는가?” 다크 모드의 구현이 앱마다 다름 IT

2.2.2 조건부 교환가능성 (Conditional Exchangeability)

\[ Y^a \perp\!\!\!\perp A \mid L \quad \text{for all } a \]

\(L\)이 처리와 결과에 동시에 영향을 미치는 모든 변수를 포함해야 한다.

실험 유형 교환가능성 근거
주변 무작위 실험 \(Y^a \perp\!\!\!\perp A\) 동전 던지기로 보장
조건부 무작위 실험 \(Y^a \perp\!\!\!\perp A \mid L\) 층별 무작위 배정으로 보장
관찰 연구 \(Y^a \perp\!\!\!\perp A \mid L\) 가정. 검증 불가

핵심 차이: 관찰 연구에서는 \(L\)에 포함되지 않은 변수 \(U\)가 존재할 수 있다. 이를 측정되지 않은 교란(unmeasured confounding)이라 한다.

예시: 의사가 비흡연자에게 우선적으로 심장 이식을 배정. 흡연 여부 \(U\)가 측정되지 않았다면, \(L=1\)(중증) 층 내에서도 처리군(비흡연 비중 높음)과 대조군(흡연 비중 높음)의 예후가 다르다.

2.2.3 양성 (Positivity)

\[ \Pr[A = a \mid L = l] > 0 \quad \text{for all } l \text{ with } \Pr[L = l] > 0 \]

모든 공변량 층에서 각 처리 수준을 받을 확률이 0보다 크다.

위반 유형 설명 예시
구조적 양성 위반 특정 층에서 처리가 원리적으로 불가능 임산부에게 방사선 치료 불가
확률적 양성 위반 이론적으로 가능하나 표본에서 미관측 80세 이상 남성 중 처리 대상이 없음

구조적 위반은 해당 층을 분석에서 제외해야 한다. 확률적 위반은 표본 크기를 늘리거나 모수적 모형으로 외삽할 수 있으나 편향 위험이 있다.

2.3 세 조건 성립 시

관찰 연구를 조건부 무작위 실험과 논리적으로 동등하게 취급할 수 있다:

\[ E[Y^a] = \sum_l E[Y \mid A = a, L = l] \cdot \Pr[L = l] \]

무작위 실험 관찰 연구
식별 조건 설계로 보장 가정해야 함
교환가능성 검증 불필요 검증 불가능 (반사실적 양)
양성 설계로 보장 가능 특정 층에서 위반 가능

3 직관적 설명

3.1 “가정”과 “보장”의 차이

RCT (A/B 테스트): 동전을 던져서 배정했으니, 교환가능성이 성립한다는 것을 안다. 마치 집 열쇠를 내가 직접 잠갔으니 잠겼다는 것을 아는 것과 같다.

관찰 연구: 교란 변수를 충분히 측정했다고 믿는다. 마치 집에 돌아왔을 때 문이 잠겨 있는 것을 보고 “내가 잠갔겠지”라고 추측하는 것과 같다 — 실제로는 다른 사람이 잠갔을 수도 있다.

3.2 Target Trial: “어떤 실험을 흉내 내고 있는가?”

관찰 연구의 질을 높이는 핵심 전략은: “이 관찰 연구가 에뮬레이트하려는 무작위 실험은 무엇인가?”를 명시하는 것이다.

프로토콜 요소 목표 시험(Target Trial) 관찰 연구
적격 기준 어떤 대상을 포함? 동일하게 정의
처리 전략 구체적 개입은? 동일하게 정의
처리 배정 무작위 배정 자연 발생 (+ 교란 보정)
결과 무엇을 측정? 동일하게 정의
분석 ITT, per-protocol 표준화, IPW

IT에서의 예: “가격 인하가 구매율에 미치는 효과”를 관찰 데이터로 분석할 때, “가격을 무작위로 배정하는 A/B 테스트”가 target trial이다.

3.3 측정되지 않은 교란의 위험

관찰 데이터에서 “프리미엄 구독자가 무료 사용자보다 리텐션이 2배 높다”는 발견만으로 “프리미엄 구독을 시키면 리텐션이 2배가 된다”고 결론 내릴 수 없다.

프리미엄 구독자는 원래 제품에 대한 만족도가 높은 사람들(교란)이다. 이 교란을 통제하지 않으면 인과 효과를 과대추정한다.


4 왜 필요한가

4.1 A/B 테스트가 불가능한 상황

상황 이유 IT 예시
윤리적 제약 의도적으로 나쁜 경험을 줄 수 없음 서비스 장애의 효과 분석
기술적 제약 무작위 배정이 불가능 플랫폼 전체 정책 변경
비용/시간 제약 실험에 수개월 소요 장기적 브랜드 효과
이미 발생한 사건 과거 데이터만 존재 과거 UI 변경의 장기 효과

이 모든 상황에서 관찰 연구의 식별 조건 프레임워크가 필요하다. 식별 조건을 명시적으로 검토하면:

  • 어떤 변수를 측정해야 하는지 알 수 있다 (교환가능성)
  • 어떤 집단에서 분석이 가능한지 알 수 있다 (양성)
  • 처리를 어떻게 정의해야 하는지 알 수 있다 (일관성)

4.2 인과 추론 없이 발생하는 실패 사례

실패 사례 원인 결과
“파워 유저가 매출의 80%를 차지하니 파워 유저를 늘리자” 역인과 + 교란 비효율적 마케팅 투자
“이탈 예측 모형으로 이탈 원인을 파악하자” 예측 ≠ 인과 잘못된 이탈 방지 전략
“상관관계가 높은 변수를 개선하면 KPI가 오르겠지” 교란 무시 리소스 낭비

5 응용 분야

분야 역학/의학 IT/비즈니스 주요 식별 전략
약물 역학 EHR 기반 약물 효과 분석 로그 데이터 기반 기능 효과 분석 PSM, IPW
정책 평가 금연 정책의 건강 효과 가격 정책의 매출 효과 DID, ITS
교육 교수법의 성적 효과 온보딩 방식의 리텐션 효과 IV, RDD
경제학 최저임금의 고용 효과 수수료 인상의 거래량 효과 DID, SCM

5.1 분야별 선호 식별 전략

분야 선호 전략 이유
역학 교환가능성 가정 (표준화, IPW) \(L\)을 상세히 측정하는 전통
경제학 도구변수, DID, RDD 측정되지 않은 교란이 흔함
IT 실험 A/B 테스트 (무작위 배정) 실험이 가능한 환경
IT 관찰 PSM, DID, Causal Forest 로그 데이터 풍부

6 예시

6.1 역학: 심장 이식과 흡연 (측정되지 않은 교란)

설정:
- L: 중증도 (0=경증, 1=중증)
- U: 흡연 여부 (0=비흡연, 1=흡연) — 측정되지 않음
- A: 심장 이식 (의사가 비흡연자를 우선 배정)
- Y: 5일 사망

L=1(중증) 층 내에서:
- 처리군: 비흡연 비중 높음 → 예후 좋음
- 대조군: 흡연 비중 높음 → 예후 나쁨

L로만 보정하면 이식이 보호 효과를 가진 것처럼 보이지만,
실제로는 U(흡연)가 교란을 일으키고 있다.

결론: L로 조건부해도 교환가능성이 위반됨 (U가 누락)

6.2 IT: 프리미엄 구독의 인과 효과

분석 방법 추정 효과 문제점
단순 비교 프리미엄 유저 리텐션 80% vs. 무료 40% 자기 선택 교란
L로 보정 (사용 빈도, 가입 기간) 프리미엄 +15%p 측정되지 않은 교란 가능
할인 쿠폰 IV 프리미엄 +8%p LATE (국소 효과)
가격 RDD 프리미엄 +10%p cutoff 근방에서만 유효

7 코드 예시

7.1 관찰 데이터에서의 교란과 보정

import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression

np.random.seed(42)
n = 5000

# --- 데이터 생성: 관찰 연구 ---
# L: 관측된 교란 변수
L = np.random.binomial(1, 0.5, n)
# U: 측정되지 않은 교란 변수
U = np.random.binomial(1, 0.4, n)

# A: 처리 — L과 U 모두에 의존 (자기 선택)
prob_treat = 0.2 + 0.3 * L + 0.2 * U
A = np.random.binomial(1, np.clip(prob_treat, 0, 1))

# Y: 결과 — 진짜 ATE = -0.08 (보호 효과)
true_ate = -0.08
prob_y = np.clip(0.15 + 0.25 * L + 0.15 * U + true_ate * A, 0, 1)
Y = np.random.binomial(1, prob_y)

df = pd.DataFrame({"L": L, "U": U, "A": A, "Y": Y})

# --- 1. Naive (no adjustment) ---
naive = df[df.A == 1].Y.mean() - df[df.A == 0].Y.mean()

# --- 2. L로만 보정 (측정되지 않은 교란 U 존재) ---
std_L = 0
for l in [0, 1]:
    p_l = (df.L == l).mean()
    e1 = df[(df.L == l) & (df.A == 1)].Y.mean()
    e0 = df[(df.L == l) & (df.A == 0)].Y.mean()
    std_L += (e1 - e0) * p_l

# --- 3. L + U로 보정 (이상적: 모든 교란 관측) ---
std_LU = 0
for l in [0, 1]:
    for u in [0, 1]:
        p_lu = ((df.L == l) & (df.U == u)).mean()
        sub1 = df[(df.L == l) & (df.U == u) & (df.A == 1)]
        sub0 = df[(df.L == l) & (df.U == u) & (df.A == 0)]
        if len(sub1) > 0 and len(sub0) > 0:
            std_LU += (sub1.Y.mean() - sub0.Y.mean()) * p_lu

print(f"True ATE:                {true_ate:.4f}")
print(f"Naive (no adjustment):   {naive:.4f}  ← 교란 포함")
print(f"Standardized (L only):   {std_L:.4f}  ← U 누락으로 잔여 편향")
print(f"Standardized (L + U):    {std_LU:.4f}  ← 교란 완전 보정")

7.2 양성 위반 진단

# 양성 조건 점검: 모든 L 층에서 처리/대조가 존재하는가?
print("\n=== 양성 조건 점검 ===")
for l in [0, 1]:
    sub = df[df.L == l]
    n_treat = (sub.A == 1).sum()
    n_ctrl = (sub.A == 0).sum()
    p_treat = sub.A.mean()
    print(f"L={l}: n_treat={n_treat}, n_ctrl={n_ctrl}, P(A=1|L={l})={p_treat:.3f}")
    if p_treat < 0.05 or p_treat > 0.95:
        print(f"  ⚠️ 양성 위반 위험: 극단적 처리 확률")

7.3 민감도 분석: 측정되지 않은 교란의 영향

# 단순 민감도 분석: U의 효과 크기에 따른 추정 편향
print("\n=== 민감도 분석 ===")
print("gamma_U (U→Y 효과) | 추정 ATE (L만 보정) | 편향")
print("-" * 55)

for gamma_u in [0.0, 0.05, 0.10, 0.15, 0.20, 0.30]:
    # U의 영향이 gamma_u일 때 예상 편향
    # 단순 근사: bias ≈ gamma_u × (E[U|A=1] - E[U|A=0])
    eu_diff = df[df.A == 1].U.mean() - df[df.A == 0].U.mean()
    expected_bias = gamma_u * eu_diff
    adjusted_ate = std_L - expected_bias
    print(f"  {gamma_u:.2f}             | {adjusted_ate:+.4f}              | {expected_bias:+.4f}")

8 Ignorability와의 관계

Rosenbaum & Rubin (1983)의 용어:

용어 정의
약한 무시가능성 \(Y^a \perp\!\!\!\perp A \mid L\) + \(\Pr[A=a \mid L] > 0\)
강한 무시가능성 \((Y^{a=0}, Y^{a=1}) \perp\!\!\!\perp A \mid L\) + \(\Pr[A=a \mid L] > 0\)

“Ignorability”는 처리 배정 메커니즘을 무시해도 된다는 뜻이다. \(L\)로 조건부하면 배정 메커니즘이 잠재 결과에 대해 무정보적이므로 세부사항을 무시할 수 있다.


9 관련 주제

이전/다음

같은 카테고리

다른 카테고리


10 참고 문헌

  • Hernán, M. A. & Robins, J. M. (2020). Causal Inference: What If, Ch.3. Chapman & Hall/CRC.
  • Rosenbaum, P. R. & Rubin, D. B. (1983). The central role of the propensity score in observational studies for causal effects. Biometrika, 70(1), 41-55.
  • Hernán, M. A. & Robins, J. M. (2016). Using big data to emulate a target trial when a randomized trial is not available. American Journal of Epidemiology, 183(8), 758-764.

Subscribe

Enjoy this blog? Get notified of new posts by email: