Kohavi Ch.20 개관 — Triggering 의 본질과 구조

Sensitivity 개선 도구 · 5 가지 사례 패턴 · Trustworthy 의 검증 · 3 가지 함정

Kohavi (2020) Ch.20 의 흐름을 한 편으로 압축한다. Triggering 의 정의 (counterfactual difference 의 user identification), 5 가지 사례 패턴 (partial, conditional, coverage increase/change, counterfactual ML), numerical example 의 sample size 절감, optimal vs conservative triggering, trustworthy 검증 (SRM, complement), 3 가지 함정의 지도를 제시한다.

Experimentation
A/B Test
저자

Kwangmin Kim

공개

2026년 05월 08일

1 정의

정의: Triggering (트리거링)

실험 분석에서 counterfactual difference 가 있는 사용자만 포함하는 기법. 즉 Treatment 와 Control 의 결과가 동일한 사용자는 분석에서 제외하여 noise 를 reduce, sensitivity 를 개선 (Kohavi, Tang, Xu, 2020, Ch.20).

1.0.0.1 핵심 원칙
Triggered user 의 정의:
  사용자 가 variant 의 actual 또는 counterfactual 에서 변화를 경험할 가능성 있음

Non-triggered user 의 정의:
  Treatment 와 Control 의 결과가 identical
  → Treatment effect = 0 (zero effect)
  → Including 하면 noise 만 추가 → power 손실
1.0.0.2 5 가지 사례 패턴
Pattern 설명 예시
Partial Exposure 일부 segment 만 노출 US users only
Conditional Exposure 특정 행동 시 노출 Checkout 도달
Coverage Increase 처치 영역 확장 Free shipping $35→$25
Coverage Change 처치 영역 변경 조건 추가/제거
Counterfactual ML model 비교 새 vs 옛 추천 model

원문 인용 (Tom Flynn): “Be sure you positively identify your target before you pull the trigger.”

핵심 통찰: Triggering 은 niche feature 분석의 의무. 5% 사용자 만 영향 받는 변경의 경우 모든 사용자 분석 시 effect 가 1/20 dilution. Triggered 분석으로 sensitivity 20x. 그러나 잘못 적용 시 SRM, bias 의 위험.

2 개념 및 원리

2.1 Why Triggering — Sensitivity 개선의 핵심

저자 도입 강조: “Triggering provides experimenters with a way to improve sensitivity (statistical power) by filtering out noise created by users who could not have been impacted by the experiment.”

2.1.1 영향 vs Non-impact 의 분리

2.1.1.1 시나리오 — Niche Feature
실험: 새 weather widget on search page
Trigger: 사용자가 weather query 검색 (5% of queries)

Approach 1 — Naive (모든 user):
  Treatment effect on all users:
  - 5% queries 에 weather widget
  - 95% queries 에 영향 0
  Average effect = 0.05 × widget_effect + 0.95 × 0
  → Effect dilution: 95%

Approach 2 — Triggered (weather user):
  Treatment effect on triggered:
  - 100% queries 에 weather widget
  Average effect = widget_effect
  → No dilution
2.1.1.2 Sensitivity 비교
Naive analysis:
  Effect estimated: 0.05 × widget_effect = 0.5% (가정 widget_effect = 10%)
  Variance: large (95% noise)
  Detect: 어려움 (effect 묻힘)

Triggered analysis:
  Effect estimated: widget_effect = 10%
  Variance: smaller (5% triggered, all impacted)
  Detect: 쉬움
2.1.1.3 정량적
Sample size requirement:
  Naive: ~10000 (large effect dilution)
  Triggered: ~500 (full effect, smaller pop)

→ Triggered: 20x faster decision
→ Same statistical power, 1/20 sample

이 sensitivity 차이가 niche feature 분석의 본질.

2.1.2 Mature Organization 의 trend

저자 강조: “As organizational experimentation maturity improves, we see more triggered experiments being run.”

Crawl 단계:
  - 모든 실험 naive analysis
  - Triggering concept 부재
  - Niche feature 분석 어려움

Walk 단계:
  - 일부 실험 triggered
  - Manual implementation
  - 점진적 도입

Run 단계:
  - 대부분 niche 실험 triggered
  - Platform default
  - 자동 trigger event 식별

