Results Summary 와 Visualization — Scorecard · Segment Drill · Multiple Testing

OEC Highlight · SRM Gate · LinkedIn 3-Tier · Microsoft 4-Tier · Related Metrics

Kohavi (2020) Ch.16.3 을 깊게 다룬다. Scorecard 시각화의 4 가지 원칙 (trust signal, OEC highlight, statistical indicator, color coding), accessibility 의 audience 별 layered view, per-metric vs per-experiment pivot, LinkedIn 의 3-tier 와 Microsoft 의 4-tier categorization, multiple testing (Benjamini-Hochberg), metrics of interest 자동 highlight, related metrics 의 분석을 정리한다.

Experimentation
A/B Test
저자

Kwangmin Kim

공개

2026년 05월 08일

1 정의

정의: Scorecard Visualization 의 본질

Kohavi (2020) Ch.16.3 의 시각화는 단순 표가 아닌 의사결정 도구. Trust 검증, hierarchy, statistical clarity, accessibility 의 4 차원이 결합.

1.0.0.1 4 가지 원칙
원칙 핵심
Trust Signal SRM 등 trust check fail 시 scorecard 숨김 또는 명시 warning
Hierarchy OEC + critical metric 강조, 덜 중요 metric 은 숨김 가능
Statistical Clarity Relative change + significance + color coding
Accessibility Audience (marketer~engineer) 별 layered view

원문 (Ch.16.3): “Ultimately, the goal is to visually summarize and highlight key metrics and segments to guide decision makers.”

핵심 통찰: 시각화는 데이터를 보여주는 도구가 아닌 decision quality 의 도구. 어떤 정보가 visible? 어떤 순서? 어떤 색? — 모든 design choice 가 의사결정자의 행동에 영향.

2 개념 및 원리

2.1 4 가지 원칙 — 깊이 있는 풀이

2.1.1 원칙 1 — Trust Signal Highlight

저자 명시: “Highlight key tests, such as SRM, to clearly indicate whether the results are trustworthy. For example, Microsoft’s experimentation platform (ExP) hides the scorecard if key tests fail.”

2.1.1.1 Microsoft ExP 의 SRM Gate
Scorecard 표시 logic:

if SRM_test_passed AND AA_test_passed:
    show_full_scorecard()
elif SRM_test_failed:
    show_warning("SRM detected — scorecard hidden")
    do_not_show_scorecard()
elif AA_test_failed:
    show_warning("AA test failed — results may be biased")
    show_scorecard_with_warning()
2.1.1.2 Why hide?
SRM 의미:
  - Treatment vs Control 사용자 비율이 design 과 다름
  - 50/50 design 인데 48/52 → 무언가 잘못됨
  - 분석 결과 자체 신뢰 불가

만약 scorecard 표시 시:
  - 사용자가 "+5% lift" 봄
  - 의사결정 시 사용
  - SRM 의 영향 인지 안 됨
  - 잘못된 launch decision

따라서 hide:
  - 결과가 invisible
  - 사용자가 "왜?" 질문
  - SRM 분석 → root cause fix
  - Fix 후 재실험

이 hard gate 가 platform 의 enforcement. Soft warning 은 사용자가 무시 가능.

2.1.1.3 Trust Check 의 list
Standard trust checks:
  1. SRM (Sample Ratio Mismatch)
  2. AA test (variance check)
  3. Pre-period equivalence
  4. Filter bias
  5. Coverage check (모든 사용자가 분석 포함)
  6. Variance estimation 정확성

각 check 의 결과가 dashboard 의 첫 부분에 visible. Pass 시 green, fail 시 red.

2.1.2 원칙 2 — Hierarchy

저자 명시: “Highlight the OEC and critical metrics, but also show the many other metrics, including guardrails, quality, and so on.”

2.1.2.1 Layered presentation
Top of scorecard:
  - OEC (단일 가장 중요한 metric)
  - Direction + magnitude + significance

Second layer:
  - Driver metrics (Ch.6)
  - User-facing metric (engagement, retention)

Third layer:
  - Guardrail metrics (Ch.6)
  - Performance, error rate, crash

