(转载请注明原创于潘多拉盒子)

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

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

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

定义3:按PV计算CTR,$CTR_{PV}(A)=\frac{A算法下用户点击的PV数}{A算法下总的PV数}$

定义4:按UV计算CTR,$CTR_{UV}(A)=\frac{A算法下有点击的用户数}{A算法下总的用户数}$

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

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

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

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

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

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

对一个访问次数为$K=k$的用户,其整体转化率为$r_k=1-(1-r)^k$,而他出现在第i个桶的概率为$P(b_i \in B|K=k)=1-(1-p_i)^k, i=1,2$,其中$b_i \in B$表示用户出现在第$i$个桶中。

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

$E[R|b_i \in B]=\sum_{k=1}^{\infty}{r_k P(K=k|b_i \in B)}=\sum_{k=1}^{\infty}\frac{r_k P(b_i \in B|K=k)P(K=k)}{P(b_i \in B)}=\frac{\sum_{k=1}^{\infty}{r_k P(b_i \in B|K=k)P(K=k)}}{\sum_{k=1}^{\infty}{P(b_i \in B|K=k)P(K=k)}}$

设$P(K=k)=\alpha_k$,那么:

$E[R|b_i \in B]=\frac{\sum_{k=1}^{\infty}(1-(1-r)^k)(1-(1-p_i)^k)\alpha_k}{\sum_{k=1}^{\infty}(1-(1-p_i)^k)\alpha_k}$

可以证明,$p_i<p_j \implies E[R|b_i \in B]>E[R|b_j \in B]$。

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

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

    小桶流量   小桶CTR   大桶CTR   小桶领先比例
0.0100 0.0292 0.0246 0.1871
0.0200 0.0292 0.0247 0.1831
0.0500 0.0291 0.0248 0.1710
0.1000 0.0288 0.0251 0.1511
0.2000 0.0284 0.0255 0.1117
0.3000 0.0279 0.0260 0.0734
0.4000 0.0275 0.0265 0.0361
0.5000 0.0270 0.0270 0

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

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

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

$E[R|b_i \in B]=\frac{\sum_{k=1}^{\infty}{\sum_{l=1}^{k}(1-(1-r)^l){k \choose l}p_i^l(1-p_i)^{k-l}\alpha_k}}{\sum_{k=1}^{\infty}{\sum_{l=1}^{k}{k \choose l}p_i^l(1-p_i)^{k-l}\alpha_k}}$

可以证明,$p_i<p_j \implies E[R|b_i \in B]<E[R|b_j \in B]$。

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

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

    小桶流量  小桶CTR    大桶CTR  大桶领先比例
0.0100 0.0151 0.0244 0.6222
0.0200 0.0151 0.0243 0.6065
0.0500 0.0154 0.0240 0.5603
0.1000 0.0157 0.0234 0.4859
0.2000 0.0165 0.0222 0.3467
0.3000 0.0173 0.0212 0.2199
0.4000 0.0182 0.0201 0.1046
0.5000 0.0192 0.0192 0

结论:如果按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个桶虽然不参与测试,但仍然会形成干扰,这种干扰在不同的效果统计方式下表现为不同的测试偏差。