Fly 단계:
  - 모든 실험 triggered (자동)
  - Counterfactual logging
  - SRM·complement check 자동

이 evolution 이 maturity 의 한 차원.

2.2 5 가지 Triggering 사례 — 미리 보기

2.2.1 Pattern 1 — Partial Exposure (부분 노출)

실험: Edge browser 만 영향 받는 변경
Trigger: 사용자 가 Edge browser 사용

분석:
  Edge users (~5%): full effect
  Non-Edge users: 0 effect

Triggered: Edge users 만
2.2.1.1 다른 partial 사례

저자 명시.

- US users only (geo-specific change)
- Edge browser users
- 특정 zip code 의 shipping address
- Heavy users (visit 3+ times in last month)
- Subscription tier (premium only)

핵심 — Trigger condition 의 timing:
  실험 시작 전의 데이터 기준 (Treatment 의 영향 안 받음)
  실험 중 의 데이터 기준 (Treatment 가 condition 자체 변경 가능)
2.2.1.2 Trigger condition 의 critical 성

저자 강조: “it’s critical that the definition be well-defined based on data prior to the experiment start and not one that could be impacted by the Treatment.”

잘못된 trigger condition:
  "Heavy users (3+ visits during experiment)"
  - Treatment 가 사용자의 visit 빈도 영향
  - "Heavy" 정의 자체가 Treatment 의 부산물
  - Selection bias 발생

올바른 trigger condition:
  "Heavy users (3+ visits in 30 days BEFORE experiment)"
  - Pre-period data 만 사용
  - Treatment 의 영향 없음
  - Trustworthy
2.2.1.3 Mixed Users

저자 명시: “you must include ‘mixed’ users, those from both the United States and other countries, in the analysis if they could have seen the change.”

시나리오:
  사용자 A: 미국 거주, 일부 시간 영국 여행
  실험: US users 만 영향

분석:
  사용자 A 가 미국 visit 시: Treatment 노출
  사용자 A 가 영국 visit 시: Treatment 미노출

Trigger 결정:
  Triggered (mixed user 도 포함)
  Treatment 의 영향 가능 (residual effect 후 영국 visit 도)
  Triggered 후 모든 activity 분석에 포함

2.2.2 Pattern 2 — Conditional Exposure (조건 노출)

실험: Checkout flow 변경
Trigger: 사용자 가 checkout 시작

분석:
  Checkout 사용자: full effect
  비-Checkout 사용자: 0 effect (영향 없음)

Triggered analysis 의 가치:
  90% 사용자가 checkout 안 함
  Triggered: 10% 사용자 만 분석
  Effect 가 진정 magnitude 측정
2.2.2.1 다른 conditional 사례

저자 명시.

1. Checkout 변경 → checkout 사용자
2. Collaboration 변경 (Word, Docs) → collaboration 사용자
3. Unsubscribe 화면 → unsubscribe 시도 사용자
4. Weather widget → weather query 사용자

각 경우 의 trigger 가 명확. Triggered analysis 가 standard.

2.2.3 Pattern 3 — Coverage Increase

저자 명시 (Ch.20.4).

2.2.3.1 시나리오
Original: 사용자가 cart $35 이상 시 free shipping
Treatment: $25 이상 시 free shipping

영향 받는 사용자 분류:
  Cart > $35: Treatment 와 Control 모두 free shipping
    → 같은 경험 → Treatment effect 0

  Cart < $25: Treatment 와 Control 모두 paid shipping
    → 같은 경험 → Treatment effect 0

  Cart in [$25, $35]: Treatment 는 free, Control 은 paid
    → 다른 경험 → Treatment effect ≠ 0
2.2.3.2 Triggered subset
Triggered: cart in [$25, $35] 사용자만
Excluded: cart 외 영역 사용자
2.2.3.3 Venn diagram (저자 Figure 20.1)
Control coverage: cart > $35 (free shipping 그룹)
Treatment coverage: cart > $25 (더 큰 그룹)
T \ C: cart in [$25, $35] (Treatment 만 의 free shipping)

Triggered = T \ C
이 영역 만이 Treatment effect 측정 가능

2.2.4 Pattern 4 — Coverage Change

저자 명시.

2.2.4.1 시나리오
Original: cart > $35 시 free shipping (Control)
Treatment: cart > $25 + 60 일 내 return 안 한 사용자