Fourth layer (collapsible):
  - Diagnostic metrics
  - Local feature metric
  - Debugging info
2.1.2.2 사용자 의 cognitive load
1000+ metric 동시 표시:
  - 사용자가 "어디 보지?" overwhelm
  - Decision quality ↓

Layered hierarchy:
  - 사용자가 OEC 부터 봄
  - 의문 시 driver, guardrail 까지 drill
  - 필요 시 diagnostic 까지

이 hierarchy 가 cognitive load 의 progressive 분산.

2.1.3 원칙 3 — Statistical Clarity

저자 명시: “Present metrics as a relative change, with clear indications as to whether the results are statistically significant. Use color-coding and enable filters, so that significant changes are salient.”

2.1.3.1 Relative vs Absolute
Absolute:
  Treatment: $1.05 revenue/user
  Control: $1.00 revenue/user
  Difference: +$0.05

Relative:
  Treatment: $1.05 revenue/user
  Control: $1.00 revenue/user
  Lift: +5.00%

선호:
  Relative 가 cross-context 비교 가능
  Decision 의 input 으로 더 직관적
  대부분 platform 의 default
2.1.3.2 Color coding 의 표준
Green: Significant positive change (good)
Red: Significant negative change (bad)
Yellow: Marginal significance
Gray: Not significant (noise)

각 metric 의 direction 차이:
  Engagement ↑: green
  Latency ↑: red (latency 는 lower-better)
  Crash rate ↑: red
2.1.3.3 Filter 의 가치
사용자가 filter 가능:
  - "Show only significant" (p < 0.05)
  - "Show only OEC + guardrail"
  - "Show only mobile segment"

이 filter 가 1000+ metric 환경에서 navigation 의 본질.

2.1.4 원칙 4 — Accessibility

저자 강조: “scorecard visualizations should be accessible to people with various technical backgrounds, from Marketers to Data Scientists and Engineers to Product Managers.”

2.1.4.1 Audience 별 layered view
Marketing audience:
  - High-level metric only
  - Business KPI (revenue, conversion)
  - 단순 visualization
  - 통계적 detail 숨김

PM audience:
  - OEC + 주요 driver metric
  - Segment 분석
  - Decision 의 도구

Data Scientist:
  - 모든 metric
  - Statistical detail (p-value, CI)
  - Raw data access
  - Custom query

Engineer:
  - System metric (latency, error)
  - Code path 분석
  - Performance profiling

Executive:
  - Top-line summary
  - 분기 단위 누적 effect
  - Strategic 의 input
2.1.4.2 “Hiding” debugging metric

저자 명시: “This may also mean hiding some metrics, such as the debugging metrics from the less technical audience, to reduce confusion.”

Debugging metric 의 예:
  - Cache hit rate
  - Server-side latency p99
  - Database connection count

Marketing audience 가 보면:
  - "Cache hit rate ↓ 5%? 무슨 의미?"
  - Confusion
  - Trust ↓

해결:
  - Default view 에서 숨김
  - "Show advanced metrics" toggle
  - Audience 별 default 다름
2.1.4.3 Information Accessibility 의 culture

저자 강조: “Information accessibility helps establish a common language for definitions and a culture of transparency and curiosity, encouraging employees to run experiments and learn about how changes impact the business or how Finance can tie A/B test results to business outlook.”

Accessibility 의 effect:
  1. Common language: 모든 직원이 같은 metric 인지
  2. Transparency: 결과가 hide 되지 않음
  3. Curiosity: "왜 이 metric 변동?" 질문
  4. Experimentation culture: 더 많이 실험
  5. Cross-functional collaboration: Finance ↔ Engineering ↔ PM

이 cultural impact 가 visualization 의 hidden 가치.

직관 — Layered Accessibility 의 design pattern
2.1.4.4 공통 layer + audience-specific layer
모든 audience 의 base:
  - Top: OEC (single number)
  - Middle: 5~10 critical metrics
  - Bottom: trust check status

Audience 별 추가:
  - Marketer: business term
  - Engineer: system metric
  - DS: statistical detail
  - Exec: 분기 trend
