实验文化在互联网公司越来越普及,AB实验作为业务决策的辅助工具,可以精准区分策略效果的随机波动与显著增长。此外AB实验还可以评估策略的因果关系,举一个生活中的例子,退烧的时候往往会出汗,那么退烧和出汗的因果关系是什么, 是不是发烧之后我们应该穿更多衣服捂汗?通过 AB实验,我们可以发现退烧是因,出汗是果, 所以发烧捂汗的做法是不对的。在互联网产品中,类似的问题很常见, AB实验可以给决策者更清晰的因果链路, 从而让产品经理或者业务决策者更全局的视角,更准的决策。
一、采样分流技术的发展
传统AB实验,在实验开始前分好AB组用户,同时生效策略。例如医学实验, 实验开始前招募志愿者,然后分为AB两组。互联网实验的区别:A组实时采样1%的用户, B组同样实时采样1%的用户, 然后启动实验,AB组的命中实验的用户会陆续进入实验,第一天实验组可能来了 0.2% 的用户,随着实验时间增加,实验用户量逐渐接近 1%,这里和传统的医学实验不一样。
我们把互联网产品的用户看做一个有限个数的总体,从这个总体中,随机无放回的采样得到AB组用户,一种简单的工程实现:将大盘用户随机Shuffle一次,然后按照比例取出 AB组用户。但这样的采样在工程化的时候比较复杂,因为每次启动实验,我们都需要对大盘用户做一次Shuffle。进一步优化,我们可以选择一个密码学Hash函数实时采样, 因为密码学Hash函数可以保证任意两个用户ID的Hash Value是独立的, 这个性质等价于随机采样。当实验比较多的时候,我们发现这种hash模拟随机采样的分流方式还是有一个问题:用户是有记忆性的, 上一个实验的效果会延续到新的实验,我们通过二次Hash来解决这个问题。除 Hash 采样之外,再介绍一种更复杂的完美随机分流策略,基于有限域(galois field)理论,我们给出一种完美随机方案《Orthogonal Traffic Assignment in Online Overlapping A/B Tests》。
二、指标计算评估的发展
在互联网业务大量使用 AB实验之前, 数据分析师使用业务 BI 报表给老板汇报数据, BI报表数据往往是某一天,大盘用户的行为数据,例如某天所有用户的访问时长除以当天的总人数,得到人均访问时长。
AB 实验初期,产品经理或者数据分析同学有之前的固定思维,一个实验运行 7 天,他们会把每一天的用户访问时间加起来作为分子,再除把每一天进入实验的用户加起来(不去重)作为分母,计算“人均访问时长”,这个指标和 BI 报表的指标是口径一致的。用这个指标口径做实验,通过 jackknife/bootstrap 估计方差做统计推断。但是这样的口径是不科学的,举一个例子:在BI业务报表中,产品经理一般使用的是非聚合指标,例如看连续两天报告,人均浏点击次数=(第一天点击次数+第二天点击次数)/ (第一天用户数+第二天用户数),这里用户数在两天内没有做去重聚合。在AB实验中,这样定义指标有明显缺陷。例如,A组和B组假设在第一天都进入了10个用户,A组的策略非参糟糕,留存是0, 第二天没有用户访问,B组策略比较好,留存是100%, 第二天这10个人都又分别点击了一次,我们如果使用BI报表中的非聚合口径计算指标,A组的人均点击=(10+0)/(10+0) = 1 , B组的人均点击=(10+10)/(10+10)=1 , A组指标=B组指标,我们得出AB组策略没有差异,显然是一个错误的结论。在AB实验中,正确的指标定义是:人均浏点击次数=(第一天点击次数+第二天点击次数)/ (去重(第一天用户数+第二天用户数)), 新口径下,A组指标=10/10=1 , B组指标=20/10=2 , 可以看出B组策略显著好于A组。
指标的长期效果预测,AB 实验的指标结果代表实验期间对策略效果的评估,但是产品负责人或者老板更需要得到一个长期效果,策略对全年 OKR的贡献。我们在这篇文章中有详细的分析如何评估长期效果《Estimating Causal Effects of Long-Term Treatments》(EC'23)
三、AB实验统计推断的发展
Sutva (Stable Unit Treatment Value Assumption)假设直观的理解:在 AB实验中,给 B组用户一个策略,B组用户的不会把策略效应溢出到 A组;
1.Sutva 假设成立时:
固定样本假设推断, 我们在实验开始前,确定 Power 和业务检验精度,计算出实验所需要的样本量,然后启动实验。这是一个理想实验设计,在采样分流技术中有提到,互联网实验中,用户是陆续进入实验,所以这种固定样本实验有一些问题:
- 实验做 3 天与 7 天的检验统计量分布可能不同,例如3天的人均访问时长和 7 天人均访问时长,显然是两个不同的分布(计算口径是人均去重指标,在 AB实验指标计算中有提到)。
- 实验采样是实时的,实验第一天进入实验的用户成分,活跃用户占比较高, 实验运行累计两天时,非活跃用户占比上升,随着实验累计时间增加 ,实验人群中非活跃占比逐渐增大,最终逐渐接近大盘中的用户成分。当实验策略在活跃与非活跃用户的类型上产生不一样的效应,那么实验评估的准确性会受到影响。我们需要一些找到一个合适时间停止实验,来降低这里的风险,我们最近完成的工作:《Enhancing External Validity of Experiments with Ongoing Sampling Process》(EC'24)。
- 用户连续观测 Peeking 问题(重复看实验导致一类错误升高),随着基础实时数仓的发展,业务需要对实时的指标做统计推断,例如,有一个实时 CTR指标,业务希望在可以在任意时刻做统计推断,这里带来新的挑战,序列化检验模型的落地与应用。
更复杂的场景,产品经理想对某一组 UI做实验,例如一个按钮的颜色也形状和文案三个维度,每个维度有 4 个选择,那么总共有 4*4*4=64 个策略,同时做这 64 个策略对比,这几乎是一件不可能完成的任务。再例如,我们做一个模型超参实验,超参数的取值在实数域,我们不可能通过 AB实验枚举实数域进行实验。这里引入新的Multi-armed Bandit/Bayesian optimization 实验方案。
2.Sutva 假设不成立时:
固定关系的干扰:
举一个例子,在社交场景做实验,实验策略可以通过已知好友关系传播,我们做一个 50%vs50% 的实验,实验组中的用户通过好友关系,把实验策略分享到对照组的用户,结果实验组和对照组都受到策略影响, 我们实验的统计量(实验组用户均值-对照组用户均值)检测不到差异。这个例子中, AB 组之间的干扰都来源于已知的关系传导,我们可以在随机采样的时候,考虑关系图,进行图采样,得到两个隔离的 AB 组进行实验。另外一种处理思路是,因为传导关系已知,我们可以通过定义一个可以表达传导效应的新统计量进行实验;最后一种思路是建模,我们通过模型预测数传导效应进行实验。我们最近完成的一些文章:
《Optimized Covariance Design for AB Test on Social Network under Interference》(NeurIPS'24)
《Unbiased Estimation for Total Treatment Effect Under Interference Using Aggregated Dyadic Data》(MitCoDE'23)
《Ego Group Partition: A Novel Framework for Improving Ego Experiments in Social Networks》(MitCoDE'23)
非固定关系的干扰:
举一个例子,在主播实验中,我们对 B组主播给一些激励策略,那么 B 组主播的直播间会有更好的指标。因为 B组主播抢夺了原本进入 A 组主播的用户。如果我们把这个策略全量上线之后,不存在 A 组策略的主播,也就不存在“抢夺”效应。所以在实验过程中我们看到的 B 组效果好,可能是被高估的。这类场景比较复杂,因为非固定关系有很多不同的情况,大多来自推荐系统的策略和产品自身的传导效应,还有外部因素的干预等。我们对于这种情况的实验 case by case 分析,通过因果推断、结构化模型、强化学习等一系列方法评估实验效果,可以进一步阅读我们最近完成的文章:《Estimating Treatment Effects under Recommender Interference: A Structured Neural Networks》(EC'24)
四、AB实验当前遇到的难点与挑战
随着业务越来越广的应用AB实验, 我们面临一些新的挑战:大数据量的挑战,实验数量快速增加,如何更快、更准、更稳的提供计算支持。相关工作我们整理发表在 VLDB'24 : 《Large-Scale Metric Computation in Online Controlled Experiment Platform 》
算法方向,复杂业务系统中 Sutva 不成立时,如何更准的支持实验,例如搜索系统、推荐系统、广告系统中。实验结果如何更准确的反应业务大盘,以及更准的评估实验长期收益。最后是很多不能做实验的场景,我们如何把因果推断技术标准化和效果评估做好,助力业务提供增长。我们开源了一套基于 Olap 引擎分的布式计算因果推断库,解决非标准化AB实验评估问题。《Fast-Causal-Inference: a Causal Inference Tool at Scale》(MitCoDE'23)