Coverage 변경:
  Control: A
  Treatment: B
  Symmetric difference: (A \ B) ∪ (B \ A)
2.2.4.2 Triggered subset
Triggered: A \ B (Control 만 free shipping) ∪ (B \ A) (Treatment 만 free shipping)

사용자 의 counterfactual 평가:
  Control 의 "Treatment 의 결과는?"
  Treatment 의 "Control 의 결과는?"
  → Difference 시 trigger
2.2.4.3 Counterfactual logging 의 필요
Original implementation:
  Control: shipping rule A 만 evaluate
  Treatment: shipping rule B 만 evaluate
  → Counterfactual 모름

Triggered logging:
  Control: rule A AND rule B 모두 evaluate
    rule A = free, rule B = paid → Trigger
    rule A = paid, rule B = paid → No trigger
  Treatment: 같음

이 추가 evaluation cost 가 platform 의 하나의 trade-off.

2.2.5 Pattern 5 — Counterfactual ML Triggering

저자 명시 (Ch.20.4).

2.2.5.1 시나리오
Treatment: 새 ML model (recommender V2)
Control: 옛 ML model (recommender V1)

User 마다:
  - V1 의 recommendations
  - V2 의 recommendations

Trigger:
  V1 ≠ V2 (다른 추천)
  → Treatment effect 가 가능

Non-trigger:
  V1 == V2 (같은 추천)
  → Treatment effect 0
2.2.5.2 Counterfactual logging 의 메커니즘
Control 사용자의 logging:
  Run V1 → expose to user
  Run V2 (counterfactual) → log only
  Compare: V1 == V2?

Treatment 사용자의 logging:
  Run V1 (counterfactual) → log only
  Run V2 → expose to user
  Compare: V1 == V2?

→ 모든 사용자 의 V1 vs V2 비교 가능
→ Triggered = different recommendations
2.2.5.3 비용

저자 강조: “the computational cost in this scenario rises (e.g., the model inference cost doubles with one Treatment) as both machine learning models must be executed.”

Single model inference:
  V1 또는 V2 inference

Counterfactual logging:
  V1 + V2 모두 inference
  → 2x compute
  → 2x latency (parallel 안 하면)

Trade-off:
  Sensitivity 개선 vs computational cost
  ML 의 비싼 model 시 결정 어려움

2.3 Numerical Example — Sample Size 절감

저자 명시 (Ch.20.5, Kohavi, Longbotham et al. 2009).

2.3.1 Sample size formula

저자 인용 (Equation 20.1, van Belle 2008):

\[n = \frac{16 \sigma^2}{\Delta^2}\]

Where:
  n = required sample size per variant
  σ² = variance
  Δ = minimum detectable effect

Constants:
  Confidence: 95%
  Power: 80%

2.3.2 사례 분석

2.3.2.1 Naive approach
시나리오:
  E-commerce site
  5% conversion (Bernoulli p=0.05)
  σ² = 0.05 × 0.95 = 0.0475
  Δ = 0.05 × 0.05 = 0.0025 (5% relative change)

  n = 16 × 0.0475 / 0.0025² = 121,600 사용자
2.3.2.2 Triggered approach
변경: checkout flow
Trigger: checkout 시작 (10% of users)
Triggered population:
  Conversion: 0.5 (initiated → 50% complete)
  σ² = 0.5 × 0.5 = 0.25
  Δ = 0.5 × 0.05 = 0.025

  n_triggered = 16 × 0.25 / 0.025² = 6,400 사용자

전체 user 수 = 6,400 / 0.10 (trigger rate) = 64,000

→ Naive 의 121,600 vs Triggered 의 64,000
→ ~50% 의 user 절약
→ ~50% 의 시간 절약
2.3.2.3 원리
Triggered analysis 의 sample efficiency:
  - p가 0.05 → 0.5 (높은 baseline)
  - σ² 가 0.0475 → 0.25 (5x 커짐)
  - But Δ도 0.0025 → 0.025 (10x 커짐)
  - n ratio: 0.25 / 0.0025² = 40000 (vs 19000 ratio)
  - Triggered n 절감 (sample size formula 의 quadratic Δ 효과)

이 dramatic 절감이 triggered analysis 의 ROI.

2.4 Optimal vs Conservative Triggering

저자 명시 (Ch.20.6).

2.4.1 Optimal Triggering

Optimal:
  Treatment 와 Control 의 차이가 있는 사용자 만 trigger

  Effect:
    Smallest possible triggered population
    Largest effect on triggered
    Maximum sensitivity

2.4.2 Conservative Triggering

Conservative:
  Optimal 보다 더 큰 set 을 trigger (some Treatment effect 0 사용자 포함)

  Effect:
    Larger triggered population
    Slightly diluted effect
    Some sensitivity loss

  Why use:
    - Implementation simpler (counterfactual logging 없음)
    - Conservative bias direction (effect underestimate)
    - Trustworthy (over-conservative is acceptable)
2.4.2.1 Conservative 사례
2.4.2.1.1 사례 1 — Multiple Treatments

저자 명시.

시나리오:
  Control vs Treatment1 vs Treatment2

Optimal (per-pair):
  C vs T1 비교: 두 variant 의 차이가 있는 user 만
  C vs T2 비교: 다른 trigger set
  T1 vs T2: 또 다른 trigger set

Conservative:
  Any 두 variant 의 차이 → trigger

  Boolean: "이 user 의 결과가 variant 들 사이 다른가?"
  Single trigger for all comparisons
  Implementation 간단

Trade-off:
  C vs T1 비교 시:
    Optimal: C 와 T1 만 의 차이 있는 user
    Conservative: C 와 T1 같음, but T2 만 다른 user 포함
    → Conservative 가 zero-effect user 포함
    → Slight sensitivity 손실
    → 그러나 단순
2.4.2.1.2 사례 2 — Post-hoc Analysis

저자 명시.

시나리오:
  실험 끝남
  Counterfactual logging 이 broken
  → Optimal trigger 불가

Post-hoc:
  Trigger condition: "user-initiated checkout"
  - Optimal 보다 더 broad
  - 일부 zero-effect user 포함
  - Still much better than no triggering

Effect:
  90% non-checkout user 제외
  10% checkout user 분석
  Conservative but trustworthy

이 conservative 는 fallback 으로 가치.

2.5 Overall Treatment Effect — Diluted Impact

저자 명시 (Ch.20.7).

2.5.1 함정

저자 강조: “If you improved the revenue by 3% for 10% of users, did you improve your overall revenue by 10%×3% = 0.3%? NO! (common pitfall). The overall impact could be anywhere from 0% to 3%!”

2.5.1.1 메커니즘
계산: Triggered effect × Trigger rate
  = 3% × 10% = 0.3%

이 게 잘못된 이유:
  Triggered population 의 baseline metric 이 다름
  - Triggered: heavy spender 또는 frequent user
  - Non-triggered: light spender 또는 rare user

Diluted impact 의 정확한 계산:
  Δ_overall = Δ_triggered × N_triggered / N_overall
            (where Δ is absolute, not relative)
2.5.1.2 사례
2.5.1.2.1 Sub-case 1 — Triggered = Most Revenue
Checkout 변경:
  Triggered = checkout user (10% of users)
  Triggered = 100% of revenue (revenue 만들려면 checkout 필요)

  Triggered effect: +3% revenue
  Overall effect: +3% revenue (no dilution)

  Reason: triggered population 이 revenue 의 100%
2.5.1.2.2 Sub-case 2 — Triggered = Low Spend
시나리오:
  Triggered = low-spender (10% of users, 10% of revenue)
  Triggered effect: +3% on triggered's revenue

  Overall:
    Triggered revenue 의 3% 증가
    = 0.03 × 0.10 × overall revenue
    = 0.003 (0.3%) of overall revenue 증가
  Overall lift: 0.3%
2.5.1.3 일반 formula (Equation 20.3)

\[\text{Diluted impact} = \frac{\Delta_\theta \cdot N_{\theta C}}{M_{\omega C} \cdot N_{\omega C}}\]

Where:
  Δ_θ = absolute Treatment effect on triggered
  N_θC = triggered Control sample size
  M_ωC = overall Control metric
  N_ωC = overall Control sample size
