Essay 5 min read

从零搭建一个广告实验平台

面向工程、数据和实验团队,从零讲清楚一个广告 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 是一种常见模式,但不是唯一实现方式。

在这种模式下,流程是:

  1. 广告请求与 campaign 匹配;
  2. 候选 campaign 即将进入投放决策;
  3. 系统根据实验分配结果判断该请求是否属于这个 campaign;
  4. 只有被分配到的 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 可以用来验证分流、事件记录和指标计算链路,但它验证的是实验基础设施,不是业务策略效果。

这五步走完,一个广告请求就从一次请求变成了一个算得出、也查得清的数字。

结语

写到这里回头看这五块,实验定义、匹配与分配、事件记录、结果分析、质量检查,是我现在觉得比较要紧的那几块。谈不上完整,真搭起来肯定还有很多细节要抠。不过把这条粗骨架立住,一次广告请求才好顺着流到一个比较可信的结论。

延伸阅读

Comments are hosted on GitHub for reliable, searchable threads.

Open comments