您的位置:首页 > 其它

算法效果AB测试中的PV-UV不对称性

2017-04-10 11:14 746 查看
本文系转载,源地址http://www.cnblogs.com/bqzhao/p/3259380.html

算法效果的AB测试,是指在相同的应用场景下,对比不同算法的效果。通常的做法是,按照PV或UV随机分配流量到算法上,计算算法的CTR或转化率进行对比。为了表述简单,我们假设参与对比的算法有两个,比较的指标是CTR。这里面的关键细节有两个:1. 如何划分浏览?2. 如何计算CTR。下面从这两个角度讨论可能出现的问题。

定义1:按PV划分流量,是指对任意一个访问,按照预先设定的比例,随机分配到一个算法中。需要注意的是,在这种情况下,每个用户会被随机分配到一个算法中。

定义2:按UV划分流量,是指对任意一个访问,按照预先设定的比例,对用户ID进行哈希和取模等操作,将流量划分到一个算法中。在这种情况下,每个用户有一个确定的算法与之对应。

定义3:按PV计算CTR,CTRPV(A)=A算法下用户点击的PV数A算法下总的PV数

定义4:按UV计算CTR,CTRUV(A)=A算法下有点击的用户数A算法下总的用户数

场景1:按PV划分流量,按PV计算CTR。

这种情况比较简单,在忽略用户对算法疲劳度(通常是合理的)的情况下,这种测量对比方案比较合理。

场景2:按PV划分流量,按UV计算CTR。

这个方案可能一些有经验的同学会觉得不行,另一些同学会觉得问题也不大。事实上,这会导致严重的测量误差,我们用AA测试的效果来分析一下。假定流量分成两个桶,第1个桶占比是p1,第2个桶占比为p2,且p1+p2=1。设该算法的PV的转化率(CTR)为r。

这里需要分为两种情况来讨论:

第1种情况:假设产生无论实际的转化在哪个桶中产生,将转化率计算到该用户到达的每个桶中。

对一个访问次数为K=k的用户,其整体转化率为rk=1−(1−r)k,而他出现在第i个桶的概率为P(bi∈B|K=k)=1−(1−pi)k,i=1,2,其中bi∈B表示用户出现在第i个桶中。

从而第i个桶按UV计算的CTR为:

E[R|bi∈B]=∑∞k=1rkP(K=k|bi∈B)=∑∞k=1rkP(bi∈B|K=k)P(K=k)P(bi∈B)=∑∞k=1rkP(bi∈B|K=k)P(K=k)∑∞k=1P(bi∈B|K=k)P(K=k)

设P(K=k)=αk,那么:

E[R|bi∈B]=∑∞k=1(1−(1−r)k)(1−(1−pi)k)αk∑∞k=1(1−(1−pi)k)αk

可以证明,pi<pj⟹E[R|bi∈B]>E[R|bj∈B]。

距离来说明这一点,设p1=0.1,p2=0.9,α1=0.5,α2=0.35,α3=0.15,r=0.015,即流量比为1:9,访问次数分别为1,2,3的人比例为10:7:3,按PV算的CTR是0.015。这种情况下,第1个桶按UV算的转化率为:E[R|b1∈B]=0.0288,第2个桶按UV算的转化率为:E[R|b2∈B]=0.0251。即第1个桶比第2个桶AA测试下按UV统计到的效果好15.11%。也就是说,大桶在该场景下的测试指标比较亏。

不同分桶比例下的AA测试的对比:

小桶流量小桶CTR大桶CTR小桶领先比例
0.01000.02920.02460.1871
0.02000.02920.02470.1831
0.05000.02910.02480.1710
0.10000.02880.02510.1511
0.20000.02840.02550.1117
0.30000.02790.02600.0734
0.40000.02750.02650.0361
0.50000.02700.02700
结论:如果按PV划分流量,按UV计算转化率,无论交易发生在哪个桶中,将转化率计算入该用户到达的每个桶中,大桶在该场景下的测试指标比较亏。直观的理解是,这种情况下,小桶从大桶的推荐效果中“沾光”要大于大桶从小桶的推荐效果中“沾光”。

第2种情况:转化发生在哪个桶,就将转化率算入该桶中

相对第1种情况,这种情况会更普遍一些,因为它看上去“更公平”,而事实上却远非如此。仍然借用第1种情况下的符号,可以得到UV转化率和PV转化率的关系如下:

E[R|bi∈B]=∑∞k=1∑kl=1(1−(1−r)l)(kl)pli(1−pi)k−lαk∑∞k=1∑kl=1(kl)pli(1−pi)k−lαk

可以证明,pi<pj⟹E[R|bi∈B]<E[R|bj∈B]。

沿用情况1的各种数据,这种情况下,第1个桶按UV算的转化率为E[R|b1∈B]=0.0157,第2个桶按UV算的转化率为E[R|b2∈B]=0.0234。即第2个桶比第1个桶AA测试下按UV统计到的效果好48.59%。也就是说,小桶在该场景下的测试指标比较亏,而且相对于第一种情况不公平更加严重。

不同分桶比例下的AA测试的对比:

小桶流量小桶CTR大桶CTR小桶领先比例
0.01000.01510.02440.6222
0.02000.01510.02430.6065
0.05000.01540.02400.5603
0.10000.01570.02340.4859
0.20000.01650.02220.3467
0.30000.01730.02120.2199
0.40000.01820.02010.1046
0.50000.01920.01920
结论:如果按PV划分流量,按UV计算转化率,交易发生在哪个桶中,就将转化率计算入该桶中,小桶在该场景下的测试指标比较亏。直观的理解是,这种情况下,小桶中用户行为次数比大桶中少,因此转化率低。

场景3:按UV划分流量,按PV计算CTR。

这种情况下每个用户会被划分到确定的算法处理,如果算法分配到的用户比较少,而用户行为差异比较大的情况下,小流量算法的指标会受到一定干扰。但对于大多数情况下也可以合理的忽略这种因素,方案比较合理。

场景4:按UV划分流量,按UV计算CTR。

这种情况下每个用户被划分到确定的算法处理,参考场景3的结论,方案比较合理。

为什么会造成这样的问题呢?从本质上讲,这是由于AB测试中不同的桶之间的流量会存在交集,这个交集部分的流量无论怎么统计,都可能会产生影响和问题,尤其是统计指标是交集元素的ID(比如用户ID,cookie等)时,问题更严重。只有从根本上杜绝AB测试中的交集,使各个测试桶之间互不影响。

可能有人会对场景2中的流量想到一种这样的分配方案,来解决两个测试桶流量不平衡的问题。比如将其中的90%的流量分为两个部分,一个为80%的流量桶(第3个桶,A算法)不参与测试,一个为10%的流量桶(第2个桶,A算法),再加上另外一个10%的流量桶(第1个桶,B算法)。此时A、B两个算法的测试桶中的流量大小相等,是不是就公平了呢?

No!原因在于,第2个桶和第1个桶是同一个算法,给用户展示的结果更接近,因此第1个桶虽然不参与测试,但仍然会形成干扰,这种干扰在不同的效果统计方式下表现为不同的测试偏差。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法