Kohavi Ch.23.4 — Long-Running Experiments 의 4 가지 한계

dilution · cookie churn · network leakage · survivorship bias · 새 feature interaction · time-extrapolation

Kohavi (2020) Ch.23 의 단순 long-running experiment 가 부딪히는 4 가지 근본 한계 — Treatment 효과 dilution (multi-device, cookie churn, network leakage), survivorship bias, 새 feature 와 의 interaction, time-extrapolated effect 해석 의 함정 — 을 정리한다. 측정 의 왜 어려운가 를 명확히 하여 다음 글 의 4 가지 method 의 동기를 이해하게 한다.

Experimentation
A/B Test
저자

Kwangmin Kim

공개

2026년 05월 09일

1 정의

정의: Long-Running Experiment (단순)

가장 단순 한 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

Mechanism
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
직관: 사용자 의 purity 손실

비유 — 약효 측정:

  • 1 주: 환자 의 100% 가 약 복용
  • 4 주: 환자 의 70% 만 복용 (의약 prescription drift)
  • 12 주: 환자 의 30% 만 복용 (drug holiday, off-label use)

마지막 시점 의 effect 측정 시 순수 약효 가 아닌 희석 효과 측정.

레슨: dilution 은 long-running 의 불가피 함정. cohort method (stable user ID) 로 부분 적 보정 가능 — F23-3 에서 다룸.

Dilution 의 정량화
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

Mechanism

실험 시작 사용자 의 일부 만 이 마지막 까지 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 점검.

직관: 누가 survive 하는가

비유 — 약물 임상시험:

  • 진짜 효과 측정 위해: 모든 환자 (시작 시 등록 한) 의 outcome 측정 필요
  • 측정 측정: 시험 끝까지 participation 한 환자 만 측정 → biased

drop-out 한 환자 의 outcome 이 다른 경우: 측정 결과 misleading.

레슨: long-running 의 효과 측정 시 cohort (시작 시 정의) 단위 의 metric 의무. 정의: 모든 cohort 사용자 의 metric (중도 drop 한 사용자 도 마지막 활동 시점 의 metric).

SRM 의 시간 의존 패턴
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

Mechanism

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)
직관: ecosystem dynamics

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 해석 의 함정

Mechanism

마지막 주 의 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

4 가지 한계 의 종합
한계 시간 따라 영향 받는 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 의 위치

단순 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 실무 체크리스트

  1. long-running 인지 명확화 (목적 별 적합 method 선택)
  2. dilution 의 잠재 크기 추정 (multi-device·cookie churn rate)
  3. SRM 의 시간 따른 drift 자동 monitoring
  4. cohort 정의 (stable identifier 가능 한지)
  5. ecosystem change log (다른 팀 launch, 정책 변화 등) 유지
  6. first / last week 의 ecosystem 차이 평가
  7. 보완 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.

Subscribe

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