1 도입 — 가장 흔한 두 사례
A/B 테스트와 임상시험의 연속 메트릭 비교 가 이 두 사례에 해당한다. 매출, 혈압, 검사 수치 등 연속형 outcome.
이 글은 (a) 단일 평균 표본 크기 (사례 1), (b) 두 그룹 평균 차이 표본 크기 (사례 2), (c) 짝지은 vs 독립 표본의 차이를 정리한다.
2 사례 1 — 단일 평균
2.1 공식
A-WOO8-1 에서 도출한 공식:
\[ \boxed{n = \left(\frac{(z_{1-\alpha/2} + z_{1-\beta}) \sigma}{\mu_1 - \mu_0}\right)^2} \]
(양측 검정. 한 측은 \(z_{1-\alpha/2}\) 대신 \(z_{1-\alpha}\).)
2.2 입력
- \(\mu_0\): 귀무가설 평균 (기준값)
- \(\mu_1\): 대립가설 평균 (검출하고 싶은 값)
- \(\sigma\): 모집단 표준편차 (이전 자료에서)
- \(\alpha\), \(\beta\): 오류율
2.3 사례 — 콜레스테롤 (계속)
Woodward Ex 8.1 의 양측 변형:
- \(\mu_0 = 5.5\), \(\mu_1 = 6.0\), \(\sigma = 1.4\)
- \(\alpha = 0.05\) (양측), power = 0.90
\[ n = \left(\frac{(1.96 + 1.282) \cdot 1.4}{0.5}\right)^2 = \left(\frac{4.539}{0.5}\right)^2 \approx 82.4 \to 83 \]
83 명 필요.
2.4 분산 추정
\(\sigma\) 의 추정 출처:
- 이전 연구의 자료 — 가장 정밀
- Pilot study — 작은 사전 실험 (\(n \approx 30\))
- 이론적 제약 — 척도의 범위로 추정 (예: 5 점 척도의 \(\sigma \approx 1\))
- 유사 연구 — 비슷한 모집단의 자료
추정 부정확 시 sensitivity analysis 권장.
Cohen’s \(d\) 로 효과 크기를 표준화:
\[ d = \frac{\mu_1 - \mu_0}{\sigma} \]
콜레스테롤 사례: \(d = 0.5 / 1.4 \approx 0.357\) (small to medium).
\(d\) 를 사용한 표본 크기 공식:
\[ n = \left(\frac{z_{1-\alpha/2} + z_{1-\beta}}{d}\right)^2 \]
이 식이 \(\sigma\) 를 따로 알 필요 없이 \(d\) 만으로 \(n\) 을 계산. 따라서 분야 간 비교가 단순.
| Cohen’s \(d\) | \(n\) 필요 (α=0.05 양측, power=0.80) |
|---|---|
| 0.2 (small) | 199 |
| 0.5 (medium) | 32 |
| 0.8 (large) | 13 |
| 1.0 | 8 |
작은 효과를 잡으려면 훨씬 큰 표본 이 필요한 정량적 관계.
3 사례 2 — 두 그룹 평균 차이 (독립)
3.1 공식
\[ n_{\text{per group}} = \frac{2 (z_{1-\alpha/2} + z_{1-\beta})^2 \sigma^2}{\delta^2} \]
여기서 \(\delta = \mu_1 - \mu_2\) 는 검출하고 싶은 평균 차이.
총 표본: \(N = 2 n_{\text{per group}}\).
단일 평균과의 차이: \(2\) 의 곱셈 인자. 이는 분산이 두 그룹에서 합산되기 때문.
3.2 사례 — 혈압 시험
새 항고혈압제 vs 위약. 효과 가정 5 mmHg 감소, \(\sigma = 12\) mmHg, \(\alpha = 0.05\) 양측, power = 0.80.
\[ n_{\text{per group}} = \frac{2 (1.96 + 0.84)^2 \cdot 144}{25} = \frac{2 \cdot 7.84 \cdot 144}{25} = \frac{2257.92}{25} \approx 90.3 \to 91 \]
각 그룹 91 명, 총 182 명.
3.3 짝지은 vs 독립
짝지은 (paired) 표본의 표본 크기는 다르다:
\[ n_{\text{pairs}} = \left(\frac{(z_{1-\alpha/2} + z_{1-\beta}) \sigma_d}{\delta}\right)^2 \]
여기서 \(\sigma_d\) 는 차이의 표준 편차 (개별 표준편차가 아님).
\(\sigma_d\) 는 일반적으로 개별 \(\sigma\) 보다 작음 (짝 사이의 상관 때문). 따라서 짝지은 설계가 더 효율적.
쌍둥이 임상시험: 한 명에 처치, 다른 명에 위약.
- 두 사람의 공통 유전자 가 baseline 차이 를 줄임
- 차이 점수의 분산이 작음
- 같은 결과 검출에 더 적은 표본 필요
A/B 테스트의 paired 사례:
- 같은 사용자 가 두 변형을 모두 경험 (Within-subjects)
- Crossover 설계 (시간 1: A, 시간 2: B 또는 반대)
- Same user, different time: 자기 자신과의 비교
이 접근의 장점은 사용자 간 차이 를 설계로 통제. 단점: carryover effect (이전 처치 효과 잔류) 또는 학습 효과 위험.
4 분산이 다른 경우 — Welch
등분산 가정이 깨지면 Welch 변형 사용:
\[ n_1 = \frac{(z_{1-\alpha/2} + z_{1-\beta})^2 (\sigma_1^2 + r \sigma_2^2)}{\delta^2} \]
여기서 \(r = n_2 / n_1\) (비대칭 비율).
4.1 균형 vs 비균형 설계
| 설계 | 검정력 (총 \(n\) 고정 시) |
|---|---|
| 1:1 | 최대 |
| 2:1 | 약 89 % |
| 3:1 | 약 75 % |
| 4:1 | 약 60 % |
균형이 대부분의 시나리오에서 최적.
5 \(\delta\) 의 결정 — 가장 어려운 입력
\(\delta\) 결정의 출처:
- MCID (Minimum Clinically Important Difference) — 임상 합의
- Pilot study — 사전 추정
- 이전 연구 — 메타 분석
- 비즈니스 의미 — A/B 테스트의 ROI
5.1 A/B 테스트의 \(\delta\)
매출 1 % lift 가 \(\delta\) 라면:
- 베이스라인 매출 = $1000
- \(\delta = 10\)
- \(\sigma\) = 매출 표준편차 (보통 큰 값)
\(\sigma\) 가 매우 크면 작은 \(\delta\) 검출에 큰 표본 필요. 매출 자료의 우편향 성격이 분석을 더 까다롭게 만든다 (변환 또는 winsorization 권장).
6 Sensitivity Analysis
가정 변화가 \(n\) 에 미치는 영향 분석.
6.1 사례 — 혈압 시험
기준: \(\delta = 5\), \(\sigma = 12\), \(n_{\text{per}} = 91\).
| 가정 변경 | \(n_{\text{per}}\) |
|---|---|
| \(\delta = 3\) (작은 효과) | 252 |
| \(\delta = 5\) (기준) | 91 |
| \(\delta = 7\) (큰 효과) | 47 |
| \(\sigma = 10\) (작은 분산) | 64 |
| \(\sigma = 14\) (큰 분산) | 124 |
이 표가 \(\delta\) 가정 의 영향이 \(\sigma\) 가정 보다 훨씬 큼 을 보여줌. 따라서 \(\delta\) 를 신중히 결정.
7 코드 예시 — 단일 평균과 평균 차이
import numpy as np
from scipy.stats import norm
def n_single_mean(mu0, mu1, sigma, 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)
return ((z_a + z_b) * sigma / abs(mu1 - mu0))**2
def n_two_means(delta, sigma, 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)
return 2 * ((z_a + z_b) * sigma / abs(delta))**2
# Woodward Ex 8.1 (양측)
n1 = n_single_mean(5.5, 6.0, 1.4, alpha=0.05, power=0.90)
print(f"단일 평균 (콜레스테롤, 양측, power=0.90): n = {np.ceil(n1):.0f}")
# 혈압 시험
n2 = n_two_means(5, 12, alpha=0.05, power=0.80)
print(f"두 그룹 (혈압, δ=5, σ=12): n_per = {np.ceil(n2):.0f}")
# Sensitivity analysis
print("\n혈압 시험 — Sensitivity:")
for delta in [3, 5, 7, 10]:
n = n_two_means(delta, 12)
print(f" δ = {delta}: n_per = {np.ceil(n):.0f}")
print()
for sigma in [8, 10, 12, 14, 16]:
n = n_two_means(5, sigma)
print(f" σ = {sigma}: n_per = {np.ceil(n):.0f}")
# Cohen's d 표
print("\nCohen's d 별 n (균형, α=0.05 양측, power=0.80):")
for d in [0.1, 0.2, 0.3, 0.5, 0.8, 1.0]:
n = 2 * ((norm.ppf(0.975) + norm.ppf(0.80)) / d)**2
print(f" d = {d}: n_per = {np.ceil(n):.0f}")
# A/B 테스트 매출 시뮬레이션
print("\nA/B 테스트 — 매출 1 % lift 검출")
sigma_revenue = 200 # 매출 표준편차 가정
delta = 10 # 1 % of $1000 baseline
n = n_two_means(delta, sigma_revenue)
print(f" δ = ${delta}, σ = ${sigma_revenue}: n_per = {np.ceil(n):.0f}")8 두 평균 비교 — 자세한 변형
8.1 Welch t 의 표본 크기
등분산 위반 시:
\[ n_1 = \frac{(z_{1-\alpha/2} + z_{1-\beta})^2 (\sigma_1^2 + r \sigma_2^2)}{\delta^2}, \quad r = n_2/n_1 \]
균형이 더 효율적이지만, 분산 차이가 큰 경우 비대칭 (\(r \neq 1\)) 이 효율 향상.
8.2 비대칭 분산의 최적 비율
\[ \frac{n_1}{n_2} = \frac{\sigma_1}{\sigma_2} \]
분산이 큰 그룹에 더 큰 표본. 직관: 더 많은 자료로 큰 분산 보정.
import numpy as np
from scipy.stats import norm
def welch_sample_size(delta, sigma1, sigma2, alpha=0.05, power=0.80):
"""Welch t 의 비대칭 표본 크기 (최적 비율)"""
z_a = norm.ppf(1 - alpha/2)
z_b = norm.ppf(power)
# 최적 비율 r = σ1 / σ2
r = sigma1 / sigma2
# 최소 총 표본
n1 = ((z_a + z_b)**2 * (sigma1**2 + r * sigma2**2)) / delta**2
n2 = n1 / r
return n1, n2
# 등분산 vs 비등분산
n1_eq, n2_eq = welch_sample_size(5, 12, 12)
n1_ne, n2_ne = welch_sample_size(5, 8, 16)
print(f"등분산 (σ=12): n1={np.ceil(n1_eq):.0f}, n2={np.ceil(n2_eq):.0f}, 총={np.ceil(n1_eq+n2_eq):.0f}")
print(f"비등분산 (σ1=8, σ2=16): n1={np.ceil(n1_ne):.0f}, n2={np.ceil(n2_ne):.0f}, 총={np.ceil(n1_ne+n2_ne):.0f}")9 Repeated Measures (Within-Subjects)
같은 사람을 두 시점 에 측정. 차이 점수의 분산 \(\sigma_d\) 가 분석 대상.
\[ \sigma_d^2 = \sigma_1^2 + \sigma_2^2 - 2 \rho \sigma_1 \sigma_2 \]
여기서 \(\rho\) 는 두 측정의 상관.
상관이 높을수록 \(\sigma_d\) 작음 → 표본 크기 절감.
9.1 사례 — 약물 전후 비교
같은 환자의 약물 전후 혈압 비교. 환자 내 상관 ρ ≈ 0.7.
| 분석 | 표본 크기 (대략) |
|---|---|
| Independent (전후 독립) | 100 |
| Paired (ρ = 0.7) | 30 |
Paired 가 3 배 효율. 환자 모집이 어렵거나 비싼 경우 paired 설계 권장.
9.2 A/B 테스트의 Within-Subjects
A/B 테스트는 대부분 between-subjects (다른 사용자가 다른 variant). 그러나:
- Crossover: 같은 사용자 두 variant 시간차로 경험
- Bandit: 같은 사용자 여러 variant 노출
Within-subjects 가 효율적이지만 carryover effect 위험. 자세한 내용은 Phase F 시리즈에서.
10 ANOVA 의 표본 크기 (3 그룹 이상)
Cohen’s \(f\) 사용:
\[ n_{\text{per group}} = \frac{\lambda}{f^2} \]
여기서 \(\lambda\) 는 비중심성 모수 (검정력 함수).
| Cohen’s \(f\) | 효과 크기 | \(n\) / 그룹 (\(J = 3\), α=0.05, power=0.80) |
|---|---|---|
| 0.10 | small | 322 |
| 0.25 | medium | 52 |
| 0.40 | large | 21 |
10.1 Multi-arm A/B 테스트
A/B/C/D 테스트에서 ANOVA 표본 크기. \(J = 4\) 일 때:
- 작은 효과 (\(f = 0.10\)): n = 274 / 그룹
- 중간 효과 (\(f = 0.25\)): n = 45 / 그룹
Dunnett 절차로 표본 절감 가능 (비교 수 적음).
11 비교 — 빈도주의 vs 베이즈 표본 크기
11.1 Frequentist
11.2 Bayesian
def bayesian_sample_size_means(mu_diff, sigma, target_post=0.95, n_grid=range(50, 1000, 10)):
"""베이즈 사후 확률 기준 표본 크기"""
for n in n_grid:
# 사후 분포: Normal-Inverse Gamma
# 단순화: 표준 정규 가정
post_se = sigma * np.sqrt(2/n)
post_z = mu_diff / post_se
post_prob = norm.cdf(post_z)
if post_prob >= target_post:
return n
return n_grid[-1]
n_bayes = bayesian_sample_size_means(5, 12)
print(f"Bayesian n (95 % credible): {n_bayes}")두 접근의 결과가 비슷 하지만 해석이 다름.
12 Pilot Study + Main Study
작은 pilot 으로 모수 추정 후 main study 표본 크기 결정.
12.1 절차
1. Pilot study (n_pilot ≈ 30) 실행
2. 분산 σ̂_pilot 추정
3. Main study 표본:
n_main = 2 * (z_α/2 + z_β)^2 * σ̂_pilot^2 / δ^2
4. 단, σ̂_pilot 의 *upper CI* 사용 (보수적)
12.2 Pilot 의 함정
Pilot 의 효과 크기 추정값 은 극단적 변동성. n=30 의 추정 95 % CI 가 매우 넓음.
만약 pilot 에서 d = 0.8 관측 → main 에서 d = 0.3 일 가능성 높음.
권장: - Pilot 효과의 50 % 또는 95 % CI 하한 사용 - 또는 문헌 효과 우선 - Pilot 은 분산 추정 에만 활용
이 보수적 접근이 underpowered main study 회피.
13 표본 크기 보고 형식
Methods:
Primary endpoint: 30 일 후 혈압 변화 (mmHg, 연속)
설계: 2-arm RCT (1:1)
Effect: MCID 5 mmHg 검출
σ: 12 mmHg (Smith 2019 메타 분석)
α = 0.05 양측, power = 0.80
Drop-out 가정: 15 %
계산:
n_per_group = 2 * (1.96 + 0.84)^2 * 144 / 25 ≈ 91
Drop-out 보정: 91 / 0.85 ≈ 107
총 모집: 214
Software: G*Power 3.1
Sensitivity: σ=10 → n=64, σ=14 → n=124
이 형식이 임상시험 표준 + 재현 가능한 정보 모두.
14 후속 — 비율과 상대위험
다음 글 A-WOO8-3 는 비율과 상대위험 의 표본 크기를 다룬다. A/B 테스트의 클릭률·전환율 분석에 직접 적용.
15 관련 주제
선행 지식
후속 주제 (Phase A)
- A-WOO8-3 비율과 상대위험
- A-WOO8-4 Case-control
다른 카테고리 연결