1 정의
가장 단순 한 long-term 측정 접근. 실험 을 평소 보다 오래 (수 개월) 실행 하고, 첫 주 (short-term) 와 마지막 주 (long-term) 의 effect 를 따로 분석 (Kohavi, Tang, Xu, 2020, Ch.23.4).
1.0.0.1 형식
- \(p\Delta_1\): 첫 주 (week 1) 의 percent delta — short-term effect
- \(p\Delta_T\): 마지막 주 (week T) 의 percent delta — long-term effect (의 추정)
1.0.0.2 가정
- 시간 따라 effect 가 수렴 한다
- 마지막 주 가 long-term equilibrium 에 도달 한다
- 두 시점 의 metric 차이 가 학습 효과 의 순수 측정 이다
1.0.0.3 단순함 의 매력
- 구현: 일반 실험 의 자연 연장
- 분석: 일반 실험 의 metric 분리 (week 별 delta)
- 비용: 추가 infrastructure 필요 없음
long-running 의 사고: “실험 오래 하면 자연 적 으로 long-term 측정 된다”. 단순 명료 하지만 4 가지 근본 함정 이 있다. 이 글 은 그 함정 을 풀어 본다.
레슨: 단순 long-running 은 명시적 method (Cohort, Post-Period, …) 의 보강 없이 는 biased — 첫 주 (short-term) 측정 도, 마지막 주 (long-term) 측정 도 둘 다.
2 함정 1 — Treatment Effect Dilution
2.0.0.1 정의
마지막 주 의 사용자 의 일부 만 이 전체 실험 기간 Treatment 받음. 나머지 는 partial exposure → effect 가 희석 (diluted).
2.0.0.2 3 가지 sub-mechanism
2.0.0.3 Sub 1: Multi-device
- 사용자 가 web + mobile + tablet 사용
- 실험 cookie 는 device 별 — Treatment cookie 가 한 device 에만
- 다른 device 에서는 Control 경험
- 실험 기간 길수록 multi-device 사용 확률 증가 → 사용자 의 Treatment 비율 ↓
2.0.0.5 Sub 3: Network leakage (Ch.22)
- Treatment 의 effect 가 Control 친구 로 누수
- 실험 길수록 누수 누적 → Control 도 부분 적 Treatment effect
2.0.0.6 인용
- Dmitriev et al. (2016) — long-term experiment pitfalls
비유 — 약효 측정:
- 1 주: 환자 의 100% 가 약 복용
- 4 주: 환자 의 70% 만 복용 (의약 prescription drift)
- 12 주: 환자 의 30% 만 복용 (drug holiday, off-label use)
마지막 시점 의 effect 측정 시 순수 약효 가 아닌 희석 효과 측정.
레슨: dilution 은 long-running 의 불가피 함정. cohort method (stable user ID) 로 부분 적 보정 가능 — F23-3 에서 다룸.
2.0.0.7 형식
- 사용자 \(i\) 의 true exposure: 시간 \(T\) 동안 Treatment 받은 비율 \(\theta_i\)
- 사용자 \(i\) 의 observed effect: \(\theta_i \cdot \tau_i\) (where \(\tau_i\) = 사용자 \(i\) 의 진짜 effect)
- 평균 measured effect: \(\bar{\theta} \cdot \bar{\tau}\)
2.0.0.8 Bias
bias = (1 - bar{theta}) · bar{tau}
≈ (multi-device 비율 + churn rate) · 진짜 effect
multi-device 30% + churn 10% → \(\bar{\theta} \approx 0.6\) → measured effect 가 진짜 의 60% (40% under).
2.0.0.9 시간 의존
T = 1 week: bar{theta} ≈ 0.95
T = 4 weeks: bar{theta} ≈ 0.85
T = 12 weeks: bar{theta} ≈ 0.65
T = 26 weeks: bar{theta} ≈ 0.50
dilution 은 시간 따라 누적 — long-running 일수록 큰 bias.
3 함정 2 — Survivorship Bias
실험 시작 사용자 의 일부 만 이 마지막 까지 survive. survival rate 가 Treatment·Control 사이 다르면 마지막 주 의 사용자 구성 이 different.
3.0.0.1 사례
- Treatment 사용자 의 불만 이 abandon 으로 → Treatment survivor 가 덜 까다로운 사용자
- Treatment 의 bug 가 cookie churn 가속 → Treatment 의 representative 부족
3.0.0.2 진짜 effect 와 측정 effect 의 괴리
- 진짜 effect: 실험 시작 사용자 전체 의 metric 변화
- 측정 effect: 마지막 주 까지 survive 한 사용자 의 metric 변화
한쪽 group 의 survivor 만 biased subset 이면 비교 결과 부정확.
3.0.0.3 SRM alert
survivorship bias 는 SRM (Ch.21) 의 trigger — Treatment·Control 의 sample ratio 의 시간 따른 drift 점검.
비유 — 약물 임상시험:
- 진짜 효과 측정 위해: 모든 환자 (시작 시 등록 한) 의 outcome 측정 필요
- 측정 측정: 시험 끝까지 participation 한 환자 만 측정 → biased
drop-out 한 환자 의 outcome 이 다른 경우: 측정 결과 misleading.
레슨: long-running 의 효과 측정 시 cohort (시작 시 정의) 단위 의 metric 의무. 정의: 모든 cohort 사용자 의 metric (중도 drop 한 사용자 도 마지막 활동 시점 의 metric).
3.0.0.4 Week 1
- design ratio: 50/50
- observed: 50.0/50.0 (no SRM)
3.0.0.5 Week 26
- design ratio: 50/50
- observed: 47.5/52.5 (SRM detected)
- 원인: Treatment 의 1% bug 가 cookie churn 가속, Control 보다 5% 빠른 abandon
3.0.0.6 결과
- 실험 의 모든 metric 신뢰성 의문
- 마지막 주 의 effect 측정 invalid (Treatment subset 가 biased)
4 함정 3 — 새 Feature Interaction
long-running 동안 다른 팀 의 새 feature 도 launch — 본 실험 과 interaction.
4.0.0.1 사례
- 본 실험: push notification A/B
- Week 1: Treatment 의 push 가 effective → +10% session
- Month 2: 다른 팀 이 email notification launch → 사용자 의 notification 피로 증가
- Month 3: Treatment push 의 effect 감소 (saturation)
4.0.0.2 분리 어려움
- 본 실험 의 진짜 long-term decay 인지
- 다른 feature 와 의 interaction 인지
4.0.1 인용
- Hohnhold et al. (2015), Dmitriev et al. (2016)
long-running 동안 ecosystem 이 변함:
- 다른 팀 의 launch (위 example)
- seasonal change (holiday, summer break)
- competitive landscape (경쟁사 의 새 feature)
- regulation (GDPR, CCPA)
이 변화는 본 실험 의 effect 와 interaction — 분리 어려움.
레슨: post-period analysis 만이 이 한계 를 부분 적 해결 (post-period 는 모두 같은 ecosystem 에 있음).
5 함정 4 — Time-Extrapolated Effect 해석 의 함정
마지막 주 의 effect \(p\Delta_T\) 와 첫 주 의 effect \(p\Delta_1\) 의 차이 를 시간 효과 로 해석 하면 위험.
5.0.0.1 차이 가 시간 효과 가 아닌 경우
- Exogenous (계절·경쟁·정책 변화)
- Underlying population 변화 (사용자 inflow·outflow 의 패턴 변화)
- Concept drift (학습 모델 의 데이터 분포 변화)
- Software rot (시스템 의 환경 변화)
5.0.0.2 위험 한 결론
- “Treatment 가 시간 따라 학습 효과 로 -5% effect 누적” → 실제 는 계절 차이
- “Treatment 의 effect 가 -10% 로 감소” → 실제 는 경쟁사 launch 의 영향
5.0.1 일반화 의 어려움
이 함정 의 누적 → long-running 의 결과 가 다른 실험·기간 에 generalize 어려움.
5.0.2 인용
- Dmitriev et al. (2016) — 8 가지 long-term pitfall
비유 — 두 시점 의 GDP 비교:
- 2020 GDP vs 2026 GDP — 그냥 비교 하면 inflation 무시
- 진짜 비교: real GDP (inflation-adjusted)
long-running 의 first/last week 도 동일:
- 두 시점 의 ecosystem 다름 → 그냥 비교 시 ecosystem 차이 가 effect 처럼 보임
- 진짜 비교: post-period analysis (두 group 이 동시 같은 ecosystem)
레슨: long-running 의 시간 비교 는 본질 적 confounded. post-period 의 동시 비교 가 더 robust.
6 결론 — long-running 의 한계 와 보완 method
| 한계 | 시간 따라 | 영향 받는 metric | 보완 method |
|---|---|---|---|
| Dilution | 누적 | 모든 effect | Cohort |
| Survivorship | 누적 | composition-sensitive | Cohort + SRM |
| 새 feature interaction | exogenous | 모든 effect | Post-Period |
| Time-extrapolation | 양 시점 차이 | comparison-sensitive | Post-Period + Time-Staggered |
6.0.0.1 결합 의 의무
- Cohort + Post-Period: 일반 적 long-term 측정 의 권장 조합
- Cohort + Holdback: launch 후 monitoring
- Time-Staggered + Post-Period: 학습 효과 의 명시적 측정 (수렴 판단 + post-A/A)
단순 long-running 은 진단 도구 — 제대로 측정 하지 않지만 문제 발견 신호 가능:
- first/last week effect 가 크게 다름 → “long-term 측정 method 적용 필요” 의 alert
- SRM 이 시간 따라 drift → survivorship bias 의 alert
- ramp 단계 별 effect 차이 → leakage 의 alert
레슨: long-running 단독 으로 결정 하지 말 것. 진단 후 명시적 method 로 정확 측정.
7 Python 시뮬레이션 — Dilution 의 시간 의존
import numpy as np
np.random.seed(2026)
def simulate_long_running_with_dilution(
n_users=10000, true_lift=0.10, weeks=12,
multi_device_drift=0.02, cookie_churn=0.02
):
"""
long-running experiment 의 dilution 시뮬레이션.
각 주 마다 일부 사용자 의 cookie 가 churn 또는 multi-device 사용으로 partial exposure.
"""
base_p = 0.20
assignment = np.random.randint(0, 2, size=n_users)
purity = np.ones(n_users) # initial: 100% pure exposure
delta_per_week = []
for week in range(weeks):
# purity drift: 매주 일부 사용자 의 purity 감소
churn_mask = np.random.binomial(
1, multi_device_drift + cookie_churn, size=n_users
)
purity = np.maximum(0.0, purity - churn_mask * 0.10)
# 각 사용자 의 effect = true_lift * purity (Treatment 인 경우)
effective_lift = np.where(assignment == 1, true_lift * purity, 0)
p = base_p * (1 + effective_lift)
y = np.random.binomial(1, p, size=n_users)
rate_t = y[assignment == 1].mean()
rate_c = y[assignment == 0].mean()
delta_per_week.append((rate_t - rate_c) / rate_c)
return delta_per_week
deltas = simulate_long_running_with_dilution()
print("Week | Measured delta | Bias direction")
for i, d in enumerate(deltas):
print(f" {i+1:2d} | {d:.4f} | {'under' if d < 0.10 else 'over'}")
print(f"\nTrue lift: 10.00%")
print(f"Week 1 measured: {deltas[0]:.2%}")
print(f"Week 12 measured: {deltas[-1]:.2%}")
print(f"Apparent 'long-term decay': {deltas[-1] - deltas[0]:.2%}")
print("이 'decay' 는 진짜 학습 효과 가 아니라 dilution!")12 주 동안 사용자 의 purity 가 점점 ↓ (multi-device, cookie churn 누적). 첫 주 의 measured lift 는 진짜 10% 에 가까움. 마지막 주 의 lift 는 ~6-7% (dilution 의 결과).
순진 한 long-running 분석: “10% → 6% 의 진짜 decay” — 잘못. dilution 이 원인.
레슨: cohort method (stable user ID) + 사용자 별 weighted analysis 가 dilution 보정 가능. 다음 글 (F23-3) 에서 디테일.
8 비교 — long-running 단순 vs 보강된 method
| 차원 | Long-Running 단순 | + Cohort | + Post-Period | + Time-Staggered | + Holdback |
|---|---|---|---|---|---|
| Dilution 보정 | 약 | 강 | 부분 | 부분 | 부분 |
| Survivorship 보정 | 없음 | 강 | 부분 | 부분 | 부분 |
| 새 feature interaction | 약 | 동일 | 강 | 부분 | 동일 |
| Time-extrapolation | 부정확 | 부분 | 강 | 강 | 부분 |
| 구현 비용 | 낮음 | 중간 | 중간 | 높음 | 중간 |
| Power | medium | medium | medium | medium | low |
9 응용
- Search ranking: long-running + Cohort + Post-Period (학습 효과 분리)
- Ad platform: long-running + Holdback (launch 후 monitoring)
- Marketplace: long-running + Cohort + DiD (geo-based 결합)
- Subscription: long-running + Cohort (cohort = sign-up 시점)
- ML model: long-running + concept drift monitoring + post-period
10 실무 체크리스트
- 왜 long-running 인지 명확화 (목적 별 적합 method 선택)
- dilution 의 잠재 크기 추정 (multi-device·cookie churn rate)
- SRM 의 시간 따른 drift 자동 monitoring
- cohort 정의 (stable identifier 가능 한지)
- ecosystem change log (다른 팀 launch, 정책 변화 등) 유지
- first / last week 의 ecosystem 차이 평가
- 보완 method (Cohort, Post-Period 등) 결합 — 단순 long-running 단독 결정 금지
11 관련 주제
- F23-0 overview — Ch.23 전체 지도
- F23-1 — short/long-term 차이의 6 갈래 + 측정 목적 3 가지
- F23-3 — 4 method (Cohort, Post-Period, Time-Staggered, Holdback) 의 디테일
- Ch.21 (F-KOH21) — SRM 의 시간 따른 drift 점검
- Ch.22 (F-KOH22) — Network leakage 와 dilution
- Ch.18 (F-KOH18) — variance 보강 방법
- Kohavi, Tang, Xu (2020). Trustworthy Online Controlled Experiments. Ch.23.4.
- Dmitriev, Frasca, Gupta, Kohavi, Vaz (2016). “Pitfalls of Long-Term Online Controlled Experiments.” IEEE Big Data 2016.
- Hohnhold, O’Brien, Tang (2015). “Focus on the Long-Term.” KDD 2015.
- Gupta et al. (2019). “Top Challenges from the OCE Summit.” SIGKDD Explorations.