浅谈A/B测试里常见的辛普森悖论,企业决策者必看
A/B测试背后有着高深的统计学知识,今天我们就来讲讲常见的辛普森悖论。
辛普森悖论 (Simpson’s Paradox) 是英国统计学家 E.H.辛普森 (E.H.Simpson) 于1951年提出的悖论,即在某个条件下的两组数据,在分别讨论时都会满足某种性质,可是一旦合并起来进行考虑,却可能导致相反的结论。
举一个辛普森悖论的简单小例子:一个大学里有商学院和法学院两个学院。这两个学院的女生都抱怨“男生录取率比女生录取率高”,有性别歧视。但是学校做总录取率统计,却发现总体来说女生录取率远远高于男生录取率!
商学院男生录取率75%高于女生录取率49%,法学院男生录取率10%也高于女生录取率5%,但是总计来说男生录取率只有21%,只有女生录取率42%的一半。

为什么两个学院都是男生录取率高于女生录取率,但是加起来男生录取率却不如女生录取率呢?主要是因为这两个学院男女比例很不一样,具体的统计学原理我们后面会详细分析。
这个诡异 (Counter intuitive) 的现象在现实生活中经常被忽略,毕竟只是一个统计学现象,一般情况下不会影响到我们的行动。但是对于使用科学的 A/B 测试进行试验的企业决策者来说,如果不了解辛普森悖论,就可能会错误的设计试验,盲目的解读试验结论,从而对决策产生不利影响。
我们用一个真实的医学 A/B 测试案例来说明这个问题。这是一个肾结石手术疗法的 A/B 测试结果:

看上去无论是对于大型结石还是小型结石,A 疗法都比 B 疗法的疗效好。但是总计而言,似乎 B 疗法比 A 疗法要好。
这个 A/B 测试的结论是有巨大问题的,无论是从细分结果看,还是从总计结果看,都无法真正判断哪个疗法好。
那么,问题出在哪里呢?这个 A/B 测试的两个试验组的病历选取有问题,都不具有足够的代表性。参与试验的医生人为的制造了两个本身不相似的试验组,因为医生似乎觉得病情较重的患者更适合 A 疗法,病情较轻的患者更适合 B 疗法,所以下意识的在随机分配患者的时候,让 A 组里面大结石病历要多,而 B 组里面小结石病历要多。
更重要的问题是,很有可能影响患者康复率的最重要因素并不是疗法的选择,而是病情的轻重!换句话说,A 疗法之所以看上去不如 B 疗法,主要是因为 A 组病人里重病患者多,并不是因为 A 组病人采用 A 疗法。
所以,这一组不成功的 A/B 测试,问题出在试验流量分割的不科学,主要是因为流量分割忽略了一个重要的“隐藏因素”,也就是病情轻重。正确的试验实施方案,两组试验患者里,重病患者的比例应该保持一致。