2.5.1.4 잘못된 단순 formula
Common mistake:
  Diluted = (Δ_θ / M_θC) × τ
  where:
    Δ_θ / M_θC = relative effect on triggered (3%)
    τ = trigger rate (10%)
  Diluted = 0.03 × 0.10 = 0.003 (잘못)

올바른 formula:
  Diluted = (Δ_θ / M_ωC) × τ
  where M_ωC = overall mean (NOT triggered mean)

Difference factor:
  M_ωC / M_θC

  만약 triggered = high spender:
    M_θC > M_ωC
    Naive = under-estimate

  만약 triggered = low spender:
    M_θC < M_ωC
    Naive = over-estimate

이 함정이 모든 triggered 분석의 standard 함정.

2.6 Trustworthy Triggering — 2 가지 검증

저자 명시 (Ch.20.8).

2.6.1 Check 1 — Sample Ratio Mismatch (SRM)

검증:
  Overall experiment: SRM check 통과 (50/50 정상)
  Triggered analysis: SRM check 통과?

Triggered 의 SRM:
  N_T_triggered / N_C_triggered ≈ 1.0 (50/50)

  만약 mismatch (예: 48/52):
    → Trigger condition 의 bias
    → Counterfactual logging 의 잘못
    → Treatment·Control 의 trigger 빈도 다름
2.6.1.1 Investigation
SRM 발견 시:
  Trigger logic 검토
  - Counterfactual 의 정확성?
  - Trigger condition 의 timing?
  - Selection bias 가능?

Fix:
  Trigger condition 수정
  Counterfactual logging 보정
  → 재 분석

2.6.2 Check 2 — Complement Analysis

저자 강조: “Generate a scorecard for never triggered users, and you should get an A/A scorecard.”

검증:
  Non-triggered user 의 분석 (Treatment vs Control)
  Should look like A/A test (no effect)

  만약 effect 가 significant:
    → Trigger condition 의 잘못
    → Treatment 가 non-triggered 에도 영향
    → Implementation bug 가능
2.6.2.1 시나리오 — Trigger condition 의 잘못
실험: weather widget on weather queries

Trigger condition: query 가 weather 관련

Non-triggered: query 가 weather 무관

Complement analysis:
  Non-triggered T vs Non-triggered C
  Expected: no effect (weather 무관 query)

  Found: Treatment 가 non-triggered 에 -2% 영향
  Possible cause:
    - Weather widget 의 page load latency (모든 query 에 영향)
    - Code path 의 bug (다른 query 도 영향)
    - Implementation 의 불완전

이 detection 이 trigger 의 정확성 검증.

직관 — Trustworthy Check 의 통합 mental model
2.6.2.2 3 layer 의 검증
Layer 1 — Overall SRM:
  Standard A/B 의 sample ratio 검증
  실험 setup 의 정상성

Layer 2 — Triggered SRM:
  Triggered 의 sample ratio 검증
  Trigger condition 의 정상성

Layer 3 — Complement A/A:
  Non-triggered 의 A/A 검증
  Trigger condition 의 정밀성
2.6.2.3 각 fail 의 의미
Layer 1 fail:
  실험 자체 의 setup 문제
  Triggering 무관

Layer 2 fail:
  Trigger condition 의 bias
  Counterfactual logging issue

Layer 3 fail:
  Trigger condition 의 incomplete
  Treatment 가 non-triggered 에도 영향
2.6.2.4 산업 표준 운영
Modern platform:
  - 모든 triggered analysis 가 자동 3 check
  - Fail 시 scorecard hide (또는 warning)
  - Engineer 의 triggered logic review

이 enforcement 가 triggered analysis 의 trust foundation.

2.7 3 가지 함정 — 미리 보기

저자 명시 (Ch.20.9) — F-KOH20-4 에서 상세.

Pitfall 1 — Tiny Segment 의 generalization 어려움
Pitfall 2 — Triggered user 의 lifetime tracking 부재
Pitfall 3 — Counterfactual logging 의 performance impact

각 함정이 production 의 silent damage. F-KOH20-4 에서 detail.

3 왜 필요한가

Triggering 부재 시.

  • Niche feature 의 missed effect — Effect dilution 으로 detect 못 함
  • 실험 시간 ↑ — Same sensitivity 위해 더 큰 sample
  • Decision quality ↓ — False negative 폭증

