1 정의
배정 단위가 individual 이 아닌 cluster (군집) 인 무작위 배정 (Buisson, 2021, Ch.10).
Individual-level (Ch.8, 9):
각 customer 또는 owner 에게 무작위 배정
Cluster-level (Ch.10):
각 cluster (call center, school, hospital, region 등) 에게 무작위 배정
→ cluster 내 모든 individual 이 같은 그룹
특징:
- Cluster 가 단위 → cluster 수가 effective sample size
- Cluster 내 individual 들이 종속 → standard regression 부적절
- Hierarchical Linear Model (HLM) 또는 mixed-effect model 필요
Cluster-level 배정의 흔한 사유:
- Logistics: 같은 cluster 내 individual 에게 다른 treatment 적용 불가 (예: 한 학교의 학생들을 다른 교육 과정 적용 불가능)
- Leakage 방지: Cluster 내 사람들이 서로 영향 → 그룹 간 spillover (예: 같은 콜센터 직원들이 정보 공유)
- Compliance 보장: Cluster 단위 정책 변경이 individual 단위보다 enforceable
비즈니스 사례:
- 콜센터 SOP 변경 (Buisson Ch.10)
- 매장 내 cleanliness program (체인점)
- 학교 교육 프로그램
- 지역 기반 마케팅 (geo-experiments)
→ Individual 배정이 불가능한 상황에서 cluster 의 default.
2 AirCnC 콜센터 사례
2.1 비즈니스 맥락
AirCnC 의 10 개 콜센터 (지리적 분산), 193 명의 reps 가 고객 문의 처리.
VP of Customer Service 의 의사결정:
“HBR 기사를 읽었다. ‘Sorry’ 만 반복 사과하지 말고: 1. 시작에 한 번 사과 2. 문제 해결 모드 (problem-solving) 3. 고객에게 여러 옵션 제시
이 새 SOP 를 도입하면 CSAT 가 오를 것이다.”
질문: 이 가설이 진짜인가? 어떻게 검증?
VP 의 직감:
- HBR 기사 (전문지) → 권위
- 직관적으로 “맞을 것 같음”
- 다른 회사가 한다 → 우리도 해야
분석가의 자문:
- 우리 콜센터 reality 가 HBR 사례와 같은가?
- 우리 reps 가 새 SOP 따를 수 있는가?
- 우리 customer 가 같은 반응?
답: 데이터로만 확신 가능. 실험 필요.
→ 비즈니스 의사결정의 위험 — VP 의 직감만으로 SOP 변경 시 실패 시 큰 비용 (트레이닝, 운영 변화).
2.2 두 가지 Logistic 도전
Individual (rep)-level 배정의 시도:
시나리오: 각 rep 이 "이 통화는 새 SOP, 다음 통화는 기존 SOP" 무작위 적용
문제 1 — Cognitive load:
- Rep 이 통화마다 SOP 전환 → 인지 부담
- 무의식적 mistakes (잘못된 SOP 적용)
- Compliance 저하
문제 2 — Leakage between groups:
- 같은 콜센터의 reps 가 서로 채팅
- Treatment 그룹의 좋은 결과 → control 그룹도 따라하기
- 효과 측정 흐림
해결: Cluster (콜센터)-level 배정.
- 각 콜센터의 모든 reps 가 같은 그룹
- 한 콜센터 = 한 SOP (consistent)
- 다른 콜센터 간 leakage 거의 없음 (지리적 분산)
Leakage 시나리오:
- Treatment 그룹: 콜센터 A 의 reps, 새 SOP 사용
- Control 그룹: 콜센터 A 의 다른 reps, 기존 SOP
3 개월 후:
- Treatment reps 의 CSAT 점수 ↑
- Control reps 가 “왜 저들 점수 좋지?” 호기심
- 점심시간에 채팅: “어떻게 했어?”
- Control reps 가 새 SOP 따라함
- 두 그룹의 차이 약화 → 효과 측정 어려움
이게 individual-level 배정의 leakage. Cluster-level (다른 콜센터) 로 회피.
→ Leakage 가 통계적으로 “효과 없음” 으로 보이게 → 좋은 SOP 도 reject 위험.
2.3 Compliance 의 한계
콜센터 reps 는 인간:
- Treatment 그룹의 일부 rep 이 새 SOP 거부 (구식 익숙)
- Control 그룹의 일부 rep 이 호기심에 새 SOP 시도
→ 완벽한 100% compliance 불가능.
대처:
- Pre-experiment pilot: 몇 명 reps 에 trial 후 obstacles 식별
- Compliance 측정: 통화 녹음 listen 후 % 측정
- ITT 보고: Compliance 무관 효과 (비즈니스 reality)
- CACE 보고 (보조): Compliers 만의 효과
분석가가 인지해야 할 점:
- 분석 결과 = real world 결과
- Production 에서도 100% compliance 안 됨 → 실험과 같은 patterns
- ITT 가 production 효과의 unbiased 추정
- CACE 는 가정적 (만약 100% compliance 면)
→ 분석가의 default 보고: ITT (비즈니스 결정 도구). CACE 는 supplementary (메커니즘 이해).
3 ToC 적용
3.1 Business Goal + Target Metric
Business Goal: 고객 만족 (customer satisfaction).
Target Metric 후보:
| Level | 측정 |
|---|---|
| Cluster (콜센터) | 콜센터 평균 CSAT |
| Rep | Rep 평균 CSAT |
| Call | 개별 통화 CSAT |
Buisson 의 권장: Call-level CSAT (가장 풍부한 정보).
그러나 cluster-level 배정 + call-level 측정 = nested data → HLM 필요.
Center A (treatment) ←─ 콜센터 1
├── Rep A1
│ ├── Call 1 → CSAT
│ └── Call 2 → CSAT
└── Rep A2
└── Call 1 → CSAT
...
Center B (control) ←─ 콜센터 2
└── ...
만약 standard linear regression 사용:
문제:
- 각 rep 은 하나의 center 에만 속함 (nested)
- Rep_ID + Center_ID 가 perfect collinearity
- 회귀 추정이 unstable (여러 동일 fit 가능)
해결: Hierarchical Linear Model (HLM).
import statsmodels.formula.api as smf
mixed = smf.mixedlm("CSAT ~ reason + age + group",
data=df,
groups=df["center_ID"])groups 가 cluster 변수. Nested rep 변수는 추가 처리.
3.2 Behavioral Logic
새 SOP 노출 (Y/N) ──→ Customer satisfaction ──→ Measured CSAT
(cluster 단위) (during call)
가설:
- 새 SOP → 통화 중 customer 만족 ↑
- 만족 ↑ → CSAT 점수 ↑
검증 가능 가설.
복잡한 chain 이 항상 좋은 건 아님:
- 단순 logic = 검증 명확
- 복잡 logic = 약한 고리 가능
이 사례의 logic 은 매우 단순:
- 직접: SOP → CSAT
- 매개: customer 의 통화 중 감정만
이 단순함이 분석을 깔끔하게.
만약 복잡하면 (예: SOP → 만족 → loyalty → 재구매 → 매출):
- 각 매개의 검증 필요
- 효과가 chain 끝에서 약함
- 측정 복잡
→ 비즈니스 분석에서 단순 logic 권장.
4 Hierarchical Linear Model (HLM)
4.1 HLM 의 도입
HLM (또는 mixed-effect model, multilevel model) = nested 또는 grouped 데이터에 대한 회귀.
기본 구조:
Level 1 (call): CSAT_ij = β_0j + β_1 * X_ij + ε_ij
Level 2 (center): β_0j = γ_00 + γ_01 * Group_j + u_j
여기서:
- \(i\) = call (level 1)
- \(j\) = center (level 2)
- \(\beta_{0j}\) = center j 의 intercept (랜덤)
- \(\gamma_{00}\) = 전체 평균
- \(\gamma_{01}\) = treatment 효과
- \(u_j\) = center 레벨 random error
→ Center 별 다른 baseline (intercept) 허용 + 통일된 treatment 효과 추정.
비유: 학교마다 다른 교육 수준.
- Standard regression: 모든 학교가 같다고 가정 → 잘못
- Fixed-effect model: 학교 dummy 변수 추가 → 학교 수가 많으면 변수 폭발
- Random-effect (HLM): 학교를 distribution 에서 랜덤하게 추출했다고 가정 → 효율적
콜센터 사례:
- 10 개 콜센터 = 가능한 모든 콜센터의 random sample
- 각 콜센터가 다른 baseline CSAT 가능
- HLM 이 그 variation 을 모형에 통합
→ HLM 이 nested 데이터의 표준 도구.
4.2 Random vs Fixed Effect
Fixed Effect:
- 전체 모집단에 대한 효과 (상수)
- 예: SOP 의 효과 = +0.5 CSAT (모든 콜센터)
- “Group” 변수의 회귀 계수
Random Effect:
- Cluster 별 다른 효과 (분포)
- 예: 콜센터 1 의 baseline = 7.5, 콜센터 2 = 6.8, …
- 분포의 variance 만 추정 (각 cluster 의 effect 안 추정)
HLM 의 mix:
- Fixed effect: SOP 효과 (Treatment vs Control)
- Random effect: Center 별 intercept
이 분리가 cluster 의 baseline 차이를 흡수하면서 treatment 효과를 깨끗이 추정.
비유: 학생들의 키.
- 학년 (1, 2, 3) → fixed effect (학년이 많을수록 키 ↑, 모든 학교에서 동일)
- 학교 → random effect (학교마다 평균 키 다르나 distribution 에서 sample)
콜센터 사례:
- Treatment (Y/N) → fixed effect (treatment 가 모든 콜센터에서 같은 효과)
- Center → random effect (각 콜센터의 baseline 다름)
분석가가 관심:
- Treatment 효과 (fixed): “SOP 효과는?”
- Center variance (random): “콜센터 간 변동의 크기는?”
→ HLM 이 두 질문에 동시에 답.
4.3 Nested Random Effects
Rep 이 Center 안에 nested:
- Rep 1, 2, 3 → Center A
- Rep 4, 5, 6 → Center B
R 코드:
(1 | center_ID/rep_ID) 표기:
- Center 별 random intercept
- Rep 별 random intercept (center 안에 nested)
Python (statsmodels):
비유: 행정 구조.
- 국가 → 도 → 시 → 동
- 시는 도 안에 nested
- 동은 시 안에 nested
콜센터 사례:
- 10 colt centers
- 193 reps (다른 colt centers 에 분산)
- 695,205 calls (다른 reps 에 분산)
3 단계 nested:
Center 1
├── Rep 1
│ ├── Call 1
│ ├── Call 2
│ └── ...
├── Rep 2
...
HLM 이 이 nested 구조를 자동 처리. 각 level 의 variation 이 결과에 통합.
비즈니스 함의:
- Center variance: 콜센터 간 differences
- Rep variance: 콜센터 내 reps 간 differences
- Call variance (residual): 같은 rep 의 calls 간 variance
→ 세 variance source 의 분해가 분석의 풍부함.
4.4 ICC — Intra-Cluster Correlation
ICC (Intra-Cluster Correlation): 같은 cluster 의 두 individual 의 상관.
수식:
\[ \text{ICC} = \frac{\sigma^2_{\text{between}}}{\sigma^2_{\text{between}} + \sigma^2_{\text{within}}} \]
해석:
- ICC = 0: cluster 무관 (individuals 독립)
- ICC = 1: cluster 가 모든 variation 설명
- 보통 0.05 ~ 0.3
ICC 가 작으면 (0.05):
- Cluster effect 작음
- Effective sample size ≈ total sample size
- Cluster 무시해도 큰 손해 없음
ICC 가 크면 (0.3):
- Cluster effect 큼
- Effective sample size 가 작음 (한 cluster 가 1 개 unit 처럼)
- HLM 필수
콜센터 사례:
- ICC = \(1.4 / (1.4 + 1.1) = 0.56\) (very high!)
- 콜센터 간 차이가 크게 → 한 콜센터가 거의 1 unit
- 10 개 콜센터 = 10 개 effective unit (일반 sample 695,205 가 아니라!)
→ Power 계산 시 effective N 사용 필수.
4.5 Effective Sample Size
Effective sample size:
\[ n_{\text{eff}} = \frac{n_{\text{total}}}{1 + (\bar{m} - 1) \cdot \text{ICC}} \]
여기서 \(\bar{m}\) = cluster 당 평균 individual 수.
콜센터 사례:
- \(n_{\text{total}} = 695,205\) calls
- \(\bar{m} = 69,520\) calls/center
- ICC = 0.56
\[ n_{\text{eff}} = \frac{695205}{1 + 69519 \cdot 0.56} \approx 18 \]
→ 695,205 calls 의 effective N 이 단지 18 unit !
이게 cluster randomization 의 statistical 비용. Power 매우 낮음.
695,205 calls 가 18 effective N 이 됨:
- 같은 cluster 의 calls 는 strongly correlated → 거의 같은 정보
- 정보의 양 = cluster 수 (10) + 부분 추가 (8)
- 결국 18 unit 로 결정
비즈니스 함의:
- 충분한 power 위해 cluster 수 ↑ (10 → 50 콜센터?)
- 또는 ICC ↓ (cluster 내 variance ↑)
- Sample size = call 수 × cluster 수 trade-off
→ Cluster randomization = 큰 데이터지만 실제 정보 작음. Power 분석 결정적.
5 응용 — 다른 비즈니스 사례
5.1 매장 청결 program
체인점 (100 개 매장) 의 청결 program 실험.
Cluster: 매장 (100 개)
Individual: 매장 내 hour-level cleanliness measurement
Treatment: 새 청결 SOP
Outcome: 매장 cleanliness score
Cluster-level 이유:
- 한 매장의 다른 hour 에 다른 SOP 불가 (직원 cognitive load)
- 직원들이 서로 영향 (leakage)
ICC 큼 (한 매장 내 cleanliness 일관) → effective N 작음.
5.2 지역 마케팅 (Geo-Experiment)
광고 캠페인 실험.
Cluster: 도시 (50 개 시)
Individual: 시 내 customer
Treatment: 새 광고
Outcome: 시별 매출
Cluster-level 이유:
- TV/라디오 광고 = 시 단위 노출 (individual 단위 불가)
- 같은 시 사람들이 영향 (word-of-mouth)
→ Geo-experiments 가 마케팅 표준.
5.3 학교 교육 program
새 수학 교육 방법 실험.
Cluster: 학교 (200 개)
Individual: 학생 (각 학교 평균 500 명)
Treatment: 새 교육 program
Outcome: 표준 시험 점수
Cluster-level 이유:
- 한 학교의 학생들에게 다른 교육 불가 (logistically)
- 학생들이 서로 가르침 (leakage)
→ Education research 의 표준.
6 코드 예시 — Python 으로 HLM
6.1 단순 HLM
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
# 가상 콜센터 데이터
np.random.seed(42)
n_centers = 10
n_reps_per_center = np.random.poisson(20, n_centers)
n_calls_per_rep = 100
# 각 center 의 baseline CSAT (random effect)
center_baselines = np.random.normal(7, 1.2, n_centers)
# 데이터 생성
records = []
for c_idx in range(n_centers):
for r_idx in range(n_reps_per_center[c_idx]):
for call_idx in range(n_calls_per_rep):
csat = (
center_baselines[c_idx]
+ np.random.normal(0, 0.5) # rep effect
+ np.random.normal(0, 1) # call effect
)
records.append({
"center_ID": f"C{c_idx}",
"rep_ID": f"C{c_idx}_R{r_idx}",
"csat": np.clip(csat, 0, 10),
"age": np.random.randint(20, 60),
"reason": np.random.choice(["payment", "property"]),
})
df = pd.DataFrame(records)
print(f"Total calls: {len(df)}")
print(f"Centers: {df['center_ID'].nunique()}")
print(f"Reps: {df['rep_ID'].nunique()}")
# HLM
mixed = smf.mixedlm(
"csat ~ reason + age",
data=df,
groups=df["center_ID"],
).fit(disp=False)
print(mixed.summary())HLM 출력의 구조:
- Fixed Effects (intercept, reason, age):
- Standard regression 같은 표시
- Treatment 효과는 여기
- Random Effects (Group Var):
- Center 간 variance
- 큰 값 → cluster 효과 강함
- ICC 계산의 입력
분석가의 default 점검:
- Group Var > 0.5 → cluster 효과 강함, HLM 필수
- Group Var < 0.1 → cluster 효과 약함, standard regression OK
6.2 ICC 계산
def compute_icc(mixed_result):
"""HLM 결과에서 ICC 추출."""
# statsmodels 의 mixed model 결과
sigma2_between = mixed_result.cov_re.iloc[0, 0] # cluster variance
sigma2_within = mixed_result.scale # residual variance
icc = sigma2_between / (sigma2_between + sigma2_within)
return {
"between": sigma2_between,
"within": sigma2_within,
"icc": icc,
}
icc_result = compute_icc(mixed)
print(f"\n=== ICC 분해 ===")
print(f"Between-cluster variance: {icc_result['between']:.3f}")
print(f"Within-cluster variance: {icc_result['within']:.3f}")
print(f"ICC: {icc_result['icc']:.3f}")ICC 결과 별 분석가의 결정:
- ICC > 0.5: 매우 강한 cluster 효과 → HLM + cluster 수 늘리기 필요
- ICC 0.1 ~ 0.5: 중간 cluster 효과 → HLM 권장
- ICC < 0.1: 약한 cluster 효과 → standard regression OK
콜센터 사례에서 ICC ≈ 0.56 → HLM 필수, 효과 측정 어려움.
6.3 Effective N 계산
def effective_n(n_total, mean_cluster_size, icc):
"""Effective sample size."""
return n_total / (1 + (mean_cluster_size - 1) * icc)
mean_cluster = len(df) / df["center_ID"].nunique()
n_eff = effective_n(len(df), mean_cluster, icc_result["icc"])
print(f"\n=== Effective Sample Size ===")
print(f"Total N: {len(df)}")
print(f"Mean cluster size: {mean_cluster:.0f}")
print(f"ICC: {icc_result['icc']:.3f}")
print(f"Effective N: {n_eff:.0f}")Total N = 60,000 calls 의 effective N = 20 같은 결과.
분석가의 보고:
“60,000 calls 처럼 보이지만 effective sample 은 20. 콜센터 수 (10) + 부분 추가. Power 분석 시 effective N 사용.”
비즈니스 파트너의 반응:
- “왜 60,000 이 20 으로 줄어드나?”
- 분석가: “같은 콜센터의 calls 가 매우 비슷함. 진짜 정보는 콜센터 수에서.”
이 설명이 cluster experiments 의 가장 중요한 communication.
7 종합 — Cluster Experiment 절차
1. ToC 명확화 (Ch.8.1)
2. Cluster-level 결정 (logistics + leakage 분석)
3. Cluster 수 결정 (effective N 기반 power)
4. Stratified cluster 배정 (Ch.9 의 stratification)
5. A/A test
6. 본 실험
7. HLM 분석
- Fixed effect: treatment 효과
- Random effect: cluster variance
- ICC 계산 + 보고
8. ITT/CACE (Ch.9 의 framework)
9. 보고서 (cluster-level + individual-level 모두)
각 단계가 cluster experiments 의 표준.
8 관련 주제
8.1 Ch.10 의 형제 글
- E-BUI10-1 군집 사용 시점과 누출 — Cluster 결정 자세히
- E-BUI10-2 계층 모형과 임의·고정 효과 — HLM 자세히
- E-BUI10-3 ICC 와 검정력 — Power 분석
8.2 이전 챕터
- E-BUI9-2 Bootstrap 검정력 + ITT/CACE — Ch.9: Stratified power
8.3 후속 챕터
- E-BUI11-0 Moderation overview — Ch.11: 효과 수정
8.4 카테고리 진입점
- Experimentation 학습 로드맵 — 11 Phase × 7 교재 매핑