비율과 상대위험의 표본 크기

Woodward 8.5+8.6 — A/B 테스트와 RCT 의 이진 outcome 산정

Woodward Ch.8.5 (단일 비율) 과 8.6 (비율 차이·상대위험) 의 표본 크기 산정을 정리한다. 이항 자료의 정규 근사, A/B 테스트의 클릭률·전환율 표본 크기, 베이스라인 효과의 영향을 다룬다.

Experimentation
Fundamentals
저자

Kwangmin Kim

공개

2026년 05월 08일

1 도입 — 이진 outcome 의 흔함

A/B 테스트의 가장 흔한 outcome 은 이진 — 클릭/미클릭, 구매/미구매, 전환/미전환. 임상에서도 사망/생존, 회복/지속 등 이진 자료가 빈번. 이 글은 (a) 단일 비율, (b) 두 비율 차이의 표본 크기를 다룬다.

2 사례 3 — 단일 비율

2.1 공식

정의: 단일 비율 표본 크기

\(H_0: p = p_0\) vs \(H_1: p = p_1\) 검정.

\[ n = \frac{(z_{1-\alpha/2} \sqrt{p_0(1-p_0)} + z_{1-\beta} \sqrt{p_1(1-p_1)})^2}{(p_1 - p_0)^2} \]

이항 자료의 정규 근사 사용.

2.2 사례 — 흡연율 검사

지역 흡연율이 15 % 라고 알려져 있음. 새 정책 후 10 % 로 감소했는지 검정. \(\alpha = 0.05\) 양측, power = 0.80.

  • \(p_0 = 0.15\), \(p_1 = 0.10\)
  • \(z_{0.975} = 1.96\), \(z_{0.80} = 0.84\)

\[ n = \frac{(1.96 \sqrt{0.15 \cdot 0.85} + 0.84 \sqrt{0.10 \cdot 0.90})^2}{(0.10 - 0.15)^2} \]

\[ = \frac{(1.96 \cdot 0.357 + 0.84 \cdot 0.300)^2}{0.0025} = \frac{(0.700 + 0.252)^2}{0.0025} = \frac{0.906}{0.0025} \approx 363 \]

363 명 필요.

3 사례 4 — 두 비율 차이 (가장 흔한 사례)

3.1 공식

정의: 두 비율 차이의 표본 크기 (균형 설계)

\(H_0: p_1 = p_2\) vs \(H_1: p_1 \neq p_2\).

일반 공식 (가장 흔한 형태):

\[ n_{\text{per group}} = \frac{(z_{1-\alpha/2} + z_{1-\beta})^2 [p_1(1-p_1) + p_2(1-p_2)]}{(p_1 - p_2)^2} \]

풀링 분산 공식 (귀무가설 하 분산):

\[ n_{\text{per group}} = \frac{(z_{1-\alpha/2} \sqrt{2 \bar{p}(1-\bar{p})} + z_{1-\beta} \sqrt{p_1(1-p_1) + p_2(1-p_2)})^2}{(p_1 - p_2)^2} \]

여기서 \(\bar{p} = (p_1 + p_2)/2\).

두 공식이 비슷한 결과. 풀링 공식이 약간 더 정확.

3.2 사례 — 신약 임상시험

대조군 사망률 \(p_C = 0.15\), 신약으로 \(p_T = 0.10\) (33 % 상대 감소). \(\alpha = 0.05\) 양측, power = 0.80.

\[ n_{\text{per}} = \frac{(1.96 + 0.84)^2 [0.10 \cdot 0.90 + 0.15 \cdot 0.85]}{(0.10 - 0.15)^2} \]

\[ = \frac{7.84 \cdot 0.2175}{0.0025} = \frac{1.7052}{0.0025} \approx 682 \]

각 그룹 682 명, 총 1364 명.

4 베이스라인의 영향

같은 상대 효과 (RR = 0.67) 라도 베이스라인 \(p_C\) 에 따라 \(n\) 이 변한다.