2.1.4.5 Toggle 또는 Mode
Default: PM mode (가장 일반적)
Toggle: "Show advanced metrics"
Mode: "Engineer view", "Marketer view"

선택:
  - Toggle: 단순, 모든 사용자 가 같은 base 시작
  - Mode: 더 personalized, but more complex
2.1.4.6 사례 — Microsoft ExP 의 mode
Microsoft 의 audience modes:

PM Mode:
  - OEC, driver, guardrail
  - Segment 분석

Engineer Mode:
  - + Performance metrics
  - + Error logs
  - + Code path 분석

DS Mode:
  - + Raw statistical detail
  - + Multiple testing 보정
  - + Custom segment

Exec Mode:
  - 분기 cumulative
  - Cross-experiment 통합

이 mode 별 view 가 1000+ metric 환경의 navigation 도구.

2.2 Per-Experiment vs Per-Metric View

저자 명시: “The visualization tool is not just for per-experiment results but is also useful for pivoting to per-metric results across experiments.”

2.2.1 Per-Experiment View (default)

하나의 실험을 보는 관점:
  실험 X 의 모든 metric impact
  - OEC: +5%
  - Driver 1: +3%
  - Driver 2: +2%
  - Guardrail: no significant change

목적:
  - 이 실험을 launch?
  - 이 실험의 segment 효과?
  - 이 실험의 trade-off?

2.2.2 Per-Metric View (advanced)

저자 강조: “While innovation tends to be decentralized and evaluated through experimentation, the global health of key metrics is usually closely monitored by stakeholders.”

하나의 metric 을 보는 관점:
  Metric Y (예: revenue) 의 모든 실험 impact

  실험 A: +5% (launched)
  실험 B: +3% (in progress)
  실험 C: -2% (rejected)
  실험 D: +1% (in progress)
  ...

목적:
  - 이 metric 은 어떻게 trend?
  - 어느 실험이 이 metric 에 가장 영향?
  - 이 metric 을 hurt 하는 실험은?
2.2.2.1 Stakeholder 의 가치
Metric owner (예: Finance team 의 revenue):
  - 회사 의 revenue 가 어떻게 변하나?
  - 각 분기 launched 실험 의 cumulative effect?
  - Negative impact 실험 detect

Action:
  - Subscribe to metric
  - Email digest (top 영향 실험)
  - Approval process (negative 시 conversation)

2.2.3 2 가지 Optional Feature

저자 명시.

2.2.3.1 Feature 1 — Subscription
Stakeholder 가 metric 에 subscribe:
  Finance team → revenue
  Customer service → support ticket count
  Engineering → latency

Email digest (weekly):
  "Your subscribed metrics:
   - revenue: +1.5% this week (driven by experiment X, Y, Z)
   - error rate: -2% this week (driven by experiment A)"

이 digest 가 metric owner 의 awareness.
2.2.3.2 Feature 2 — Approval Process for Negative

저자 명시: “If an experiment has a negative impact, the platform can initiate an approval process, where it forces the experiment owner to start a conversation with the metrics owners before the experiment can be ramped up.”

Approval flow:

실험 X 의 ramp 시도:
  ↓
Platform 이 metric impact 분석:
  - Engagement: +5% (positive)
  - Revenue: -2% (negative, threshold 위반)
  ↓
Auto-trigger approval:
  - 실험 owner 에 notify
  - Revenue owner (Finance) 에 notify
  ↓
Conversation:
  - Trade-off 토론
  - Engagement +5% vs Revenue -2% 어느 우선?
  - Long-term effect 예상?
  ↓
Decision:
  - Launch with awareness
  - Modify experiment (revenue 보호)
  - Reject
2.2.3.3 Cultural impact

저자 강조: “Not only does this drive transparency regarding experiment launch decisions, it encourages discussion, which increases the overall knowledge of experimentation in the company.”

이 process 의 hidden benefit:

1. Transparency:
   - Negative impact 가 hidden 안 됨
   - Stakeholder 가 awareness

2. Learning:
   - 분야 별 trade-off 학습
   - Cross-functional knowledge

3. Better decisions:
   - 단순 OEC 만 보는 것이 아닌 systemic view
   - Conflicting metric 의 명시 처리

