如何理解AB系统

1 什么是AB实验?

假如你是一名推荐算法工程师,需要上线一个提升公司商品成交金额(GMV)的算法模型。你觉得,你的模型是有效的,比原有模型提升了100%的成交金额。但是老板说,我要我觉得,不要你觉得 -- 你得给出证明。

你想了想,不妨设计一个对照实验:

将用户分成人数、GMV一致的两组,分别采用不同的模型,对照组采用原模型A,实验组采用新模型B

image.png

这就是一个AB实验:

  • 提出问题--新模型真的比原来的模型效果好么?

  • 建立假设--两者一致,无显著差别

  • 设计实验--均匀分组,赋予不同的模型,计算差值

  • 得出结论

2 均匀分组与AA实验

实验设计好了,这时又来了一个新的难题。如何保证两组一定是均匀的呢,平台每天有千百万用户,要一个个数过去么?

答案是当然不用。

这里的思路就是随机将用户分入实验组、对照组,并用两组历史数据,检验分组结果的相似性。

那么问题又来了,如何检验相似性?

引入T检验,T检验认为对两组统计量求t值,t值服从t分布,从而得出显著水平(p-value)。

image.png

其中
image.png

,即自由度;
image.png

为伽马函数。

这时候,可能有同学又要问了,T检验的前提条件是数据符合正态分布,如果数据不够"正态"那该怎么办呢?

需要明确,通过中心极限定理,在用户基数足够大的情况下,我们知道用户侧常见的指标应该服从正态分布。如果不符合,一定有某种“问题”。比如,刷单作弊、幸存者偏差、样本量小等。每个问题会有对应的“消偏”方式,来找出其背后真实存在的正态分布。

所以这里的流程就是:分组--历史数据计算--正态性检验(不正态的消偏恢复成正态分布)--两组用户组间t检验

这里的提取历史数据,并检验的过程,就是一个在开展AB实验前,进行前置AA实验的过程。

此外,这里可以发现刚才设计的AB实验漏洞。那么这里打个补丁,AB间的差异比较也应该使用“正态性检验-->t检验”这一流程。就定量实验而言,波动越大的组,所需样本量越大。

其中,样本量 = 流量 x 流量转化漏斗 x 时间

波动程度则可以通过标准差来衡量。

3 辛普森悖论与BB实验

在经历了从AA到AB之后,经过一系列调整,你得到了B比A增加了100%GMV的结论。本来两组指标收拢就可以验收完成。然而当把模型B扩充到对照组进行使用时,你发现对照组在模型B下和实验组的差距并没有完全收拢。

这就让人想到了辛普森悖论,优势分组合并为总体后,反而变成劣势组了。

当人们尝试探究两种变量(比如新生录取率与性别)是否具有相关性的时候,会分别对之进行分组研究。然而,在分组比较中都占优势的一方,在总评中有時反而是失势的一方。via wikipedia

悖论产生原因,往往是分组中存在人群比例失衡,且模型对不同人群的指标提升存在分层现象。

循着这一思路,我们发现了上文设计的AB分组存在的漏洞,对照组与实验组的男女比例不一致,分析数据之后,发现模型B对男女的提升效果不一致–女性群体涨幅大于男性群体。实验组效果提升由女性用户提供的多于男性。所以在对照组也应用模型B时,对照组和实验组未能完全收拢。

image.png

这时重新把分组中男女划分均匀,重新AA AB BB,模型B上线评估完成。顺带发现了用户分层。

新发现的分层特征放入下一轮模型迭代中。

4 总结

完整流程为:AA--AB--BB

AA 负责分组,验证均匀性。顺带修复特征数据。

AB 负责比较AB模型效果差异

BB 负责验收AB比对的合理性。顺带发现了用户分层。

一个思考题:如何证明一个策略长时间是稳定的,和时间推移无关

你可能感兴趣的:(如何理解AB系统)