군집 무작위 배정 — Cluster-level 배정과 Hierarchical Modeling (Buisson Ch.10 overview)

AirCnC 콜센터 SOP 실험, Compliance·Leakage 위험, HLM 의 도입

Buisson (2021) Ch.10 의 전체 흐름을 압축한 overview. 군집 무작위 배정의 의의, AirCnC 의 콜센터 SOP 변경 사례, Cluster-level 배정의 logistics 근거, Compliance 와 Leakage 의 위험, ToC 적용, Hierarchical Linear Model (HLM) 의 도입과 nested variable 처리를 단계별로 시연한다.

Experimentation
Causal Inference
저자

Kwangmin Kim

공개

2026년 05월 08일

1 정의

정의: Cluster Randomization

배정 단위가 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 가 필요한 이유

Cluster-level 배정의 흔한 사유:

  1. Logistics: 같은 cluster 내 individual 에게 다른 treatment 적용 불가 (예: 한 학교의 학생들을 다른 교육 과정 적용 불가능)
  2. Leakage 방지: Cluster 내 사람들이 서로 영향 → 그룹 간 spillover (예: 같은 콜센터 직원들이 정보 공유)
  3. Compliance 보장: Cluster 단위 정책 변경이 individual 단위보다 enforceable

비즈니스 사례:

  • 콜센터 SOP 변경 (Buisson Ch.10)
  • 매장 내 cleanliness program (체인점)
  • 학교 교육 프로그램
  • 지역 기반 마케팅 (geo-experiments)

→ Individual 배정이 불가능한 상황에서 cluster 의 default.

2 AirCnC 콜센터 사례

2.1 비즈니스 맥락

SOP 변경 실험

AirCnC 의 10 개 콜센터 (지리적 분산), 193 명의 reps 가 고객 문의 처리.

VP of Customer Service 의 의사결정:

“HBR 기사를 읽었다. ‘Sorry’ 만 반복 사과하지 말고: 1. 시작에 한 번 사과 2. 문제 해결 모드 (problem-solving) 3. 고객에게 여러 옵션 제시

이 새 SOP 를 도입하면 CSAT 가 오를 것이다.”

질문: 이 가설이 진짜인가? 어떻게 검증?

직관 — VP 의 직감 vs 데이터

VP 의 직감:

  • HBR 기사 (전문지) → 권위
  • 직관적으로 “맞을 것 같음”
  • 다른 회사가 한다 → 우리도 해야

분석가의 자문:

  • 우리 콜센터 reality 가 HBR 사례와 같은가?
  • 우리 reps 가 새 SOP 따를 수 있는가?
  • 우리 customer 가 같은 반응?

답: 데이터로만 확신 가능. 실험 필요.

→ 비즈니스 의사결정의 위험 — VP 의 직감만으로 SOP 변경 시 실패 시 큰 비용 (트레이닝, 운영 변화).

2.2 두 가지 Logistic 도전

Cluster-level 의 강제

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 의 비즈니스 비용

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 의 한계

100% Compliance 의 불가능

콜센터 reps 는 인간:

  • Treatment 그룹의 일부 rep 이 새 SOP 거부 (구식 익숙)
  • Control 그룹의 일부 rep 이 호기심에 새 SOP 시도

→ 완벽한 100% compliance 불가능.

대처:

  1. Pre-experiment pilot: 몇 명 reps 에 trial 후 obstacles 식별
  2. Compliance 측정: 통화 녹음 listen 후 % 측정
  3. ITT 보고: Compliance 무관 효과 (비즈니스 reality)
  4. CACE 보고 (보조): Compliers 만의 효과
직관 — Compliance vs 비즈니스 reality

분석가가 인지해야 할 점:

  • 분석 결과 = real world 결과
  • Production 에서도 100% compliance 안 됨 → 실험과 같은 patterns
  • ITT 가 production 효과의 unbiased 추정
  • CACE 는 가정적 (만약 100% compliance 면)

→ 분석가의 default 보고: ITT (비즈니스 결정 도구). CACE 는 supplementary (메커니즘 이해).

3 ToC 적용

3.1 Business Goal + Target Metric

CSAT 의 두 level

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
   └── ...
Multicollinearity 함정

만약 standard linear regression 사용:

ols("CSAT ~ rep_ID + center_ID + group", data=df)

문제:

  • 각 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

단순한 logic
새 SOP 노출 (Y/N) ──→ Customer satisfaction ──→ Measured CSAT
   (cluster 단위)        (during call)

가설:

  • 새 SOP → 통화 중 customer 만족 ↑
  • 만족 ↑ → CSAT 점수 ↑

검증 가능 가설.

직관 — 단순 logic 의 가치

복잡한 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 효과 추정.

직관 — Random Effect 의 의미

비유: 학교마다 다른 교육 수준.

  • 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

Center + Rep nested

Rep 이 Center 안에 nested:

  • Rep 1, 2, 3 → Center A
  • Rep 4, 5, 6 → Center B

R 코드:

hlm <- lmer(CSAT ~ reason + age + group + (1 | center_ID/rep_ID), data=df)

(1 | center_ID/rep_ID) 표기:

  • Center 별 random intercept
  • Rep 별 random intercept (center 안에 nested)

Python (statsmodels):

vcf = {"rep_ID": "0+C(rep_ID)"}
mixed = smf.mixedlm(
    "CSAT ~ reason + age + group",
    data=df,
    groups=df["center_ID"],
    vc_formula=vcf,
)
직관 — Nested 의 의미

비유: 행정 구조.

  • 국가 → 도 → 시 → 동
  • 시는 도 안에 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 의 비즈니스 의미

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

Cluster 의 statistical 비용

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 매우 낮음.

직관 — 18 effective N 의 의미

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 출력의 구조:

  1. Fixed Effects (intercept, reason, age):
    • Standard regression 같은 표시
    • Treatment 효과는 여기
  2. 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 결과 별 분석가의 결정:

  • 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}")
직관 — Effective N 의 비즈니스 함의

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 절차

분석가의 default workflow
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 의 형제 글

8.2 이전 챕터

8.3 후속 챕터

8.4 카테고리 진입점

Subscribe

Enjoy this blog? Get notified of new posts by email: