第4章 实验单元与分流策略
4.1 核心概念定义
实验单元是分流的最小原子,决定了同一实体在不同实验组之间的隔离边界。分流策略则规定了如何将实验单元均匀、可复现地分配到不同实验组。本章围绕三种粒度(用户、会话、事件)、两种随机化方法(桶分流、哈希分流)以及分层互斥规则展开SOP化操作指引。
4.2 适用场景
- 用户粒度:需要评估长期用户行为变化的实验,如UI改版、推荐算法、会员权益调整;要求同一用户在整个实验周期内始终处于同一分组。
- 会话粒度:每次访问独立生效的短期交互实验,如弹窗策略、临时促销、新用户引导流程;同一用户的不同会话可进入不同组。
- 事件粒度:后端算法或模型在线对比实验,如排序模型、广告召回、价格计算;每次请求/事件独立分流,不追踪跨事件一致性。
- 桶分流:预定义分桶数量且实验长期稳定运行,适合用户粒度实验。
- 哈希分流:实验启动/结束频繁、需要灵活调整分流比例,适合会话粒度和事件粒度实验。
- 分流层与互斥规则:当多个实验同时运行时,需要避免实验间相互干扰,保证各组独立性和结果可信度。
4.3 前置条件
- 已明确实验的核心指标和假设,并确定最小样本量要求。
- 已梳理用户/会话/事件的数据模型及唯一标识(user_id、session_id、event_id)。
- 已确认实验周期:长期实验(≥7天)优先考虑用户粒度;短期实验(数小时~3天)可使用会话或事件粒度。
- 已统计实验覆盖域的日均用户量、会话量、事件量,确保分流后各组样本量满足显著性要求。
- 已完成分层架构设计,明确当前实验属于哪一分流层,以及同层是否存在其他互斥实验。
4.4 操作步骤
| 步骤 | 动作 | 详细说明 | 输出/检查点 |
|---|---|---|---|
| 1 | 确定实验单元粒度 | 根据实验目标和周期选择粒度。长期用户行为→用户粒度;短期交互→会话粒度;后端算法→事件粒度。 | 实验设计文档中明确标注粒度类型及理由 |
| 2 | 选择随机化方法 | 用户粒度推荐桶分流;会话/事件粒度推荐哈希分流。大流量实验(日均用户>10万)优先使用哈希分流。 | 随机化方法决策记录 |
| 3 | 实现分流逻辑 | 编写分流函数,确保同一粒度实体始终映射到同一分组。使用一致性哈希或固定桶映射。 | 分流函数代码 + 单元测试 |
| 4 | 配置分流层 | 按业务域划分分层(如推荐层、UI层、策略层),每层独立分配流量。 | 分层配置文件 |
| 5 | 设置互斥规则 | 同层实验强制互斥:配置互斥组ID,确保同一用户在同一层只进入一个实验。 | 互斥规则配置表 |
| 6 | 分流均匀性验证 | 运行小流量预测试,检查各实验组样本量差异是否<5%,且关键指标无显著差异。 | 均匀性检验报告 |
4.5 输入输出物
| 类别 | 输入物 | 输出物 |
|---|---|---|
| 文档 | 实验需求文档、数据Schema、分层架构图 | 实验设计文档(含粒度、方法、分层、互斥规则) |
| 配置 | 用户/会话/事件标识字段列表 | 分流配置文件(JSON/YAML)、互斥规则表 |
| 代码 | 基础分流函数库 | 实验专用分流模块 + 单元测试 |
| 数据 | 历史流量日志(用于模拟分流) | 分流均匀性验证数据 + 检验报告 |
4.6 责任边界
- 产品经理:确定实验单元粒度,提供实验目标和周期,审批分层归属。
- 数据工程师:实现并部署分流逻辑,确保分流函数性能与一致性;配置分层与互斥规则。
- 数据分析师:验证分流均匀性,出具随机化检验报告;监控实验期间分流状态。
- QA 工程师:编写分流模块的自动化测试用例,覆盖边界条件和异常场景。
4.7 记录材料
- 实验设计文档:包含粒度选择依据、随机化方法、分层归属、互斥实验清单。
- 分流配置记录:保存每次实验的分流配置快照(JSON/YAML),便于复盘回溯。
- 均匀性检验日志:记录预测试阶段的样本量分布、指标分布、P值。
- 变更历史:记录分流逻辑、分层配置、互斥规则的每次变更时间与操作人。
📌 最佳实践:哈希分流时使用
hash(user_id + ":" + experiment_id) % N 确保同一用户在不同实验中独立均匀分布。桶分流建议预生成1000个桶,避免因桶数过少导致分流不均衡。4.8 异常处理
| 异常类型 | 现象 | 原因 | 处理方式 |
|---|---|---|---|
| 分流不均衡 | 各组样本量差异 >5% | 哈希函数分布不均匀;桶数量过少 | 更换均匀性更好的哈希算法(如MurmurHash),或增加桶数量至1000以上 |
| 用户跨组 | 同一用户在实验期间进入不同组 | 分流键使用了非持久化标识;缓存失效 | 固定使用持久化user_id作为分流键;增加本地缓存 |
| 分层冲突 | 同一用户在同一层进入多个实验 | 互斥规则未正确配置或遗漏 | 检查分层配置文件,添加互斥组ID;加强发布前审核 |
| 实验单元不一致 | 分析单元与分流单元不匹配 | 粒度选择错误或数据收集逻辑偏差 | 统一分流单元与分析单元;在实验设计阶段对齐 |
⚠️ 常见陷阱:不要将用户粒度实验与会话粒度实验放在同一分流层,会导致用户在不同会话中进入不同实验组,破坏用户粒度的一致性。必须通过分层隔离。
4.9 验收标准
- 分流均匀性:预测试阶段各实验组样本量差异 <5%,且关键指标(如DAU、转化率)无统计学显著差异(P > 0.1)。
- 一致性验证:用户粒度实验中,随机抽取1000个用户,其在实验期间所属分组未发生变更的比例 = 100%。
- 互斥规则生效:同一分层内的互斥实验中,不存在同一用户同时出现在两个实验组的情况。
- 随机化可复现:给定相同的分流键和实验参数,重复执行分流逻辑100次,每次结果一致。
- 分层隔离性:不同分层之间的实验分组分布相互独立,无交叉干扰。
🔍 验收检查清单:使用
SELECT experiment_id, group_id, COUNT(DISTINCT user_id) FROM experiment_assign GROUP BY experiment_id, group_id 验证均匀性;使用互斥冲突查询 SELECT user_id, COUNT(DISTINCT experiment_id) FROM experiment_assign WHERE layer_id = X GROUP BY user_id HAVING COUNT(DISTINCT experiment_id) > 1 检测互斥违规。