第2章 Reach指标定义与量化方法
2.1 适用场景
Reach(用户触达范围)是RICE优先级评分模型中第一个量化维度,用于评估一个功能、活动或产品版本在特定时间周期内能够独立覆盖的用户规模。以下场景必须计算Reach:
- 路线图功能排序:对比不同功能可触达的用户基数,决定交付优先级
- 市场活动规划:评估 campaign 在目标人群中的覆盖广度
- AB实验受众筛选:确认实验组和对照组的最小可触达用户量
- 跨渠道投放策略:合并多触点数据,计算去重后的真实独立用户数
- 产品价值论证:向 stakeholders 展示功能影响的用户量级
2.2 前置条件
在开始Reach量化前,必须完成以下准备工作:
- 目标用户群体已定义:明确用户范围(如“近30天活跃用户”或“已订阅付费用户”),并提供可操作的筛选规则。
- 触达渠道清单已建立:列出所有可能触达用户的渠道(App推送、短信、邮件、站内信、广告等),并标注每个渠道的可用性状态(已上线 / 待开发 / 外部采买)。
- 用户身份标识体系已就绪:存在跨渠道统一的用户ID(如 UserID、DeviceID、手机号脱敏哈希),支持去重合并。
- 数据采集通道已配置:各渠道的曝光日志、埋点事件或API报表已接入数据仓库,或至少有可用的估算基准。
- 时间窗口已确定:约定统一的统计周期(日 / 周 / 月 / 版本周期),避免口径不一致。
💡 最佳实践: 在首次计算Reach时,建议先选择“近30天全量活跃用户”作为基线用户池,后续再根据具体功能缩小范围。基线池可复用,降低重复定义成本。
2.3 操作步骤
Reach量化遵循“定义 → 识别 → 采集 → 去重 → 输出”五步法。每一步必须记录执行细节,确保结果可追溯。
-
步骤一:定义目标用户群体
用结构化规则描述用户范围,例如:
用户群体 = { 用户 | 注册时间 ≥ 2024-01-01 && 最近登录时间 ≤ 当前时间-7天 && 用户标签包含 "活跃" }输出:用户群体定义文档(含筛选规则、时间戳、版本号)。
-
步骤二:识别触达渠道
逐渠道确认触达能力,填写渠道清单表:
渠道名称 触达方式 状态 数据来源 App Push 推送通知 已上线 推送后台日志 短信 文本短信 已上线 短信平台报表 邮件 EDM 待开发 暂用行业基准估算 站内信 应用内消息 已上线 埋点事件 注意:状态为“待开发”的渠道需在异常处理中说明估算依据。
-
步骤三:采集各渠道曝光数据
从每个数据源拉取用户级曝光记录,保留最小字段集:
字段: user_id, channel, exposure_time, unique_id_source 示例: user_id=U1001, channel=app_push, exposure_time=2025-04-01 10:23:00, source=push_log user_id=U1001, channel=sms, exposure_time=2025-04-01 14:05:00, source=sms_platform如果某个渠道没有全量日志,使用抽样估算或行业基准,并在记录中标注置信度(高/中/低)。
-
步骤四:去重合并计算
以统一用户ID为key,对多渠道曝光数据进行全外连接去重:
原始曝光用户列表: 渠道A: [U1001, U1002, U1003, U1004] 渠道B: [U1001, U1003, U1005] 渠道C: [U1002, U1005, U1006] 去重合并结果: 独立用户集合 = {U1001, U1002, U1003, U1004, U1005, U1006} Reach = 6 (去重前曝光总和=10,去重后=6)使用Python或SQL脚本完成去重,脚本版本需纳入版本管理。
-
步骤五:输出Reach值
最终输出包含:
- Reach绝对值(去重独立用户数)
- 用户群体总基数(用于计算覆盖率%)
- 数据置信区间(高/中/低)
- 采集时间窗口
输出示例: { "reach": 1250000, "total_user_base": 5000000, "coverage_rate": "25%", "confidence": "high", "time_window": "2025-04-01 ~ 2025-04-30", "data_sources": ["app_push", "sms", "in_app_message"] }
📊 可视化解读: 五个步骤必须依次执行,不可跳过。步骤三和步骤四是数据质量的关键控制点——采集阶段需标注每条记录的来源和置信度,去重阶段需保留去重脚本的版本号,以备审计。
2.4 输入输出物
| 类别 | 内容描述 | 格式 / 载体 |
|---|---|---|
| 输入 | 目标用户群体定义规则 | Markdown 文档 / Confluence |
| 输入 | 触达渠道清单(含状态、数据来源) | 表格(Google Sheets / Excel) |
| 输入 | 各渠道用户级曝光日志 / API 报表 | Parquet / CSV / JSON |
| 输入 | 去重脚本(SQL / Python) | .sql / .py 文件,Git 管理 |
| 输出 | Reach 值、覆盖率、置信区间 | JSON / 数据卡片 / BI 看板 |
| 输出 | 数据溯源说明(字段映射、采样率、基准来源) | 附录文档 |
2.5 责任边界
| 角色 | 职责 | 交付物 |
|---|---|---|
| 产品经理 | 定义用户群体规则,确认渠道清单,审核Reach合理性 | 用户群体定义文档、渠道清单 |
| 数据分析师 | 采集曝光数据,执行去重计算,输出Reach值及置信区间 | 去重脚本、Reach计算结果、数据溯源说明 |
| 数据工程师 | 保障各渠道数据管道稳定,提供统一用户ID映射表 | 数据管道监控报告、ID映射表 |
| 项目负责人 | 仲裁数据冲突,审批Reach值的最终版本 | Reach值审批记录 |
2.6 记录材料
以下材料必须归档至课程项目共享目录(如 Notion / Confluence / 飞书文档),保留至少两个版本周期:
- 用户群体定义 v1.0:包含筛选规则、定义时间、负责人。
- 触达渠道清单:渠道名称、触达方式、状态、数据来源、备注。
- 曝光数据采集日志:每个渠道的拉取时间、记录数、缺失率。
- 去重脚本(含版本号):SQL 或 Python 脚本,需包含注释说明去重逻辑。
- Reach 计算结果记录:每次计算的 Reach 值、覆盖率、置信区间、时间窗口。
- 数据溯源附录:各渠道数据来源的详细说明(API 名称、抽样率、估算基准等)。
2.7 异常处理
| 异常场景 | 处理方式 | 记录要求 |
|---|---|---|
| 某个渠道无曝光日志 | 使用行业基准估算(如:App Push 平均打开率 20%),并在数据来源中标注为“估算”,置信度降级为“低” | 记录估算公式和基准来源 |
| 用户ID跨渠道不统一 | 基于手机号 / 邮箱 / DeviceID 做多对一映射,映射表需人工抽检(抽检率 ≥ 5%) | 记录映射冲突数量和解决方式 |
| 渠道曝光数据时间窗口不一致 | 以最晚结束时间为准,统一归齐到同一时间窗口;无法对齐的渠道单独标注时间段 | 记录每个渠道的实际时间窗口 |
| 去重后 Reach 值超过用户总基数 | 立刻中止计算,检查是否存在渠道间 ID 映射错误或重复计数;修正后重新执行 | 记录异常原因和修正过程 |
| 渠道数据量级差异悬殊(如 100:1) | 小渠道单独标注置信度,并在最终 Reach 值中提供“含/不含小渠道”两个版本 | 记录差异分析结论 |
⚠️ 常见错误: 直接将各渠道曝光用户数简单相加(非去重),会导致 Reach 被高估 30%~200%。必须使用去重逻辑,保留用户级粒度。
2.8 验收标准
本章节内容交付前,需逐项检查以下标准是否满足:
- 定义明确:Reach 术语在本团队内有唯一解释,并与“曝光量”“展示次数”清晰区分。
- 规则可执行:用户群体定义、渠道清单、去重脚本均可被其他成员直接使用或复现。
- 数据可追溯:每个渠道的曝光数据都能追溯到原始来源(日志表名 / API 名称 / 估算文档)。
- 置信度可感知:每次输出的 Reach 值都附带置信区间(高/中/低)和原因说明。
- 异常有预案:至少覆盖上述 5 类异常场景的处理方式,且责任到人。
- 文档已归档:所有记录材料按 2.6 节清单完整提交,版本号与课程进度一致。