4. Ownership:
   - Metric owner 가 자기 metric 에 책임
   - Engineering decision 에 input

이 process 가 modern A/B platform 의 mature 단계.

2.2.4 Institutional Memory Gateway

저자 명시: “The visualization tools can also be a gateway to accessing institutional memory (see Chapter 8).”

시각화 도구 → 메타분석:
  per-metric view 가 자연스러운 메타분석

Metric Y 의 모든 실험 (3 년):
  - 200 개 launched 실험
  - Cumulative effect on Y
  - Pattern 식별 (어떤 type 의 변경이 효과?)
  - Best practice 도출

이것이 Ch.8 의 institutional memory 의 운영 도구.

2.3 Run·Fly 의 Advanced Features

저자 명시 (Ch.16.3): “as an organization moves into the Run and Fly phases of experimentation maturity, how many metrics your organization uses will continue to grow, even into the thousands.”

2.3.1 Feature 1 — Metric Categorization

저자 명시 산업 사례.

2.3.1.1 LinkedIn — 3 Tier
Tier 1: Companywide
  - Revenue, DAU, retention
  - 회사 단위 critical
  - 모든 실험에서 측정

Tier 2: Product Specific
  - 각 product 별 critical
  - LinkedIn Search, LinkedIn Recruiter 등
  - 해당 product 의 실험에서 강조

Tier 3: Feature Specific
  - 작은 feature 별
  - 해당 feature 실험에서 측정
  - 다른 실험에서는 hidden
2.3.1.2 Microsoft — 4 Tier
Tier 1: Data Quality
  - SRM, sample size
  - Trust check

Tier 2: OEC
  - 단일 가장 중요 metric
  - Decision 의 primary input

Tier 3: Guardrail
  - System health
  - User experience guardrail

Tier 4: Local features/diagnostic
  - Specific feature metric
  - Debugging info

이 tier 가 visualization 의 organization. Default view 가 tier 1~2, advanced 가 3~4.

2.3.2 Feature 2 — Multiple Testing

저자 명시 (Ch.16.3, Romano et al. 2016): “Multiple testing becomes more important as the number of metrics grow.”

2.3.2.1 문제
1000 metric × 0.05 alpha:
  Expected false positive: 50

실험가 의 question:
  "왜 이 metric 변동? Treatment 와 무관한데"
  답: 50 개의 False positive 중 하나

Confusion:
  - Decision 의 noise
  - "Significant" 의 의미 모호
2.3.2.2 해결 옵션

저자 명시 (Ch.17 cross-reference, Benjamini-Hochberg).

Option 1 — Strict p-value:
  alpha = 0.001 instead of 0.05
  False positive expected: 1 (out of 1000)

  Trade-off:
  + Less false positive
  - More false negative (real effect missed)

Option 2 — Bonferroni correction:
  Adjusted alpha = 0.05 / N_tests
  Conservative

Option 3 — Benjamini-Hochberg (FDR):
  Sort p-values
  Adjust threshold
  False discovery rate 의 control

Option 4 — User-controlled filter:
  Default: stricter threshold
  Toggle: 모든 marginal significance 표시

대부분 platform: Option 1 또는 Option 4 의 hybrid.

2.3.3 Feature 3 — Metrics of Interest 자동 식별

저자 명시.

2.3.3.1 Logic
factors = [
    metric_importance,  # company priority (tier)
    statistical_significance,  # p-value
    false_positive_adjustment,  # multiple testing
    direction_alignment,  # Treatment 기대와 일치?
    magnitude  # effect size
]

score = combine(factors)
highlight = score > threshold
2.3.3.2 예시 score
Metric A:
  - Importance: tier 1 (high)
  - Significance: p=0.001 (very strong)
  - Direction: aligned with hypothesis
  - Magnitude: +5% (large)
  Score: 10/10 → highlight

Metric B:
  - Importance: tier 3 (low)
  - Significance: p=0.04 (marginal)
  - Direction: unexpected
  - Magnitude: +0.2% (small)
  Score: 3/10 → don't highlight