\(p_C\) \(p_T\) (RR=0.67) \(n_{\text{per}}\)
0.5 0.335 91
0.3 0.20 168
0.15 0.10 682
0.05 0.033 2362
0.01 0.0067 12000

베이스라인이 작을수록 같은 상대 효과 검출에 훨씬 큰 표본 필요. A/B 테스트의 낮은 베이스라인 클릭률 이 큰 표본을 요구하는 이유.

직관 — 왜 작은 베이스라인이 더 어려운가

이항 자료의 분산은 \(p(1-p)\). 이는:

  • \(p = 0.5\) 에서 최대 (0.25)
  • \(p = 0.05\) 에서 작음 (0.0475)

작은 \(p\)분산 이 작아 보이지만, signal-to-noise ratio 관점에서는 다르다.

  • \(p = 0.5\)\(p = 0.4\) (절대 0.1, 상대 20 % 감소)
  • \(p = 0.05\)\(p = 0.04\) (절대 0.01, 상대 20 % 감소)

같은 상대 감소지만 절대 차이가 50 배 작음. 검정 통계량이 절대 차이 에 비례하므로, 작은 베이스라인에서 훨씬 큰 표본 필요.

A/B 테스트의 함정: “1 % 클릭률에서 20 % lift 검출” 같은 작은 절대 효과는 수십만 명 표본 요구. 이 사실이 큰 IT 회사만 작은 효과를 검출할 수 있는 이유.

5 A/B 테스트의 표본 크기 계산기

대부분의 A/B 테스트 도구가 이 공식을 자동화:

도구 입력
Optimizely Sample Size 베이스라인 전환율, 검출 효과, α, power
Evan Miller 동일
G*Power 두 비율 검정
Python statsmodels NormalIndPower, proportion_effectsize

5.1 Cohen’s \(h\) 사용

A/B 테스트 도구가 자주 사용하는 Cohen’s \(h\):

\[ h = 2 (\arcsin\sqrt{p_1} - \arcsin\sqrt{p_2}) \]

이는 비율 차이를 표준화 한 효과 크기. 베이스라인에 덜 의존.

Cohen’s \(h\) 효과 크기
0.20 small
0.50 medium
0.80 large

표본 크기:

\[ n_{\text{per}} = \left(\frac{z_{1-\alpha/2} + z_{1-\beta}}{h}\right)^2 \]

이 공식은 베이스라인 무관 형태로 표본 크기를 표현.

6 비대칭 배정

비대칭 비율 \(r = n_T / n_C\) 일 때:

\[ n_C = \frac{(1 + 1/r)(z_{1-\alpha/2} + z_{1-\beta})^2 \bar{p}(1-\bar{p})}{(p_1 - p_2)^2} \]

균형 설계 (\(r = 1\)) 에서 \(1 + 1/r = 2\). 비대칭 시 검정력 손실.

7 상대위험 (RR) 직접 사용

RR 형태로 표본 크기 산정:

\[ n_{\text{per}} = \frac{(z_{1-\alpha/2} + z_{1-\beta})^2 [(1/p_C - 1) + 1/(R \cdot p_C) - 1]}{(\ln R)^2} \]

여기서 \(R\) 은 RR. 로그 변환으로 RR 직접 모형.

8 코드 예시 — 비율과 RR

import numpy as np
from scipy.stats import norm
from statsmodels.stats.power import NormalIndPower
from statsmodels.stats.proportion import proportion_effectsize

# 일반 공식
def n_two_proportions(p1, p2, alpha=0.05, power=0.80, two_sided=True):
    z_a = norm.ppf(1 - alpha/2 if two_sided else 1 - alpha)
    z_b = norm.ppf(power)
    num = (z_a + z_b)**2 * (p1*(1-p1) + p2*(1-p2))
    return num / (p1 - p2)**2

