算法效果AB测试中的PV-UV不对称性
(转载请注明原创于潘多拉盒子)
算法效果的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不对称性的更多相关文章
- 基于hash的AB测试
AB测试 为同一个目标,设计两种方案,将两种方案随机投放市场中,让组成成分相同(相似)用户去随机体验两种方案之一,根据观测结果,判断哪个方案效果更好. 基于hash的AB测试 具体的实现方法为: 在A ...
- 4星|《助推(实践版)》:英国政府用AB测试检验政策效果的经验
助推:小行动如何推动大变革(实践版)(诺贝尔经济学奖得主理查德•塞勒的助推实践) 作者作为学者说服英国政府实施助推策略的经过,提到一些具体主推策略. 所谓的助推,很像IT业流行的AB测试,对政策的执行 ...
- 014 在Spark中完成PV与UV的计算,重在源代码
1.代码 object LogPVAndUV{ def main(args:Array[String]):Unit={ val conf=new SparkConf() .setMaster(&quo ...
- 测试SDWebImage淡入淡出效果在UITableView中的重用显示问题
测试SDWebImage淡入淡出效果在UITableView中的重用显示问题 这个是在上一篇教程的基础上所添加的测试环节! 效果图(从效果图中看是没有任何重用问题的): 源码: ImageCell.h ...
- 多臂机测试, AB测试
bandit 强盗,土匪:恶棍:敲诈者 ['bændɪt] 多臂机 multi-armed bandit MAB 简写. one-arm bandit tiger ji 是一种自动AB测试的方 ...
- 网易郑栋:数据采集与分析的那些事——从数据埋点到AB测试
本文由 网易云发布. 4月8日晚,DTalk邀请到了网易互联网分析产品.可视化 BI 产品的负责人—郑栋老师,进行了一次关于<网易郑栋:数据采集与分析的那些事第一弹: 数据篇>的主题分享 ...
- 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等
有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 版权声明:本文为博主原创文章,未经博主允许不得转载. 此文是本人工作中碰到的,随时记下来的零散概念,特此整理一下. ...
- Apache 的ab测试
<!-- 博主所有文章仅是作为自己的笔记 如有不足 请见谅--> Apache的ab测试 和 ab测试 不是一个东西(百度 ab测试可以了解) 网站性能压力测试是服务器网站性能调优过程 ...
- 日志分析_统计每日各时段的的PV,UV
第一步: 需求分析 需要哪些字段(时间:每一天,各个时段,id,url,guid,tracTime) 需要分区为天/时 PV(统计记录数) UV(guid去重) 第二步: 实施步骤 建Hive表,表列 ...
随机推荐
- PS流格式
概念: 将具有共同时间基准的一个或多个PES组合(复合)而成的单一的数据流称为节目流(Program Stream). ES是直接从编码器出来的数据流,可以是编码过的视频数据流,音频数据流,或其他编码 ...
- plsql developer 使用技巧
plsql developer 使用技巧 Oracle数据库相信已成为很多企业构建自身关键业务的重要后台支撑,也是众多开发人员常常采用的后台.但Oracle自己提供的一套客户端工具不是很好用,极大的影 ...
- ViewPager设置 缓存个数、页卡间距、数据更新
在使用ViewPager常用设置 1)mViewPager.setOffscreenPageLimit(2);//设置缓存view 的个数(实际有3个,缓存2个+正在显示的1个)2)mViewPage ...
- ajax-Ajax试题
ylbtech-doc:ajax-Ajax试题 Ajax 1.A,Ajax试题返回顶部 001.{Ajax题目}使用Ajax可带来便捷有()(选择3项) A)减轻服务器的负担 B) ...
- DBHelper (支持事务与数据库变更) z
using System; using System.Data; using System.Data.Common; using Project.BaseFramework; using System ...
- 使用Redis的理由
Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型.Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上:Re ...
- PHP Module中获取$_GET/$_POST/$_COOKIE的方法研究
假设要获取$_GET['c']; 首先,先介绍下http_globals; 1.http_globals,定义在php_globals.h中: zval * http_globals[6]; 其中的索 ...
- 【STL】帮你复习STL泛型算法 一
STL泛型算法 #include <iostream> #include <vector> #include <algorithm> #include <it ...
- LeetCode题解——Palindrome Number
题目: 判断一个数字是不是回文数字,即最高位与最低位相同,次高位与次低位相同,... 解法: 求出数字的位数,然后依次求商和求余判断是否相等. 代码: class Solution { public: ...
- bzoj 2002 [Hnoi2010]Bounce 弹飞绵羊(LCT)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2002 [题意] 给定n个数的序列,i可以跳到i+k[i],需要能够修改k并可以查询跳出 ...