이 글은 Schulz Ch.13 시리즈의 두 번째 글이다. Ch.13 개관 에서 제시한 큰 그림 중 추측 위험과 Block 방어 를 깊게 다룬다 (Schulz full md L:19654~19900). 다음 글에서는 Urn 과 Mixed Randomisation 을 다룬다.
1 진입 직관 — 왜 비맹검 시험은 통계가 아닌 행동의 문제인가
이중 맹검 시험에서 무작위 배정은 통계적 문제다. 적절히 무작위화하면 끝. 그러나 비맹검 시험에서는 인간 행동의 문제 가 추가된다.
핵심 사실: 임상 인력의 16% 가 적극적으로 배정 sequence 를 추측하려 시도한다 (Kahan 외 2015). 이는 부정행위가 아니다. 임상적 호기심 의 자연스러운 발현이다. 그러나 이 호기심이 selection bias 를 만든다.
비유: 카드 게임에서 “다른 사람의 카드를 추측하지 말 것” 이라는 규칙이 있어도, 인간은 본능적으로 카드를 보고 추측한다. RCT 에서 이 본능을 제거하는 것은 심리학적으로 불가능. 따라서 추측해도 정보가 안 새도록 시스템을 설계해야 한다.
이 글의 목적은:
- 왜 추측이 일어나는가 — Cosmetic credibility 미신의 실증
- 어떻게 정보가 새는가 — Block 의 수학적 함정
- 부분적 방어 — 하지만 충분하지 않다 — Random 변동의 한계
다음 글에서 완전한 방어 인 Urn 과 Mixed Randomisation 을 다룬다.
2 Cosmetic Credibility 미신 — 실증 깊이
2.1 Schulz 의 실증
Schulz (2002, Lancet) 가 일반 의학 학술지의 RCT 보고를 분석한 결과:
| 시험 유형 | 정확히 같은 sample size 비율 |
|---|---|
| Simple randomised (specialist 학술지) | 54% |
| Simple randomised (dermatology) | 71% |
| Block randomised | 36% |
충격: Block 시험은 균형을 강제 하므로 정확 균형이 흔하다. 그러나 Simple randomised 시험은 우연의 결과 로만 정확 균형이 나와야 한다. Simple 의 54~71% 정확 균형은 통계적 우연으로 설명 불가능.
2.2 수학적 분석
Simple randomisation 으로 정확 균형이 나올 확률:
\[P(X = n/2 \mid X \sim \text{Binomial}(n, 0.5)) = \binom{n}{n/2} \cdot \frac{1}{2^n}\]
| \(n\) | 정확 균형 확률 |
|---|---|
| 50 | 11.2% |
| 100 | 8.0% |
| 200 | 5.6% |
| 500 | 3.6% |
| 1000 | 2.5% |
반사실: 만약 Simple Randomisation 의 수학적 기댓값 이 5~11% 인데 관측치 가 54~71% 라면, 두 차이의 격차 (5~6 배) 는 비무작위 조작 의 비율을 시사. Schulz 는 이를 “여러 trialist 가 무의식적으로 sequence 를 수정 해 균형 강제” 라고 해석.
2.3 미신의 위험
경로 1: 연구자가 마지막 환자를 원하는 군에 강제 배정 → 무작위화 무력화.
경로 2: Block 사용 시, 작은 고정 블록 선호 → 예측 가능성 증가.
경로 3: Reviewer 가 균형 부재를 결함 으로 지적 → 연구자가 더욱 균형 강제로 압박.
so what: 미신은 단지 미적 선호가 아니라 방법론적 위험을 직접 만든다. Schulz 는 “Reviewer 와 editor 가 이 미신에서 벗어나야 RCT 의 자연 균형이 회복된다” 고 주장.
3 Permuted-Block 의 예측 가능성 — 수학적 함정
3.1 Block 크기 4 의 결정성 분석
블록 크기 4 (A 2, B 2). 가능한 6 가지 패턴:
AABB, ABAB, ABBA, BAAB, BABA, BBAA
블록 내부 에서 첫 3 자리가 주어졌을 때 4 번째 자리:
| 첫 3 자리 | 가능한 패턴 | 4 번째 |
|---|---|---|
| AAB | AABB | B (확률 1) |
| ABA | ABAB | B (확률 1) |
| ABB | ABBA | A (확률 1) |
| BAA | BAAB | B (확률 1) |
| BAB | BABA | A (확률 1) |
| BBA | BBAA | A (확률 1) |
결론: 블록 크기 4 에서 마지막 자리는 항상 100% 결정적. 모집 인력이 첫 3 명의 배정을 알면 4 번째는 완벽 예측.
3.2 일반화
블록 크기 \(b\) 에서:
- 첫 \(b-1\) 자리가 주어지면 마지막 자리는 거의 항상 결정 가능
- 즉 약 \(1/b\) 비율의 환자가 완벽 예측 가능
- Block 크기 4: 25%, 6: 17%, 10: 10%, 20: 5%
수식 직관: 더 정확한 분석. 블록 크기 \(b\) (각 군 \(b/2\)). 임의의 시점 \(k\) (\(k = 1, ..., b-1\)) 에서 다음 자리 예측 정확도는:
\[P_{\text{correct}} = \frac{1}{2} + \frac{|\Delta_k|}{2(b-k)}\]
여기서 \(\Delta_k\) 는 \(k\) 시점까지 두 군의 차이. 마지막 자리 (\(k = b-1\)) 에서 \(|\Delta_k| = b-k = 1\) 이므로 \(P = 1\) — 결정적.
반사실 — 블록 크기 16: 마지막 자리만 결정적, 나머지 15 자리는 부분적으로만. 블록 크기 16 의 블록 평균 예측 가능 자리는 약 1.5 자리. 즉 9.4% 만 예측 가능.
3.3 Selection Bias 의 메커니즘 — Berger-Exner 모형
Berger & Exner (1999) 의 selection bias 측정 모형. 한 환자를 모집할 때:
- 모집 인력이 다음 배정 (\(T_{i+1}\)) 을 부분적으로 추측
- 환자의 baseline 위험 (\(X_{i+1}\)) 을 평가
- 추측한 \(T_{i+1}\) 와 \(X_{i+1}\) 의 적합성에 따라 등록 결정
결과: 두 군의 baseline 분포가 체계적으로 다름. 예: 새 약 군에 더 건강한 환자, 표준 군에 더 위중한 환자.
수식: 만약 모집 인력이 다음 배정을 확률 \(p\) 로 정확히 추측하고, baseline 위험에 따라 환자를 선별한다면, 두 군의 baseline 차이 (예: 평균 위험) 가 약 \(0.4(p - 0.5)\) 단위로 발생 (Berger 2014).
\(p = 0.7\) (큰 블록·random 변동 시) 에서 baseline 차이 약 0.08
\(p = 0.85\) (작은 고정 블록 시) 에서 baseline 차이 약 0.14
so what: 작은 고정 블록은 측정 가능한 selection bias 를 만든다. Schulz 외 (1995) 의 41% effect overestimation 발견의 부분적 메커니즘.
4 Schulz 외 (1995) — 41% Effect Overestimation 재방문
이전 글 (32-5) 에서 인용한 발견을 이 맥락에서 재해석.
Schulz, Chalmers, Hayes, Altman (1995, JAMA): 무작위 배정 또는 concealment 가 부적절한 시험은 치료 효과를 평균 41% 과대 추정.
이 41% 의 부분적 원인 이 비맹검 시험에서의 추측 selection bias 다.
| 부적절 요소 | 효과 과대 추정 (평균) |
|---|---|
| 부적절 sequence generation | 1020% |
| 부적절 allocation concealment | 3040% |
| 부적절 blinding | 1020% |
| 누적 | ~41% |
반사실: 만약 한 신약의 진짜 효과가 사망률 20% 감소라면:
- 적절한 RCT: 측정 효과 ≈ 20%
- 부적절 sequence + concealment 부재: 측정 효과 ≈ 28~30%
의사·환자가 실제보다 더 효과적 이라고 믿게 됨. 임상 결정 왜곡.
5 Kahan 외 (2015) — 16% 추측 시도의 메커니즘
Kahan, Rehal, Cro (2015) 의 Trials 발표는 비맹검 시험에서 selection bias 위험을 정량화한 중요한 연구다.
5.1 연구 설계
영국 임상 시험 인력 (임상의·연구 간호사) 대상 익명 설문. 핵심 질문:
“당신은 이전에 RCT 의 무작위 배정 sequence 패턴을 추측하려 시도한 적이 있습니까?”
5.2 결과
| 응답 | 비율 |
|---|---|
| 시도한 적 있음 | 16% |
| 시도한 적 없음 | 84% |
추측 방법:
- 78%: 과거 배정의 log 유지
- 51%: 블록 크기 역추적
- 34%: Sequence 생성자에게 직접 질문 (!)
- 22%: Concealment 시스템의 약점 활용
5.3 Schulz 의 해석
“16% 는 최소 추정치. 익명 설문이라도 사회적 바람직성 편향 (social desirability bias) 으로 인해 실제 추측자는 더 많을 가능성. 그리고 시도한 적 없음 의 일부도 무의식적 추측을 했을 수 있음.”
반사실: 만약 진짜 비율이 30% 라면, 전체 RCT 의 약 1/3 이 어떤 형태로든 selection bias 를 겪고 있을 가능성. 메타분석의 신뢰도가 위협받음.
6 Random 변동 블록의 효과 — 부분적이지만 중요
비맹검 시험에서 권장되는 첫 번째 방어선: Random 변동 블록 + 큰 블록 + 비공개.
6.1 효과 분석
블록 크기 4 고정 vs 6, 8, 10, 12 random 변동:
| 시나리오 | 마지막 자리 예측 정확도 |
|---|---|
| Block size 4 fixed | 100% (마지막 자리 결정적) |
| Block size 6 fixed | 100% |
| Random {4, 6, 8} | 6070% (블록 종료 시점 모호) |
| Random {6, 8, 10, 12} | 5060% |
| Random {8, 12, 16, 20} | 4050% |
수식 직관: Random 블록 크기 \(\{b_1, b_2, ...\}\) 에서 모집 인력이 현재 어느 블록 내부 인지 모르면 다음 자리 예측이 어려워짐. 그러나 누적 배정 패턴을 분석해 블록 경계를 추정 할 수 있음.
6.2 Blackwell-Hodges 모형
Blackwell & Hodges (1957) 가 제시한 최적 추측 모형. 모집 인력이 가장 합리적으로 추측할 때 정확도 상한.
결론 (Berger 외 2003): Random 변동 블록도 selection bias 를 완전히 제거하지 못한다. 큰 블록 (≥ 16) + random 변동 + 비공개 의 조합이 가장 안전.
6.3 한계
Schulz 의 평가: “Random 블록 크기는 selection bias 를 감소 시키지만 제거 하지 않는다. 비맹검 시험에서 진정한 안전을 원하면 Block 의 사고 모형을 넘어서야 한다 — Urn 또는 Mixed Randomisation.”
이 한계가 다음 글의 출발점이다.
7 비공개의 정치 — Sequence 정보의 분리
Block 방어의 또 다른 축: Sequence 정보의 접근 권한 분리.
7.1 권한 매트릭스
| 정보 | Sequence 생성자 | 모집 인력 | 데이터 분석가 | Reviewer (시험 후) |
|---|---|---|---|---|
| 정확한 sequence | O | X | X (시험 중), O (시험 후) | X (시험 중), O (시험 후) |
| 블록 크기 | O | X | X (시험 중), O (시험 후) | X (시험 중), O (시험 후) |
| 일반적 방법 (예: “변동 블록”) | O | O | O | O |
원칙: 모집 인력이 sequence 의 어떤 정보도 접근하면 안 된다. 일반적 방법론만 알면 됨.
7.2 구현 사례
| 시스템 | 메커니즘 |
|---|---|
| 봉인된 봉투 (sealed envelope) | 순차 번호, 불투명, sequence 생성자가 봉인 |
| 중앙 무작위 (central randomisation) | 전화·웹 시스템, 모집 인력이 환자 정보 입력 시 sequence 자동 반환 |
| 약사 통제 (pharmacy control) | 약물이 미리 블라인드 라벨, 약사만 sequence 알고 약 배포 |
7.3 위반 사례 (Schulz 의 anecdote)
Schulz 가 인용하는 위반 사례 (Schulz 1995, JAMA):
- 반투명 봉투를 강한 빛에 비춰 내용 확인
- 중앙 무작위 전화에서 여러 환자의 배정을 미리 요청
- PI 의 책상 서랍에서 sequence 파일을 밤에 열람
반사실: 이런 위반은 부정행위 가 아니다. 임상적 호기심 의 발현. 그러나 결과적으로 selection bias 를 만든다. 시스템 설계가 호기심을 불가능 하게 해야 한다.
8 IT / 디지털 실험 매핑
| 역학 (RCT) | IT (A/B Test) |
|---|---|
| Cosmetic credibility 미신 | “정확 50:50 이어야 안전” 신화 |
| 16% 추측 시도 | 사용자가 본인 군 추측·확인 |
| Block 결정성 | Hash bucket 패턴 노출 |
| Random 변동 블록 | Hash salt rotation |
| Sequence 비공개 | Hash function + secret salt |
| 봉인된 봉투 | Encrypted assignment service |
| 중앙 무작위 | Centralized assignment server |
| 약사 통제 | Feature flag service |
IT 의 추가 위험: IT 에서는 사용자가 URL 파라미터·DOM 요소 등을 통해 본인 군을 추측할 수 있다. 이는 임상의 16% 추측보다 더 흔할 수 있음 (개발자가 호기심에 코드 검사). Hash + secret + obfuscation 의 다중 방어 필요.
9 코드 예시 — Block 함정과 Random 변동의 효과
import numpy as np
from itertools import permutations
np.random.seed(42)
# 1. Block size 별 마지막 자리 예측 가능 비율
def block_predictability_exact(block_size):
half = block_size // 2
base = [0]*half + [1]*half
patterns = list(set(permutations(base)))
# 첫 (b-1) 자리 → 마지막 자리 매핑
last_map = {}
for p in patterns:
prefix = tuple(p[:-1])
if prefix not in last_map:
last_map[prefix] = []
last_map[prefix].append(p[-1])
# Unique 한 prefix (마지막 결정적) 의 비율
determined = sum(1 for v in last_map.values() if len(set(v)) == 1)
return determined / len(last_map)
print("[Block 크기별 마지막 자리 결정성]")
for b in [4, 6, 8, 10, 16, 20]:
p = block_predictability_exact(b)
print(f"Block size {b:>2}: 결정성 = {p:.1%}")
# 2. Random 변동 블록의 추측 정확도
def simulate_guessing(block_sizes, n_trial=1000, n_per_trial=200):
correct, total = 0, 0
for _ in range(n_trial):
seq = []
n_a, n_b = 0, 0
while len(seq) < n_per_trial:
b = np.random.choice(block_sizes)
half = b // 2
block = np.array([0]*half + [1]*half)
np.random.shuffle(block)
for assignment in block:
# 추측: 부족한 군
guess = 0 if n_a < n_b else (1 if n_a > n_b else np.random.choice([0,1]))
if guess == assignment:
correct += 1
total += 1
if assignment == 0:
n_a += 1
else:
n_b += 1
if len(seq) + len(block) > n_per_trial:
seq.extend(block[:n_per_trial - len(seq)])
break
seq.extend(block)
return correct / total
print("\n[Random 변동 블록의 평균 추측 정확도]")
configs = [
("Fixed Block(4)", [4]),
("Fixed Block(6)", [6]),
("Fixed Block(10)", [10]),
("Random {4, 6, 8}", [4, 6, 8]),
("Random {6, 8, 10, 12}", [6, 8, 10, 12]),
("Random {8, 12, 16, 20}", [8, 12, 16, 20]),
("Simple", None),
]
for name, sizes in configs:
if sizes is None:
# Simple
correct, total = 0, 0
for _ in range(1000):
seq = np.random.choice([0, 1], 200)
n_a, n_b = 0, 0
for a in seq:
guess = 0 if n_a < n_b else (1 if n_a > n_b else np.random.choice([0,1]))
if guess == a:
correct += 1
total += 1
if a == 0:
n_a += 1
else:
n_b += 1
acc = correct / total
else:
acc = simulate_guessing(sizes)
print(f"{name:<25}: {acc:.1%}")
# 3. Schulz 2002 cosmetic credibility 시뮬레이션
print("\n[Cosmetic Credibility — 정확 균형 확률]")
from scipy.stats import binom
for n in [50, 100, 200, 500, 1000]:
p_exact = binom.pmf(n//2, n, 0.5)
print(f"n={n:>4}: P(정확 균형) = {p_exact:.4f} ({p_exact*100:.1f}%)")
print("\n관측: Simple RCT 의 54~71% 가 정확 균형 — 이는 우연의 5~6 배.")
print("→ 비무작위 조작이 흔히 일어남을 강력 시사.")
# 4. Berger 2014 selection bias 추정
print("\n[Berger 2014 — 추측 정확도 → baseline imbalance]")
for p in [0.5, 0.55, 0.65, 0.75, 0.85, 1.00]:
bias = 0.4 * (p - 0.5)
print(f"P(correct guess) = {p:.2f}: Baseline 차이 ≈ {bias:.3f}")
print("→ 작은 고정 블록 (p≥0.85) 은 선명한 baseline imbalance 생성.")이 코드는:
- Block 크기별 결정성 (b=4 에서 100%, b=20 에서 ~5%)
- Random 변동의 효과 (50~70% 추측 정확도, Simple 의 50% 와 비교)
- Cosmetic credibility 의 통계적 불가능성 (관측 54% vs 우연 8%)
- Berger 2014 baseline imbalance 정량화
10 결론 — Block 방어의 두 메시지
균형 강제는 함정이고, 작은 고정 블록은 위험하다.
핵심 행동 권고:
- Cosmetic credibility 미신을 거부 — 약간의 imbalance 는 무작위의 증거
- 블록 크기 ≥ 10, 가능하면 16 이상
- 블록 크기 random 변동
- 블록 크기 비공개 — sequence 생성자만 앎
- Sequence 분리 권한 — 모집 인력 차단
그러나 Block 은 완벽한 방어가 아니다. Random 변동도 selection bias 를 완전히 제거하지 못한다. 비맹검 시험에서 진정한 안전을 원하면 다음 글에서 다룰 Urn 또는 Mixed Randomisation 이 필요하다.
11 관련 주제
선행 지식
Phase C 후속 글
- Urn 과 Mixed Randomisation (placeholder)
- SCH Ch.14 Allocation Concealment 시리즈 (placeholder)
12 참고문헌
- Schulz, K. F. & Grimes, D. A. (2019). Essential Concepts in Clinical Research (2nd ed.), Ch.13. Elsevier.
- Schulz, K. F. & Grimes, D. A. (2002). Generation of allocation sequences in randomised trials. Lancet 359, 515-519.
- Schulz, K. F. (1995). Subverting randomization in controlled trials. JAMA 274, 1456-1458.
- Schulz, K. F., Chalmers, I., Hayes, R. J., Altman, D. G. (1995). Empirical evidence of bias. JAMA 273, 408-412.
- Kahan, B. C., Rehal, S., Cro, S. (2015). Risk of selection bias in randomised trials. Trials 16, 405.
- Berger, V. W. (2014). Quantifying the magnitude of baseline covariate imbalances. Stat. Med. 33, 4133-4135.
- Berger, V. W. & Exner, D. V. (1999). Detecting selection bias in randomized clinical trials. Control. Clin. Trials 20, 319-327.
- Blackwell, D. & Hodges, J. L. (1957). Design for the control of selection bias. Ann. Math. Statist. 28, 449-460.