草庐IT

想做长期的 AB 实验?快来看看这些坑你踩了没

Jcloud 2023-03-28 原文

作者:江颢

1.什么是长期的 AB 实验

大部分情况下,我们做的 AB 实验都是短期的,一到两周或者一个月之内的,通过分析这段时期内测得的实验效应得出实验结论,并最终进行推广。

长期实验即运行时间达数月甚至数年的实验,实验的长期效应指的是需要数月数年的 AB 实验才能积累的实验效应。

那什么场景下还需要做长期的 AB 实验,为什么不直接将短期的实验效应直接推广到长期效应呢?

因为在某些情况下,实验的长期效应和短期效应是不同的

例如,在搜索引擎上显示不够匹配的搜索结果会导致用户再次搜索,搜索份额可能在短期内会增加,但随着用户体验下降并切换到更好的搜索引擎,搜索份额从长期来看会减少;同样,展示更多的广告可以在短期内增加广告点击和营收,但长期来看,却会因为广告点击甚至搜索的减少而造成营销的减少。

执着于短期的 AB 实验,会使我们倾向于高估技术的短期效应,而低估其长期效应。

2.为什么要做长期的 AB 实验

2.1 归因

数据驱动文化的团队会使用实验结果来跟踪评估团队的目标,在这种情况下需要对实验的长期效应进行正确的测量和归因。分析如果不引入新功能,从长远来看,产品获得的效果是怎么样的;引入新功能获得成功的原因,是由于外部政策影响、竞品变化还是用户的体验得到提升。这种归因是非常具有挑战性的

2.2 积累经验

长期和短期的 AB 实验在某种业务场景下是否存在差异,如果存在是什么原因造成的?产品引入新功能对用户的体验用什么影响,如果用户被新功能吸引,但只体验一次,则说明新功能可能不太满足用户需求;如果用户需要花费很长时间才能体验到新功能,则说明用户引导可能不够。了解这种差异可以为产品后续的升级迭代积累经验

2.3 推广结论

通过测量某种场景下的某些实验的长期效应,我们可以尝试总结并推广实验结论。之后在这类场景下做 AB 实验时,我们能否通过这些长期效应,创建可预测长期效应的短期指标,将这些指标作为我们实验的护栏指标;或者在决策中考虑那些推广的结论

3.为什么长期的 AB 实验容易踩坑

我们先来介绍一种最常见最流行的做长期实验的方式:即延长短期实验的运行时间,长期运行它。

下图展示了随着时间推移,测得的实验效应变化。第一个实验周期测得的百分比增量测量值 P1 被认为是短期效应;而最后一个测量值 PT 则被认为是长期效应。

我们以此为例分析下这种简单的方式容易踩那些坑,导致长期实验最后一周的测量值 PT 可能无法代表实验真正的长期效应

3.1 实验设计不合理

3.1.1 随机化单元设计不合理

如果随机化单元设置成用户级别,但根据 cookie 进行试验的随机化,随着时间推移,实验组的用户可能因为使用新 cookie 而被随机分配到对照组,时而存在于实验组,时而存在于对照组,从而带来偏差。

3.1.2 幸存者偏差

并非实验开始时的所有用户都可以存在到实验结束。

如果实验组和对照组之间的用户生存率不同,则 PT 会有幸存者偏差。

如果不喜欢新功能的试验组用户随着时间流逝而启用产品,那 PT 只包含了哪些仍然存在的用户以及新加入实验的用户,从而带来偏差。

3.1.3 实验效应稀释

用户是可以使用多个设备体验功能,而如果实验仅测量其中的一个子集。 那实验时间越长,用户在实验期间使用多个设备的可能性就越大。对于最后一周内访问的用户,实际上实验只包括了在整个时间段 T 中一部分的用户体验, 以 PT 衡量的结果不是用户在时间 T 曝光于实验的长期效应,而是稀释后的结果。

3.2 实验组和对照组之间存在潜在的干扰

3.2.1 直接关联

