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的原因:

  1. 实验涉及重定向网页等:如果treatment group的treatment是要通过再点击一个链接,导向一个新的界面,才能做的,那么由于用户们比较懒,可能就因此放弃了继续做下去,这样treatment group的sample size就会在实验过程中意外减小了;另一方面,如果部分用户把这个重定向的链接发给他们的朋友,那么这个treatment group的sample size就会意外扩大了。所以实验中要尽量避免这种重定向界面的出现!或者至少要使control group和treatment group关于重定向问题付出同样的努力才行!
  2. 数据清洗时,对于control group和treatment group的数据,drop掉的数量相差太多,也会导致最后的SRM。
  3. 当前实验会使treatment group的人的属性发生变化,从而随后被drop掉,导致treatment group size变小。比如一项实验是针对不活跃用户进行的,但是该实验却意外地使实验组的一部分不活跃用户变成了活跃用户,那么他们就不符合条件了,会在随后被drop掉。
  4. 因为实验有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相关推荐

  1. 一种验证Linux kernel是否可用的Sanity Check方法

    本例子介绍对linux kernel进行sanity check的一种方式.由于kernel在启动时,将首先执行initrd,因此可构造一个程序作为initrd,在kernel启动时检查initrd程 ...

  2. 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\ ...

  3. sanity check

    sanity check,在计算机术语中,翻译为"完整性检查",通常用在对输入数据的检查. 如: struct kmem_cache * kmem_cache_create (co ...

  4. Configure: error: C preprocessor “/lib/cpp“ fails sanity check

    Configure: error: C preprocessor "/lib/cpp" fails sanity check mac 安装软件时遇到问题 gcc 和 cpp fai ...

  5. fails sanity check错误的解决方法

    fails sanity check的解决方法 问题原因:编译器缺乏必要的package: 解决办法:运行yum install glibc-headers gcc-c++即可解决

  6. runtimeError: package fails to pass a sanity check解决方法

    目录 import pandas运行时报错 解决办法 import pandas运行时报错 raise RuntimeError(msg.format(__file__)) from None Run ...

  7. mysql2004报错_mysqlbinlog备份时候报错Sanity check failed

    今天在复习mysql的二进制日志时候,发现出了点问题,如下:mysqlbinlog -uroot -proot /usr/local/mysql/data/node1.000004 --start-d ...

  8. error: C++ preprocessor “/lib/cpp“ fails sanity check错误解决方法

    error: C++ preprocessor "/lib/cpp" fails sanity check错误解决方法 参考文章: (1)error: C++ preprocess ...

  9. Python 使用numpy报错:runtimeError: package fails to pass a sanity check解决方法

    Python中使用numpy和pandas时报错:RuntimeError: The current Numpy installation ('...\venv\lib\site-packages\n ...

最新文章

  1. 分享Kali Linux 2016.2第49周镜像文件
  2. shell getopts
  3. 泰勒及洛朗展开学习笔记
  4. Mac下Apache使用
  5. C语言如何用fopen创建可读写txt
  6. Ext中extend
  7. 图片处理——使用NDK添加文字和图片水印
  8. 我要偷偷的学Python,然后惊呆所有人(第六天)
  9. 微处理器常见问题及解答
  10. 操作系统实验七 地址映射与共享(哈工大李治军)
  11. Git教程及常用命令
  12. Quantopian教程源码解析及实战
  13. 一天测血压的最佳时间_一天中什么时间测量血压最准?心血管医生告诉您最佳时间...
  14. KNN(四)--FLANN库介绍及其应用
  15. vue 如何实现多页面应用(简单版)
  16. Mac OS X 系统更新升级包下载后的存储位置
  17. [年终总结] 2023,希望一切都能够好起来
  18. 编程入门:java基础
  19. NABCD---生活日历
  20. 从0开始学web-day2

热门文章

  1. newman执行测试_Postman+Newman执行自动化测试
  2. 【FinE】在险价值(VaR)计算
  3. BAPI创建CLASS和CHARACTERISTICS
  4. MMX, SSE, SSE2
  5. 在Mac OS X苹果lion系统上制作USB启动盘
  6. 亮点在后面,完整得恐怖!(转自豆瓣)
  7. PMP备考错题集-作业习题二
  8. HAUTOJ 1262魔法宝石 优先队列
  9. Typora配置图床
  10. 鸿蒙开发(2)---Button组件