从零搭建一个广告实验平台
面向工程、数据和实验团队,从零讲清楚一个广告 A/B test 平台该怎么搭:核心组件、分流方式、事件记录和结果分析。
这篇记下我对广告实验平台的一点认识:它分成哪几块,数据怎么一路流过去。面向工程、数据和实验团队,默认你对 A/B test 已经不陌生。理解尚浅,给正在搭的人一点参考。
一个平台能用,得能把四件事讲清楚:比的是什么,谁被分到哪一组,发生了什么,以及这些能不能信。按一次实验从创建到出结论的顺序,我把它拆成五块:
| 组件 | 核心职责 |
|---|---|
| Experiment definition | 定义比较对象、实验单位、指标和停止规则 |
| Campaign matching | 判断广告请求是否匹配实验 campaign |
| Assignment | 为匹配成功的请求选择 A 或 B |
| Event measurement | 记录 assignment、exposure 和 conversion |
| Analysis | 按预先定义的口径计算效果和不确定性 |
这五块合起来就是一条证据链。哪一环缺了或者没做实,报表都可能有数字,却给不出够可信的结论。下面就按这个顺序一块块聊,也说说各自容易在哪出岔子。
1. 实验定义:先固定比较边界
实验定义是第一步。一个实验被创建时固定下来的东西,后面都改不了,它既是平台配置,也是后续分析的契约。要固定的东西大致分几类:
- 比较对象:两个 campaign 和实验变量;
- 投放条件:budget、投放边界和分流比例;
- 实验单位:randomization unit 和 analysis unit;
- 指标:primary metric、guardrail metric 和分母;
- 停止规则:归因窗口、MDE 和停止条件。
两个 campaign 通常使用相同 budget,以及相同的非实验投放条件。targeting 可以是实验变量;如果不是实验变量,就应保持一致。
实验单位不一定是 user,也可以是 device、session、impression、account 或 geo cluster。选择单位取决于影响范围、身份稳定性和潜在的跨单位影响。分析单位可以不同,但必须在实验开始前确定,不能看完结果再选择。
2. 匹配与分组:让请求公平进组
定义定下来,接下来要确定一个广告请求进哪一组。拆开看是两步:matching 判断一个广告请求该不该进这个实验,assignment 再决定它进 A 还是 B。广告主配置的 targeting、audience、预算和其他投放条件,先决定一个广告请求是否匹配 campaign。所有匹配成功的实验请求都应进入 assignment;不能再设置一个隐藏的实验闸门改变样本范围。
assignment 可以在请求到达前完成,也可以在 campaign 即将进入投放决策时完成。serve-time assignment 是一种常见模式,但不是唯一实现方式。
在这种模式下,流程是:
- 广告请求与 campaign 匹配;
- 候选 campaign 即将进入投放决策;
- 系统根据实验分配结果判断该请求是否属于这个 campaign;
- 只有被分配到的 campaign 继续投放。
A、B 不能同时参加同一请求的竞价,再把最后获胜的 campaign 当成实验分组,否则投放结果会反过来决定 assignment。
assignment 需要保持可追踪和一致。实验中途改变分配规则时,应切分新旧结果,不能直接合并。
3. 三类事件:assignment、exposure、conversion
请求分好组,接下来要把过程记下来。关键是分清三类事件,它们各自回答不同的问题:
| 事件 | 记的是什么 |
|---|---|
| Assignment | 系统决定用哪个版本 |
| Exposure | 版本是否真的投出去、产生了展示 |
| Conversion | 实验单位是否发生了目标事件 |
assignment 不代表广告一定展示,exposure 也不代表用户一定点击或转化。平台应记录事件主体、发生时间、关联关系、去重结果和晚到状态。
主分析通常使用 ITT(intention-to-treat):按 assignment 的版本分析,而不是只分析实际曝光的人。这样可以保留随机化带来的可比性,避免把”能成功投放”本身引入选择偏差。
如果问题是”广告相对不投放是否带来新增转化”,Control 和 Treatment 两个广告版本无法回答它,需要 no-ad holdout、地理实验或其他增量设计。
4. 结果分析:先统一口径,再解释差异
事件记全了,才谈得上算结果。这一层最容易出问题的地方,是 A、B 没用同一套口径。两边必须使用相同的:
- 分析单位和分母;
- 去重规则和过滤条件;
- 归因窗口;
- 事件成熟规则。
primary metric 决定主要结论,guardrail metric 约束可接受的风险,例如 CPA、投诉率、延迟或频次。CTR、exposure rate 等指标可以帮助解释结果,但不应在实验结束后临时升级为主要指标。
结果至少要同时看三件事:
- 效果大小:lift 和绝对差异;
- 不确定性:置信区间和 p-value;
- 业务门槛:MDE 和 guardrail。
p-value 和 MDE 回答不同问题:p-value 衡量观察到的差异是否可能来自随机波动,MDE 衡量多大的差异值得识别。p-value 不是 B 获胜的概率,也不能单独构成实验结论。
MDE 通常是实验前的规划值,用来决定需要多少样本和实验时间。实验结束后计算的可检测差异反映本次实验的精度,不是观察到的效果。
如果要判断 A、B 是否相似,应提前定义可接受差异,例如 ±0.05pp,并要求置信区间完全落在该范围内。p-value 较大或实验后可检测差异较小,都不能单独证明相似。
可以这样解读置信区间:
| 置信区间 | 分析结论 |
|---|---|
| 完全高于 0,且下界达到 MDE | 有证据支持有意义的正向差异 |
| 完全高于 0,但下界低于 MDE | 支持正向差异,但尚未证明达到业务门槛 |
| 包含 0 | 不能排除没有差异,证据不足 |
| 完全落在预先定义的相似性边界内 | 可以视为相似性能 |
| 区间很宽,未满足以上条件 | 结果仍不确定,需要更多数据或更成熟的转化 |
5. 质量检查:先确认系统可信
能算出结果,不代表结果就可信。相信一个结论之前,先回头确认系统本身没出问题,主要看三类:
- Assignment:计划 assignment 比例与实际 assignment 比例是否一致,是否出现版本污染或同一实验单位跨组;
- Measurement:assignment、exposure、conversion 的关联是否完整,转化是否已经成熟;
- Configuration:预算、pacing、竞价、模型或实验规则是否中途改变。
SRM(sample ratio mismatch)特指 assignment 比例不匹配。例如计划 assignment 为 50/50,实际长期为 70/30。exposure 比例不均可能由竞价、预算或库存差异造成,不能直接当作 SRM。没有解释的 assignment SRM,不能直接进入结果分析。
A/A test 可以用来验证分流、事件记录和指标计算链路,但它验证的是实验基础设施,不是业务策略效果。
这五步走完,一个广告请求就从一次请求变成了一个算得出、也查得清的数字。
结语
写到这里回头看这五块,实验定义、匹配与分配、事件记录、结果分析、质量检查,是我现在觉得比较要紧的那几块。谈不上完整,真搭起来肯定还有很多细节要抠。不过把这条粗骨架立住,一次广告请求才好顺着流到一个比较可信的结论。
延伸阅读
- MDE / Sample Size Calculator:估算实验所需样本量和运行时间。
- A/B Test Delta Calculator:计算两组差异、置信区间和 p-value。
- A/B Experiment Review:检查实验设计、数据质量和统计证据。
- Ron Kohavi 等:Seven Rules of Thumb for Web Site Experimenters
- Ron Kohavi 等:Online Controlled Experiments at Scale
- Microsoft Research:Diagnosing Sample Ratio Mismatch
Comments are hosted on GitHub for reliable, searchable threads.
Open comments