用户行为往往会受到网络中其他人的影响,尤其是熟悉的人的行为的影响。

如果被测试功能对用户有显著的影响,即使其本身可能需要一段时间才能被用户发现并使用,但经过渗透用户的社交圈,通过网络传播可能很快就被发现并使用了。

例如如果实验组会促使用户给其他用户发送更多的私信,那么对照组用户也会回复这些私信,并可能更主动发送私信。如果实验关注指标是私信发送总数,那对照组关注指标也会增长,测出来的试验组数据和对照组数据差别会偏小,而不能完整的捕捉到新算法的收益

3.2.2 间接关联

实验组和对照组可能会因为共享某种资源而产生间接关联,造成干扰。

例如 uber 测试一个溢价算法,效果很好以致于实验组的用户更愿意打车,那么在路上可能接客的司机数量减少了,对应的对照组的价格会升高,导致照组用户愿意打车的意愿降低了。这种情况,会高估实验组和对照组的差别。

又如关于搜索引擎基于的关联模型的实验,如果我们使用从所有用户那里收集到的数据训练实验组和对照组,实验组的关联模型可以更好的预测用户喜欢点击什么,那么实验运行时间越长,实验组产生的'好的'点击数据也会使对照组收益。实验组和对照组的差别会降低。

3.3 实验用户的行为变化

随着用户对被测功能的学习并适应变化,用户的行为也会发生变化。

如果被测功能是新功能,也许需要一段时间才能被用户注意并使用,但是一旦发现它是有用的,长期来看,用户就会频发使用。

如果被测功能是对已有功能的修改,用户由于已经适应了旧功能,用户可能会需要时间适应新功能;也可能用户会在短期内对新功能产生兴趣,投入更多的时间和探索,但长期来看,用户行为最终会达到一个平衡点。

对于这些情况,实验的短期效应和长期效应存在不同

3.4 外部生态系统的变化

3.4.1 季节性变化

不同季节,商家会采取不同的营销活动,导致用户的购买意图不同。例如双十一期间用户的购买意图会比非双十一期间表现不同

3.4.2 重大事件

例如政策发生变化、大型社会事件,都可能会影响用户的被测试功能的表现

3.4.3 竞品影响

如果竞争对手启动了相同的功能,则可能影响用户对被测试功能的体验,该功能的价值可能会下降。

3.4.4 启动其他新功能

长期实验运行期间可能会启动许多其他实验,并且可能与被测试的功能进行交互,随着时间推移,可能会对实验产生影响。

4.如何做长期的 AB 实验

实验长期效应的偏差可能是由于不同原因引起的,以下介绍几种改善长期实验的测量方式来预防或者修正这种偏差。

注意没有一种方式可以完全解决所有的偏差,都可能存在某种局限性,建议使用前评估这些方法的局限性。

4.1 群组分析

在实验开始之前构建稳定的用户群,并仅分析对该用户群的短期效应和长期效应。这种方法可以帮助解决幸存者偏差和实验效应稀释的问题。

但这种方式有几点需要注意:

1.群组的稳定性对这种方法的有效性非常重要。如果随机化单元是基于 cookie 的,由于 cookie 流失率很高,群组的稳定性则比较差,导致这种方法不能很好的纠正偏差

2.群组必须具备代表性。如果群组不能代表总体人群,那分析结果可能无法推广到整个人群。

4.2 后期分析

该方式的关键是在实验运行一段时间后,使对照组用户和实验组用户在测量期间内的产品体验完全相同。

对于这种方式有两种选择:第一种在运行一段时间(时间 T)后关闭实验,然后在时间 T 和时间 T + 1 期间测量实验组用户和对照组用户之间的差异;或者可以将实验组发布给所有用户来应用此方式。

这种方式本质上是在最后一段时间内做了一个 A/A 实验,根据后期的 A/A 实验测量长期效应。

但这种方式有个前提隐患,即系统可能‘记住’了实验期间的信息,我们称之为系统的习得效应。常见的例子是通过机器学习模型向实验组用户展示更多的广告,实验组用户使用足够长的时间后系统可能会更了解用户,即使在后期进行了 A/A 实验,也仍然会向他们展示更多的广告。

