Sanity Check: SRM, AA test
Sanity Check
是实验后第一件要做的事,来保证实验进行地正确(主要在randomization;internal validity方面)。主要由两方面组成:SRM(sample ratio mismatch)(保证randomization没问题),AAtest(保证和实验treatment无关的所有其他变量在各组之间应该是statistically indifferent的)。
SRM
我们实验前分配好了control组和treatment组的sample size,但实验后清洗完数据我们发现,sample ratio(control group sample size/treatment group sample size) 我们预先设计的那个比例。这时就是发生了SRM,它说明实验的randomizatioin或数据收集过程出了差错,我们应立即停止实验来纠正这个错误,否则得到的结果就是不准确的。
产生SRM的原因:
- 实验涉及重定向网页等:如果treatment group的treatment是要通过再点击一个链接,导向一个新的界面,才能做的,那么由于用户们比较懒,可能就因此放弃了继续做下去,这样treatment group的sample size就会在实验过程中意外减小了;另一方面,如果部分用户把这个重定向的链接发给他们的朋友,那么这个treatment group的sample size就会意外扩大了。所以实验中要尽量避免这种重定向界面的出现!或者至少要使control group和treatment group关于重定向问题付出同样的努力才行!
- 数据清洗时,对于control group和treatment group的数据,drop掉的数量相差太多,也会导致最后的SRM。
- 当前实验会使treatment group的人的属性发生变化,从而随后被drop掉,导致treatment group size变小。比如一项实验是针对不活跃用户进行的,但是该实验却意外地使实验组的一部分不活跃用户变成了活跃用户,那么他们就不符合条件了,会在随后被drop掉。
- 因为实验有bug而导致SRM:比如实验过程中,实验组出现了一个很严重的bug,修复过后继续实验,但这个bug已经使实验组体验很不好了,因而一部分人会drop,所以treatment group size就不可避免地变小了。
通过数据检验是否出现SRM:
H0: the observed proportion = the expected proportion (sample size proportion)
H1: the observed proportion the expected proportion
有两种方式:t-test计算p-value;chi-square test计算p-value
假设最后观察到的数据是这样的:
由于t值计算公式: (假设该实验服从伯努利分布)
在excel中的t-test和chi-square test计算过程如下:
所以得到这两种p-value全都远<0.05, 可以拒绝H0,得出结论:observed proportion不等于expected proportion,出现了SRM,需要debug!
AAtest
随机split用户为两组,不过这两组完全一样,即B=A,所以就不是ABtest,而是AAtest了。完全一样是指,没有treatment,所以两组所有的variable应该statistically indifferent的。代码和Multiple Testing那个代码一模一样:
def multi_cm(x):x0 = df[df['expid'] == 0][x]x1 = df[df['expid'] == 1][x]x2 = df[df['expid'] == 2][x]cm01 = sms.CompareMeans(sms.DescrStatsW(x0), sms.DescrStatsW(x1))cm02 = sms.CompareMeans(sms.DescrStatsW(x0), sms.DescrStatsW(x2))cm12 = sms.CompareMeans(sms.DescrStatsW(x1), sms.DescrStatsW(x2))print(x)print(cm01.tconfint_diff(alpha=0.05, alternative='two-sided', usevar='pooled'))print(cm02.tconfint_diff(alpha=0.05, alternative='two-sided', usevar='pooled')) print(cm12.tconfint_diff(alpha=0.05, alternative='two-sided', usevar='pooled'))returnfor feature in df.columns[2:]:multi_cm(feature)
得到的结果样式是这样:
这组数据AAtest结果显示control和treatment的各个变量都是statistically indifferent的,因为CI都包含0。
AAtest还可以帮助确定sample size: 对于拥有80% statistical power和5%的significance level的实验来说,每个组的sample数量应为Power analysis 和 Type II error(选取多大的sample size)_小白的博客-CSDN博客
click0=np.mean(df.click)
var_click0=np.var(df.click) #population variance
delta = 0.05*click0 #effect sizesize = 16*var_click0/(delta**2)
print(size)
Sanity Check: SRM, AA test相关推荐
- 一种验证Linux kernel是否可用的Sanity Check方法
本例子介绍对linux kernel进行sanity check的一种方式.由于kernel在启动时,将首先执行initrd,因此可构造一个程序作为initrd,在kernel启动时检查initrd程 ...
- python报错:fails to pass a sanity check due to a bug in the windows runtime
Python报错(Anaconda或者PyCharm): RuntimeError: The current Numpy installation ('D:\Develop\anaconda\lib\ ...
- sanity check
sanity check,在计算机术语中,翻译为"完整性检查",通常用在对输入数据的检查. 如: struct kmem_cache * kmem_cache_create (co ...
- Configure: error: C preprocessor “/lib/cpp“ fails sanity check
Configure: error: C preprocessor "/lib/cpp" fails sanity check mac 安装软件时遇到问题 gcc 和 cpp fai ...
- fails sanity check错误的解决方法
fails sanity check的解决方法 问题原因:编译器缺乏必要的package: 解决办法:运行yum install glibc-headers gcc-c++即可解决
- runtimeError: package fails to pass a sanity check解决方法
目录 import pandas运行时报错 解决办法 import pandas运行时报错 raise RuntimeError(msg.format(__file__)) from None Run ...
- mysql2004报错_mysqlbinlog备份时候报错Sanity check failed
今天在复习mysql的二进制日志时候,发现出了点问题,如下:mysqlbinlog -uroot -proot /usr/local/mysql/data/node1.000004 --start-d ...
- error: C++ preprocessor “/lib/cpp“ fails sanity check错误解决方法
error: C++ preprocessor "/lib/cpp" fails sanity check错误解决方法 参考文章: (1)error: C++ preprocess ...
- Python 使用numpy报错:runtimeError: package fails to pass a sanity check解决方法
Python中使用numpy和pandas时报错:RuntimeError: The current Numpy installation ('...\venv\lib\site-packages\n ...
最新文章
- 分享Kali Linux 2016.2第49周镜像文件
- shell getopts
- 泰勒及洛朗展开学习笔记
- Mac下Apache使用
- C语言如何用fopen创建可读写txt
- Ext中extend
- 图片处理——使用NDK添加文字和图片水印
- 我要偷偷的学Python,然后惊呆所有人(第六天)
- 微处理器常见问题及解答
- 操作系统实验七 地址映射与共享(哈工大李治军)
- Git教程及常用命令
- Quantopian教程源码解析及实战
- 一天测血压的最佳时间_一天中什么时间测量血压最准?心血管医生告诉您最佳时间...
- KNN(四)--FLANN库介绍及其应用
- vue 如何实现多页面应用(简单版)
- Mac OS X 系统更新升级包下载后的存储位置
- [年终总结] 2023,希望一切都能够好起来
- 编程入门:java基础
- NABCD---生活日历
- 从0开始学web-day2