算法效果AB测试中的PV-UV不对称性的更多相关文章

  1. 基于hash的AB测试

    AB测试 为同一个目标,设计两种方案,将两种方案随机投放市场中,让组成成分相同(相似)用户去随机体验两种方案之一,根据观测结果,判断哪个方案效果更好. 基于hash的AB测试 具体的实现方法为: 在A ...

  2. 4星|《助推(实践版)》:英国政府用AB测试检验政策效果的经验

    助推:小行动如何推动大变革(实践版)(诺贝尔经济学奖得主理查德•塞勒的助推实践) 作者作为学者说服英国政府实施助推策略的经过,提到一些具体主推策略. 所谓的助推,很像IT业流行的AB测试,对政策的执行 ...

  3. 014 在Spark中完成PV与UV的计算,重在源代码

    1.代码 object LogPVAndUV{ def main(args:Array[String]):Unit={ val conf=new SparkConf() .setMaster(&quo ...

  4. 测试SDWebImage淡入淡出效果在UITableView中的重用显示问题

    测试SDWebImage淡入淡出效果在UITableView中的重用显示问题 这个是在上一篇教程的基础上所添加的测试环节! 效果图(从效果图中看是没有任何重用问题的): 源码: ImageCell.h ...

  5. 多臂机测试, AB测试

    bandit  强盗,土匪:恶棍:敲诈者 ['bændɪt] 多臂机 multi-armed bandit MAB  简写. one-arm bandit   tiger ji 是一种自动AB测试的方 ...

  6. 网易郑栋:数据采集与分析的那些事——从数据埋点到AB测试

    本文由  网易云发布. 4月8日晚,DTalk邀请到了网易互联网分析产品.可视化 BI 产品的负责人—郑栋老师,进行了一次关于<网易郑栋:数据采集与分析的那些事第一弹: 数据篇>的主题分享 ...

  7. 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等

    有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 版权声明:本文为博主原创文章,未经博主允许不得转载. 此文是本人工作中碰到的,随时记下来的零散概念,特此整理一下. ...

  8. Apache 的ab测试

    <!-- 博主所有文章仅是作为自己的笔记 如有不足 请见谅--> Apache的ab测试  和  ab测试 不是一个东西(百度 ab测试可以了解) 网站性能压力测试是服务器网站性能调优过程 ...

  9. 日志分析_统计每日各时段的的PV,UV

    第一步: 需求分析 需要哪些字段(时间:每一天,各个时段,id,url,guid,tracTime) 需要分区为天/时 PV(统计记录数) UV(guid去重) 第二步: 实施步骤 建Hive表,表列 ...

随机推荐

  1. Darwin Streaming Server Relay Setting

    安装完Darwin Streaming Server,就可以使用VLC通过RTSP协议播放流媒体文件了.但是我现在有一个需求,需要将一台DSS(假设为A机)上的媒体文件发送到另一台DSS(假设为B机) ...

  2. javaScript的函数(Function)对象的声明(@包括函数声明和函数表达式)

    写作缘由: 平时再用js写函数的时候,一般都是以惯例 function fn () {} 的方式来声明一个函数,在阅读一些优秀插件的时候又不免见到 var fn = function () {} 这种 ...

  3. Using Open Source Static Libraries in Xcode 4

    Using Open Source Static Libraries in Xcode 4 Xcode 4.0.1 allows us to more easily create and use th ...

  4. YUV采样及存储格式

    YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值:而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素 ...

  5. 一个可序列化的C#对象,如何转成一个XML格式的文件或字符串【转】

    原文:http://blog.csdn.net/otong/article/details/7894059 序列化或反序列化成一个字符串: 方法一: 序列化: public static string ...

  6. jedis入门实例

    在使用传统的关系数据库,我们都需要依赖一个所谓的实现了jdbc规范的驱动程序来连接数据库,这些驱动程序由各大数据库厂商提供.这些驱动就是jar包,里面就是封装了对数据库的通信协议,我们通过简单的调用就 ...

  7. convert source code files to pdf format in python

    import os import sys def find_file(root_dir, type): dirs_pool = [root_dir] dest_pool = [] def scan_d ...

  8. bzoj 1537 [POI2005]Aut- The Bus(DP+BIT)

    [题意] 顺序经过k个点,求获得的最大权值和. [思路] 设f[i]表示到第i个点,则有转移式: f[i]=min{ f[j]+w[i] } x[j]<=x[i],y[j]<=y[i] 满 ...

  9. 多元线性回归(Linear Regression with multiple variables)与最小二乘(least squat)

    1.线性回归介绍 X指训练数据的feature,beta指待估计得参数. 详细见http://zh.wikipedia.org/wiki/%E4%B8%80%E8%88%AC%E7%BA%BF%E6% ...

  10. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇06:计分》

    6.计分 计分概述: 分值计量直接反应玩家在游戏中获得的成就感.因此,计分系统在游戏中显得尤为重要,有的反应在直接获取的分数上,有的反应在杀敌数量上等. 计分原理: 原理图,如图6-1所示. 图6-1 ...