2.3.3.3 “Unexpected” 의 가치
Surprising pattern detection:
  - 어떤 metric 이 expected 와 반대 방향?
  - 어떤 segment 에서 unusual?
  - 자동 highlight

이 surprising metric 이 종종 가장 중요한 insight:
  - Hypothesis 의 부족 인지
  - 새 feature idea
  - Bug 발견

3 왜 필요한가

Visualization 부재 또는 약함 시.

  • Decision quality ↓ — 잘못된 metric 강조, OEC invisible
  • Trust 위기 — SRM 같은 trust check 무시
  • Cognitive overload — 1000 metric 의 chaos
  • Multiple testing noise — False positive 가 decision 왜곡
  • Stakeholder 격리 — Metric owner 가 awareness 없음

활성 시.

  • Decision quality ↑ — OEC + significance 명확
  • Trust signal — SRM gate, AA test 자동
  • Cognitive load 분산 — Layered, audience 별
  • Multiple testing 보정 — BH 등 자동 적용
  • Stakeholder 통합 — Subscription, approval process

이 격차가 platform 의 의사결정 quality. 시각화는 단순 보기 도구가 아닌 decision tool.

4 응용 사례 — LinkedIn Concourse

LinkedIn 의 실험 dashboard (Concourse):

Top section:
  - 실험 ID, owner, 상태
  - Trust checks: SRM (passed/failed), AA (passed/failed)
  - 만약 SRM failed → 빨간 banner + scorecard hide

OEC section:
  - 단일 가장 중요 metric
  - Lift + p-value + CI
  - Color coded

Tier 1 (Companywide):
  - Revenue, DAU, retention
  - 모든 실험에서 표시

Tier 2 (Product specific):
  - LinkedIn Search 의 search quality
  - 해당 product 의 실험만 표시

Tier 3 (Feature specific):
  - 특정 feature metric
  - 해당 feature 실험만

Segment drill:
  - Country, device, user tier
  - 자동 highlight (unexpected pattern)

Multiple testing:
  - BH correction 자동 적용
  - "Significant after correction" badge

Subscription:
  - 사용자 별 metric subscription
  - Email digest

이 dashboard 가 LinkedIn 의 일별 운영. 모든 PM, engineer, DS 가 매일 access.

5 코드 예시 — Multiple Testing 보정 (Benjamini-Hochberg)

100 metric 의 BH correction 의 효과.

import numpy as np
import pandas as pd
from scipy import stats

rng = np.random.default_rng(42)

# 가상 100 metric 의 p-value
# 가정: 90% 가 null (effect 0), 10% 가 진짜 effect
n_metrics = 100
n_true_effects = 10

# Null metric 의 p-value (uniform 0~1)
p_null = rng.uniform(0, 1, n_metrics - n_true_effects)

# True effect metric 의 p-value (small, 0.001~0.05)
p_true = rng.uniform(0.001, 0.05, n_true_effects)

# Combine
all_p = np.concatenate([p_null, p_true])
all_truth = np.concatenate([np.zeros(n_metrics - n_true_effects), np.ones(n_true_effects)])

# === Naive (no correction) ===
print("=== Naive (alpha=0.05) ===")
naive_significant = all_p < 0.05
naive_tp = sum(naive_significant & (all_truth == 1))
naive_fp = sum(naive_significant & (all_truth == 0))
print(f"Total significant: {naive_significant.sum()}")
print(f"True positive: {naive_tp}")
print(f"False positive: {naive_fp}")
print(f"FDR (false discovery rate): {naive_fp / max(1, naive_significant.sum()) * 100:.1f}%")

# === Bonferroni correction ===
print("\n=== Bonferroni (alpha=0.05/N) ===")
bonf_threshold = 0.05 / n_metrics
bonf_significant = all_p < bonf_threshold
bonf_tp = sum(bonf_significant & (all_truth == 1))
bonf_fp = sum(bonf_significant & (all_truth == 0))
print(f"Adjusted threshold: {bonf_threshold:.6f}")
print(f"Total significant: {bonf_significant.sum()}")
print(f"True positive: {bonf_tp}")
print(f"False positive: {bonf_fp}")
print(f"Power: {bonf_tp / n_true_effects * 100:.1f}%")

