1 정의
Microsoft 의 Deng et al. (2013) 가 제안한 분산 감소 기법. 실험 전 사용자 행동 데이터를 covariate 로 활용하여 metric 의 variance 를 reduce.
1.0.0.1 수학적 정의
Original metric: Y (실험 기간의 사용자 metric)
Pre-experiment metric: X (실험 전 사용자 metric)
Adjusted metric:
Y' = Y - θ × (X - μ_X)
where θ = Cov(X, Y) / Var(X) (optimal coefficient)
Variance reduction:
Var(Y') = Var(Y) × (1 - ρ²)
where ρ = correlation(X, Y)
1.0.0.2 Variance 감소 정량
| ρ (correlation) | Variance 감소 | Sample size 절감 |
|---|---|---|
| 0.3 | 9% | 9% |
| 0.5 | 25% | 25% |
| 0.7 | 51% | 51% |
| 0.8 | 64% | 64% |
| 0.9 | 81% | 81% |
원문 인용 (Deng, Xu, Kohavi, Walker 2013): “Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-Experiment Data.”
핵심 통찰: 사용자의 baseline 행동이 실험 metric 의 noise 의 큰 부분. Pre-period data 로 이 baseline 을 제거 → variance dramatic 감소. ρ=0.7 시 sample size 51% 절감 = 실험 시간 절반.
2 개념 및 원리
2.1 CUPED 의 메커니즘
2.1.1 직관 — 사용자 의 baseline 변동
사용자별 metric 의 분산 source:
1. User intrinsic level:
- 사용자 A 는 daily 10 sessions (heavy)
- 사용자 B 는 daily 1 session (light)
- 차이가 metric variance 의 큰 부분
2. Treatment effect:
- 같은 user 의 Treatment 영향
- 작은 비율의 variance
3. Random noise:
- Day-to-day 변동
- 작은 비율
2.1.2 일반 분석의 함정
일반 분석:
Variance(Y) = Variance(user level) + Variance(treatment) + Variance(noise)
분산의 90%+ 가 user-level (intrinsic 차이).
Treatment effect 가 이 noise 에 묻힘.
2.1.3 CUPED 의 해결
Pre-period 의 X:
사용자의 baseline 행동
→ User intrinsic level 의 capture
Adjusted Y':
Y' = Y - θ × (X - μ_X)
User intrinsic level 제거:
Y 에서 X 의 baseline 차감
→ 남은 variance: treatment + noise (90% 작음)
이 mechanism 이 dramatic 한 sensitivity 개선의 본질.
2.1.4 수학적 유도
2.1.4.1 Optimal coefficient θ
저자 인용 (Deng et al. 2013):
\[\theta = \frac{\text{Cov}(X, Y)}{\text{Var}(X)}\]
이 θ 가 CUPED 의 variance 를 minimize.
2.1.4.2 유도
Var(Y - θX) = Var(Y) + θ² × Var(X) - 2θ × Cov(X, Y)
minimize w.r.t. θ:
d/dθ = 2θ × Var(X) - 2 × Cov(X, Y) = 0
→ θ = Cov(X, Y) / Var(X)
2.1.4.3 Optimal Variance
Var(Y') 의 minimum value:
Var(Y) - Cov(X, Y)² / Var(X)
= Var(Y) - ρ² × Var(Y) (∵ ρ² = Cov² / (Var(X)Var(Y)))
= Var(Y) × (1 - ρ²)
이 (1 - ρ²) 가 CUPED 의 정량적 개선.
2.1.5 Pre-Experiment Data 의 선택
X 의 후보:
1. Same metric, pre-period:
- Treatment 가 sessions per week → X = pre-week sessions
- 보통 가장 높은 ρ (~0.6~0.9)
- Default 선택
2. Related metric, pre-period:
- X = sessions, Y = revenue
- 두 metric 의 cross-correlation
- 일부 ρ (~0.3~0.5)
3. Demographic data:
- X = country, age, device
- 더 약한 correlation
- 추가 효과 (기본 X 외)
4. Multiple covariates:
- X = (sessions, country, device)
- Multivariate regression 의 generalization
- 가장 강한 효과
2.1.6 CUPED 의 가정
1. Pre-period 와 experiment-period 의 stable correlation:
ρ 가 시간에 따라 stable
→ New user 또는 macro change 시 ρ 변화
2. Pre-period 의 quality data:
- 사용자가 pre-period 에 active
- Data quality 가 양쪽 비슷
3. No pre-period 의 manipulation:
- Pre-period 자체가 실험의 영향 받지 안 됨
- "Cleanly observed" baseline
2.1.6.1 Limitations
신규 사용자:
- Pre-period data 없음
- CUPED 적용 불가
- 신규 user 만 분석 시 일반 분석
Sparse 사용자:
- Pre-period 의 pageview 0
- X 가 0 → variance 추정 어려움
- Threshold (예: 3+ pre-period sessions)
Macro change:
- Pre-period 와 다른 환경 (시즌, 정책 변경)
- Correlation 약화
- CUPED 의 효과 ↓
2.1.6.2 비유 1 — Height 비교
시나리오:
실험: 한 약물이 사용자의 height 1cm 증가시키나?
사용자: 100명 (Treatment 50명, Control 50명)
일반 분석:
Treatment height: 평균 175cm (std 10cm)
Control height: 평균 174cm (std 10cm)
차이: 1cm
Detect 어려움 (std 10x effect)
CUPED 분석:
X = pre-period height (실험 시작 전)
Treatment 사용자의 (post height - pre height): 평균 1cm (std 0.5cm)
Control 사용자의 (post height - pre height): 평균 0cm (std 0.5cm)
차이: 1cm (variance 1/400 of 일반)
Detect 매우 쉬움
이 비유의 본질: 사용자별 baseline 차이 (height intrinsic) 가 noise 의 99%. CUPED 가 이 noise 제거.
2.1.6.3 비유 2 — Test Score Improvement
시나리오:
실험: tutoring 이 test score 개선?
학생 100명
일반 분석:
Treatment score: 75 (std 15)
Control score: 73 (std 15)
차이: 2
Detect 어려움
CUPED 분석:
X = pre-tutoring score
Treatment 의 score 개선: +5 (std 3)
Control 의 score 개선: +3 (std 3)
차이: +2 (variance 1/25)
Detect 쉬움
2.1.6.4 본질 메시지
사용자 의 metric 변동 = baseline + treatment + noise
일반 분석:
Variance(Y) = baseline_var + treatment_var + noise_var
대부분 baseline (90%+)
CUPED 분석:
Variance(Y - X) = treatment_var + noise_var
대부분 noise
변동 의 source 가 다름 → noise 의 source 만 남음 → 더 sensitive
이 framework 이 modern A/B 의 standard. 사용자별 baseline 차이가 critical confounder.
2.2 7 가지 Sensitivity 개선 기법 — 상세
2.2.1 기법 1 — Smaller Variance Metric
저자 명시.
2.2.1.1 사례 — Searches vs Searchers
Searches per user (count):
- 평균 5
- Distribution: long-tail (some heavy users)
- Variance: ~25 (std 5)
Searchers (binary: 1+ search):
- 평균 0.7 (70%)
- Distribution: bounded 0~1
- Variance: 0.7 × 0.3 = 0.21 (std 0.46)
Variance ratio:
Searches / Searchers ≈ 25 / 0.21 = 119x
→ Sample size for same sensitivity: 1/119
→ 100x faster 결정 (boolean version)
2.2.1.2 Information loss 의 trade-off
Boolean version:
Loss: search count의 specific number
Retain: search 했나 안 했나 (basic engagement)
대부분 case:
- "Engagement 의 binary 충분"
- 단 specific count 가 critical 시 (예: 새 search algorithm 의 search 빈도) original 사용
2.2.1.3 사례 — Purchase Amount vs Conversion
저자 인용 (Kohavi et al. 2009): “using conversion rate instead of purchasing spend reduced the sample size needed by a factor of 3.3.”
Purchase amount (real):
Most users: $0
Some users: $1~$10000 (long-tail)
Variance: 매우 큼
Conversion (boolean):
0 또는 1
Bounded variance
Sample size ratio: 1/3.3
Same sensitivity → 1/3.3 시간
2.2.1.4 산업 표준 metric pairs
Heavy-tail metric → Bounded version:
Revenue → Conversion rate
Sessions per day → DAU (binary: visited today)
Pageviews per session → Visited (binary)
Time on site → Bounce rate (binary: <30s)
Watched hours → Watched 1+ hour (binary)
각 pair 의 의미가 약간 다름. Domain 에 맞는 선택.
2.2.2 기법 2 — Transformation
저자 명시 3 가지.
2.2.2.1 2.1 — Capping
Capping (F-KOH18-1 의 outlier handling):
threshold 적용
Variance 보호
Outlier robustness
2.2.2.2 2.2 — Binarization
저자 인용 (Xie and Aurisset 2016, Netflix): “instead of using average streaming hour, Netflix uses binary metrics to indicate whether the user streamed more than x hours in a specified time period.”
Original:
Streaming hours per week (real)
Heavy long-tail distribution
Binarized:
"Streamed > 2 hours/week" (boolean)
Bounded
Trade-off:
- 구체 정보 손실
- Variance dramatic ↓
- Trustworthy decision
2.2.2.3 2.3 — Log Transformation
Log:
Y' = log(Y + 1) (혹은 log(Y) for positive)
Heavy long-tail metric 의 normalize:
Original: Revenue 분포 (long-tail)
Log version: Approximately normal
Variance:
Original: 매우 큼
Log: 보통
단점:
Interpretability 손실:
"log revenue +0.05" 의 의미 모호
Revenue 자체가 의사결정 metric 일 때 어려움
권고:
Statistical analysis 시 log
Reporting 시 original
Hybrid 사용
저자 강조: “However, there are some metrics, such as revenue, where a log-transformed version may not be the right goal to optimize for the business.”
2.2.3 기법 3 — Triggered Analysis
저자 cross-reference Ch.20 (F-KOH20).
2.2.3.1 메커니즘
실험: 새 search ranking algorithm
Trigger: 사용자가 search 했나
Triggered analysis:
- All users 분석: 5% 만 search
- Triggered users 분석: 100% search
Effect dilution:
All: effect = trigger_rate × triggered_effect = 0.05 × 0.20 = 0.01
Triggered: effect = 0.20
Sensitivity:
Same sample size, but triggered effect 20x 더 큼
→ Detect 20x easier
2.2.3.2 모든 niche feature 의 표준
Niche feature 의 정의:
- Trigger rate < 30%
- 일부 사용자만 영향
Niche feature 의 일반 분석:
- Effect dilution
- False negative ↑
해결: triggered analysis 의 의무
- 모든 niche feature 에 자동 적용
- Platform 의 default
2.2.4 기법 4 — Stratification, Control-Variates, CUPED
저자 명시 (Deng et al. 2013).
2.2.4.1 Stratification — Sampling Phase
Stratification 의 메커니즘:
- Sampling region 을 strata 로 분할
- 각 stratum 별 separate sample
- Combine results
Strata 예시:
- Country (US, KR, JP)
- Device (desktop, mobile)
- Day of week
- User tier (new, returning, power)
Variance 효과:
Var(stratified) = Σ (n_h/n)² × Var_h
Within-stratum variance 만 → 작음
Between-stratum variance 제거
2.2.4.2 Stratification 의 cost
저자 강조: “While stratification is most commonly conducted during the sampling phase (at runtime), it is usually expensive to implement at large scale.”
Sampling phase 의 stratification cost:
- 각 stratum 별 sample size 균형 유지
- User 의 stratum membership 결정 (real-time)
- Stratum 추가/제거 시 system 변경
→ Implementation 복잡
Alternative — Post-stratification:
- Sampling 은 random
- Analysis phase 에서 stratification 적용 (retrospective)
- 거의 같은 효과 (sample 충분 시)
2.2.4.3 Post-stratification
Algorithm:
Step 1: Random sample
Step 2: 분석 시 stratum 별 분리
Step 3: 각 stratum 의 mean·variance
Step 4: Stratum size 의 weighted combine
Variance:
Sample 충분 시: stratification 과 거의 동일
Sample 부족 시: 효과 ↓ (small sample 의 within-stratum variance 추정 부정확)
2.2.4.4 Control-Variates
Control-variates 의 메커니즘:
Y 의 noise 일부를 다른 알려진 variable 로 explain
Y' = Y - β × (X - E[X])
where X = covariate
Variance:
Var(Y') = Var(Y) × (1 - ρ²)
(CUPED 와 동일 form)
2.2.4.5 CUPED — 가장 powerful
CUPED 의 본질:
Control-variates 의 specific case (X = pre-period Y)
- Pre-period 가 가장 강한 correlation
- 다른 covariate 보다 ρ 가 큼
대부분 case:
- CUPED 가 variance 감소의 single best technique
- 산업 표준 (Microsoft, Google, Netflix, LinkedIn)
2.2.5 기법 5 — Granular Randomization
저자 명시.
2.2.5.1 메커니즘
User-level: 1M users
Page-level: 50M pages (avg 50 pages/user)
Query-level: 100M queries
Variance ∝ 1 / sample size
User: large variance
Page: 1/50 variance
Query: 1/100 variance
2.2.5.2 Trade-off (Ch.14 cross-reference)
저자 명시 단점:
1. UI inconsistency:
- 같은 user 의 다른 page 다른 variant
- Bad user experience
- Visible UI change 시 critical
2. User-level metric 측정 불가:
- User retention, LTV 측정 못 함
- Page-level metric 만
3. SUTVA 위반 가능:
- Inter-page dependency (personalization)
- Carryover (Ch.22)
2.2.5.3 적용 가능 영역
Stateless metric (page-level OK):
- Page latency
- Single page CTR
- Server processing time
Stateful metric (page-level 안 됨):
- User retention
- Personalization
- Cumulative engagement
이 기법은 specific use case 만. CUPED 가 더 범용.
2.2.6 기법 6 — Paired Experiment (Interleaving)
저자 인용 (Chapelle et al. 2012, Radlinski and Craswell 2013).
2.2.6.1 Interleaving Design
일반 A/B (이질):
사용자 A: ranking algorithm A 의 결과 list
사용자 B: ranking algorithm B 의 결과 list
Between-user variability:
User taste 차이 → 같은 algorithm 도 다른 click rate
Variance 큼
Interleaving:
사용자 A: list_A 와 list_B 의 interleaved (alternating)
e.g., [A_1, B_1, A_2, B_2, ...]
Within-user comparison:
같은 user 의 click 분포
"A 의 item click 됨 → A 에 credit"
Variance 작음 (between-user 제거)
2.2.6.2 Sensitivity 의 dramatic 개선
일반 A/B:
Sample size 1M users
Variance 큼
Detect: 효과 1% 이상
Interleaving:
Sample size 1M users
Variance 1/100 정도
Detect: 효과 0.1% 이상
→ 10x 더 sensitive
2.2.6.3 적용 영역
Search ranking:
- Treatment ranking vs Control ranking
- 표준 use case
Recommendation:
- 두 recommendation algorithm 비교
- 적용 가능
Limited 적용:
- Single item display (no list): 적용 어려움
- UI 변경 (visible): 사용자 confusion
2.2.7 기법 7 — Pooled Control
저자 명시.
2.2.7.1 Mechanism
일반:
실험 A: T_A (50%) + C_A (50%)
실험 B: T_B (50%) + C_B (50%)
실험 C: T_C (50%) + C_C (50%)
Pooled:
Shared Control: 50% (모든 실험에서 사용)
실험별 Treatment: T_A (16.7%), T_B (16.7%), T_C (16.7%)
Variance:
Variance(mean_C) ∝ 1/N_C
N_C: 50% × all users (vs 16.7% × all users)
3x 큼 → variance 1/3
→ Power ↑
2.2.7.2 Considerations
저자 명시 3 가지.
1. Trigger condition:
각 실험의 triggered population 다르면 shared control 의미 모호
Triggered analysis 시 control 도 같은 trigger 적용 필요
2. Treatment 간 비교:
T_A vs T_B 비교 시 power 부족
각 T 가 작은 sample (16.7%)
3. Balanced sizes:
Treatment 와 Control 의 size 균형
T = 16.7%, C = 50% → unbalanced
Normality convergence 영향
2.2.8 Quantile Metric — Density Estimation
저자 명시 (Liu et al. 2018).
2.2.8.1 90th Percentile of PLT
Page Load Time (PLT) 의 90th percentile:
- 분포 의 high tail
- User experience 의 critical metric
- Mean 보다 더 sensitive (heavy tail)
2.2.8.2 Variance 추정의 challenge
Simple metric (mean):
Var(mean) = Var(Y) / N (단순)
Quantile (90th):
Asymptotic variance = q(1-q) / (n × f(F⁻¹(q))²)
where:
q = 0.9 (quantile)
f = density function
F⁻¹(q) = quantile value
→ Density estimation 필요
→ Lehmann and Romano (2005)
2.2.8.3 Multi-level 추가 challenge
저자 명시: "Most time-based metrics are at the event/page level, while the experiment is
randomized at user level."
Combination:
- Page-level 90th percentile
- User-level randomization
- Density estimation + delta method
- Liu et al. (2018) 의 hybrid
이 영역이 advanced statistical analysis. Modern platform 의 frontier.
각 기법의 적용 priority.
2.2.8.4 Default First (모든 실험)
1. Outlier handling (capping):
- Variance 보호
- 자동 적용
2. Trigger analysis (niche feature):
- Effect dilution 회피
- Niche 의 default
3. CUPED:
- Pre-period data 의 활용
- 단순 적용으로 5~10x sensitivity
2.2.8.5 Advanced (특정 case)
4. Smaller variance metric:
- Design 단계의 첫 결정
- 모든 metric 의 후보 검토
5. Pooled control:
- 많은 실험 동시 운영 시
- Power 공유
6. Granular randomization:
- Stateless metric 만
- 일부 use case
2.2.8.6 Niche (specific use case)
7. Interleaving:
- Search ranking 만
- 강력하지만 좁음
2.2.8.7 누적 효과
모든 적용 시:
CUPED (1 - ρ² = 0.5) × triggering (10x effect) × pooled (1/3 variance)
≈ 50x sample size 효율
같은 power 위해 sample size 1/50.
실험 시간 1/50.
→ Innovation cycle dramatic 가속.
3 왜 필요한가
Sensitivity 개선 부재 시.
- Small effect missed — 진짜 +1% 효과 가 noise 에 묻힘
- Long experiments — Same sensitivity 위해 weeks 의 추가 시간
- Decision delay — Innovation cycle 느림
- Niche feature 무력화 — Trigger dilution 으로 effect 0 처럼
활성 시.
- Small effect detect — +0.1% 도 reliable
- Fast decisions — 1 주 이상 안 기다림
- Innovation 가속 — 더 많은 실험
- Niche feature 평가 — Triggered analysis 의 dilution 회피
이 격차가 modern A/B platform 의 statistical advanced 영역. Run·Fly 단계의 핵심.
4 응용 사례 — Microsoft 의 CUPED 운영
Microsoft ExP 의 CUPED 표준 운영:
Default analysis:
모든 실험에 CUPED 자동 적용
Pre-period 정의:
- 실험 시작 전 4 주
- 사용자별 metric 의 historical data
Coverage:
- 기존 사용자: CUPED 적용 (대부분)
- 신규 사용자 (pre-period 부족): 일반 분석
- Hybrid result
Reported metric:
- CUPED-adjusted Δ% + SE
- Sensitivity 개선 ratio (vs naive)
Result:
- 평균 sample size 50% 절감
- Decision speed 2x
이 운영이 Microsoft 의 실험 throughput 의 한 핵심 factor.
5 코드 예시 — CUPED 구현
CUPED 의 전체 implementation.
import numpy as np
import pandas as pd
from scipy import stats
rng = np.random.default_rng(42)
# 가상 데이터: pre-period + experiment-period
n_users = 5000
# 사용자별 baseline tendency (heterogeneous)
user_baseline = rng.normal(50, 20, n_users)
user_baseline = np.maximum(user_baseline, 0)
# Pre-period (실험 시작 전 1 주의 metric)
pre_metric = user_baseline + rng.normal(0, 5, n_users)
pre_metric = np.maximum(pre_metric, 0)
# Treatment assignment
treatment = rng.choice([0, 1], n_users, p=[0.5, 0.5])
# Experiment-period metric (with treatment effect +5%)
true_lift = 0.05 # +5%
experiment_metric = user_baseline * (1 + true_lift * treatment) + rng.normal(0, 5, n_users)
experiment_metric = np.maximum(experiment_metric, 0)
# === Naive analysis ===
print("=== Naive Analysis ===")
t_metric = experiment_metric[treatment == 1]
c_metric = experiment_metric[treatment == 0]
naive_t_mean = t_metric.mean()
naive_c_mean = c_metric.mean()
naive_diff = naive_t_mean - naive_c_mean
naive_pct = naive_diff / naive_c_mean
naive_se = np.sqrt(t_metric.var() / len(t_metric) + c_metric.var() / len(c_metric))
naive_z = naive_diff / naive_se
naive_p = 2 * (1 - stats.norm.cdf(abs(naive_z)))
print(f"T mean: {naive_t_mean:.2f}, C mean: {naive_c_mean:.2f}")
print(f"Diff: {naive_diff:.2f} ({naive_pct*100:.2f}%)")
print(f"SE: {naive_se:.4f}")
print(f"Z: {naive_z:.2f}, p: {naive_p:.4f}")
# === CUPED analysis ===
print("\n=== CUPED Analysis ===")
# θ 계산 (overall data 사용)
mu_X = pre_metric.mean()
theta = np.cov(pre_metric, experiment_metric, ddof=1)[0, 1] / pre_metric.var(ddof=1)
# CUPED-adjusted metric
y_adjusted = experiment_metric - theta * (pre_metric - mu_X)
t_adj = y_adjusted[treatment == 1]
c_adj = y_adjusted[treatment == 0]
cuped_t_mean = t_adj.mean()
cuped_c_mean = c_adj.mean()
cuped_diff = cuped_t_mean - cuped_c_mean
cuped_pct = cuped_diff / cuped_c_mean
cuped_se = np.sqrt(t_adj.var() / len(t_adj) + c_adj.var() / len(c_adj))
cuped_z = cuped_diff / cuped_se
cuped_p = 2 * (1 - stats.norm.cdf(abs(cuped_z)))
print(f"θ (CUPED coefficient): {theta:.4f}")
print(f"T adjusted mean: {cuped_t_mean:.2f}, C adjusted mean: {cuped_c_mean:.2f}")
print(f"Diff: {cuped_diff:.2f} ({cuped_pct*100:.2f}%)")
print(f"SE: {cuped_se:.4f}")
print(f"Z: {cuped_z:.2f}, p: {cuped_p:.4f}")
# === Variance reduction analysis ===
print("\n=== Variance Reduction ===")
correlation = np.corrcoef(pre_metric, experiment_metric)[0, 1]
print(f"Correlation (pre, post): {correlation:.4f}")
print(f"Theoretical variance reduction: 1 - ρ² = {1 - correlation**2:.4f}")
print(f" → Variance × {1 - correlation**2:.2f}")
print(f" → Sample size × {1 - correlation**2:.2f}")
actual_var_reduction = (cuped_se / naive_se) ** 2
print(f"\nActual SE ratio (CUPED/Naive): {cuped_se / naive_se:.4f}")
print(f"Actual variance ratio: {actual_var_reduction:.4f}")
# === Sensitivity 비교 ===
print("\n=== Sensitivity 비교 ===")
print(f"Naive p-value: {naive_p:.4f} ({'significant' if naive_p < 0.05 else 'NOT significant'})")
print(f"CUPED p-value: {cuped_p:.4f} ({'significant' if cuped_p < 0.05 else 'NOT significant'})")
print(f"True lift: {true_lift*100:.2f}%")
print(f"Naive estimated lift: {naive_pct*100:.2f}%")
print(f"CUPED estimated lift: {cuped_pct*100:.2f}%")이 시뮬레이션의 4 가지.
5.0.0.1 1. CUPED 의 SE 절감
Correlation (pre, post): ~0.9 (high)
Theoretical reduction: 1 - 0.81 = 0.19 (19% variance)
Actual SE ratio: ~0.45 (CUPED SE is 45% of naive)
Variance ratio: ~0.20 (matches theory)
5.0.0.2 2. Lift estimate 의 일치
Naive lift: 측정값
CUPED lift: 비슷한 측정값 (lift estimate 자체는 unbiased)
CUPED 의 advantage:
- Lift estimate 정확 (unbiased)
- SE 만 dramatic 감소
- 같은 lift 가 더 confident
5.0.0.3 3. Significance 의 difference
일반 case:
Naive: p = 0.10 (not significant)
CUPED: p = 0.001 (highly significant)
같은 데이터, 다른 결론.
CUPED 가 진짜 effect 를 detect, naive 가 missing.
5.0.0.4 4. Sample size implication
ρ = 0.9:
Variance 1/5
Sample size for same power: 1/5
→ 5x faster experiment
→ Same conclusion 1/5 시간
ρ = 0.7:
Variance 1/2
Sample size: 1/2
→ 2x faster
5.0.0.5 실무 함의
CUPED 의 default 적용:
- Pre-period correlation 0.5+ 기대
- Variance reduction 25%+
- 산업 표준
Pre-period correlation 의 maximize:
- Same metric (highest correlation)
- Pre-period 충분 길이 (1~4 weeks)
- Stable user (active in pre-period)
이 default 가 Microsoft, Google, Netflix 의 표준.
6 Ch.18 시리즈 마무리
3 편 완료:
- F18-0 — Variance 의 핵심성, 3 함정·7 기법 의 지도
- F18-1 — 3 함정 의 깊이 풀이 (Delta %, Ratio, Outliers)
- F18-2 — 7 기법 의 깊이 풀이, CUPED 중심
다음: Ch.19 (A/A Test, 4 편).
7 관련 주제
선행
다음 챕터
관련 챕터
- F20-* — Ch.20 Triggering — Sensitivity 개선의 한 기법
- F14-1 — Granular Randomization
다른 카테고리 연결