如果实验中,系统的习得效应为零,那 A/A 实验之后实验组和对照组用户都曝光于完全相同的一组功能。给定足够多的实验,测量用户的习得效应,然后从新的短期实验中外推出长期效应。

这种方式能有效的将效应与随时间变化的外在因素和其他新功能带来的潜在交互影响分割开来。因为用户的习得效应是单独测量的,能为实验短期效应与长期效应的不同带来更多的分析依据。

但这种方式存在幸存者偏差和实验效应稀释的问题,可与群组分析方式结合使用。

4.3 实验留白

长期运行对照组是存在一定的成本的,代价可能是昂贵的,因为他们一直没有获得实验组的新功能。因此如果迫于时间、迭代周期的压力,需要将被测试的新功能推全给所有用户,一种方式就是实验留白。实验结果出来之后,将实验组流量发布给 90%、95% 的用户,剩下的用户留在原来的对照组数周或在数月。

留出实验是长期运行实验的一种典型方式,但需要注意的是由于对照组流量比例此时比较小,统计功效会变低,要确保仍有足够的流量不会影响实验的目标

有关想做长期的 AB 实验?快来看看这些坑你踩了没的更多相关文章

  1. ruby-on-rails - ruby 日期方程不返回预期的真值 - 2

    为什么以下不同?Time.now.end_of_day==Time.now.end_of_day-0.days#falseTime.now.end_of_day.to_s==Time.now.end_of_day-0.days.to_s#true 最佳答案 因为纳秒数不同:ruby-1.9.2-p180:014>(Time.now.end_of_day-0.days).nsec=>999999000ruby-1.9.2-p180:015>Time.now.end_of_day.nsec=>999999998

  2. 网络实验之RIPV2协议(一) - 2

    一、RIPV2协议简介  RIP(RoutingInformationProtocol)路由协议是一种相对古老,在小型以及同介质网络中得到了广泛应用的一种路由协议。RIP采用距离向量算法,是一种距离向量协议。RIP-1是有类别路由协议(ClassfulRoutingProtocol),它只支持以广播方式发布协议报文。RIP-1的协议报文无法携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1不支持非连续子网(DiscontiguousSubnet)。RIP-2是一种无类别路由协议(ClasslessRoutingProtocol),支持路由标记,在路由策略中可根据路由标记对

  3. ruby - 在 ruby 中,为什么没有定义?与 ensure 一起使用时会像预期的那样工作 - 2

    我正在运行ruby​​1.9.2p180(2011-02-18修订版30909)[x86_64-linux]。#!/usr/bin/envrubydefouch()raiseArgumentError,"woof"fred=3return(nil)ensureif(defined?(fred))thenprintf("fredisdefined(%s)\n",fred.inspect())elseprintf("fredisnotdefined\n")endend#ouch()ouch()运行时,上述ruby​​脚本的输出非常出乎意料。$./ouch.rbfredisdefined(n

  4. ruby-on-rails - Ruport vs.Prawn考虑长期使用 - 2

    我想将报告功能添加到我的rails应用程序中,而我现在正为使用哪种报告软件来创建pdf文档而苦苦挣扎。到目前为止,我确信Ruport或Prawn是最好的选择。在对它们进行了实验之后,我发现它们都非常强大,而且相当普遍,但它们也有明显的特点,我担心从长远来看,我可能会做出错误的选择。在一个大型复杂的应用程序中,ruport和prawn是如何进行长期比较的?可维护性?生成报告的代码会呈指数增长吗?代码会变得脆弱吗?可利用性?图书馆几年后还会积极维护吗?(ruportutil似乎有些过时…)可定制性?使用相同的代码库为不同的客户机生成不同的布局有多容易?最重要的是:在做出选择之前,我不知道还

  5. 第1部分 实验拓扑、终端服务器 - 2

    目录1.1访问Cisco路由器的方法1.1.1通过Console口访问路由器1.1.2通过Telnet访问路由器1.1.3终端访问服务器1.2终端访问服务器配置命令汇总1.1访问Cisco路由器的方法    路由器没有键盘和鼠标,要初始化路由器需要把计算机的串口和路由器的Console口进行连接。访问Cisco路由器的方法还有Telnet、WebBrowser和网络管理软件(如CiscoWorks)等,本节讨论前2种。1.1.1通过Console口访问路由器    计算机的串口和路由器的Console口是通过反转线(Rollover)进行连接的,反转线的一端接在路由器的Console口上,另一

  6. 【操作系统实验】Ubuntu Linux 虚拟机用户管理 - 2

    文章目录一、用户二、用户分类1、普通用户2、超级用户3、系统用户三、用户相关文件1、/etc/passwd文件2、/etc/shadow文件四、用户管理命令1、useradd2、adduser3、passwd4、usermod5、userdel一、用户Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。在Linux系统中,任何文件都属于某一特定用户,而任何用户都隶属于至少一个用户组。用户名(username):每个用户账号都拥有一个惟一的用户名和各自的口令。用户在登录时键入正确的用户名和口令后,就能够进入系

  7. ruby-on-rails - 预期的 ProductField,出现数组问题 - 2

    我有一个Rails4应用程序,它有一个paramsblock,如下所示:defstore_paramsparams.require(:store).permit(:name,:description,:user_id,products_attributes:[:id,:type,{productFields:[:type,:content]}])end但是我得到了错误:ActiveRecord::AssociationTypeMismatchinStoresController#createProductFieldexpected,gotArray我尝试插入的参数如下所示:Parame

  8. OSPF综合实验 - 2

    文章目录实验要求实验思路IP地址规划路由实验配置R1上配置R2上配置R3上配置R4上配置R5上配置R6上配置R7上配置R8上配置R9上配置R10上配置R11上配置R12上配置实验测试R10pingR4的环回R10pingR12的环回R10pingR1实验要求R4为ISP,其只能配置IP地址;R4与其他所有直连设备间均使用公有IP;R3-R5/6/7为MGRE环境,R3为中心站点;整个OSPF环境IP基于172.16.0.0/16划分;所有设备均可访问R4的环回;减少LSA的更新量,加快收敛,保障更新安全;全网可达实验思路IP地址规划公网IP随便配置,这里我R3-R4的网段为34.1.1.0/2

  9. SQL Server 创建用户,用户授权,实验报告 - 2

    首先我们得有一个数据库,数据库里有表职工表: 部门表:接下来的操作都是针对以上的表其次我们来建立登录用户createlogin王明withpassword='123456'--创建登录用户,登录名为王明,密码为123456.创建登录名之后,登录用户还不能对数据库进行操作,还要对登录用户创建数据库用户createuserU1forlogin王明--创建数据库用户关联登录用户这时候登录王明的账户,数据库会自动映射到数据库用户U1,由U1来进行对数据库的操作。不过,只创建了用户,而用户还没有获得对数据库的操作权力,我们就要对数据库用户进行权力分配有时间的小伙伴可以额外花点时间点击链接了解详细1)设置

  10. C#面向对象程序设计课程实验五:实验名称:C#面向对象技术 - 2

    C#面向对象程序设计课程实验五:实验名称:C#面向对象技术实验内容:C#面向对象技术一、实验目的及要求二、实验环境三、实验内容与步骤3.1、实验内容:测试类,实现多态3.2、实验步骤3.2.1、实验程序3.2.2、实验运行结果3.3、实验内容:创建一个Vehicle类,并将它声明为抽象类3.4、实验步骤3.4.1、实验程序3.4.2、实验运行结果四、实验总结实验内容:C#面向对象技术一、实验目的及要求(1)掌握类的继承特性;(2)学会使用C#实现类的继承性;(3)理解类的多态特性;(4)学会使用C#的方法重写;二、实验环境MicrosoftVisualStudio2008三、实验内容与步骤3.

随机推荐