이 글은 Schulz Ch.12 시리즈의 마지막 글이다. Ch.12 개관 과 무작위화의 역사와 이점 에 이어, 7 가지 무작위 배정 방법의 비교 (Schulz full md L:19250~19650) 를 깊이 다룬다. 다음은 SCH Ch.13 Non-Double-Blinded Trials 시리즈로 이어진다.
1 진입 직관 — Unpredictability vs Balance 의 trade-off
무작위 배정의 모든 방법은 두 축 의 trade-off 위에 있다.
| 축 | 의미 | 왜 중요한가 |
|---|---|---|
| Unpredictability | 다음 배정이 사전에 알려지는가 | 모집 인력의 선택 편향 차단 |
| Balance | 두 군 sample size 가 균형되는가 | 통계 검정력 최대화 |
trade-off 의 본질: 두 축은 상충 한다. 완벽한 balance 를 강제하면 끝부분이 예측 가능해진다 (마지막 환자가 어느 군일지 자명). 완벽한 unpredictability 를 보존하면 작은 표본에서 imbalance 발생.
비유: 카드 게임에서 (1) 균형 (각 색깔의 카드가 균등 분포) 과 (2) 예측 불가능성 (다음 카드를 사전에 알 수 없음) 은 동시에 최대화 불가. 완벽한 균형 = 끝부분 색깔 결정적. 완벽한 무작위 = 한쪽 색이 몰려 나올 가능성. 카드 셔플 방식이 이 둘 사이의 절충.
7 가지 방법은 이 trade-off 를 다른 지점에서 푼다.
완전 unpredictability (균형 약함) 완전 balance (예측 가능)
└─ Simple ──── Urn / Biased Coin ──── Block ──── Random Allocation Rule
└─── Replacement
└─── (Alternation = 비무작위)
이 글은 각 방법의 메커니즘을 구체적 절차와 시뮬레이션 으로 다룬다.
2 Simple (Unrestricted) Randomisation — 가장 기본
2.1 메커니즘
각 환자를 독립적으로 동일 확률로 배정. 반복된 공정한 동전 던지기 와 동일.
\[P(T_i = 1) = 0.5, \quad T_i \perp T_j \text{ for } i \neq j\]
Panel 12.3 — Schulz 의 사례: 난수표에서 시작점을 정한 후, 짝수 = A, 홀수 = B. 또는 0~49 = A, 50~99 = B. 또는 statistical software 의
rbinom(n, 1, 0.5).
2.2 장점
- 완벽한 unpredictability — 어떤 다른 방법도 능가하지 못함
- 가장 단순 — 구현·검증 모두 쉬움
- 편향 방지 — 어떤 정교한 방법도 simple 의 편향 방지 능력을 능가하지 못함 (Lachin 1988)
Schulz 의 강조: “어떤 다른 방법도, 그 복잡성과 정교함에 무관하게, simple randomisation 의 unpredictability 와 편향 방지 능력을 능가하지 못한다” (Schulz & Grimes, 2019, Ch.12).
2.3 단점 — 작은 표본에서 imbalance
Simple randomisation 의 결정적 약점은 작은 표본에서 sample size imbalance 위험.
수식 직관: \(n\) 명에 대해 simple randomisation 시 group A 인원수 \(X \sim \text{Binomial}(n, 0.5)\). 50:50 에서 30% 이상 벗어날 확률 (\(|X - n/2| > 0.15n\)):
\[P(|X - n/2| > 0.15n) \approx 2 \cdot \Phi\left(-0.3\sqrt{n}\right)\]
\(n=20\): 약 18%, \(n=50\): 약 3%, \(n=100\): < 1%, \(n=200\): 거의 0%
반사실: \(n=20\) 시험에서 simple randomisation 으로 3:7 이상의 imbalance 가 약 10% 의 확률로 발생 (Lachin 1988). 즉 작은 RCT 에서 5 번 중 1 번은 균형이 깨짐. 검정력 손실.
2.4 권장 사용 맥락
- 표본 크기가 큰 시험 (\(n > 200\)) — imbalance 가 자연 균형
- 이중 맹검 시험 — predictability 가 어차피 무관
- Sequence 단순함이 중요한 경우
3 Random Allocation Rule — 단일 큰 Permuted Block
3.1 메커니즘
전체 표본 크기 \(n\) 을 정하고, 그 중 \(n/2\) 명을 무작위로 A 에, 나머지 \(n/2\) 명을 B 에 배정. 즉 단일 큰 permuted block.
사례: \(n=200\) 인 시험에서 100 개의 A 공과 100 개의 B 공을 모자에 넣고 replacement 없이 무작위 추출.
3.2 장점
- End-of-trial balance 보장 — 시험 끝에 정확히 50:50
- Statistical analysis 가 simple 과 거의 동일 — 통계적 효율 좋음
- 간단한 구현 — 카드 섞기·envelope shuffle 로 가능
3.3 단점
- 중간 단계 imbalance 가능 — 시험 진행 중에는 균형 보장 X
- Predictability — 시험 후반부에는 다음 배정이 예측 가능 (특히 비맹검 시)
수식 직관: \(n=200\) 시험에서 첫 100 명 중 60 명이 A 라면, 나머지 100 명 중 정확히 40 명이 A 임이 결정. 후반부 modeling 인력이 이 추세를 알면 다음 환자 배정 추측 가능.
3.4 권장 사용 맥락
- Total sample size 가 정해지고, 중간 분석 없는 시험
- 이중 맹검 시험 (predictability 무관)
- Restricted shuffled approach — 카드+봉투 방식
4 Blocking (Permuted Blocks) — 가장 흔한 균형 강제
4.1 메커니즘
\(n\) 을 작은 블록 으로 나누고, 각 블록 내에서 균형 강제. 예: 블록 크기 6 이면 6 명마다 A 3 명, B 3 명 보장.
Block 1: A B B A A B
Block 2: B A A B A B
Block 3: A A B B B A
...
4.2 장점
- 시험 전 구간에서 균형 유지 — 중간 분석 가능
- 단순 구현 — 통계 software 의 표준 함수
- 불균등 ratio 가능 — 2:1 이면 6 명 블록에 A 4 명, B 2 명
4.3 단점 — 비맹검 시 predictability
블록 크기가 작고 고정 이면, 비맹검 시험에서 블록 끝부분이 결정적으로 예측 가능.
사례: 블록 크기 4 (A 2 명, B 2 명). 첫 3 명이 A B A 로 배정되면 4 번째는 무조건 B. 모집 인력이 이 추세를 보고 환자 선택 가능.
4.4 Schulz 의 권장 — 비맹검 시 큰·랜덤 변동 블록
비맹검 시험에서:
- 블록 크기 ≥ 10 — 작은 블록 (4, 6) 위험
- 블록 크기 랜덤 변동 — 6, 4, 8, 10 등 변경 (모집 인력에 알리지 않음)
- 블록 크기 보안 — sequence 생성자만 알고 다른 인력에는 비공개
수식 직관: 블록 크기 \(b\) 가 고정이면 마지막 환자 예측 확률은 1 (결정적). \(b\) 가 4, 6, 8 중 랜덤이면 예측 확률은 약 1/3 으로 떨어짐. 블록 크기 정보를 모르면 더 낮음.
Empirical 효과: Kahan 외 (2015) 는 작은 고정 블록 RCT 에서 selection bias 가 측정 가능한 수준으로 발생함을 실증.
4.5 권장 사용 맥락
- 중간 분석 필요한 시험
- 이중 맹검 시험 — 작은 블록도 안전
- 비맹검 시험 — 반드시 큰·랜덤 변동 블록 사용
5 Biased Coin and Urn Randomisation — 적응적 균형
5.1 메커니즘 (Biased Coin)
기본은 simple randomisation (50:50). 그러나 두 군 차이가 임계치를 넘으면 적은 군으로의 확률을 높임.
\[P(T = A) = \begin{cases} 0.5 & \text{if } |n_A - n_B| < \tau \\ 0.6 & \text{if } n_A < n_B \\ 0.4 & \text{if } n_A > n_B \end{cases}\]
직관: 동전이 현재 imbalance 에 따라 한쪽으로 약간 기운다. 균형이 깨지면 자동으로 보정.
5.2 메커니즘 (Urn — UD(α, β))
Wei, Lachin 1988 의 가장 연구된 적응적 디자인.
초기: blue ball α 개, green ball α 개 (α=2)
→ 초기 확률 50:50
매 배정마다:
(1) ball 무작위 추출
(2) blue 추출 → 환자 A 군 배정
→ green ball β 개 추가 (β=1)
(3) green 추출 → 환자 B 군 배정
→ blue ball β 개 추가
수식 직관: UD(2, 1). 매 배정 후 반대 색 공이 1 개 추가되어 다음 추출에서 최근 배정 군의 반대 가 더 자주 나옴. 점진적으로 균형 회복.
첫 배정 (blue 선택, A) → urn = 2 blue + 3 green → 다음 P(blue) = 2/5 = 40% 두 번째 (green 선택, B) → urn = 3 blue + 3 green → 다음 P(blue) = 50% 세 번째 (blue 선택, A) → urn = 3 blue + 4 green → 다음 P(blue) = 3/7 ≈ 43%
5.3 장점
- Unpredictability 보존 — simple 에 가까움 (block 보다 좋음)
- Balance 자동 보정 — 큰 imbalance 시 적응적 회귀
- 비맹검 시험에 특히 적합 — Schulz 의 강력 권장
Schulz 의 평가: “비맹검 시험에서 unpredictability 와 balance 모두 중요한 경우, urn design 이 permuted block (고정 또는 랜덤 변동 모두) 보다 우수하다” (Wei & Lachin 1988).
5.4 단점
- 구현 복잡 — manual 수행 어려움 (computer 필수)
- Statistical analysis 약간 복잡 — permutation test 사용 시
- 드물게 사용됨 — 임상시험계의 인지도 낮음
5.5 권장 사용 맥락
- 비맹검 시험 — 가장 강력한 권장
- 중간 분석 필요한 시험
- Computer 기반 randomisation infrastructure 가 있는 시험
6 Replacement Randomisation — 균형 미달 시 재생성
6.1 메커니즘
- Simple randomisation 으로 sequence 생성
- 균형 점검 (예: \(|n_A - n_B| < 20\) 인지)
- 미달 시 새 sequence 생성, 점검 반복
- 기준 충족 시 채택
6.2 장점
- 이해 쉬움 — 단순 반복 시도
- 균형 보장
- Unpredictability — simple 에 가까움
6.3 단점
- 사전 결정 필요 — 시험 시작 전 sequence 확정해야
- 중간 균형 보장 X — end-of-trial balance 만
- Arbitrary — 균형 임계치 설정이 주관적
역사적 의미: Replacement 는 가장 오래된 형태의 restricted randomisation (Schulz, 2002 인용). 지금은 거의 사용 안 됨.
7 Stratified Randomisation — 사전 prognostic factor 별 분리
7.1 메커니즘
- 알려진 prognostic factor (예: 연령, 질병 중증도) 식별
- Factor 별 strata 분할 (예: 65 미만 / 이상)
- 각 strata 내에서 별도 sequence 생성 (보통 block randomisation)
Strata 1: 65 미만, 경증 → Block 시퀀스 1
Strata 2: 65 미만, 중증 → Block 시퀀스 2
Strata 3: 65 이상, 경증 → Block 시퀀스 3
Strata 4: 65 이상, 중증 → Block 시퀀스 4
7.2 핵심: Stratified ≠ Block 단일 사용
Schulz 의 강조: “Stratification 의 효과는 각 stratum 에서 restricted randomisation 을 사용해야 발휘된다. Stratification without restriction = placebo stratification” (Schulz & Grimes, 2019, Ch.12).
즉 stratified + simple randomisation 은 의미 없음. 반드시 stratified + block.
7.3 장점
- Prognostic factor balance — 각 strata 에서 처치/대조 균형
- 소규모 시험에서 효과 — chance imbalance 회피
- Subgroup analysis 용이 — strata 별 효과 추정 가능
7.4 단점
- 대규모 시험에서 효과 미미 — randomisation 이 자연 균형
- 복잡성 증가 — 모집 인력 부담
- Strata 너무 많으면 역효과 — 각 strata 가 작아져 block 끝부분 결정성
수식 직관: \(n=1000\) 시험에서 simple randomisation 만으로도 baseline factor 의 mean 차이는 \(1/\sqrt{n} = 0.03\) 정도. 이미 충분히 균형. Stratification 으로 더 줄여봐야 marginal gain.
\(n=50\) 시험에서는 \(1/\sqrt{50} = 0.14\) — 무시할 수 없는 차이. Stratification 의 효과가 큼.
7.5 핵심 예외 — Multicentre Trial 의 Centre 층화
Schulz 의 권장: Multicentre RCT 의 centre 층화는 무조건 권장. 추가 복잡성 거의 없으면서 (각 centre 독립 sequence) 큰 이득. Centre 별 환자 특성·치료 패턴 차이가 클 때 균형 보장.
7.6 권장 사용 맥락
- 소규모 시험 (\(n < 100\))
- Multicentre 시험 — 무조건 centre 층화
- 알려진 강한 prognostic factor 가 있는 시험
8 Minimisation — 논쟁의 중심
8.1 메커니즘
각 환자가 도착할 때, 여러 prognostic factor 의 현재 군 간 imbalance 를 점수화. 이 점수를 최소화 하는 군에 환자를 배정.
수식: 각 factor 별 imbalance score 합산. 새 환자를 A 또는 B 에 배정하면 점수가 어떻게 바뀔지 계산. 점수가 낮은 쪽에 배정 (또는 그 군에 더 높은 확률).
8.2 논쟁
| 지지자 | 주장 |
|---|---|
| Treasure & MacRae (1998) | “Platinum standard” — 여러 factor 동시 균형 |
| Taves (2010, 2011) | Allocation concealment 가능, selection bias 방지 가능 |
| 비판자 | 주장 |
|---|---|
| Berger (2010, 2011) | Predictability 매우 높음 → selection bias 위험 |
| Lachin, Matts, Wei (1988) | Strict minimisation = 비무작위 |
Schulz 의 입장: “엄격한 minimisation 은 비무작위로 간주될 수 있다 (Altman 1991). 사용한다면 random component 를 반드시 포함하고, 모집 인력에는 다음 배정 정보를 차단해야 한다. 우리는 신중한 입장이다.”
8.3 권장 사용 맥락
- 여러 강한 prognostic factor + 작은 시험 — 적응적 균형이 정말 필요할 때
- Random component 포함
- Generation/implementation 분리 엄격 실시
반사실: Minimisation 은 “여러 factor 를 동시에 균형” 한다는 매력이 있지만, 알려진 factor 만 균형. 무작위화는 알려지지 않은 factor 까지 균형. 큰 시험에서는 무작위화가 본질적으로 더 강함.
9 7 가지 방법의 종합 비교
| 방법 | Unpredictability | Balance | 구현 복잡도 | 권장 사용 맥락 |
|---|---|---|---|---|
| Simple | ★★★★★ | ★★ | ★ | \(n > 200\), 이중 맹검 |
| Random Allocation Rule | ★★★★ | ★★★★ (end) | ★★ | \(n\) 정해진 시험, 중간 분석 X |
| Blocking (작은 고정) | ★★ | ★★★★★ | ★★ | 이중 맹검만 |
| Blocking (큰·랜덤) | ★★★ | ★★★★★ | ★★ | 비맹검 시 권장 |
| Biased Coin | ★★★★ | ★★★★ | ★★★ | 비맹검, 적응적 균형 |
| Urn UD(α, β) | ★★★★ | ★★★★ | ★★★ | 비맹검 최강 권장 |
| Replacement | ★★★★★ | ★★★★ (end) | ★★★ | 거의 안 씀 |
| Stratified + Block | ★★ | ★★★★★ | ★★★★ | 소규모, multicentre, 강한 factor |
| Minimisation | ★ | ★★★★★ | ★★★★★ | 논쟁적, 신중 |
10 시험 특성별 권장 매트릭스
| 시험 특성 | 권장 방법 | 이유 |
|---|---|---|
| Large sample (\(n > 500\)), 이중 맹검 | Simple | 자연 균형, 가장 단순 |
| Medium sample (\(n = 100~500\)), 이중 맹검 | Block (작은) | 균형 보장, predictability 무관 |
| Small sample (\(n < 100\)), 이중 맹검 | Stratified + Block | Prognostic balance 중요 |
| Large sample, 비맹검 | Urn 또는 Block (큰·랜덤) | Unpredictability + Balance |
| Multicentre | Stratified by centre + Block | Centre 효과 통제 필수 |
| 강한 prognostic factor 다수 | Stratified + Block | 또는 신중한 Minimisation |
| 적응적 균형 필요 | Urn UD(α, β) | Schulz 강력 권장 |
11 Generation 과 Implementation 의 분리
Schulz Ch.12 의 마지막 핵심 원칙. 무작위 sequence 의 적절한 생성만으로는 부족하다 — 그 sequence 가 누구에게 알려지는지 가 결정적이다.
11.1 원칙
Sequence 생성자 ≠ 환자 등록·배정자
이유는 단순하다. 생성자는 어떤 sequence 인지 알고 있다. 그가 모집·등록 단계에 관여하면 원하는 환자를 원하는 군에 배정 할 가능성이 생긴다.
반사실: PI (principal investigator) 가 sequence 를 만들고 직접 환자 모집. 다음 환자가 새 약 군임을 안다. 임상적 직관: “이 환자는 잘 반응할 것 같다” → 등록 결정. 무작위처럼 보이지만 실제로는 PI 의 무의식적 선호가 반영. Selection bias 발생.
11.2 CONSORT Item 10
CONSORT 2010 (Schulz, Altman, Moher 2010) 은 다음을 명시적으로 보고하도록 요구.
- 누가 sequence 를 생성했는가?
- 누가 환자를 등록했는가?
- 누가 환자를 군에 배정했는가?
이상적 구조: 통계학자 (sequence 생성) → 약사 (sequence 봉인 보관) → 모집 인력 (환자 등록) → 약사가 다음 봉투 개봉, 군 배정. 세 역할이 명확히 분리.
11.3 Concealment 의 다음 글 안내
이 원칙은 다음 챕터 (Ch.13: Non-Double-Blinded Trials, Ch.14: Allocation Concealment) 에서 더 깊이 다뤄진다.
12 코드 예시 — 7 가지 방법 시뮬레이션 비교
import numpy as np
np.random.seed(42)
N = 100
n_sim = 5000
def simple_rand(n):
return np.random.choice([0, 1], size=n)
def random_allocation_rule(n):
seq = np.array([0]*(n//2) + [1]*(n//2))
np.random.shuffle(seq)
return seq
def block_rand(n, block_size):
blocks = []
for _ in range(n // block_size):
b = np.array([0]*(block_size//2) + [1]*(block_size//2))
np.random.shuffle(b)
blocks.extend(b)
return np.array(blocks)
def urn_rand(n, alpha=2, beta=1):
blue, green = alpha, alpha
seq = []
for _ in range(n):
p = blue / (blue + green)
if np.random.random() < p:
seq.append(0)
green += beta
else:
seq.append(1)
blue += beta
return np.array(seq)
def biased_coin(n, threshold=5):
seq = []
n_a, n_b = 0, 0
for _ in range(n):
diff = n_a - n_b
if abs(diff) < threshold:
p = 0.5
elif diff > 0:
p = 0.4
else:
p = 0.6
if np.random.random() < p:
seq.append(0); n_a += 1
else:
seq.append(1); n_b += 1
return np.array(seq)
methods = {
"Simple": lambda: simple_rand(N),
"RandomAllocRule": lambda: random_allocation_rule(N),
"Block(4)": lambda: block_rand(N, 4),
"Block(10)": lambda: block_rand(N, 10),
"Urn(2,1)": lambda: urn_rand(N, 2, 1),
"BiasedCoin": lambda: biased_coin(N, 5),
}
# === Imbalance 분포 ===
print("[Imbalance 분포 — group A 가 50:50 에서 벗어난 비율]")
print(f"{'Method':>20} {'Mean |Δ|':>10} {'Max |Δ|':>10} {'P(|Δ|>20%)':>12}")
for name, gen in methods.items():
devs = []
for _ in range(n_sim):
seq = gen()
n_a = sum(seq == 0)
dev = abs(n_a - N/2) / (N/2)
devs.append(dev)
print(f"{name:>20} {np.mean(devs):>10.3f} {np.max(devs):>10.3f} {np.mean(np.array(devs) > 0.20):>12.3f}")
# === Predictability — 마지막 5 개 배정의 예측 정확도 ===
def predict_last_k(seq, k=5):
"""직전 배정으로부터 다음 배정을 추측 — 정확도 측정"""
correct = 0
for i in range(N - k, N):
# 가장 단순한 추측: 지금까지 부족한 군
n_a_so_far = sum(seq[:i] == 0)
n_b_so_far = i - n_a_so_far
guess = 0 if n_a_so_far < n_b_so_far else 1
if guess == seq[i]:
correct += 1
return correct / k
print("\n[Predictability — 마지막 5 개 추측 정확도]")
for name, gen in methods.items():
accs = [predict_last_k(gen()) for _ in range(n_sim)]
print(f"{name:>20}: {np.mean(accs):.3f}")
# === Stratified Randomisation 시뮬레이션 ===
print("\n[Stratified + Block(4) 시뮬레이션]")
def stratified_block(n_per_strata, n_strata):
seqs = []
for _ in range(n_strata):
seqs.extend(block_rand(n_per_strata, 4))
return np.array(seqs)
# 4 개 strata × 25 명 each
seq = stratified_block(25, 4)
print(f"Total balance: A={sum(seq==0)}, B={sum(seq==1)}")
for s in range(4):
sub = seq[s*25:(s+1)*25]
print(f"Strata {s+1}: A={sum(sub==0)}, B={sum(sub==1)}")12.1 결과 해석
이 코드는:
- Imbalance 분포 — Simple 이 가장 imbalance, Block 이 가장 균형
- Predictability — Block(4) 이 가장 예측 가능 (특히 끝부분), Simple 이 가장 예측 불가
- Urn / Biased Coin — 두 축의 절충점
- Stratified + Block — 각 strata 내 강제 균형
so what: 시험 특성 (sample size, 맹검 여부, prognostic factor 분포, multicentre) 에 따라 trade-off 의 중요도가 다르다. 어떤 방법이 항상 최선 인 게 아니라, 어떤 방법이 이 시험에 최선 인지가 핵심.
13 결론 — 무작위 배정 방법 선택의 한 줄 요약
시험 특성을 무시한 단일 best 방법은 없다. Trade-off 를 의식적으로 평가하라.
핵심 메시지:
- Simple 은 항상 default 후보 — 큰 시험·이중 맹검에서 충분
- Block 은 작은 시험·이중 맹검에서 안전 — 비맹검 시 큰·랜덤 변동 필수
- Urn 은 비맹검에서 최강 — Schulz 강력 권장
- Stratified + Block — multicentre 에서 무조건, 작은 시험에서 prognostic factor 가 강할 때
- Minimisation 은 신중 — random component 포함 + concealment 엄격
그리고 모든 방법의 전제 조건: Generation 과 Implementation 의 분리. Sequence 생성자가 모집·배정에 관여하면 어떤 방법도 무력화.
다음 챕터 (Ch.13) 는 이 원칙을 비맹검 시험 에 적용 — Schulz 가 가장 강조하는 영역이다.
14 관련 주제
선행 지식
Phase C 후속 글
- SCH Ch.13 비맹검 RCT 의 추측 위험 개관 (placeholder)
- SCH Ch.14 Allocation Concealment 개관 (placeholder)
다른 카테고리 연결
- Stratified Randomization (IT) (placeholder)
- Adaptive Bucket Adjustment (Platform) (placeholder)
15 참고문헌
- Schulz, K. F. & Grimes, D. A. (2019). Essential Concepts in Clinical Research (2nd ed.), Ch.12. Elsevier.
- Lachin, J. M. (1988). Properties of simple randomization in clinical trials. Control. Clin. Trials 9, 312-326.
- Wei, L. J. & Lachin, J. M. (1988). Properties of the urn randomization in clinical trials. Control. Clin. Trials 9, 345-364.
- Pocock, S. (1983). Clinical Trials: A Practical Approach. Wiley.
- Treasure, T. & MacRae, K. D. (1998). Minimisation: the platinum standard for trials? BMJ 317, 362-363.
- Berger, V. W. (2010). Minimization, by its nature, precludes allocation concealment. Contemp. Clin. Trials 31, 406.
- Kahan, B. C., Rehal, S., Cro, S. (2015). Risk of selection bias in randomised trials. Trials 16, 405.
- Schulz, K. F., Altman, D. G., Moher, D. (2010). CONSORT 2010 statement: updated guidelines for reporting parallel group randomised trials. BMJ 340, c332.