이 글은 Schulz Ch.12 Generation of Allocation Sequences 시리즈 (3 편) 의 첫 글이다. Schulz full md L:19007~19650 의 전체 흐름을 압축한다. 후속 글에서는 (1) 무작위화의 역사와 세 가지 이점, (2) 7 가지 무작위 배정 방법 비교 를 깊이 다룬다.
1 진입 직관 — 왜 “Chance, not Choice” 가 RCT 의 심장인가
RCT 가 관찰 연구보다 우월한 단 하나의 이유는 처치 배정이 환자·연구자의 선택이 아니라 확률에 따른다 는 점이다. 이것이 무작위화 (randomisation) 의 본질이다. Bradford Hill 의 명언이 이 점을 가장 잘 표현한다.
“having used a random allocation, the sternest critic is unable to say when we eventually dash into print that quite probably the groups were differentially biased through our predilections or through our stupidity.” — Austin Bradford Hill (1954)
번역: 무작위 배정을 사용했다면, 우리가 마침내 결과를 발표할 때, 가장 엄격한 비평가도 “두 군이 우리의 선호나 어리석음 때문에 차별적으로 편향되었을 수도 있다” 고 말하지 못한다.
직관: 임상의가 “이 환자는 위험해 보이니 새 약 (안전해 보이는 쪽) 을 주자” 라고 선택 한다면, 두 군의 baseline 위험이 처음부터 달라진다. 새 약 군이 더 좋아 보여도 그것은 처음부터 덜 위험한 환자가 거기 있었기 때문. 무작위화는 이 함정을 차단한다.
Schulz 의 핵심 메시지는 한 줄로 요약된다.
무작위화는 RCT 의 가장 기본적인 측면이지만, 동시에 가장 이해도가 낮다.
연구자조차 “alternation (교대 배정)”, “date of birth (생일 기준)”, “case number (환자 번호)” 같은 체계적 (systematic) 방법을 무작위로 착각한다. 한 메타분석에서 5% 의 연구가 이런 비무작위 방법을 “무작위” 로 보고했고, 63% 는 방법 자체를 명시하지 않았다 (Schulz & Grimes, 2019, Ch.12, Schulz 외 1995 인용).
2 정의: 무작위 배정 순서 (Allocation Sequence)
처치/대조군에 환자를 배정할 순서 를 사전에 결정하는 절차다. 핵심 요건은 예측 불가능성 (unpredictability) — 다음 배정이 무엇일지 사전에 알 수 없어야 한다.
- 역학: Allocation Sequence Generation
- IT: Bucket Assignment / Hash-based Assignment
- 통계: Random Permutation
Schulz 의 두 핵심 분리:
- Generation — 무작위 순서를 어떻게 만드는가 (이 글의 주제)
- Concealment — 그 순서를 누구에게 어떻게 숨기는가 (Ch.14 의 주제)
두 단계 모두 적절해야 RCT 가 편향으로부터 보호된다.
비유: Allocation sequence 는 콘서트 좌석 추첨과 같다. (1) 추첨 프로그램 이 공정해야 하고 (generation), (2) 추첨 결과 가 직원에게 미리 새지 않아야 한다 (concealment). 둘 중 하나라도 무너지면 부정 배정이 발생한다.
3 무작위화의 세 가지 이점 — Panel 12.2
Schulz 는 무작위화의 이점을 세 범주로 정리한다 (Schulz & Grimes, 2019, Ch.12, Panel 12.2).
3.1 1: 편향 제거 (Bias Elimination)
가장 중요한 이점이다. 무작위 배정은 선택 편향 (selection bias) 과 교란 (confounding) 을 동시에 차단한다.
수식 직관: 잠재적 결과 \(Y(1), Y(0)\) 와 처치 변수 \(T \in \{0,1\}\) 가 있다고 하자. 무작위 배정은 다음을 보장한다.
\[\{Y(0), Y(1)\} \perp\!\!\!\perp T\]
즉 처치 배정이 잠재적 결과와 통계적으로 독립 이다. 이 독립성은 측정된 변수뿐 아니라 측정되지 않은 변수에도 성립한다 (대수의 법칙으로 표본 크기가 클수록 정확).
반사실 시나리오 — 무작위 없는 배정: 연구자가 “건강해 보이는 환자에게 새 약” 을 배정하면, 새 약 군의 예후가 처음부터 더 좋다. 사망률이 새 약 5%, 표준 약 15% 로 나와도 그 10% 차이의 일부는 처음부터 있던 baseline 차이. 효과의 “진짜 크기” 는 알 수 없다. 무작위 배정은 이 함정을 원리적으로 제거한다.
3.2 2: 맹검 (Blinding) 의 가능성
무작위 배정이 없으면 환자·연구자가 어느 군에 누가 배정되는지 알 수 있다. 이 정보를 알면 placebo 동등 약 (sham treatment) 을 사용한 맹검이 의미 없다.
직관: 만약 “월·수·금에 입원한 환자는 새 약, 화·목·토는 표준 약” 식으로 배정하면, 약사·간호사·환자 모두가 입원 요일을 보고 어느 약을 받을지 안다. 맹검의 전제 조건이 무너진다. 무작위 배정만이 맹검의 기술적 가능성 을 만든다.
3.3 3: 확률 이론의 적용 (Probability Theory)
세 번째 이점은 통계적이다. 무작위 배정은 p-value · 신뢰구간 · 유의성 검정 의 이론적 기반을 제공한다. 즉 “두 군의 차이가 단순한 우연일 확률” 을 정량화할 수 있게 한다.
수식 직관: 무작위 배정 하에서 처치군 평균 \(\bar{X}_T\) 와 대조군 평균 \(\bar{X}_C\) 의 차이는 무작위 변수다. 이 차이의 분포 (귀무가설 하) 가 알려져 있어 p-value 를 계산할 수 있다. 무작위 배정 없이는 이 분포를 유도할 수 없다. 통계적 추론은 사실상 불가능해진다.
이 세 이점은 누적된다: 편향 제거 + 맹검 가능 + 확률 이론 → 작거나 중간 크기의 효과를 신뢰성 있게 검출할 수 있다 (Peto, 1987). RCT 가 작은 효과의 검출 에 특히 강한 이유다.
4 유사 무작위 (Quasirandom) 의 함정 — 7 가지 비무작위 방법
Schulz 는 “quasirandom” 이라는 용어 자체를 비판한다.
“Quasirandom 은 quasipregnant 와 같다 — 정의 자체가 모순이다.” (Schulz & Grimes, 2019, Ch.12)
임신은 yes/no 의 이분 상태이지 “약간 임신” 은 없다. 무작위화도 마찬가지다. 적절한 무작위화 그 미만의 모든 방법 은 비무작위다. 흔히 무작위로 위장된 비무작위 방법들:
| 방법 | 형태 | 왜 비무작위인가 |
|---|---|---|
| Date of birth | 짝수일 → A, 홀수일 → B | 출생일은 시즌·주중 분포가 균일하지 않음 (MacFarlane 1978) |
| Case record number | 짝수 번호 → A, 홀수 → B | 환자 등록 순서·번호 부여 패턴이 시기·기관에 따라 편향 |
| Alternation | 첫 환자 A, 둘째 B, 셋째 A, … | 다음 배정이 완전히 예측 가능 — concealment 불가능 |
| Day of week | 월·수·금 → A, 화·목·토 → B | 요일별 환자 특성 차이 (응급 vs 정기) |
| Pre-intervention test | 시험 전 검사 결과로 군 결정 | 편향의 정의에 가까움 — quasirandom 의 가장 위험한 형태 |
직관 — 왜 alternation 이 위험한가: 한 환자가 A 로 배정되었다는 사실을 모집 인력이 알면, 다음 환자가 B 라는 것도 자동으로 안다. 모집 인력이 “다음 환자에게 B 가 더 적합할 것 같다” 고 판단해 그 환자를 연기 또는 제외 하면 선택 편향이 발생한다. 예측 가능성 = 편향의 진입 통로.
반사실: Schulz 외 (1994) 의 분석에서 얻은 충격적 사실 — 보고서의 5% 가 이런 비무작위 방법을 “무작위” 로 보고했다. 더 충격적인 것은 63% 가 어떤 방법을 썼는지 명시하지 않았다. 즉 다수 보고서는 무작위화 적절성을 독자가 판단할 수도 없는 상태로 출판된다.
5 7 가지 무작위 배정 방법 — 위계 한 눈에
Schulz 는 무작위 배정 방법을 다음 위계로 제시한다 (다음 글 32-6 에서 깊이 다룸).
무작위 배정 방법
├── Simple (Unrestricted) Randomisation
│ └── 가장 기본 — fair coin-tossing 에 비유. 작은 표본에서 imbalance 위험.
├── Restricted Randomisation (균형 강제)
│ ├── Blocking (Permuted Blocks)
│ │ └── 가장 흔함. 비맹검 시 큰·랜덤 변동 블록 권장.
│ ├── Random Allocation Rule
│ │ └── 단일 큰 permuted block. End-of-trial balance.
│ ├── Biased Coin / Urn (UD(α,β))
│ │ └── 적응적 — 불균형 발생 시 확률 조정.
│ └── Replacement Randomisation
│ └── 균형 미달 시 sequence 재생성.
└── Stratified Randomisation
└── 사전 prognostic factor 별 별도 sequence. 큰 시험에서는 효과 미미.
각 방법의 trade-off 는 두 축으로 정리된다.
| 축 | 의미 | 우선 |
|---|---|---|
| Unpredictability | 다음 배정이 사전에 알려지는가 | Simple > Urn > Block > Random Allocation Rule |
| Balance | 두 군 sample size 가 균형되는가 | Block ≈ Random Allocation > Urn > Simple |
trade-off 의 핵심: Unpredictability 와 Balance 는 상충 한다. Block (균형 강함) 은 작은 블록이면 끝부분이 예측 가능. Simple (예측 불가능 강함) 은 작은 표본에서 imbalance. Urn / Biased Coin 은 두 축의 절충점.
반사실 — 작은 표본 Simple Randomisation: Schulz 는 \(n=20\) 양군 시험에서 Simple Randomisation 으로 3:7 이상의 imbalance 가 약 10% 의 확률로 발생한다고 인용 (Lachin 1988). 즉 작은 시험에서는 Simple 만으로는 sample size 균형이 위험. Block 같은 균형 강제가 필요.
6 생성과 구현의 분리 (Separation of Generation and Implementation)
Schulz 가 강조하는 마지막 원칙이다.
무작위 배정 순서를 생성한 사람은 환자 적격성 평가·처치 시행·결과 측정 단계에 관여하면 안 된다.
이유는 단순하다. 생성자는 sequence 를 알고 있다. 그가 모집·평가에 관여하면 원하는 환자를 원하는 군에 배정 할 가능성이 생긴다. 이는 무작위화의 본질을 무너뜨린다.
6.1 CONSORT 의 명시 항목
CONSORT 2010 Item 10 (Implementation) 이 이 분리를 명시한다.
- 누가 sequence 를 생성했는가?
- 누가 환자를 등록했는가?
- 누가 환자를 군에 배정했는가?
세 사람이 다르거나, 동일인이 맡는다면 적절한 안전장치 (sequence 잠금, 사전 봉인 등) 가 있어야 한다.
반사실 — 분리 부재: 한 시험에서 PI (principal investigator) 가 sequence 를 만들고, 직접 환자를 모집·등록했다고 하자. 그가 다음 환자가 어느 군에 배정될지 알면, “이 환자는 약효가 있을 것 같으니 새 약 군에” 라는 무의식적 선택이 발생할 수 있다. 결과는 마치 무작위 배정인 것처럼 보이지만 실제로는 PI 의 선호가 반영된 비무작위 배정.
비유: 콘서트 추첨에서 “추첨 프로그램 만든 사람” 이 동시에 “당첨자에게 좌석 배정” 을 하면, 친구에게 좋은 좌석 줄 가능성이 있다. 추첨 시스템 운영의 분리가 신뢰의 기본.
7 생성과 구현의 분리 — CONSORT 보고 항목
CONSORT 2010 (Schulz, Altman, Moher 2010) 의 무작위 배정 관련 보고 항목:
| 항목 | 보고 내용 |
|---|---|
| 8a | 무작위 배정 순서 생성 방법 |
| 8b | 무작위화 유형 (Simple, Block 등) |
| 9 | Allocation concealment 메커니즘 |
| 10 | Sequence 생성·등록·배정의 책임자 (분리) |
이 네 항목을 모두 명시한 보고서만이 방법론적으로 신뢰할 수 있는 RCT 다.
8 IT / 디지털 실험 매핑
RCT 의 무작위 배정과 IT A/B 테스트의 hashing 기반 배정은 정확히 동형이다.
| 역학 (RCT) | IT (A/B Test) | 비고 |
|---|---|---|
| Generation method | Hash function selection | MD5, SHA, MurmurHash 등 |
| Allocation ratio 1:1 | Bucket split 50:50 | 비대칭 ratio 가능 |
| Simple randomisation | Random user_id mod 2 | 큰 N 에서 자연 균형 |
| Block randomisation | Stratified sampling per cohort | 신규 vs 기존 사용자 분리 |
| Stratified randomisation | Pre-segmented experiment | 지역·디바이스별 별도 |
| Urn randomisation | Adaptive bucket adjustment | SRM detection 후 |
| Allocation concealment | Hash + secret salt | 외부에서 예측 불가능 |
| Generation/implementation 분리 | Assignment service 와 측정 서비스 분리 | 데이터 누수 방지 |
| CONSORT Item 10 | Experiment metadata in platform | 누가 정의·운영했는가 |
왜 동형인가?: 두 영역 모두 (1) 처치 배정의 예측 불가능성, (2) 균형, (3) 생성·구현 분리 의 동일 원칙을 따른다. 단, IT 는 자동화 덕분에 반복적 검증 이 매우 쉽다 (A/A test 로 platform 검증).
9 코드 예시 — 7 가지 방법의 시뮬레이션 비교
import numpy as np
np.random.seed(42)
N = 20 # 작은 표본 — imbalance 비교 위해
# 1. Simple Randomisation
simple = np.random.choice([0, 1], size=N)
print(f"Simple: {simple}, balance={sum(simple)}:{N-sum(simple)}")
# 2. Random Allocation Rule (단일 큰 block)
ratio_block = np.array([0]*(N//2) + [1]*(N//2))
np.random.shuffle(ratio_block)
print(f"RandomAllocRule: {ratio_block}, balance={sum(ratio_block)}:{N-sum(ratio_block)}")
# 3. Block Randomisation (block size 4)
block_size = 4
blocks = []
for _ in range(N // block_size):
block = np.array([0]*(block_size//2) + [1]*(block_size//2))
np.random.shuffle(block)
blocks.extend(block)
block_seq = np.array(blocks)
print(f"Block (size 4): {block_seq}, balance={sum(block_seq)}:{N-sum(block_seq)}")
# 4. Urn Randomisation UD(α=2, β=1)
def urn_assignment(N, alpha=2, beta=1):
blue, green = alpha, alpha # 두 군 초기 ball 수
seq = []
for _ in range(N):
p_blue = blue / (blue + green)
if np.random.random() < p_blue:
seq.append(0) # blue → A
green += beta # 반대 색 ball 추가
else:
seq.append(1) # green → B
blue += beta
return np.array(seq)
urn = urn_assignment(N)
print(f"Urn UD(2,1): {urn}, balance={sum(urn)}:{N-sum(urn)}")
# 5. Imbalance 분포 시뮬레이션 (10000 회 반복)
print("\n[10000 회 시뮬레이션 — group A 비율 분포]")
n_sim = 10000
methods = {
"Simple": lambda: np.random.choice([0,1], size=20),
"RandomAllocRule": lambda: np.random.permutation([0]*10 + [1]*10),
"Block(4)": lambda: np.concatenate([np.random.permutation([0,0,1,1]) for _ in range(5)]),
"Urn(2,1)": lambda: urn_assignment(20),
}
for name, gen in methods.items():
imbalances = []
for _ in range(n_sim):
seq = gen()
n_a = sum(seq)
imbalance = abs(n_a - 10) / 10 # 50:50 에서 벗어난 비율
imbalances.append(imbalance)
p_extreme = np.mean(np.array(imbalances) >= 0.30) # 30% 이상 imbalance 확률
print(f"{name:>20}: P(imbalance ≥ 30%) = {p_extreme:.3f}")이 코드는 (1) 네 가지 무작위화 방법의 단일 sequence 비교, (2) 10000 회 반복 시뮬레이션으로 imbalance 빈도 비교 를 보여준다.
결과 해석: - Simple Randomisation 에서는 30% 이상 imbalance 가 약 5~10% 의 확률로 발생 - Block (4) 에서는 정확히 0% — 매 4 명마다 강제 균형 - Urn 은 그 사이 — 균형이 어느 정도 유지되지만 완전히 결정적이지 않음
이 trade-off 가 32-6 글의 핵심 내용이다.
10 결론 — Ch.12 의 한 줄 요약
무작위 배정 순서 생성은 RCT 의 가장 기본이지만, 가장 잘못 이해되는 부분이다.
핵심은 다음 세 가지 행동이다.
- 체계적 (systematic) 방법은 무작위가 아니다 — date·case number·alternation 등 모두 quasirandom
- Simple → Block → Urn → Stratified 의 위계 를 시험 특성 (sample size·맹검 여부) 에 따라 선택
- Generation 과 Implementation 의 분리 — sequence 생성자와 모집·배정자가 다르고, sequence 가 사전 잠금 되어야 함
이 세 행동이 정착되어야 비로소 무작위화의 세 이점 (편향 제거·맹검 가능·확률 이론) 이 실현된다.
후속 글에서:
- C-SCH12-1 (32-5) — Fisher 1920s 농업 + Bradford Hill 1948 streptomycin 의 역사적 맥락, 무작위화 3 이점의 깊이, quasirandom 의 함정 깊이
- C-SCH12-2 (32-6) — 7 가지 방법의 비교 (Simple, Random Allocation Rule, Blocking, Biased Coin, Urn, Replacement, Stratified) + 시험 특성에 따른 권장 매트릭스
11 관련 주제
선행 지식
- RCT 와 A/B 테스트의 설계 원칙 — RCT 5 요소
- RCT 모집의 현실 — Ch.10 개관 — Phase C 시리즈 시작
- 무작위 실험과 교환가능성 — Hernan Ch.2
Phase C 후속 글
- 무작위화의 역사와 이점 — Ch.12.1 — Fisher · Hill · 3 이점 깊이
- 무작위 배정 방법 비교 — Ch.12.2 — Simple · Block · Urn · Stratified
다른 카테고리 연결
- Randomization Strategies — IT A/B 테스트 배정 전략 (placeholder)
- Consistent Hashing for Assignment — 플랫폼 차원의 hash 기반 배정 (placeholder)
12 참고문헌
- Schulz, K. F. & Grimes, D. A. (2019). Essential Concepts in Clinical Research (2nd ed.), Ch.12. Elsevier.
- Hill, A. B. (1952). The clinical trial. N. Engl. J. Med. 247, 113-119.
- Hill, A. B. (1954). The clinical trial. (인용된 명언 출처)
- Fisher, R. A. (1966). The Design of Experiments. Oliver & Boyd.
- Medical Research Council. (1948). Streptomycin treatment of pulmonary tuberculosis. BMJ 2, 769-782.
- Schulz, K. F., Chalmers, I., Grimes, D. A., Altman, D. G. (1994). Assessing the quality of randomization from reports of controlled trials published in obstetrics and gynecology journals. JAMA 272, 125-128.
- Schulz, K. F., Altman, D. G., Moher, D., CONSORT Group. (2010). CONSORT 2010 statement: updated guidelines for reporting parallel group randomised trials. BMJ 340, c332.
- Lachin, J. M. (1988). Properties of simple randomization in clinical trials. Control. Clin. Trials 9, 312-326.