# === Benjamini-Hochberg ===
print("\n=== Benjamini-Hochberg (FDR=0.05) ===")
sorted_idx = np.argsort(all_p)
sorted_p = all_p[sorted_idx]
sorted_truth = all_truth[sorted_idx]

# BH threshold for each rank
ranks = np.arange(1, n_metrics + 1)
bh_thresholds = (ranks / n_metrics) * 0.05

# Find largest k such that sorted_p[k-1] <= bh_threshold[k-1]
significant_mask_sorted = sorted_p <= bh_thresholds
if significant_mask_sorted.any():
    last_significant = np.where(significant_mask_sorted)[0].max()
    bh_significant_sorted = np.zeros(n_metrics, dtype=bool)
    bh_significant_sorted[:last_significant + 1] = True
    bh_tp_sorted = sum(bh_significant_sorted & (sorted_truth == 1))
    bh_fp_sorted = sum(bh_significant_sorted & (sorted_truth == 0))
    print(f"Significant: {bh_significant_sorted.sum()}")
    print(f"True positive: {bh_tp_sorted}")
    print(f"False positive: {bh_fp_sorted}")
    print(f"FDR: {bh_fp_sorted / max(1, bh_significant_sorted.sum()) * 100:.1f}%")
    print(f"Power: {bh_tp_sorted / n_true_effects * 100:.1f}%")
else:
    print("No significant metrics")

# === 비교 ===
print("\n=== 비교 ===")
print(f"Method        | Significant | TP | FP | FDR    | Power")
print(f"Naive         | {naive_significant.sum():>11} | {naive_tp:>2} | {naive_fp:>2} | {naive_fp/max(1,naive_significant.sum())*100:>5.1f}% | {naive_tp/n_true_effects*100:>5.1f}%")
print(f"Bonferroni    | {bonf_significant.sum():>11} | {bonf_tp:>2} | {bonf_fp:>2} | {bonf_fp/max(1,bonf_significant.sum())*100:>5.1f}% | {bonf_tp/n_true_effects*100:>5.1f}%")
if significant_mask_sorted.any():
    print(f"BH (FDR=0.05) | {bh_significant_sorted.sum():>11} | {bh_tp_sorted:>2} | {bh_fp_sorted:>2} | {bh_fp_sorted/max(1,bh_significant_sorted.sum())*100:>5.1f}% | {bh_tp_sorted/n_true_effects*100:>5.1f}%")
직관 — 3 가지 방법의 trade-off

이 시뮬레이션의 메시지.

5.0.0.1 Naive 의 함정
Naive (alpha=0.05):
  - Many false positives (~5 of 90 null)
  - High recall (most true effects detected)
  - FDR 약 33% (false 의 비율)
  - Trust 약함
5.0.0.2 Bonferroni 의 conservative
Bonferroni:
  - Threshold 매우 strict (0.0005)
  - False positive 거의 0
  - Power 낮음 (true effect 의 일부만 detect)
  - Conservative trade-off
5.0.0.3 BH 의 균형
Benjamini-Hochberg:
  - FDR 5% control (false 의 비율 보장)
  - Power 보통 (대부분 true detect)
  - 산업 표준
5.0.0.4 실무 선택
Audience 별:
  Marketer: BH (단순, balanced)
  Engineer: Bonferroni (conservative)
  Data Scientist: BH 또는 custom

Default platform:
  - BH (가장 일반적)
  - Toggle 가능 (advanced user)

이 default 가 platform 의 enforcement.
대부분 사용자가 default 사용 → systemic FDR control.

6 Ch.16 시리즈 마무리

3 편 완료:

  1. F16-0 — Scaling 의 motivation, 3 stage pipeline, dual NRT/batch path
  2. F16-1 — Data processing (sort, clean, enrich), computation architecture
  3. F16-2 — Visualization 의 4 원칙, audience accessibility, multiple testing

다음: Ch.18 (Variance/CUPED, 3 편).

7 관련 주제

선행

다음 챕터

관련 챕터

다른 카테고리 연결

Subscribe

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