算法效果的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
由于 f(x,k)=1−(1−x)k 在 0<x<1和1≤k<∞ 上关于 x 和 k 单调递增,那么对于较大的 pi , 其转化率为 1−(1−r)k 的用户的份额 (1−(1−pi)k)αk 随着 k 的增大,转化率升高,且小 pi 的份额 (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测试的结果对比不难得到AB测试的结论:如果按PV划分流量,按UV计算转化率,无论交易发生在哪个桶中,将转化率计算入该用户到达的每个桶中,大桶在该场景下的测试指标比较亏。直观的理解是,这种情况下,小桶从大桶的推荐效果中“沾光”要大于大桶从小桶的推荐效果中“沾光”。
第2种情况:转化发生在哪个桶,就将转化率算入该桶中。
相对第1种情况,这种情况会更普遍一些。仍然借用第1种情况下的符号:
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
沿用情况1的各种数据,这种情况下,第1个桶按UV算的转化率为
E[R|b1∈B]=0.0157
第2个桶按UV算的转化率为:
E[R|b2∈B]=0.0234
即第2个桶比第1个桶AA测试下按UV统计到的效果好48.59%。也就是说,小桶在该场景下的测试指标比较亏。
结论是,如果按PV划分流量,按UV计算转化率,交易发生在哪个桶中,就将转化率计算入该桶中,小桶在该场景下的测试指标比较亏。直观的理解是,这种情况下,小桶中用户行为次数比大桶中少,因此转化率低。
场景3:按UV划分流量,按PV计算CTR。
这种情况下每个用户会被划分到确定的算法处理,如果算法分配到的用户比较少,而用户行为差异比较大的情况下,小流量算法的指标会受到一定干扰。但对于大多数情况下也可以合理的忽略这种因素,方案比较合理。
场景4:按UV划分流量,按UV计算CTR。
这种情况下每个用户被划分到确定的算法处理,参考场景3的结论,方案比较合理。
算法效果的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
由于 f(x,k)=1−(1−x)k 在 0<x<1和1≤k<∞ 上关于 x 和 k 单调递增,那么对于较大的 pi , 其转化率为 1−(1−r)k 的用户的份额 (1−(1−pi)k)αk 随着 k 的增大,转化率升高,且小 pi 的份额 (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测试的结果对比不难得到AB测试的结论:如果按PV划分流量,按UV计算转化率,无论交易发生在哪个桶中,将转化率计算入该用户到达的每个桶中,大桶在该场景下的测试指标比较亏。直观的理解是,这种情况下,小桶从大桶的推荐效果中“沾光”要大于大桶从小桶的推荐效果中“沾光”。
第2种情况:转化发生在哪个桶,就将转化率算入该桶中。
相对第1种情况,这种情况会更普遍一些。仍然借用第1种情况下的符号:
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
沿用情况1的各种数据,这种情况下,第1个桶按UV算的转化率为
E[R|b1∈B]=0.0157
第2个桶按UV算的转化率为:
E[R|b2∈B]=0.0234
即第2个桶比第1个桶AA测试下按UV统计到的效果好48.59%。也就是说,小桶在该场景下的测试指标比较亏。
结论是,如果按PV划分流量,按UV计算转化率,交易发生在哪个桶中,就将转化率计算入该桶中,小桶在该场景下的测试指标比较亏。直观的理解是,这种情况下,小桶中用户行为次数比大桶中少,因此转化率低。
场景3:按UV划分流量,按PV计算CTR。
这种情况下每个用户会被划分到确定的算法处理,如果算法分配到的用户比较少,而用户行为差异比较大的情况下,小流量算法的指标会受到一定干扰。但对于大多数情况下也可以合理的忽略这种因素,方案比较合理。
场景4:按UV划分流量,按UV计算CTR。
这种情况下每个用户被划分到确定的算法处理,参考场景3的结论,方案比较合理。
Author:潘多拉盒子