이 포스트는
relative_risk_odds_ratio.qmd(RR·OR 정의) 의 후속이다. RR·OR 만으로는 의사결정에 부족한 이유, 그리고 함께 보고해야 하는 절대·인구·인과·강건성 지표를 통합한다.
1 정의
노출 (exposure / treatment) 이 결과 (outcome) 에 미치는 효과의 크기·방향·정밀도를 정량화하는 통계량이다.
- 연관성 지표 (measure of association): 노출과 결과의 통계적 동반 변동 — RR, OR, Rate Ratio
- 효과 지표 (measure of effect): 노출의 인과적 결과 — RD, ARR, NNT
- 영향 지표 (measure of impact): 노출 제거 시 인구 전체에서 줄어드는 위험 — AR, PAR, PAF
- 인과 추정량 (causal estimand): 잠재적 결과로 정의된 모집단 모수 — ATE, ATT, ITT, LATE
연관성과 효과는 동일한 수치이지만 해석 lens 가 다르다. RR = 1.5 는 “노출군이 1.5 배 위험” (연관성) 인 동시에, 노출과 결과가 인과적으로 연결되어 있다면 “노출 때문에 1.5 배 위험” (효과) 으로 읽힌다. 인과적 해석은 가정 (교환가능성·일관성·양수성) 이 만족될 때만 정당하다 (Hernan & Robins, 2020, Ch.3).
같은 데이터에서 같은 RR = 2.0 이 나와도, 의사결정자는 4 가지 다른 질문에 답해야 한다.
| 질문 | 답하는 lens | 지표 |
|---|---|---|
| “노출군과 비노출군의 위험이 얼마나 다른가?” | 연관성 | RR, OR |
| “한 사람이 노출되면 위험이 절대적으로 얼마나 늘어나는가?” | 효과 | RD, ARR, NNT |
| “이 노출을 사회 전체에서 제거하면 사건이 얼마나 줄어드는가?” | 영향 | AR, PAR, PAF |
| “이 효과가 인과적으로 처치 때문인가, 우연이나 교란 때문인가?” | 인과 | ATE, ATT, ITT |
RR/OR 만 알면 첫 번째 질문에만 답하고, 임상·정책·인과 의사결정에는 부족하다. 의약 가이드라인이 RR 외에 ARR·NNT·E-value 까지 함께 보고하도록 의무화된 것은 이 때문이다.
2 절대 효과 — RR/OR 가 절대 못 말하는 것
RR/OR 은 상대적 비율이라 임상·비즈니스 의사결정의 임팩트를 직접 보여주지 못한다. RR = 2.0 이라도 절대 위험이 0.0001 → 0.0002 면 100 명을 노출시켜도 1 명의 추가 사건도 생기지 않는다.
- 약 A: 사망률 8% → 4% (RR = 0.5, RRR = 50%, ARR = 4%p, NNT = 25)
- 약 B: 사망률 0.0008% → 0.0004% (RR = 0.5, RRR = 50%, ARR = 0.0004%p, NNT = 250,000)
RR 만 보면 두 약의 효과가 같지만, NNT 로 보면 약 B 는 25 만 명 처방해야 1 명 살린다. 비용·부작용 대비 가치가 절대 같지 않다.
2.1 위험차 — Risk Difference (RD) / Absolute Risk Reduction (ARR)
\[ \text{RD} = P(\text{사건} \mid \text{노출}) - P(\text{사건} \mid \text{비노출}) = p_E - p_{\bar E} \]
방향이 반대면 (예: 처치가 사건을 줄이는 경우) 절대 위험 감소 (Absolute Risk Reduction, ARR) 라 부른다.
\[ \text{ARR} = p_C - p_T \]
- 단위: percentage point (%p) — % 가 아님에 주의
- 해석: 노출이 한 사람에게 평균적으로 더해지는 위험의 절대량
- A/B test 의 “uplift” 와 동일한 양
2.2 상대 위험 감소 — Relative Risk Reduction (RRR)
\[ \text{RRR} = 1 - \text{RR} = \frac{p_C - p_T}{p_C} \]
- 단위: 비율 (%)
- 임상에서는 RRR 이 “큰 인상” 을 주므로 (50% 감소!) 의약·헬스케어 광고에 자주 등장. ARR 과 함께 보고하지 않으면 오도 가능 (위 직관 박스 참조).
2.3 Number Needed to Treat (NNT) / Number Needed to Harm (NNH)
\[ \text{NNT} = \frac{1}{\text{ARR}}, \quad \text{NNH} = \frac{1}{\text{ARI}} \]
여기서 ARI (Absolute Risk Increase) 는 처치가 부작용을 늘리는 경우의 절대 차이.
- NNT 의 의미: 1 명의 사건을 예방하기 위해 평균적으로 몇 명을 처치해야 하는가
- NNH 의 의미: 1 명의 부작용이 발생할 때까지 평균적으로 몇 명을 노출시키는가
- 항상 정수로 올림 (5.3 → 6) — “5.3 명 처치” 는 의미 없음
ARR = 0.04 = 4%p 의 의미를 풀어보면 “처치를 받은 100 명 중 처치 덕분에 사건을 피한 사람이 4 명” 이다. 따라서 1 명의 사건을 예방하려면 몇 명을 처치해야 하는가? 100 / 4 = 25 명이다. 일반화하면 \(\text{NNT} = 1 / \text{ARR}\).
역산도 가능: 마케팅에서 “이 캠페인은 NNT = 50” 이라고 들으면, 50 명에게 캠페인을 보내야 1 명의 추가 전환이 생긴다는 뜻이다. 캠페인 단가 × 50 ≤ 1 명의 LTV 가 의사결정 임계.
작은 NNT 가 항상 좋은가? 그렇지 않다. NNT 의 절대값만 봐서는 안 되고 (1) 사건의 심각성 (사망 vs 가벼운 두통), (2) 처치의 부작용·비용, (3) 표본 크기 → CI 폭을 함께 봐야 한다. 항암제는 NNT = 50 이라도 가치 있고, 비타민제는 NNT = 5 라도 부작용이 있으면 무가치할 수 있다.
AI 추천 시스템 A/B Test
대조군 이탈률: 40%, 처치군 이탈률: 30%
ARR = 10%p, NNT = 1 / 0.10 = 10
→ 10 명에게 추천을 적용하면 평균 1 명의 이탈을 방지
비용-효과 결정:
추천 비용: 사용자당 월 $2 → NNT × 비용 = $20
고객 LTV: $200
$20 < $200 → 경제적으로 타당
만약 NNT = 200 이면: $400 > $200 → 비경제적
이 방식은 22-study-design-validity-bias-causal.qmd §6 에서 확장 다룬다.
3 인구 영향 지표 — 정책·공중보건의 lens
같은 RR 이라도 노출 인구 비율 에 따라 사회 전체에 미치는 영향은 천차만별이다. 흡연 (RR 폐암 ≈ 20, 노출률 25%) 과 라돈 (RR 폐암 ≈ 1.5, 노출률 5%) 은 RR 만 보면 흡연이 압도적이지만, 노출률을 곱한 인구 영향 은 흡연 vs 라돈 모두 공중보건상 의미가 있다.
3.1 Attributable Risk (AR) / Attributable Risk Percent (AR%)
\[ \text{AR} = p_E - p_{\bar E} = \text{RD}, \quad \text{AR\%} = \frac{p_E - p_{\bar E}}{p_E} = \frac{\text{RR} - 1}{\text{RR}} \]
- AR 의 수치는 RD 와 동일하지만 lens 가 다름: “노출이 노출자에게 더해주는 위험”
- AR% 는 “노출자 사건 중 노출이 원인인 비율”
3.2 Population Attributable Risk (PAR) / Population Attributable Fraction (PAF)
\[ \text{PAR} = p_{pop} - p_{\bar E}, \quad \text{PAF} = \frac{p_e (\text{RR} - 1)}{1 + p_e (\text{RR} - 1)} \]
여기서 \(p_e\) 는 인구 중 노출 비율.
- PAR 의 해석: 만약 모든 사람의 노출을 제거하면 인구 전체 위험이 얼마나 줄어드는가
- PAF 의 해석: 인구 사건 중 노출이 원인인 비율
- 정책 평가의 핵심 — 흡연 정책, 백신 캠페인, 비만 개입의 영향 측정
- 흡연 → 폐암: RR = 20, \(p_e = 0.25\) → PAF = \(\frac{0.25 \times 19}{1 + 0.25 \times 19} ≈ 0.83\) (폐암의 83% 가 흡연 탓)
- 라돈 → 폐암: RR = 1.5, \(p_e = 0.05\) → PAF = \(\frac{0.05 \times 0.5}{1 + 0.05 \times 0.5} ≈ 0.024\) (폐암의 2.4% 가 라돈 탓)
흡연은 강한 노출 + 높은 노출률 → 압도적 PAF. 라돈은 약한 노출 + 낮은 노출률 → 작지만 무시 못 할 PAF.
(Woodward, 2014, Ch.3) 참조.
4 인과 추정량 (Causal Estimands)
연관성 지표가 인과 효과 가 되려면 잠재적 결과 (potential outcomes) 프레임워크에서 정의된 모수에 대응되어야 한다. 같은 RR 수치라도 어느 인과 추정량을 추정하는지에 따라 해석이 달라진다.
4.1 Average Treatment Effect (ATE)
\[ \text{ATE} = E[Y^1 - Y^0] \]
- 모집단 전체에 처치를 가했을 때 vs 가하지 않았을 때의 평균 차이
- RCT 의 자연스러운 추정 대상 — 무작위 배정으로 \(Y^a \perp A\) 가 보장되어 \(E[Y \mid A=1] - E[Y \mid A=0]\) = ATE
- 관찰 연구에서는 교란 보정 (regression, IPW, g-formula) 이 필요 (Hernan & Robins, 2020, Ch.2~4)
4.2 ATE on the Treated (ATT) / on the Controls (ATC)
\[ \text{ATT} = E[Y^1 - Y^0 \mid A = 1], \quad \text{ATC} = E[Y^1 - Y^0 \mid A = 0] \]
- ATT: 실제 처치받은 집단에 한정한 효과 — 정책의 “현재 적용 결과” 평가
- ATC: 처치받지 않은 집단의 가상 효과 — 정책의 “확장 시 기대 효과” 평가
- ATE = \(p \cdot \text{ATT} + (1-p) \cdot \text{ATC}\) (where \(p = P(A=1)\))
4.3 Conditional ATE (CATE) / Heterogeneous Treatment Effect (HTE)
\[ \text{CATE}(x) = E[Y^1 - Y^0 \mid X = x] \]
- 공변량 \(X\) 의 값에 따라 효과가 달라지는지 — 효과 수정 (effect modification)
- A/B test 에서 세그먼트별 lift 분석, uplift modeling 의 추정 대상
- 머신러닝 (Causal Forest, Meta-learners) 으로 추정 (Hernan Ch.5,
Causal_Inference/05-effect-modification.qmd)
4.4 ITT vs Per-Protocol vs LATE
같은 RCT/A/B test 에서도 분석 단위에 따라 추정량이 다르다.
| 분석 | 정의 | 추정량 | 장점 | 위험 |
|---|---|---|---|---|
| ITT Intention-to-Treat | 배정 그룹 기준 (실제 처치 여부 무관) | “배정 효과” | 무작위성 보존, 선택 편향 없음 | 비순응 시 효과 희석 |
| PP Per-Protocol | 실제 처치받은 사람만 | “처치 효과” (편향 가능) | 직관적 해석 | 선택 편향 (자기선택) |
| As-Treated | 실제 받은 처치 그룹으로 재분류 | “노출 효과” (편향 가능) | 비교적 직관적 | 선택 편향 |
| LATE / CACE | 도구변수로 추정한 compliers 효과 | “순응자 효과” | 비순응 보정 | IV 가정 필요 |
신약 RCT, 1000 명 중 500 명을 처치군에 배정. 이 중 50% (250 명) 만 실제로 약을 먹고 나머지 250 명은 부작용 우려로 위약을 자기 결정으로 먹음. 대조군 500 명은 모두 위약 복용.
- ITT: “약을 권유받은 500 명 vs 위약을 권유받은 500 명” → 약을 안 먹은 절반 때문에 효과가 희석. 정책 의사결정 (“약을 환자에게 권유하면 효과가 있는가?”) 에 답함.
- PP: “약을 실제 먹은 250 명 vs 위약을 먹은 500 명+250 명” → 약을 거부한 사람이 더 건강했다면 (“순한 사람만 약을 먹음”) 효과가 과대 추정. 의약품 본질 효과에 가깝지만 편향됨.
- LATE: “배정에 응한 250 명만의 효과” → IV 가정 (배정이 결과에 직접 영향 없고 처치를 통해서만 영향) 만족 시 인과 효과 정확.
규제 기관 (FDA, EMA) 은 ITT 를 1 차 분석으로 의무화 — 비순응이 약의 가치 (부작용 회피 가능성, 복용 어려움 포함) 를 반영하기 때문. PP 는 보조 분석.
A/B test 도 동일 — 사용자가 새 기능을 노출받고도 클릭하지 않을 수 있지만, 우리는 기능을 “노출받은” 그룹의 효과를 측정 (ITT). “실제 사용한” 그룹만 비교하면 (PP) 적극 사용자 자기선택 편향이 들어간다.
(Hernan & Robins, 2020, Ch.9, 16, 22) — A/B test 는 일반적으로 ITT 가 표준이며, AB_test/40-project-agent-ab-overview.qmd 에서 자세히 다룬다.
4.5 SATE vs PATE — 외적 타당성의 lens
\[ \text{SATE} = \frac{1}{n}\sum_{i=1}^n (Y_i^1 - Y_i^0), \quad \text{PATE} = E[Y^1 - Y^0] \]
- SATE (Sample ATE): 표본 내 효과 — 내적 타당성
- PATE (Population ATE): 모집단 효과 — 외적 타당성
- 표본이 모집단을 대표하지 않으면 SATE ≠ PATE → A/B test 결과가 전체 사용자에 일반화되지 않을 수 있음 (
22-study-design-validity-bias-causal.qmd §4.2)
4.6 Marginal vs Conditional Effect — Non-collapsibility
\[ \text{Marginal RR} = \frac{E[Y^1]}{E[Y^0]}, \quad \text{Conditional RR}(L) = \frac{E[Y^1 \mid L]}{E[Y^0 \mid L]} \]
OR 의 경우 marginal 과 conditional 이 일반적으로 다르다 (non-collapsibility) — 이는 RR/RD 와 OR 의 본질적 차이이며, 로지스틱 회귀 결과의 해석 함정이다 (Hernan & Robins, 2020, Ch.4).
가상 데이터 (남성·여성 500 명씩):
| 남성 | 사건 | 비사건 | OR |
|---|---|---|---|
| 처치 | 100 | 150 | \(\frac{100 \times 200}{150 \times 50}\) = 2.67 |
| 대조 | 50 | 200 |
| 여성 | 사건 | 비사건 | OR |
|---|---|---|---|
| 처치 | 50 | 200 | \(\frac{50 \times 200}{200 \times 50}\) = 1.0 |
| 대조 | 50 | 200 |
남성의 처치 효과는 OR = 2.67, 여성은 1.0. 두 집단을 합쳐 marginal OR 을 계산하면 단순 가중 평균이 아니다. 이게 non-collapsibility — OR 은 분모·분자가 모두 비선형으로 변하기 때문.
RR 과 RD 는 collapsible — 각 stratum 의 RR 이 모두 2.0 이면 전체 marginal RR 도 2.0. OR 만 비정상.
실무 함정: 로지스틱 회귀의 OR 은 “다른 공변량을 고정한 조건부 효과 (conditional)”. marginal OR (인구 평균) 은 따로 추정해야 (g-formula 또는 simulation). OR 을 RR 처럼 “전체 인구의 평균 효과” 로 해석하면 틀린다.
RR 사용 권장: 결과가 흔한 (>10%) 코호트·RCT 에서는 로지스틱 OR 대신 Poisson 또는 log-binomial 회귀로 RR 을 직접 추정하는 게 해석상 안전.
5 통계 검정·구간 — 효과 보고의 의무 패키지
효과 추정량은 항상 점추정 + 구간 + 검정 3 종으로 보고한다. 한 가지만 보고하면 의사결정 정보가 부족하다.
5.1 p-value, Confidence Interval, Standard Error
| 지표 | 정의 | 함정 |
|---|---|---|
| p-value | \(P(\text{관측 효과 또는 더 극단} \mid H_0)\) | 0.05 가 절대 임계 아님; 표본이 크면 임상적으로 무의미한 차이도 유의 |
| CI Confidence Interval | 반복 실험 시 모수를 포함하는 비율 (1-α) | 단일 실험에서 “이 구간에 모수가 있을 확률” 이 아님 |
| SE Standard Error | 추정량의 표본분산의 제곱근 | \(\text{SE}^2 = \text{SD}^2 / n\) — n 이 늘면 SE 감소, SD 는 불변 |
| SD Standard Deviation | 데이터의 변동성 | 모집단 특성, 표본 크기와 무관 |
- p < 0.05 + CI [0.001, 0.002]: 통계적 유의 + 임상적 무의미
- p > 0.05 + CI [-0.05, 0.50]: 통계적 비유의 + 큰 효과 가능성 (검정력 부족)
CI 의 폭이 정밀도를, p 가 무작위성과의 거리를 알려준다. 둘 다 필요하다.
“p = 0.04 이면 95% 확률로 효과가 진짜다” ❌ p 는 \(H_0\) 가 참일 때 데이터가 관측될 확률. “효과가 진짜일 확률” 은 베이지안 사후 확률이며 사전 확률·표본 크기에 의존. p 가 작아도 사전 확률이 매우 작으면 (예: 10% 가설) 사후 확률은 여전히 낮을 수 있다.
“p > 0.05 이면 효과가 없다” ❌ “효과 없음 (null) 이 참” 이 아니라 “이 표본에서 검출 못 함”. 검정력이 낮으면 큰 효과도 못 잡는다. CI 가 [-0.5, 0.5] 처럼 넓으면 “효과를 모른다” 가 정확한 해석.
“p = 0.04 가 p = 0.06 보다 효과가 강하다” ❌ p 의 절대값이 효과 크기를 의미하지 않는다. 표본이 1000 만이면 ARR = 0.001%p 도 p < 0.001. 효과 크기는 별도 지표 (Cohen’s d, RD) 로 확인.
“실험 중 p 를 매일 확인하다 0.05 도달하면 종료” ❌ 매일 확인하면 실제 false positive rate 가 알파보다 훨씬 높음 (peeking problem). 1 회 분석 alpha = 0.05 도, 매일 50 일 확인하면 실제 alpha ≈ 28%. Sequential testing (O’Brien-Fleming, Pocock) 이나 사전 표본 크기 + 1 회 종료가 정답.
대안 보고 형식:
[BAD] 처치 효과 p = 0.04, 통계적으로 유의함.
[GOOD] 처치군 vs 대조군 차이: ARR = 4.2%p (95% CI [1.1, 7.3]), p = 0.04, NNT = 24.
좋은 보고는 (1) 점추정 + 단위, (2) CI, (3) p, (4) 임상·비즈니스 임팩트 해석을 모두 포함.
5.2 효과 크기 (Effect Size) — 표준화된 효과
연속 결과의 효과를 표준편차 단위로 표준화하면 척도 간 비교 가능.
| 지표 | 수식 | 어디서 |
|---|---|---|
| Cohen’s d | \(\frac{\bar X_1 - \bar X_2}{s_{pooled}}\) | 연속 결과 두 그룹 비교 |
| Hedges’ g | Cohen’s d + 작은 표본 보정 | n < 50 시 권장 |
| Cliff’s δ | \(P(X_1 > X_2) - P(X_2 > X_1)\) | 비모수, 순위 |
| η² / ω² Eta·Omega-squared | \(\frac{SS_{between}}{SS_{total}}\) | ANOVA, 분산 설명 비율 |
| Cohen’s h | \(2\arcsin\sqrt{p_1} - 2\arcsin\sqrt{p_2}\) | 비율 비교 (proportion) |
Cohen 가이드라인: d = 0.2 (작음), 0.5 (중간), 0.8 (큼). 단 도메인마다 다르다 — 의약품 임상시험은 d = 0.2 도 의미 있고, 사회과학은 d = 0.5 가 임계.
Cohen’s d 는 평균 차이를 표준편차로 나눈 값 — 두 분포가 얼마나 분리되어 있는가의 척도.
- d = 0.2 (작음): 두 분포가 거의 겹침. 무작위로 두 사람 뽑으면 \(\sim 56\%\) 확률로 처치군이 큼 (거의 동전).
- d = 0.5 (중간): 분포가 60~70% 겹침. \(\sim 64\%\) 확률.
- d = 0.8 (큼): 분포가 50% 정도 겹침. \(\sim 71\%\) 확률.
- d = 2.0 (매우 큼): 분포가 거의 안 겹침. 한눈에 보이는 차이.
키 비유: 한국 성인 남성 (평균 174cm, SD ≈ 6cm) 과 여성 (평균 162cm, SD ≈ 5cm) 의 키 차이를 Cohen’s d 로 표준화하면 약 d = 2.2 — “한눈에 보이는” 차이. d = 0.5 는 “통계적으로 검출 가능하지만 일상에서 잘 안 느껴지는” 정도.
왜 도메인마다 임계가 다른가: 의약품 (사망률 차이) 은 d = 0.2 도 임상적으로 큰 효과 (생명) 이고, 사회과학 (학업 성취) 은 d = 0.2 가 실용적으로 무의미할 수 있음 — 결과의 가치가 다름.
A/B test 에서: conversion rate 차이 0.5%p (10% → 10.5%) 는 Cohen’s h ≈ 0.016 (매우 작음). 그러나 매출이 1B 달러 규모면 절대 효과는 큼 — 표준화된 효과 크기가 작다고 비즈니스 영향이 작다고 결론짓지 말 것. ARR (절대 효과) 과 함께 봐야 한다.
(Maxwell & Delaney, 2004, Ch.3~4)
5.3 검정력 (Power) 과 MDE — 사전 표본 산출의 base
\[ \text{Power} = 1 - \beta = P(\text{기각} \mid H_1 \text{ 참}), \quad \text{MDE} = z_\alpha + z_\beta) \cdot SE \]
- Power: \(H_1\) 이 참일 때 \(H_0\) 를 기각할 확률 — 보통 0.8 또는 0.9 목표
- MDE (Minimum Detectable Effect): 주어진 \(\alpha, \beta, n\) 으로 검출 가능한 최소 효과 크기
- A/B test 에서는 사전 MDE 산출 후 표본·기간 결정 — peeking 방지의 base
5.4 다중 검정 보정
| 보정 | 통제 대상 | 방법 |
|---|---|---|
| FWER Family-Wise Error Rate | \(P(\text{1개 이상 위양성})\) | Bonferroni: \(\alpha / k\), Holm-Bonferroni (덜 보수적) |
| FDR False Discovery Rate | 기각 중 위양성 비율 (기대값) | Benjamini-Hochberg (BH) |
A/B test 의 secondary metric 다수 분석, 메타분석의 다중 비교, GWAS 등에서 의무.
6 강건성·민감도 분석
관찰 연구의 효과 추정은 미관측 교란에 취약하다. 결론이 가정 위반에 얼마나 견디는지 정량화하는 게 강건성 분석.
6.1 E-value (VanderWeele & Ding, 2017)
관측된 RR (또는 OR) 을 1 (효과 없음) 로 만들기 위해 미관측 교란이 노출과 결과 모두에 가져야 하는 최소 RR.
\[ \text{E-value} = \text{RR}_{obs} + \sqrt{\text{RR}_{obs} \cdot (\text{RR}_{obs} - 1)} \]
- E-value = 2.5 → 미관측 교란이 노출과 결과 모두에 RR 2.5 이상의 효과를 가져야 결론이 뒤집힘
- 큰 E-value = 강건한 결론
- 관찰 연구의 표준 보고 항목 (BMJ, Annals 등 의무화 진행)
- Python:
evalue패키지 또는 직접 계산
| 관측 RR | E-value | 해석 |
|---|---|---|
| 1.2 | 1.69 | 작은 미관측 교란 (RR 1.7 정도) 로 결론 뒤집힘 → 약한 결론 |
| 1.5 | 2.37 | 중간 미관측 교란 필요 → 보통 |
| 2.0 | 3.41 | 강한 교란 필요 → 상당히 강건 |
| 5.0 | 9.47 | 거의 본 적 없는 강한 교란 필요 → 매우 강건 |
| 10.0 | 19.49 | 흡연-폐암 수준의 결론 — 거의 절대적 |
역사적 사례: 흡연-폐암 RR ≈ 20 → E-value ≈ 39. 미관측 교란이 흡연과 폐암 모두에 RR 39 이상 효과를 가져야 결론 뒤집힘 — 그런 교란은 알려진 바 없으므로 흡연-폐암 인과관계는 사실상 확정.
대비 사례: 비타민 D 결핍 - 심혈관 질환 RR ≈ 1.3 → E-value ≈ 1.92. 미관측 생활습관·운동·식이 교란이 RR 1.9 효과를 가질 가능성은 충분히 있음 → 약한 결론, 추가 RCT 필요.
보고 의무: BMJ, Annals of Internal Medicine 은 관찰 연구 논문에 E-value 보고를 의무화 (2018~). “관찰 효과 + CI + E-value” 가 새 표준.
A/B test 에서도: 무작위 배정이 잘 됐다면 E-value 가 필요 없지만, SRM 등으로 무작위가 깨졌거나 관찰 데이터로 효과를 추정했다면 E-value 보고 권장.
6.3 Tipping Point Analysis — 결측 가정의 강건성
RCT 의 결측 데이터에 어느 가정 (MAR, MNAR) 을 적용하면 결론이 뒤집히는지 탐색. 의약 규제 기관 (FDA·EMA) 가이드.
7 A/B Test 효과 측정 lens
A/B test 는 RCT 의 IT 버전이라 위 지표를 그대로 쓰지만, 실무 운영을 위한 추가 지표가 있다.
| 지표 | 정의 | 어디서 |
|---|---|---|
| OEC Overall Evaluation Criterion | 단일 의사결정 메트릭 | AB_test/42-metrics-design.qmd |
| Lift / Uplift | \(\frac{p_T - p_C}{p_C}\) 또는 \(p_T - p_C\) | RR-1 또는 RD 와 동일 양 |
| MDE | 사전 표본·power 로 검출 가능한 최소 효과 | AB_test/44-sample-size.qmd |
| CUPED Controlled Pre-Experiment Data | 사전 공변량으로 분산 감소 | (Buisson, 2021, Ch.5) |
| SRM Sample Ratio Mismatch | 그룹 비율 χ² 검정 | 데이터 파이프라인 결함 신호 |
(Kohavi, Tang, Xu, 2020, Ch.1~4) — A/B test 정통.
8 응용 분야
| 분야 | 핵심 지표 | 사례 |
|---|---|---|
| 임상시험 (RCT) | ARR, NNT, RRR + ITT | 신약 효능 보고 의무 표준 |
| 코호트 역학 | RR, RD, AR, PAR | 흡연-폐암 인과 추론 |
| 케이스-컨트롤 | OR (RR 근사) | 희귀 질환 위험 요인 |
| A/B Test | Lift, MDE, OEC | 추천 시스템·UI 변경 평가 |
| 정책 평가 | PAR, PAF, ATE/ATT | 백신 캠페인·금연 정책 |
| 관찰 인과추론 | ATE, ATT, E-value | 빅데이터 효과 추정 |
9 예시 — 한 데이터에서 모든 지표 계산
| 사망 (Y=1) | 생존 (Y=0) | 합계 | |
|---|---|---|---|
| 처치군 (T) | 80 | 920 | 1000 |
| 대조군 (C) | 120 | 880 | 1000 |
- \(p_T = 0.08\), \(p_C = 0.12\)
- RR = \(0.08 / 0.12 = 0.667\) — 처치군 사망 위험이 대조군 대비 67%
- OR = \(\frac{80 \times 880}{120 \times 920} = 0.638\) — 사건이 드물지 않아 RR 과 약간 다름
- RD = ARR = \(0.12 - 0.08 = 0.04\) = 4%p
- RRR = \(1 - 0.667 = 0.333\) = 33% 상대 감소
- NNT = \(1 / 0.04 = 25\) — 25 명 처치하면 1 명 살림
- AR (처치를 노출로 보면 음수, 보호 효과): \(0.08 - 0.12 = -0.04\)
- PAR (인구 50% 가 처치받는다 가정): \(p_{pop} = 0.5 \times 0.08 + 0.5 \times 0.12 = 0.10\), \(\text{PAR} = 0.10 - 0.12 = -0.02\)
- E-value: 보호 효과 RR = 0.667 의 역수 1.5 → \(1.5 + \sqrt{1.5 \times 0.5} = 2.37\)
해석: 25 명에게 약을 줘야 1 명 살린다 (NNT). 결론을 무력화하려면 미관측 교란이 처치-결과 모두에 RR 2.37 이상의 효과가 있어야 한다 (E-value).
10 코드
import numpy as np
from scipy import stats
from statsmodels.stats.proportion import proportion_confint, proportions_ztest
from statsmodels.stats.power import NormalIndPower
from statsmodels.stats.proportion import proportion_effectsize
# 사례 데이터
a, b = 80, 920 # 처치군: 사건, 비사건
c, d = 120, 880 # 대조군: 사건, 비사건
n_T, n_C = a + b, c + d
p_T, p_C = a / n_T, c / n_C
# 1. 절대·상대·인구 효과
RR = p_T / p_C
OR = (a * d) / (b * c)
RD = p_T - p_C
ARR = p_C - p_T
RRR = 1 - RR
NNT = 1 / ARR
print(f"RR={RR:.3f}, OR={OR:.3f}, RD={RD:.3f}")
print(f"ARR={ARR:.3f}, RRR={RRR:.3f}, NNT={np.ceil(NNT):.0f}")
# 2. 신뢰구간 (Wald, log-transformation)
log_RR = np.log(RR)
SE_logRR = np.sqrt(b / (a * n_T) + d / (c * n_C))
CI_RR = np.exp([log_RR - 1.96 * SE_logRR, log_RR + 1.96 * SE_logRR])
print(f"RR 95% CI: [{CI_RR[0]:.3f}, {CI_RR[1]:.3f}]")
# 3. 검정 (proportion z-test)
z, p_value = proportions_ztest([a, c], [n_T, n_C])
print(f"z={z:.2f}, p={p_value:.4f}")
# 4. 검정력·MDE (사전 분석)
analysis = NormalIndPower()
effect_size = proportion_effectsize(p_T, p_C) # Cohen's h
n_required = analysis.solve_power(
effect_size=effect_size, alpha=0.05, power=0.80, alternative="two-sided"
)
print(f"필요 표본 (그룹당, power=0.8): {int(np.ceil(n_required))}")
# 5. E-value (VanderWeele & Ding, 2017)
def evalue(rr):
rr_adj = max(rr, 1 / rr) # 보호 효과는 역수
return rr_adj + np.sqrt(rr_adj * (rr_adj - 1))
print(f"E-value: {evalue(RR):.2f}")
# 6. PAR / PAF (인구 노출률 가정)
p_e = 0.5 # 인구의 50% 가 노출 (처치)
p_pop = p_e * p_T + (1 - p_e) * p_C
PAR = p_pop - p_C
PAF = p_e * (RR - 1) / (1 + p_e * (RR - 1))
print(f"PAR={PAR:.4f}, PAF={PAF:.3f}")# A/B Test 실무: CUPED 분산 감소 (간단 시뮬레이션)
import numpy as np
np.random.seed(42)
n = 5000
pre = np.random.normal(100, 15, n) # 사전 공변량 (예: 작년 매출)
treat = np.random.binomial(1, 0.5, n)
y = 100 + 5 * treat + 0.7 * pre + np.random.normal(0, 10, n)
# Naive: 단순 차이
naive_effect = y[treat == 1].mean() - y[treat == 0].mean()
naive_var = y[treat == 1].var() / sum(treat == 1) + y[treat == 0].var() / sum(treat == 0)
# CUPED: y_cuped = y - θ * pre, where θ = cov(y, pre) / var(pre)
theta = np.cov(y, pre)[0, 1] / np.var(pre)
y_cuped = y - theta * pre
cuped_effect = y_cuped[treat == 1].mean() - y_cuped[treat == 0].mean()
cuped_var = y_cuped[treat == 1].var() / sum(treat == 1) + y_cuped[treat == 0].var() / sum(treat == 0)
print(f"Naive: effect={naive_effect:.3f}, SE={np.sqrt(naive_var):.3f}")
print(f"CUPED: effect={cuped_effect:.3f}, SE={np.sqrt(cuped_var):.3f}")
print(f"분산 감소율: {1 - cuped_var / naive_var:.1%}")11 관련 주제
선행 지식
- Relative Risk & Odds Ratio — RR/OR 정의 (이 글의 base)
- Study Design Overview — 연구 설계 분류
- Validity·Bias·Causal §6 효과 측정 — NNT 비즈니스 활용
후속 주제 (Epidemiology 시리즈 내)
- Time-to-Event Measures — IR, HR, KM, SMR (시간 lens)
- Diagnostic & Screening Measures — Sn, Sp, LR±, AUC (분류 lens)
인과추론 시리즈 (Causal_Inference/)
- Causal Effect Definition — ATE/ATT 정통
- Effect Modification — CATE/HTE
- Confounding — E-value 의 base
A/B Test 시리즈 (AB_test/)
다른 카테고리 연결
- GLM & 로지스틱 회귀 — OR 의 회귀 추정
- Survival 시리즈 (예정) — HR 의 이론적 기반