zl程序教程

您现在的位置是:首页 > 

当前栏目

ABtest这么简单,我做个实验怎么还会翻车?

简单 怎么 实验 这么 翻车 还会
2023-06-13 09:11:30 时间

作者 | 梁唐

大家好,我是梁唐。

今天和大家聊聊ABtest。

说起ABtest,做算法的可谓是无人不知无人不晓。这个单词可能大家会觉得有些陌生,但实际上这个概念我们早就在初中生物课本上学过了,也就是大名鼎鼎的控制变量实验法。在互联网行业当中,虽然改头换面换了个名字,但是内涵的意思是一样的,也就是控制变量进行实验。

那具体怎么操作,当中又有什么值得说道的呢?别着急,让我们慢慢道来。

为什么要AB实验?

首先,我们再来回顾一下当初学到的控制变量法,大家还记得这是在什么场景下使用的吗?

具体内容大家可能记不清了,没关系,我们拿最近的新冠疫苗的实验举个例子。新冠疫苗研发成功之后,需要经过若干轮实验,从一开始的动物实验到最后的临床实验,也就是拿人做实验。这个实验是怎么做的?很简单,一组人注射真正的疫苗,一组人注射生理盐水,然后事后统计感染病毒的比例,来得出疫苗是否起作用的结论。

为什么我们不直接多样本实验,而要这样将实验样本分成两类来比较实验呢?

主要目的就是为了避免统计偏差,得出尽量精确的结论。比如如果我们只是多样本实验的话,我们就没办法排除样本本身对于实验结果的影响。比如说我们给100个人注射了新冠疫苗,然后这100个人全部免疫没有得病,那我们可以得出新冠疫苗免疫率100%的结论吗?

显然不能,因为可能这100个人很年轻身体特别好,也可能因为某种原因他们和病毒接触的并不够多,没有达到发病条件,等等。可能有各种我们能够预料到以及不能预料到的原因,这些原因都会影响我们实验的结论。

在互联网行业这样的情况也很多,比如说网站更新了一版页面。新的页面和之前区别很大,有些用户反馈说很好很喜欢,还有一些反馈不好,那么到底这一版更新效果好不好呢?

如果不用对比实验的话,这个结论非常非常难以得出。有可能大部分用户反馈都是赞扬态度,觉得改版很成功。但千万不要被这些数据迷惑,因为当中有一个幸存者偏差。可能讨厌这个改版的用户直接流失了,再也不来了,他们自然也不会给你一个改版很糟糕的反馈。

这也是为什么很多公司老板觉得转型很成功,看数据非常喜人。但结果业务越来越烂,最终崩溃的原因。所以只看统计数据是不够的,很可能因为这些偏差得到相反的结论。

怎么做AB?

那么,在互联网公司是如何做AB实验的呢?

其实很简单,顾名思义,AB实验也就是AB桶实验。我们通常会把流量分成两个部分,让两部分用户分别看到不同版本的结果。然后各自统计指标,得出实验结论。

我画一个很简单的图,大家一下就明白了。

划分流量的方式也很简单,我们可以直接根据用户的id做一个简单的判断。比如尾号是奇数的走A桶,否则走B桶。对于算法实验来说,不同的策略就意味着不同版本的模型,以及对应的不同的排序结果。

这里只是一个举例,实际操作当中可能会稍微复杂一些,比如说会使用hash算法。并且会支持一些额外的配置,比如白名单、黑名单等等。

另外,进行AB的实验往往也不止一个,有的时候也会有多个实验,并且有的时候实验也会根据逻辑上的关系而分层。

这些其实都不是重点,毕竟对于算法工程师来说,要做的往往不是设计一个AB实验的系统,而是使用它获得我们想要的结论。

说到这里,估计有同学会说得到结论还不简单,我们做完实验统计一下指标不就好了?

做实验当然不难,但是得出结论有时候可不是这么简单。不信的话,继续往下看。

实验有提升,上线无变化

这是最基本也是最容易遇到的情况,明明我们新做了一个模型,实验的时候很给力,增长很明显2个点或者3个点。但是当我们推上线之后,却发现之前的增长好像突然没了,石沉大海。

假如你现在遇到了这样的情况,你能分析出原因吗?或者你能知道要往什么方向去思考吗?

关于这个问题,我大概想到了4种原因。

时效性

第一种是时效性,模型往往是有时效性的,使用越新的数据训练出来的模型往往效果也会越好。

当我们改动了特征或者是模型结构新做了一版,和老的版本进行比较的时候,其实是一个不公平的比较。我们并不只是和之前的旧逻辑比较,而且是和旧逻辑以及旧数据训练出来的模型比较。这里面的时效性就是一个隐变量,很容易被人忽略。

实际上有可能我们不改逻辑,拿新数据训练旧模型再和之前的模型比较,一样可以得到2个点左右的提升。

用户偏差

第二种是用户偏差,实验时和实验后针对的人群是一样的吗?

别着急下结论,不妨先找AB实验的团队问问,他们在做流量分流的时候有没有过滤未登录的用户。

这种情况并不少见,因为未登录的用户没有用户相关的信息,也就意味着即使进入模型,也必然缺失很大一块特征。所以有的时候,我们AB实验的时候只针对登录的用户。

那么就带来了一个问题,当模型全量上线之后,必然会有大量未登录的流量也混进来。哪怕只有10%,也会对模型整体的指标带来不小的冲击,那么实验的时候获得的2%的提升被冲淡也就非常正常了。

大局影响

第三种可能是大局影响,比如我们单独看某一个模块或者是某一个业务场景,可能的确是提升了。

