Sensitivity 개선 — CUPED 와 7 가지 분산 감소 기법

Pre-Experiment Data 의 활용 · Control Variate · Stratification · Interleaving · Pooled Control

Kohavi (2020) Ch.18.2 를 깊게 다룬다. CUPED (Deng et al. 2013) 의 수학적 유도와 분산 감소 메커니즘 (1 - ρ²), pre-experiment data 의 활용, control variate 의 일반화, stratification·post- stratification 의 trade-off, interleaving design (Chapelle 2012), pooled control 의 power 공유, percentile metric 의 density estimation 까지 7 가지 기법을 풀이한다.

Experimentation
A/B Test
저자

Kwangmin Kim

공개

2026년 05월 08일

1 정의

정의: CUPED (Controlled Experiment Using Pre-Experiment Data)

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 의 효과 ↓
직관 — 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.

직관 — 7 기법의 실무 selection

각 기법의 적용 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 편 완료:

  1. F18-0 — Variance 의 핵심성, 3 함정·7 기법 의 지도
  2. F18-1 — 3 함정 의 깊이 풀이 (Delta %, Ratio, Outliers)
  3. F18-2 — 7 기법 의 깊이 풀이, CUPED 중심

다음: Ch.19 (A/A Test, 4 편).

7 관련 주제

선행

다음 챕터

관련 챕터

다른 카테고리 연결

Subscribe

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