# 풀링 분산 공식
def n_two_proportions_pooled(p1, p2, alpha=0.05, power=0.80, two_sided=True):
    z_a = norm.ppf(1 - alpha/2 if two_sided else 1 - alpha)
    z_b = norm.ppf(power)
    p_bar = (p1 + p2) / 2
    num = (z_a * np.sqrt(2*p_bar*(1-p_bar)) +
           z_b * np.sqrt(p1*(1-p1) + p2*(1-p2)))**2
    return num / (p1 - p2)**2

# 사례
print("신약 시험 (p_C=0.15, p_T=0.10):")
n1 = n_two_proportions(0.10, 0.15)
n2 = n_two_proportions_pooled(0.10, 0.15)
print(f"  일반:    n_per = {np.ceil(n1):.0f}")
print(f"  풀링:    n_per = {np.ceil(n2):.0f}")

# 베이스라인 영향
print("\nBaseline 영향 (RR = 0.67 고정):")
for p_c in [0.50, 0.30, 0.15, 0.05, 0.01]:
    p_t = p_c * 0.67
    n = n_two_proportions(p_c, p_t)
    print(f"  p_C = {p_c:.2f}, p_T = {p_t:.4f}: n_per = {np.ceil(n):.0f}")

# Cohen's h 사용
print("\nA/B 테스트 클릭률 (statsmodels):")
power_analysis = NormalIndPower()
for baseline in [0.50, 0.10, 0.02]:
    for relative_lift in [0.05, 0.10, 0.20]:
        target = baseline * (1 + relative_lift)
        h = proportion_effectsize(baseline, target)
        n = power_analysis.solve_power(effect_size=h, alpha=0.05, power=0.80)
        print(f"  baseline = {baseline:.2f}, lift = {relative_lift:.2f}, h = {h:.3f}: n_per ≈ {int(n)}")

9 사례 — A/B 테스트 표본 크기

9.1 시나리오 1 — 큰 베이스라인 + 큰 효과

  • 베이스라인 30 % 클릭률
  • 검출 효과: 5 % 절대 증가 (35 %)
  • α = 0.05, power = 0.80
  • \(n_{\text{per}}\) ≈ 약 1300

9.2 시나리오 2 — 작은 베이스라인 + 작은 효과

  • 베이스라인 1 % 전환율
  • 검출 효과: 0.1 % 절대 증가 (1.1 %)
  • α = 0.05, power = 0.80
  • \(n_{\text{per}}\) ≈ 약 78000

9.3 함의

A/B 테스트의 작은 효과 검출 은 매우 큰 표본 필요. 따라서:

  • 큰 IT 회사 (Google, Meta) 만 작은 효과 검출 가능
  • 작은 회사는 큰 효과 우선 또는 기간 확대

10 비율 검정의 변형

10.1 Likelihood Ratio Test (LRT)

LRT 기반 표본 크기

이항 자료의 정확한 표본 크기는 Wald 또는 Score 검정 통계량 기반:

Wald: \[ Z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{\hat{p}_1(1-\hat{p}_1)/n_1 + \hat{p}_2(1-\hat{p}_2)/n_2}} \]

Score (귀무가설 분산): \[ Z = \frac{\hat{p}_1 - \hat{p}_2}{\sqrt{\bar{p}(1-\bar{p})(1/n_1 + 1/n_2)}} \]

여기서 \(\bar{p} = (n_1\hat{p}_1 + n_2\hat{p}_2)/(n_1+n_2)\).

Score 검정이 일반적으로 작은 표본에서 더 정확.

10.2 비율의 정확 검정

매우 작은 표본 또는 극단적 비율 에서 정규 근사 부정확. Fisher’s exact test 사용 (A-MAX2-1 참조).

10.3 Wilson Score Interval

표본 비율 CI 의 Wilson score (Newcombe-Wilson). Wald CI 보다 작은 비율 에서 정확.

from statsmodels.stats.proportion import proportion_confint

n, x = 100, 5  # 5 % 비율
ci_wald = proportion_confint(x, n, method='normal')
ci_wilson = proportion_confint(x, n, method='wilson')
ci_exact = proportion_confint(x, n, method='beta')  # Clopper-Pearson

