1 각 연구 설계 상세
이 파일은 20번 연구 설계 대분류의 각 설계 상세 섹션을 분리한 것이다. 관련: 22 — 타당성·편향·인과 추론·효과 지표
1.1 RCT / A/B Test
무작위 배정, 블라인딩, 검정력 분석, Sequential Testing, ITT vs Per-Protocol vs LATE 등 설계 원칙의 상세 설명과 Python/R 코드는 32편 — RCT와 A/B 테스트의 설계 원칙에 있다. 이 절에서는 ITT·PP·LATE의 핵심 차이만 요약한다.
1.1.1 ITT vs Per-Protocol vs LATE
A/B 테스트에서 “처치군”에 배정된 유저가 실제로 처치를 받지 않을 수 있다 (기능 미사용). 이때 분석 전략에 따라 추정하는 효과가 다르다.
핵심 용어
- ITT (Intention-to-Treat, 배정 의도 분석): 실제 처치 여부와 무관하게 무작위 배정된 그룹 기준으로 분석하는 방법. 기능을 배정받았지만 사용하지 않은 유저도 처치군에 포함한다. “배포하면 전체적으로 어떤 효과가 나는가”를 편향 없이 추정한다.
- Per-Protocol (PP, 프로토콜 준수 분석): 처치를 실제로 이행한 참여자만 분석하는 방법. 기능을 직접 사용한 유저만 처치군으로 간주한다. 처치의 순수 효능을 보려하지만, 사용 여부가 유저의 자발적 선택이어서 자기선택 편향이 생길 수 있다.
- LATE (Local Average Treatment Effect, 국소 평균 처치 효과): 순응자(Complier)에 한정한 인과 효과. 순응자는 “배정 여부에 따라 처치 행동이 바뀌는 사람”이며, \(\text{LATE} = \text{ITT} / \text{순응률}\)으로 편향 없이 추정한다.
- ATE (Average Treatment Effect, 평균 처치 효과): 전체 모집단에 처치를 적용했을 때의 기대 효과 차이 (\(E[Y(1) - Y(0)]\)). ITT는 ATE의 편향 없는 추정량이다.
| 분석 방법 | 추정량 | 수식 | 특징 |
|---|---|---|---|
| ITT (Intention-to-Treat) | ATE (배포 효과) | \(E[Y \mid Z=1] - E[Y \mid Z=0]\) | 배정 기준, 보수적, 편향 없음 |
| Per-Protocol | ATT 근사 | \(E[Y \mid D=1] - E[Y \mid D=0]\) | 실제 사용 기준, 선택 편향 위험 |
| LATE | 순응자 ATE | \(\frac{ITT}{\text{순응률}}\) | 순응자 한정, 편향 없음, IV 필요 |
1.1.2 수치 예시: 세 분석의 차이
실험 설계:
처치군 10,000명 배정 → 실제 새 기능 사용자 6,000명
대조군 10,000명
실제 효과: 기능 사용 시 전환율 +2%p (10% → 12%)
ITT 분석:
처치군 전환율 = 0.6 × 12% + 0.4 × 10% = 11.2%
대조군 전환율 = 10%
ITT 효과 = 1.2%p ← 실제 2%p보다 희석됨
해석: "기능을 배포하면 전체 유저 대비 1.2%p 전환율 개선"
Per-Protocol 분석:
실제 사용자 6,000명 전환율 = 12%
대조군 = 10%
PP 효과 = 2%p ← 정확해 보이지만...
문제: 사용자 6,000명이 자기 선택 → 원래 전환율이 11%였을 수 있음
→ 실제 효과는 1%p인데 2%p로 과대 추정
LATE (도구변수):
LATE = ITT / 순응률 = 1.2%p / 0.6 = 2.0%p
해석: "기능을 실제로 사용한 순응자의 인과 효과 = 2%p"
→ 선택 편향 없이 순응자의 진짜 효과를 복원
1.2 코호트 연구 (Cohort Study)
구조, 전향적/후향적 차이, RR 수식과 CI, 인시던스 레이트, Python/R 코드는 33편 — 관찰 연구 설계에 있다. 이 절에서는 33편에 없는 코호트 vs 종단 연구 구분과 IT 리텐션 코드를 다룬다.
1.2.1 코호트 vs 종단 연구
혼동하기 쉬운 두 개념을 구분한다:
| 구분 | 코호트 연구 (Cohort Study) | 종단 연구 (Longitudinal Study) |
|---|---|---|
| 초점 | 노출 → 결과 (인과 탐색) | 시간에 따른 변화 패턴 |
| 비교 구조 | 노출군 vs 비노출군 | 같은 집단의 시점 간 비교 |
| 분석 | RR, HR, 생존분석 | 성장 곡선, 반복측정 ANOVA, LMM |
| IT 예시 | 기능 사용자 vs 미사용자 이탈률 비교 | 사용자의 월별 engagement 추이 |
1.2.2 IT 적용: 가입 월 기반 코호트 리텐션
import pandas as pd
import numpy as np
# --- 시뮬레이션 데이터 ---
np.random.seed(42)
n = 5000
df = pd.DataFrame({
"user_id": range(n),
"signup_date": pd.date_range("2025-01-01", periods=365, freq="D")[
np.random.randint(0, 365, n)
],
"last_active": pd.date_range("2025-01-01", periods=365, freq="D")[
np.random.randint(0, 365, n)
]
})
df["last_active"] = df[["signup_date", "last_active"]].max(axis=1) + pd.to_timedelta(
np.random.exponential(60, n), unit="D"
)
# --- 코호트 구성 ---
df["cohort"] = df["signup_date"].dt.to_period("M")
df["tenure_months"] = (
(df["last_active"] - df["signup_date"]).dt.days / 30.44
).astype(int)
# --- 코호트별 리텐션 테이블 ---
cohort_sizes = df.groupby("cohort")["user_id"].nunique()
retention_data = []
for month_offset in range(13):
active = df[df["tenure_months"] >= month_offset].groupby("cohort")["user_id"].nunique()
retention = (active / cohort_sizes).rename(f"M+{month_offset}")
retention_data.append(retention)
retention_table = pd.concat(retention_data, axis=1)
print("=== 코호트 리텐션 테이블 ===")
print(retention_table.round(2))1.2.3 RR (Relative Risk) 수식
RR (Relative Risk, 상대 위험도): 비노출군 대비 노출군의 결과 발생 확률 비율. 1보다 크면 노출이 위험을 높이고, 1보다 작으면 노출이 보호 효과를 가진다. 코호트 연구에서 발생률을 알 수 있을 때 사용 가능하다.
\[RR = \frac{P(\text{결과} \mid \text{노출})}{P(\text{결과} \mid \text{비노출})} = \frac{a / (a+b)}{c / (c+d)}\]
- \(RR = 1\): 연관 없음
- \(RR > 1\): 노출이 위험 증가
- \(RR < 1\): 노출이 보호 효과
1.3 케이스-컨트롤 연구 (Case-Control Study)
OR 수식, OR vs RR 괴리, Fisher’s exact test, 로지스틱 회귀, Python/R 코드는 33편에 있다. 이 절에서는 33편에 없는 후향적 코호트 vs 케이스-컨트롤 구분을 다룬다.
핵심 용어
- 케이스-컨트롤 연구: 결과가 발생한 집단(케이스)과 발생하지 않은 집단(컨트롤)을 역방향으로 비교해 과거 노출 여부를 조사하는 설계. 결과가 드물 때 코호트 연구보다 훨씬 효율적이다.
- OR (Odds Ratio, 오즈비): 케이스군의 노출 오즈 대 컨트롤군의 노출 오즈의 비율. 케이스-컨트롤 연구에서는 발생률을 알 수 없어 RR을 직접 계산할 수 없고, OR만 계산 가능하다. 결과 발생 확률이 10% 미만으로 낮을 때 OR \(\approx\) RR로 해석할 수 있다.
- 매칭(Matching): 케이스와 컨트롤을 나이·성별 등 교란 변수 기준으로 짝지어 선택함으로써 교란을 제거하는 방법. 매칭된 쌍은 이후 조건부 로지스틱 회귀로 분석한다.
1.3.1 후향적 코호트 vs 케이스-컨트롤
둘 다 과거 데이터를 사용하지만 집단 구성 기준이 다르다:
후향적 코호트: 케이스-컨트롤:
"노출" 기준으로 집단 구성 "결과" 기준으로 집단 구성
노출군 ──→ 결과 발생? 케이스(결과+) ──→ 과거 노출?
비노출군 ──→ 결과 발생? 컨트롤(결과-) ──→ 과거 노출?
→ RR 계산 가능 → OR만 계산 가능 (발생률 모름)
IT로 대응하면:
후향적 코호트: "기능 X를 쓴 유저 vs 안 쓴 유저 → 이탈했는가?"
케이스-컨트롤: "이탈한 유저 vs 유지 유저 → 과거에 기능 X를 썼는가?"
언제 케이스-컨트롤이 유리한가? 결과가 드물 때. 예를 들어 이탈률이 2%인 서비스에서 코호트 방식으로 10,000명을 추적하면 이탈자가 200명밖에 안 나온다. 케이스-컨트롤은 이탈자 200명을 직접 모집하고 매칭된 컨트롤 200명을 선택하므로, 같은 검정력을 훨씬 적은 비용으로 달성한다.
1.4 단면 연구 (Cross-sectional Study)
유병률, 교차 분석, Python SQL 예시는 33편에 있다.
단면 연구는 특정 시점의 스냅샷으로 노출과 결과를 동시에 측정한다. 시간적 선후 관계를 알 수 없으므로 인과 방향이 불명확하다.
- IT 예시: “기능X 사용자의 만족도가 낮다” → 기능X가 불만족을 유발하는지, 불만족한 사용자가 기능X를 쓰는지 알 수 없음
- 가치: 가설 생성 단계에서 유용 → 코호트/RCT로 인과 확인
단면 → 코호트 → RCT 확장 흐름:
단면: "다크모드 사용자의 세션 시간이 길다" (관찰, 인과 불명)
↓ 가설: 다크모드 → 세션 시간 증가?
코호트: 다크모드 전환 전후 세션 시간 추적 (시간 선후 확인)
↓ 연관 확인?
RCT: 다크모드를 무작위 배정하여 인과 검증
1.5 준실험적 설계 요약
무작위 배정이 불가능할 때 자연 실험 상황을 활용해 인과 효과를 추정하는 설계들이다.
- DiD (Difference-in-Differences, 이중 차분): 처치군-대조군 각각의 처치 전후 변화량을 서로 빼서 처치 효과를 분리하는 방법. “처치가 없었다면 두 집단이 동일한 추세를 따랐을 것”이라는 평행 추세 가정이 핵심이다.
- ITS (Interrupted Time Series, 단절 시계열): 처치 시점을 기준으로 시계열의 수준과 기울기 변화를 추정하는 방법. 단일 집단 데이터만으로도 분석 가능하지만, 별도 대조군이 없으면 외부 사건의 영향을 배제하기 어렵다.
- RDD (Regression Discontinuity Design, 회귀 불연속 설계): 임계값을 기준으로 처치가 결정될 때, 임계값 근방에서 처치 여부가 사실상 무작위임을 이용해 인과 효과를 추정하는 방법.
- Stepped Wedge: 모든 클러스터가 순차적으로 처치군으로 전환하되, 전환 시점을 무작위 배정하는 설계. 윤리적 이유로 대조군을 영구적으로 유지할 수 없을 때 유용하다.
- SCM (Synthetic Control Method, 합성 대조군 방법): 여러 대조 단위의 가중합으로 가상의 대조 집단을 구성해 인과 효과를 추정하는 방법. 처치 단위가 하나뿐일 때 DiD의 대안이 된다.
| 설계 | 핵심 아이디어 | 핵심 가정 | IT 적용 |
|---|---|---|---|
| DiD | 처치/대조 × 전/후 비교 | 평행 추세 | 지역별 순차 출시 |
| ITS | 개입 전후 시계열 추세 비교 | 추세 연속성 | 알고리즘/정책 변경 |
| RDD | 임계값 근방 ≈ 무작위 배정 | 비조작, 연속성 | 등급 기반 혜택 |
| Stepped Wedge | 모든 클러스터가 순차 전환 | 시간 효과 통제 | 단계적 롤아웃 |
| SCM | 가상 대조군을 가중합으로 생성 | 가중합 재현성 | 단일 지역 정책 효과 |
1.6 Factorial Design
Factorial Design은 복수의 처치(factor)를 동시에 교차 배정하는 설계다. 32편의 단일 처치 A/B 테스트와 달리, 처치 간 상호작용(interaction)을 검출할 수 있다.
1.6.1 2×2 Factorial 구조
요인 B (가격)
B₀ (기존) B₁ (할인)
요인 A (UI) A₀ ┌──────────┬──────────┐
(기존)│ 그룹 1 │ 그룹 2 │
│ 기존UI+ │ 기존UI+ │
│ 기존가격 │ 할인가격 │
A₁ ├──────────┼──────────┤
(신규)│ 그룹 3 │ 그룹 4 │
│ 신규UI+ │ 신규UI+ │
│ 기존가격 │ 할인가격 │
└──────────┴──────────┘
1.6.2 상호작용 효과(Interaction)의 직관
주 효과(Main Effect): 한 요인의 평균적 효과
- A의 주 효과 = (그룹3 + 그룹4)/2 − (그룹1 + 그룹2)/2
- B의 주 효과 = (그룹2 + 그룹4)/2 − (그룹1 + 그룹3)/2
상호작용 효과: “한 요인의 효과가 다른 요인의 수준에 따라 달라지는 정도”
예시: 전환율 결과
B₀ (기존가격) B₁ (할인가격)
A₀ (기존 UI) 10% 15% ← 할인 효과 +5%p
A₁ (신규 UI) 12% 22% ← 할인 효과 +10%p
주 효과만 보면:
UI 효과 = (12+22)/2 - (10+15)/2 = 17 - 12.5 = +4.5%p
가격 효과 = (15+22)/2 - (10+12)/2 = 18.5 - 11 = +7.5%p
상호작용:
신규 UI에서 할인 효과가 5%p 더 크다 (10% vs 5%)
→ UI × 가격 상호작용 = (22-12) - (15-10) = 10 - 5 = +5%p
→ "신규 UI에서 할인이 시너지를 낸다"
상호작용이 있으면 주 효과만으로는 최적 조합을 찾을 수 없다. 반드시 Factorial Design으로 교차 배정해야 한다.
1.6.3 A/B 테스트와의 비교
| 측면 | 순차적 A/B 2회 | 2×2 Factorial |
|---|---|---|
| 실험 횟수 | 2회 (A → B) | 1회 |
| 상호작용 | 검출 불가 | 검출 가능 |
| 표본 효율 | 각 요인 n/2 | 각 요인 n (공유) |
| 복잡성 | 낮음 | 중간 |
| 주의사항 | 시간 효과 혼입 | 셀별 표본 크기 감소 |
1.6.4 Python 코드: 2-way ANOVA
import pandas as pd
import numpy as np
import statsmodels.api as sm
from statsmodels.formula.api import ols
# --- 시뮬레이션: UI × 가격 Factorial ---
np.random.seed(42)
n_per_cell = 500
data = []
for ui in [0, 1]:
for price in [0, 1]:
# 주 효과 + 상호작용 + 노이즈
base = 10
ui_effect = 2 * ui
price_effect = 5 * price
interaction = 5 * ui * price # 상호작용!
y = np.random.normal(
base + ui_effect + price_effect + interaction,
8,
n_per_cell
)
for val in y:
data.append({"ui": ui, "price": price, "conversion": val})
df = pd.DataFrame(data)
# 2-way ANOVA
model = ols("conversion ~ C(ui) * C(price)", data=df).fit()
anova_table = sm.stats.anova_lm(model, typ=2)
print(anova_table)1.7 Multi-Armed Bandit (MAB)
MAB는 탐색(exploration)과 수확(exploitation)을 동적으로 균형맞추는 적응적 설계다. 전통적 A/B 테스트가 실험 기간 동안 고정 비율(50:50)로 배정하는 반면, MAB는 좋은 성과를 보이는 변형에 점점 더 많은 트래픽을 할당한다.
1.7.1 A/B 테스트 vs MAB
A/B Test:
실험 기간 전체에 걸쳐 50:50 고정 배정
실험 종료 후 최적 변형을 선택
→ 실험 기간 동안 열등한 변형에도 50% 트래픽 소모 ("regret")
MAB:
초기에는 균등 배정, 성과에 따라 배정 비율을 동적 조정
좋은 변형에 더 많은 트래픽 → 누적 보상 최대화
→ 실험 기간 동안의 기회비용을 줄임
Trade-off:
A/B Test: 통계적 추론(p-value, CI)에 최적
MAB: 누적 보상 최대화에 최적, 통계적 추론은 어려움
1.7.2 Thompson Sampling
베이지안 MAB의 대표적 알고리즘. 각 변형의 성공률에 대한 사후분포에서 샘플링하여 배정을 결정한다.
메커니즘:
- 각 변형(arm)의 성공률을 Beta 분포로 모델링: \(\theta_k \sim \text{Beta}(\alpha_k, \beta_k)\)
- 각 시행에서 모든 변형의 사후분포에서 한 값씩 샘플링
- 가장 높은 샘플을 뽑은 변형을 선택하여 노출
- 관측된 결과로 사후분포를 업데이트: 성공이면 \(\alpha_k + 1\), 실패면 \(\beta_k + 1\)
import numpy as np
class ThompsonSampling:
"""
이진 결과(전환 여부)에 대한 Thompson Sampling.
각 arm의 전환율을 Beta 분포로 추정한다.
"""
def __init__(self, n_arms):
# Beta(1, 1) = Uniform(0, 1): 무정보 사전분포
self.alpha = np.ones(n_arms) # 성공 횟수 + 1
self.beta = np.ones(n_arms) # 실패 횟수 + 1
def select_arm(self):
"""각 arm의 사후분포에서 샘플링, 최대값의 arm 선택."""
samples = np.random.beta(self.alpha, self.beta)
return np.argmax(samples)
def update(self, arm, reward):
"""관측 결과로 사후분포 업데이트."""
if reward == 1:
self.alpha[arm] += 1
else:
self.beta[arm] += 1
def get_estimates(self):
"""각 arm의 추정 전환율 (사후 평균)."""
return self.alpha / (self.alpha + self.beta)
# --- 시뮬레이션 ---
np.random.seed(42)
true_rates = [0.10, 0.12, 0.15] # 3개 변형의 실제 전환율
n_trials = 10000
ts = ThompsonSampling(n_arms=3)
rewards = []
selections = []
for t in range(n_trials):
arm = ts.select_arm()
reward = np.random.binomial(1, true_rates[arm])
ts.update(arm, reward)
rewards.append(reward)
selections.append(arm)
# 결과
print("=== Thompson Sampling 결과 ===")
print(f"추정 전환율: {ts.get_estimates().round(4)}")
print(f"실제 전환율: {true_rates}")
for k in range(3):
count = selections.count(k)
print(f"Arm {k}: {count}회 선택 ({count/n_trials:.1%})")1.7.3 MAB의 한계
| 한계 | 설명 |
|---|---|
| 통계적 추론 어려움 | 배정 비율이 결과에 의존하므로 표준 p-value/CI 부적절 |
| 지연된 보상 | 전환이 수일 후 발생하면 즉시 업데이트 불가 |
| 맥락 무시 | 기본 MAB는 사용자 특성을 고려하지 않음 (→ Contextual Bandit) |
| 비정상성 | 최적 변형이 시간에 따라 바뀔 수 있음 |
1.8 Synthetic Control Method (SCM)
SCM은 단일 처치 단위에 대해 가상의 대조군을 만드는 준실험적 방법이다. Abadie, Diamond & Hainmueller (2010)가 제안했다.
1.8.1 DiD vs SCM
| 측면 | DiD | SCM |
|---|---|---|
| 대조군 | 사전 선정된 대조 집단 | 여러 대조 단위의 가중합으로 구성 |
| 가정 | 평행 추세 | 가중합이 처치 전 추세를 재현 |
| 처치 단위 수 | 다수 가능 | 보통 1개 (소수) |
| 가중치 | 없음 (단순 차분) | 데이터 기반으로 최적화 |
1.8.2 직관
상황: 한국에서만 새 정책 적용, 효과를 알고 싶음
DiD 접근: 한국 vs 일본 (평행 추세 가정)
→ 일본이 한국과 추세가 다르면 편향
SCM 접근: "가상 한국"을 만듦
가상 한국 = 0.4 × 일본 + 0.3 × 대만 + 0.2 × 싱가포르 + 0.1 × 홍콩
→ 정책 적용 전 한국의 추세를 가장 잘 재현하는 가중합
→ 정책 적용 후: 실제 한국 - 가상 한국 = 처치 효과
1.8.3 Python 코드 (간략)
import numpy as np
from scipy.optimize import minimize
def synthetic_control(Y_treat_pre, Y_donors_pre, Y_donors_post):
"""
처치 전 기간에서 처치 단위를 가장 잘 재현하는 가중치를 찾는다.
Parameters
----------
Y_treat_pre : array (T_pre,)
Y_donors_pre : array (T_pre, J) J = 후보 대조 단위 수
Y_donors_post : array (T_post, J)
"""
J = Y_donors_pre.shape[1]
def objective(w):
synthetic = Y_donors_pre @ w
return np.sum((Y_treat_pre - synthetic) ** 2)
# 제약: 가중치 합 = 1, 각 가중치 >= 0
constraints = {"type": "eq", "fun": lambda w: np.sum(w) - 1}
bounds = [(0, 1)] * J
w0 = np.ones(J) / J
result = minimize(objective, w0, bounds=bounds, constraints=constraints)
weights = result.x
# 처치 후 반사실
Y_synthetic_post = Y_donors_post @ weights
return weights, Y_synthetic_post1.9 도구 변수 (Instrumental Variables, IV)
IV의 정의, 2SLS 수식, Weak Instruments, LATE 해석, Python/R 코드는 35편 — 인과 추론 프레임워크에 있다. 이 절에서는 35편에 간략한 IT Encouragement Design을 상세히 다룬다.
핵심 용어
- 도구변수 (IV, Instrumental Variable): 처치 변수(\(T\))에 영향을 주지만, 결과(\(Y\))에는 오직 처치를 통해서만 영향을 미치는 변수(\(Z\)). 미관측 교란이 있어 처치 효과를 직접 추정할 수 없을 때, IV를 이용해 우회적으로 인과 효과를 추정한다.
- 2SLS (Two-Stage Least Squares, 이단계 최소자승법): IV 추정의 가장 일반적인 방법. 1단계에서 IV로 처치 변수를 예측하고, 2단계에서 예측된 처치값으로 결과를 회귀한다. 교란과 무관한 처치의 외생적 변동만 이용하므로 편향이 없다.
- Exclusion Restriction (배제 제약): IV가 결과에 처치를 통해서만 영향을 미친다는 가정. 이 가정이 깨지면 IV 추정에 편향이 생긴다.
1.9.1 IT Encouragement Design
A/B 테스트에서 기능을 강제로 사용시킬 수 없을 때, Encouragement Design이 대안이 된다. 알림/이메일을 무작위 발송(Z)하여 기능 사용(T)을 장려하고, 기능 사용이 결과(Y)에 미치는 효과를 추정한다.
상황:
새 추천 기능을 출시했지만, 유저가 직접 활성화해야 함
→ 기능 사용 여부를 무작위 배정할 수 없음 (유저의 선택)
→ 관심 많은 유저가 기능을 더 많이 쓸 것 → 교란
Encouragement Design:
Z(알림 발송)을 무작위 배정 → 알림 받은 유저가 기능을 더 많이 활성화
→ Z는 도구변수 역할
알림 발송(Z) ──→ 기능 사용(T) ──→ 구매(Y)
↑ ↑
└── 관심도(U) ──┘
Z의 3가지 조건 충족:
1. Relevance: 알림 → 기능 사용 확률 ↑ (검증 가능)
2. Exclusion: 알림 자체가 구매에 직접 영향 없음 (가정, 주의 필요)
3. Independence: 알림 발송이 무작위이므로 U와 독립
LATE = ITT 효과 / 순응률
= (구매|알림O - 구매|알림X) / (기능사용|알림O - 기능사용|알림X)
Exclusion restriction 주의: “알림 자체가 구매에 직접 영향을 주지 않는다”는 가정이 위배될 수 있다. 예를 들어 알림에 할인 쿠폰이 포함되면, 알림 → 구매 직접 경로가 생겨 IV 가정이 깨진다. 알림 내용이 순수하게 “기능 소개”여야 한다.
1.9.2 Python: LATE 추정
from linearmodels.iv import IV2SLS
# Z: 알림 발송 (instrument, 무작위)
# D: 기능 사용 (endogenous treatment)
# Y: 구매 여부 (outcome)
model = IV2SLS.from_formula("Y ~ 1 + [D ~ Z]", data=df)
result = model.fit(cov_type="robust")
print(result.summary)
# result.params["D"] = LATE 추정량1.10 Nested Case-Control & Case-Cohort
코호트 연구 내에서 비용을 절감하기 위한 하이브리드 설계들이다.
1.10.1 Nested Case-Control
전체 코호트 (10,000명)
│
├─ 추적 중 결과 발생자 → 케이스 (200명)
│
└─ 결과 미발생자 중 매칭 → 컨트롤 (200명 × 매칭 비율)
(케이스 발생 시점 기준 위험 집합에서 추출)
장점: 전체 코호트의 바이오마커/비용이 큰 변수를
케이스 + 컨트롤에 대해서만 측정 → 비용 절감
단점: 일부 정보 손실 (비선택 개체 미활용)
IT 적용: 전체 사용자 코호트에서 이탈자(케이스)를 식별하고, 이탈 시점에 활성이었던 사용자 중 매칭된 컨트롤을 선택하여, 비용이 큰 심층 로그 분석을 케이스+컨트롤에 대해서만 수행한다.
1.10.2 Case-Cohort
전체 코호트 (10,000명)
│
├─ 추적 중 결과 발생자 → 케이스 (전수)
│
└─ 전체 코호트의 랜덤 서브샘플 → 서브코호트 (1,000명)
(결과 발생 여부와 무관하게 선정)
분석: 케이스 전수 + 서브코호트를 결합하여 분석
장점: 서브코호트를 여러 결과에 대해 재사용 가능
(Nested CC는 결과마다 새 컨트롤 필요)
1.10.3 비교
| 특성 | Nested Case-Control | Case-Cohort |
|---|---|---|
| 컨트롤 선택 | 매칭 (시점별 위험 집합) | 랜덤 서브샘플 (고정) |
| 여러 결과 분석 | 결과마다 새 컨트롤 | 서브코호트 재사용 |
| 분석 방법 | 조건부 로지스틱 | 가중 Cox 모델 |
| IT 적용 | 단일 이탈 원인 심층 분석 | 이탈, 업그레이드, 불만 등 복수 결과 |
1.11 종단 연구 (Longitudinal Study)
동일한 개체를 반복 측정하여 시간에 따른 변화를 추적하는 설계다.
1.11.1 코호트와의 차이
- 코호트: 노출 → 결과의 인과 관계에 초점
- 종단: 시간에 따른 변화 패턴(궤적) 자체에 초점
1.11.2 분석 방법
| 방법 | 특징 | IT 적용 |
|---|---|---|
| Repeated Measures ANOVA | 시점 간 차이 검정, 구형성 가정 | 주간 engagement 비교 |
| LMM (Linear Mixed Model) | 개인별 랜덤 절편/기울기, 결측 허용 | 사용자별 학습 곡선 모델링 |
| GEE | 모집단 평균 효과 추정 | 정책 효과의 평균적 추세 |
| Growth Curve Model | 비선형 궤적 모델링 | 사용자 engagement 성장 패턴 |
방법론 개념 요약
- LMM (Linear Mixed Model, 선형 혼합 모형): 모든 개체에 공통인 고정 효과(Fixed Effects)와 개인별 랜덤 효과(Random Effects)를 동시에 추정하는 모형. 개체 간 변동과 시점 내 변동을 분리하여, 무작위 결측(MAR)이 있어도 분석할 수 있고 개인별 성장 궤적도 모델링할 수 있다.
- GEE (Generalized Estimating Equations, 일반화 추정 방정식): 개인별 궤적보다 모집단 평균 추세를 추정하는 방법. 개체 내 반복측정 상관 구조를 작업 상관 행렬(working correlation matrix)로 지정해 표준오차를 보정한다. 정책 효과의 “전체 평균적” 추세를 볼 때 적합하다.
- Growth Curve Model (성장 곡선 모형): LMM의 확장으로, 시간에 따른 비선형 궤적(지수적·S자형 등)을 모델링한다. 개체마다 성장 속도와 출발점이 다를 수 있음을 허용한다.
1.11.3 바이오마커 추적 연구 구조
의학에서의 종단 설계를 IT에 대응시키면:
의학:
환자 코호트 → 3개월마다 혈압 측정 → 치료 반응 궤적 분석
IT:
사용자 코호트 → 주마다 engagement 지표 측정 → 기능 도입 후 행동 변화 분석
공통 구조:
Y_ij = β₀ + β₁·시간_j + β₂·처치_i + β₃·(시간×처치)_ij + u_i + ε_ij
└── LMM으로 적합, u_i는 개인별 랜덤 효과
1.12 요약 비교표
| 설계 | 처치 배정 | 시간 방향 | 핵심 지표 | 인과 강도 | IT 적용 |
|---|---|---|---|---|---|
| RCT/A/B | 연구자 (무작위) | 전향 | ATE, RR | ★★★★★ | A/B 테스트 |
| Factorial | 연구자 (교차) | 전향 | 주효과+상호작용 | ★★★★★ | 복수 처치 동시 실험 |
| MAB | 적응적 | 전향 | 누적 보상 | ★★★☆☆ | 실시간 최적 배분 |
| 전향적 코호트 | 자연 발생 | 전향 | RR, HR | ★★★☆☆ | 기능 출시 후 추적 |
| 후향적 코호트 | 자연 발생 | 후향 | RR | ★★★☆☆ | 로그 기반 분석 |
| 케이스-컨트롤 | 자연 발생 | 후향 | OR | ★★☆☆☆ | 이탈 원인 탐색 |
| 단면 | 없음 | 스냅샷 | 유병률 | ★☆☆☆☆ | DAU 스냅샷 |
| DiD / ITS / RDD | 자연 실험 | 전/후 | ATT, LATE | ★★★★☆ | 정책/알고리즘 변경 |
| SCM | 자연 실험 | 전/후 | 처치 효과 | ★★★★☆ | 단일 지역 정책 |
| IV | 자연 실험 | — | LATE | ★★★★☆ | Encouragement Design |
다음 파일: 22 — 타당성·편향·인과 추론·효과 지표