Triggering 활성 시.

  • Niche feature 분석 — Effect 의 진정 magnitude
  • Sensitivity 5~20x — Sample size 절감
  • Innovation 가속 — 더 빠른 결정

이 tool 이 modern A/B platform 의 sensitivity 의 큰 부분.

4 응용 사례 — Microsoft ExP 의 Triggered Analysis

Microsoft ExP 의 자동 triggering:

자동 detect:
  - 모든 niche feature
  - Conditional exposure
  - ML model A/B

자동 logging:
  - Counterfactual logging (computationally allowed 시)
  - 보존 의 trigger event

자동 분석:
  - Triggered scorecard
  - Overall scorecard (diluted)
  - Both 표시

자동 trust check:
  - Overall SRM
  - Triggered SRM
  - Complement A/A
  - Fail 시 alert

이 자동화가 Microsoft 의 niche feature 의 ROI 의 핵심.

5 Ch.20 시리즈 다음 글

주제
F20-1 Examples 1~3 (Partial, Conditional, Coverage Increase)
F20-2 Examples 4~5 (Coverage Change, Counterfactual ML)
F20-3 Numerical Example + Optimal/Conservative
F20-4 Trustworthy Triggering + Common Pitfalls
F20-5 Open Questions

6 코드 예시 — Naive vs Triggered Sample Size

저자 numerical example 의 구현.

import numpy as np

def required_sample_size(p, mde_relative, alpha=0.05, power=0.8):
    """
    Bernoulli metric 의 required sample size per variant.

    p: baseline rate
    mde_relative: minimum detectable effect (relative)
    """
    sigma_squared = p * (1 - p)
    delta_absolute = p * mde_relative
    n = 16 * sigma_squared / delta_absolute**2
    return int(np.ceil(n))

print("=== Naive vs Triggered Sample Size ===\n")
print("Scenario: e-commerce site")
print("Conversion rate: 5%")
print("MDE: 5% relative\n")

# Naive (all users)
print("--- Naive Approach ---")
n_naive = required_sample_size(p=0.05, mde_relative=0.05)
print(f"Per variant: {n_naive:,} users")
print(f"Total (T+C): {n_naive*2:,} users")

# Triggered (checkout users only)
print("\n--- Triggered Approach (checkout users) ---")
print("Trigger rate: 10% (users who initiate checkout)")
print("Conversion among triggered: 50%")
print("MDE on triggered: 5% relative\n")

n_triggered = required_sample_size(p=0.5, mde_relative=0.05)
trigger_rate = 0.10
n_total_triggered = int(np.ceil(n_triggered / trigger_rate))

print(f"Per variant (triggered): {n_triggered:,} users")
print(f"Per variant (total to enter experiment): {n_total_triggered:,} users")
print(f"Total experiment size: {n_total_triggered*2:,} users")

# Comparison
print("\n=== Comparison ===")
saving = (n_naive - n_total_triggered) / n_naive * 100
print(f"Naive: {n_naive*2:,} users")
print(f"Triggered: {n_total_triggered*2:,} users")
print(f"Savings: {saving:.1f}%")

# Time implications (assume daily user volume)
daily_users = 100_000
time_naive = n_naive * 2 / daily_users
time_triggered = n_total_triggered * 2 / daily_users
print(f"\nAt 100K users/day:")
print(f"Naive: {time_naive:.1f} days")
print(f"Triggered: {time_triggered:.1f} days")
print(f"Time savings: {(time_naive - time_triggered) / time_naive * 100:.1f}%")
직관 — Sample Size 의 dramatic 차이

이 코드의 메시지.

6.0.0.1 Sample size 차이
Naive (5% conversion):
  ~121,600 per variant
  Total: ~243,200

Triggered (50% conversion in checkout):
  ~6,400 per variant
  Total to enter exp: ~64,000 per variant
  Total: ~128,000 (47% savings)
6.0.0.2 시간 단축
At 100K users/day:
  Naive: ~2.4 days
  Triggered: ~1.3 days
  Savings: ~47% time
6.0.0.3 본질
Triggering 의 ROI:
  - Sample size 절감 (~47%)
  - 시간 절감 (~47%)
  - Innovation cycle 가속

이 ROI 가 mature platform 의 표준 default.

7 관련 주제

선행

다음 글

관련 챕터

다른 카테고리 연결

Subscribe

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