因为很多人容易忽略辛普森悖论,以至于有人可以专门利用这个方法来投机取巧。举个例子,比100场球赛以总胜率评价好坏。取巧的人专找高手挑战20场,胜1场,另外80场则找平手挑战,胜40场,结果胜率41%;认真的人则专挑高手挑战80场而胜8场,而剩下20场平手打个全胜,结果胜率为28%,比41%小很多。但仔细观察挑战对象,后者明显更有实力。
从这几个辛普森悖论的例子出发,联想到我们互联网产品运营的实践,一个非常常见的误判例子是这样的:拿1%用户跑了一个试验,发现试验版本购买率比对照版本高,就说试验版本更好,我们要发布试验版本。其实,可能只是我们的试验组里圈中了一些爱购买的用户而已。最后发布试验版本,反而可能降低用户体验,甚至可能造成用户留存和营收数额的下降。
那么,如何才能在 A/B 测试的设计、实施,以及分析的时候,规避辛普森悖论造成的各种大坑呢?
最重要的一点是,要得到科学可信的 A/B 测试试验结果,就必须合理的进行正确的流量分割,保证试验组和对照组里的用户特征是一致的,并且都具有代表性,可以代表总体用户特征。这个问题也一直是吆喝科技的 AppAdhoc A/B Testing 云服务的云端系统着力研究和解决的问题。
本文作者:吆喝科技创始人及CEO 王晔
授权转载自吆喝科技博客
浅谈A/B测试里常见的辛普森悖论,企业决策者必看的更多相关文章
- [原创]浅谈H5页面测试介绍
[原创]浅谈H5页面测试介绍 目前移动互联网非常火热,除了各种App,H5也是非常热,由于H5跨平台,且版本更新容易,做为引流或获客是非常好的一种简单低成本平台:今天来谈谈H5页面测试都要测试什么? ...
- 转:浅谈手机app测试注意点
现在我们测试时,开发会先在本地机上打好测试包,自己安装,轮完一轮,开发修改好后,再打一个包.以下是功能测试时需要注意的点: 1.登录 ●登录用户名和密码错误时,界面有提示信息 ●用户主动退出登录后,下 ...
- 浅谈java中源码常见的几个关键字(native,strictfp,transient,volatile)
最近看源码总发现一些没见过的关键字,今天就来整理一下native,strictfp,transient,volatile native 本地 native是与C++联合开发的时候用的!java自己开发 ...
- 浅谈扩展欧几里得[exgcd] By cellur925
关于扩展欧几里得从寒假时就很迷,抄题解过了同余方程,但是原理并不理解. 今天终于把坑填上了qwq. 由于本人太菜,不会用markdown,所以这篇总结是手写的(什么).(字丑不要嫌弃嘛) ****** ...
- 浅谈XML涉及到的常见技术(编写+解析)
xml:即可扩展标记语言,用于描述关系型数据,也经常用作软件的配置文件: 1,编写xml文档一般基于一个约束文档,该文档用于规定xml的书写规范,常用的约束技术有 (1)XML ...
- 浅谈MSF渗透测试
在渗透过程中,MSF漏洞利用神器是不可或缺的.更何况它是一个免费的.可下载的框架,通过它可以很容易地获取.开发并对计算机软件漏洞实施攻击.它本身附带数百个已知软件漏洞的专业级漏洞攻击工具.是信息收集. ...
- 浅谈TCP/IP(new 常见面试问题)
1. TCP/IP重传机制,如何保证消息读到一个完整内容再反序列化 2. TCP四次回收比三次握手多了什么操作,什么时候会进入Time_await状态 3.
- Intellij IDEA 的使用(创建项目、导入项目、同时部署多个项目、JRebel)等常见eclipse、myeclipse换idea必看
第一篇:Intellij IDEA 的使用 1.黑色主题 中文乱码修改 2.WEB项目的部署 以及自动编译 3.多项目的同时部署 4.相关插件提高工作效率 1.JRebel插件 实现热部署 2.Tas ...
- 浅谈Windows环境下DOS及MS-DOS以及常见一些命令的介绍
浅谈Windows环境下DOS及MS-DOS以及常见一些命令的介绍 前记 自己是搞编程的,首先我是一个菜鸟,接触计算机这么久了,感觉很多计算机方面的技术和知识朦朦胧胧.模模糊糊,貌似有些贻笑大方了:所 ...
随机推荐
- debian/ubuntu 下ISE安装
1. planAhead无法打开的问题 原因: debian中使用dash,跟planAhead使用的bash略有不同 解决: 将/bin/sh 的链接从dash改为bash 2. FPGA Edit ...
- SSIS oracle 64位 数据源链接
新建数据源 提供程序选择:本机OLE DB ORACLE Provider For OLE DB 服务器名或文件名中选择Oracle Net Manager中配置好的服务名即可 填写账号,密码,测试, ...
- HTTP笔记整理(2)
四. http协议之请求 1.http请求由三部分组成,分别是:请求行(request line).请求报头(request header).请求正文(body) (1). 请求行:用来说明请求类 ...
- [转] 编译安装GCC
Linux下编写C/C++程序自然缺不了一个优秀的编译器,Linux下比较常见的自然是GCC了. 2015年GCC也出到了5.2.0版本,对于C++11/14也有了更好的支持了. 所以,今天我们就来说 ...
- 可在广域网部署运行的QQ高仿版 -- GG叽叽V1.8(源码)
距离的GG 1.0发布已经三周了,这三周内,我利用业余时间为GG增加了视频聊天的功能.个人觉得进展有些缓慢,主要是因为大多数时间都花在了UI上.由于本人不会PS,所以图片素材都是从网上一个一个搜下来的 ...
- 团队项目——站立会议DAY9
第九次站立会议记录: 参会人员:张靖颜,钟灵毓秀,何玥,赵莹,王梓萱 项目进展: 1.张靖颜:部署总体战略,需求分析,反复运行程序并完善. 2.钟灵毓秀:近一步修改代码,并进行功能性的扩展,不断完善. ...
- ubuntu 安装 axel
Axel 通过打开多个 HTTP/FTP 连接来将一个文件进行分段下载,从而达到加速下载的目的.对于下载大文件,该工具将特别有用. 安装:sudo apt-get install axel 一般使用: ...
- python property
python property 在2.6版本中,添加了一种新的类成员函数的访问方式--property. 原型 class property([fget[, fset[, fdel[, doc]]]] ...
- [HIMCM暑期班]第1课:概述
作为这个系列的开始,我会把每一节课上过的内容,与同学们互动后发现他们的闪光点记录下来,以后其他要准备该比赛的人借鉴和参考. 第一节课是概述,主要讲什么是数学建模,还有建模可以帮助我们做什么.举了三个例 ...
- IOS 基础-define、const、extern、全局变量
这里介绍一下define.const.extern的用法.优劣以及要注意的地方. 1.define 宏define是定义一个变量,没有类型信息.define定义的常量在内存中有若干个拷贝. defin ...