第2章:指标口径定义原则
指标口径的定义直接决定A/B实验结论是否可信。口径定义出现歧义时,同一个事件可能被不同团队计算为不同的值,导致结论无法对齐。本章系统说明指标口径定义的四个核心原则,并在每个原则下给出实际案例。
2.1 一致性
同一指标在实验组、对照组、历史同期、其他看板中必须使用相同的口径定义。常见的反例包括:
- 实验组使用“页面加载完成”统计PV,而对照组使用“首屏渲染完成”统计PV,导致两个桶的数据无法直接对比。
- 业务看板的DAU口径包含访客+注册用户,而实验看板只包含访客,造成绝对数值差异。
一致性检查清单
- 实验组与对照组的埋点事件名、触发时机、过滤条件是否完全一致?
- 指标名称在不同看板中是否指向同一段数据逻辑?
- 历史基线数据是否使用与当前实验相同的口径重新计算?
- 实验组与对照组的埋点事件名、触发时机、过滤条件是否完全一致?
- 指标名称在不同看板中是否指向同一段数据逻辑?
- 历史基线数据是否使用与当前实验相同的口径重新计算?
2.2 可复现性
任何分析师根据口径说明文档,都应能独立复现出与原始看板完全一致的指标数值。可复现性的核心是文档化与版本管理。
一个不可复现的典型场景:某团队在SQL查询中直接使用WHERE event_name = 'purchase',但未说明purchase事件的埋点包含成功和失败的回调。新的分析师加入后按同样条件查询,得到的数据却因底层数据清洗逻辑变更而出现差异。
保障可复现的关键步骤:
- 为每个指标建立独立的口径定义卡,包含事件名称、触发条件、过滤规则、聚合方式。
- 将口径定义卡纳入版本控制(如Git),每次变更需记录变更原因与生效时间。
- 提供自助验证功能,让分析师能在实验平台上对比当前与历史的口径计算结果。
常见陷阱
不要仅依赖“代码注释”或“个人记忆”来维护口径定义。团队人员变动时,未文档化的口径会成为数据孤岛。
不要仅依赖“代码注释”或“个人记忆”来维护口径定义。团队人员变动时,未文档化的口径会成为数据孤岛。
2.3 业务含义对齐
指标口径必须与业务方理解的业务概念一致。技术定义与业务语义脱节时,看板上的数字无法指导决策。
示例:业务方理解的“下单成功率”是“支付成功订单数 / 所有提交订单数”。但技术口径可能定义成“支付成功订单数 / 创建购物车订单数”,分母多包含了未提交的购物车记录,导致成功率偏低,业务方误认为产品转化有问题。
业务含义对齐的常见做法:
- 在口径定义卡中注明业务场景说明,使用业务方熟悉的术语。
- 在指标看板中提供口径说明入口,点击指标名称可弹出完整定义。
- 定期组织对齐评审会,邀请业务方与技术方一起 review 指标口径。
2.4 时间窗口选择
时间窗口指指标计算所覆盖的时间范围。不同时间窗口的选择会直接影响实验结论。
| 时间窗口类型 | 适用场景 | 风险提示 |
|---|---|---|
| 24h 自然日 | DAU、日留存等周期指标 | 跨时区实验需设定统一时区基准 |
| 7 天滚动窗口 | 周活跃、周留存 | 周末效应可能拉低日均值 |
| 30 天滚动窗口 | 月活跃、LTV 估算 | 冷启动阶段数据稀疏时需谨慎 |
| 事件时间窗口(如 1h/1d 窗口) | 漏斗转化、归因分析 | 窗口边界截断可能导致归因遗漏 |
最佳实践
为每个指标指定 主时间窗口 与 辅助时间窗口。主窗口用于核心呈现,辅助窗口用于排查异常。例如:主窗口设为自然日,辅助窗口设为实验启动后的“累计截至目前”。
为每个指标指定 主时间窗口 与 辅助时间窗口。主窗口用于核心呈现,辅助窗口用于排查异常。例如:主窗口设为自然日,辅助窗口设为实验启动后的“累计截至目前”。
2.5 指标口径定义结构图
下面这张结构图展示了四个原则如何构成一个完整的指标口径定义框架。
2.6 口径定义实战:SQL 示例
以下是一个经过一致性、可复现性、业务对齐、时间窗口选择检验的口径定义SQL示例。该口径定义“7日活跃用户数”,使用自然日时间窗口。
-- 口径名称:7日活跃用户数(WAU)
-- 业务定义:过去7个自然日内,至少产生一次“任意页面访问”事件的独立设备数
-- 时间窗口:滚动最近7天(自然日),不包含今天
-- 过滤条件:排除内部测试设备 & 排除数据质量标记的session
WITH active_devices AS (
SELECT DISTINCT
device_id
FROM event_log
WHERE
event_name = 'page_view'
AND event_date >= DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)
AND event_date < CURRENT_DATE
AND device_id NOT IN (SELECT device_id FROM test_device_whitelist)
AND session_quality_flag = 'valid'
)
SELECT COUNT(device_id) AS wau
FROM active_devices;
实践建议
每次创建新指标时,先填写完整的口径定义卡,再编写SQL或ETL逻辑。口径定义卡的结构可包含:
- 指标名称、业务描述、适用实验类型
- 事件名称、过滤条件、聚合粒度
- 时间窗口类型、回溯天数
- 口径变更历史(版本号+变更内容+变更日期)
每次创建新指标时,先填写完整的口径定义卡,再编写SQL或ETL逻辑。口径定义卡的结构可包含:
- 指标名称、业务描述、适用实验类型
- 事件名称、过滤条件、聚合粒度
- 时间窗口类型、回溯天数
- 口径变更历史(版本号+变更内容+变更日期)