3. A/B 测试指标:核心业务指标、代理指标与口径埋点

A/B 测试的成败,首先取决于指标选择是否正确。指标是衡量实验效果的“标尺”,选错指标可能导致误判产品方向。本章系统梳理 A/B 测试中的三类核心指标:核心业务指标、代理指标,以及指标背后的口径与埋点逻辑。

3.1 核心业务指标

核心业务指标直接反映产品的商业价值与用户健康度,是 A/B 测试的“北极星”。常见核心指标包括:

指标名称 定义 典型应用场景
转化率 (Conversion Rate) 完成目标行为的用户数 / 总曝光用户数 注册转化、下单转化、点击转化
留存率 (Retention Rate) 第 N 天仍活跃的用户数 / 第 0 天新增用户数 次日留存、7 日留存、30 日留存
ARPU (Average Revenue Per User) 总收入 / 总用户数 付费功能改版、定价策略测试
选指标原则:优先选择“可量化、可归因、对业务有直接解释力”的指标。转化率适合短期验证,留存率适合衡量长期价值,ARPU 适合评估商业变现能力。

3.2 代理指标 (Proxy Metrics)

当核心指标观测周期过长、成本过高或难以直接测量时,可使用代理指标作为替代。代理指标必须与核心指标存在强相关性,且能更快、更稳定地被观测。

  • 常见代理指标示例:
    • 用“页面加载时间”代理“用户满意度”
    • 用“搜索点击率”代理“搜索结果质量”
    • 用“视频播放完成率”代理“内容吸引力”
  • 使用代理指标的注意事项:
    • 必须验证代理指标与核心指标之间的相关性(如 Pearson 相关系数 > 0.5)
    • 警惕“代理指标优化陷阱”:代理指标提升,核心指标反而下降
    • 建议同时追踪代理指标与核心指标,避免单一依赖
案例:某内容平台希望提升用户长期留存(核心指标),但观测 30 日留存需要等待一个月。团队选择“7 日留存”作为代理指标,并验证其与 30 日留存的相关系数达到 0.82,从而将实验周期从 30 天缩短至 7 天。

3.3 指标的口径与埋点

指标口径决定了“什么算、什么不算”,埋点则决定了“数据能否被准确采集”。口径不一致会导致实验结论不可复现,埋点缺失则直接导致指标无法计算。

3.3.1 指标口径定义

每个指标必须明确以下口径要素:

  • 分子/分母定义:例如转化率的分母是“曝光用户”还是“点击用户”?
  • 时间窗口:统计周期是“当日”还是“累计”?
  • 去重规则:同一用户多次转化是否重复计算?
  • 异常值处理:是否剔除爬虫、测试账号或极端值?
指标 口径示例
注册转化率 分子:完成注册的用户数(去重)
分母:到达注册页面的用户数(去重)
时间窗口:实验期间累计
次日留存率 分子:第 0 天新增且在次日有任意活跃行为的用户数
分母:第 0 天新增用户数
时间窗口:固定 24 小时窗口
ARPU 分子:实验期间总收入(剔除退款)
分母:实验期间活跃用户数(去重)
时间窗口:实验周期内

3.3.2 埋点方案

埋点是数据采集的源头。A/B 测试中,埋点需覆盖:

  • 用户标识:user_id / device_id / cookie_id,用于跨实验去重
  • 实验标识:experiment_id + variant_id,用于区分实验组与对照组
  • 行为事件:event_name + event_timestamp + event_properties
  • 属性字段:页面来源、设备类型、地理位置等,用于分层分析
埋点常见陷阱:
  • 埋点延迟:服务端埋点与客户端埋点时间戳不一致
  • 埋点丢失:网络波动导致部分事件未上报
  • 埋点重复:同一行为被多次触发,导致指标虚高
建议在实验上线前进行埋点校验,确保数据完整性 > 99%。

3.4 指标选择与埋点流程总览

下图展示了从业务目标到指标定义、再到埋点落地的完整链路:

指标选择与埋点流程 业务目标 核心指标 代理指标 口径定义 埋点设计 数据采集与校验 注意 代理指标需验证 与核心指标的相关性 埋点需校验完整性

3.5 指标口径的 SQL 实现示例

以下 SQL 展示了如何基于埋点数据计算“注册转化率”与“次日留存率”,并严格遵循口径定义:

-- 注册转化率:分子为完成注册的用户,分母为到达注册页的用户
WITH page_view AS (
  SELECT DISTINCT user_id
  FROM events
  WHERE event_name = 'register_page_view'
    AND experiment_id = 'exp_001'
    AND variant_id IN ('control', 'treatment')
),
register_done AS (
  SELECT DISTINCT user_id
  FROM events
  WHERE event_name = 'register_complete'
    AND experiment_id = 'exp_001'
    AND variant_id IN ('control', 'treatment')
)
SELECT
  pv.variant_id,
  COUNT(DISTINCT pv.user_id) AS denominator,
  COUNT(DISTINCT rd.user_id) AS numerator,
  ROUND(COUNT(DISTINCT rd.user_id) * 1.0 / COUNT(DISTINCT pv.user_id), 4) AS conversion_rate
FROM page_view pv
LEFT JOIN register_done rd ON pv.user_id = rd.user_id
GROUP BY pv.variant_id;

-- 次日留存率:分子为第0天新增且在次日有活跃行为的用户
WITH day0_users AS (
  SELECT DISTINCT user_id, DATE(event_timestamp) AS install_date
  FROM events
  WHERE event_name = 'app_install'
    AND experiment_id = 'exp_001'
),
day1_active AS (
  SELECT DISTINCT user_id
  FROM events
  WHERE event_name = 'app_active'
    AND experiment_id = 'exp_001'
)
SELECT
  d0.install_date,
  COUNT(DISTINCT d0.user_id) AS day0_users,
  COUNT(DISTINCT d1.user_id) AS retained_users,
  ROUND(COUNT(DISTINCT d1.user_id) * 1.0 / COUNT(DISTINCT d0.user_id), 4) AS retention_rate
FROM day0_users d0
LEFT JOIN day1_active d1 ON d0.user_id = d1.user_id
  AND d1.active_date = DATE(d0.install_date, '+1 day')
GROUP BY d0.install_date;
关键点:SQL 中必须使用 DISTINCT 去重,避免同一用户多次转化导致指标虚高;时间窗口使用 DATE 函数精确对齐,确保口径一致。

3.6 指标体系的常见误区

  • 误区一:只看单一指标,忽略指标间的相互影响(如提升转化率但降低留存率)
  • 误区二:代理指标未经验证直接使用,导致实验结论与业务实际背离
  • 误区三:口径定义模糊,不同团队对同一指标的计算结果不一致
  • 误区四:埋点只覆盖实验组,对照组缺少对应事件,无法做差异分析
最佳实践:在实验设计阶段,提前输出“指标口径文档”与“埋点事件字典”,并组织数据工程师、产品经理、分析师三方评审,确保口径与埋点无歧义。