但是有可能大局上某些领域是存在竞争的,比如搜索和推荐可能有一些隐性的竞争关系。如果推荐的效果提升了,那么很多人不需要搜索就可以找到自己想要的商品。反过来也同样成立,搜索的质量提升了,也可能会影响推荐的效果。

我们做实验的时候指标提升了可能是站在牺牲了其他业务指标的前提上的,反过来说,我们上线之后效果不明显,很有可能是其他业务上线了新功能,或者是也做出了成绩,冲淡了效果。

系统原因

还有一种原因是系统原因,比如新上的模型非常重,导致服务端的请求经常来不及响应,于是走了兜底策略。

之前AB实验的时候由于流量小,所以系统的压力还不大,无法响应的比例很低,所以效果好。而全量了之后,系统压力增大,无法响应的比例也随之提升。由于走兜底策略的请求多了,必然会带来效果的损失。很有可能这部分损失就冲抵掉了新模型带来的提升。

而且作为算法工程师,可能关注点都在数据、算法、模型上,很有可能看不到系统可能出现的问题。

有些指标提升,有些指标下降

除了前面提到的情况之外,还有一种情况也非常常见,就是不同指标出现了不同的变化。

比如CTR(点击率)提升了,但是CVR(转化率)下降了,再比如Cart(加购)提升了,Order(订单)下降了。理想情况当然是所有指标一起提升最好,但是出现这种有些提升有些下降的时候,我们怎么判断实验到底是成功了还是失败了呢?

这个时候千万不要着急下结论,非常考验统计学的功底。

首先,我们要知道这些指标究竟是什么意思,从逻辑上理解它们。当你理解之后,你就会发现有些指标之间存在天然的负相关。

比如点击率和转化率,点击率是看到了item点击的概率,转化率是点击了item购买的概率。显然,当点击率提升的时候,转化率必然是倾向下跌的。

因为虽然用户点击了更多的item,但是用户的潜在的购买力是固定的。即使他看到了很多喜欢的item,也不可能都买了。换句话说,他原本打算花100块买东西,我们通过算法让他花110是可能的,但让他花200就不太可能了。即使对于个别人来说是可能的,但是对于整体大量的样本来说,也是不可能的。

哪怕就是单独的一个指标,有的时候我们也一样不能轻易下结论。

比如两个流量桶实验,最后A桶的点击率是5%,B桶的点击率是4.5%。很明显A桶的点击率更高,很多人这个时候就下结论了,A桶效果更好。但如果看一眼曝光,很有可能B桶的曝光比A桶多20%,还能说明A桶更好吗?

不能,为什么?

因为AB实验的时候虽然说是流量均分实验,但是这里的流量其实指的是用户。把同样数量的用户分到了两个不同的桶里,但是用户数和流量并不一定是均等的。比如当系统推荐的东西用户很喜欢的时候,他可能就会多看,看得多了,曝光也就多了,同样曝光多了,点击率反而会下降。

和前面购买的例子是一样的道理,用户能点进来详细看的item也是有限的。算法能够做到让用户逛得更多,点得更多,但想要做到这些更多的部分还保留相同的点击率则很难。

举个例子,比如刷抖音,我原本会花1.5h刷抖音。上了一个更牛的算法之后,我提升到了2h。但由于我多刷了半个小时,最后这半个小时我可能已经比较疲劳了,所以不会每一个视频都详细看,很多粗略看下不感兴趣就划掉了。那么如果看整体的平均观看时长也许是下降的,但是看总量肯定是大幅提升的。

到这里还没有结束,如果我们继续往下思考,又会有更不一样的发现。

短期和长期的冲突

某些指标真的是越高越好吗?

一旦你思考这个问题,你会发现逻辑上或者说统计学上的最好是不存在的。点击率越高越好吗?有些三俗的性感美女图片吸睛效果最好了,但问题来了,如果平台上找不到优质内容,到处都是三俗内容,这真的是平台愿意看到的吗?

转化率是越高越好吗?

其实也不见得,毕竟用户的消费能力是有限的,现在多花了一些,未来可能就会少花一些。或者用户很快就找到了想买的东西,买完了,就退出平台了。如果没有这么快找到心仪的物品,说不定多逛一会,说不定会种草一些其他的物品。

广告收入是越高越好吗?

那就更不见得了,公司整体的广告收入增加了,未必全是因为业务发展带来的,很有可能是因为跟广告主的收费变高了。跟广告主的收费高了,那么买广告的商家们的收益就减小了,也就是说这是建立在薅了这部分商家羊毛的基础上带来的。商家赚得少了,平台对他们的粘性也会随之降低,也许未来就不做了,或者是转到其他平台了。

明眼人也都看得出来,这些情况都是牺牲了长期利益追求眼前了。但是我们有一个指标衡量长期利益吗?没有,我们能单纯地从这些统计数据上看出长期利益吗?也很难。

一旦我们把时间这个因素也纳入考量,要考虑所谓长期利益的时候,很多结论可能会完全颠倒过来。没有什么是必然好的,也没有什么是天然正确的,一切都是有限度的,需要放在某一个框架里讨论才能成立,无脑地追求指标是要不得的,也是必然会付出代价的,即使这个代价不一定是立即支付。

如果再考虑到统计时候的各种偏差,你会发现连最可信的数据,有的时候也不是那么可信。数据当然是很有说服力的,很有用的,但很多时候数据也是笼罩着一层迷雾的,我们不能迷信它,需要有一双慧眼穿透迷雾,看到数据内部的真相。