print(f"Wald CI: ({ci_wald[0]:.4f}, {ci_wald[1]:.4f})")
print(f"Wilson CI: ({ci_wilson[0]:.4f}, {ci_wilson[1]:.4f})")
print(f"Exact CI: ({ci_exact[0]:.4f}, {ci_exact[1]:.4f})")

작은 베이스라인에서는 Wilson 또는 exact 권장.

11 Stratified Randomization 의 효과

Stratified A/B Test

사전 정의된 층 (stratum) 내에서 무작위 배정. 예: 신규/기존 사용자 각각 50:50.

장점: - 배정 균형 보장 (작은 표본에서 중요) - 분석 시 층화 분산 추정 → 검정력 향상

표본 크기 영향: - 일반적으로 5~15 % 절감 (층 효과에 의존) - 큰 시험에서는 무시할 수준

11.1 사례 — 사용자 segment 균형

A/B 테스트에서 사용자가 무작위 배정 시:

  • 단순 무작위: 신규 사용자가 우연히 한쪽에 더 많을 수 있음
  • Stratified: 신규 50 명, 기존 950 명 등 사전 결정된 비율

이 절차가 baseline imbalance 회피.

12 Cluster Randomization 의 표본 크기

A-WOO8-5 에서 자세히. 비율 검정의 cluster 보정:

\[ n_{\text{cluster}} = n_{\text{simple}} \cdot [1 + (m - 1) \cdot \text{ICC}] \]

ICC 가 비율 자료에서:

  • 0.01 ~ 0.05 (대부분의 의료 cluster)
  • 0.05 ~ 0.20 (학교, 강한 클러스터)

12.1 사례 — 학교 단위 백신 시험

설계: 학교 단위 무작위 배정. 학교당 평균 200 명 학생.
ICC = 0.03 (감염병 클러스터 효과)

DEFF = 1 + (200-1) * 0.03 = 6.97

단순 표본 산정: 5000 / 그룹
Cluster 보정: 5000 * 6.97 ≈ 34850 / 그룹

→ 학교 수: 34850 / 200 ≈ 174 / 그룹

매우 큰 영향. Cluster 시험 설계의 주의 필수.

13 A/B 테스트 표본 크기 도구 비교

도구 특징 적합 시점
Optimizely Calculator 단순, 웹 기반 빠른 추정
Evan Miller 학술적 정확 정밀 분석
G*Power 다양한 검정 다중 outcome
Python statsmodels 자동화 가능 시뮬레이션
R pwr 표준 도구 학술 보고
Optimizely Stats Engine Sequential Always-valid inference
Microsoft ExP Big data 처리 대규모 운영

각 도구의 표본 크기 차이 가 약간 있음 (반올림, 가정 차이). 정확한 비교 시 공통 가정 사용 검증.

14 두 비율 검정의 함정

직관 — 작은 비율의 함정

A/B 테스트의 흔한 시나리오:

가정:
  베이스라인 1 % 클릭률
  검출 효과: 0.1 % 절대 증가 (10 % relative lift)
  α = 0.05, power = 0.80

표본 크기 산정: \[ n = \frac{(1.96 + 0.84)^2 [0.011 \cdot 0.989 + 0.01 \cdot 0.99]}{(0.001)^2} \approx 78400 \]

각 그룹 78400 명, 총 157000 명. 이 큰 표본이 작은 변화 검출 의 비용.

대안: - MCID 상향 — 0.5 % lift 이상만 의미 - 기간 확대 — 1 주일 대신 1 개월 - Stratified design — 높은 베이스라인 segment 우선 - Bayesian sequential — 적응적 분석

작은 베이스라인 + 작은 lift 의 결합이 근본적 한계.

15 후속 — Case-control 표본 크기

다음 글 A-WOO8-4 는 case-control 시험 의 표본 크기를 다룬다. matched 사례 포함.

16 관련 주제

선행 지식

후속 주제 (Phase A)

  • A-WOO8-4 Case-control
  • A-WOO8-5 복잡 표집 + 결론

다른 카테고리 연결

Subscribe

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