Fork me on GitHub

ABTest显著性计算

显著性计算(uv based)

这里以实验目标为提升CR(Conversion Rate)为例说明

名词解释

显著性: 显著:新版和老版的CR有明显差异,不显著: 新版和老版没有明显差异。
上升幅度:(新版CR-老版CR)/老版CR
功效: 一般功效(即power值)达到0.8, 我们认为样本量即实验UV充足,可下结论。

假设观察实验进行3天后,power=0.5<0.8,并且结果不显著,这时需要累计更多样本。 如果当 power 已达到 0.8 时,仍未显著,一般我们认为新版和老版的CR的确无明显差异。

AA校验:验证主测频道分流是否随机。

若两个 Control 版本之间的指标没有显著差异,则表明分流随机;反之,则需排查 Control 版本中是否存在异常数据;

AA异常也可能由于两个 control 版本,其中之一包含一些异常用户(订单数极高),而另外一个版本没有异常用户。

如何下结论

power 和样本量功能类似,达到样本量基本等同于 power 达到80%。power 与样本量计算相比,power 可以更多的利用实验本身的信息,而样本量主要使用频道的数据,计算时与实验设置分流等无关,仅实验剩余天数与实验相关。

所以这里我们结合power和显著性对实验的结果进行判断。这里以转化率CR为例。

  1. 如果 power 达到80%时,CR仍不显著, 说明此时实验新版与老版无显著差异,停止实验。
  2. 如果 power 未到达80%,CR不显著,说明此时样本量不充足,需继续实验,累计更多的用户。

以上均基于AA检验正常为前提。

如果AA异常,需查询原因,如果是AA中某一版本中有少数用户订单数极高,导致AA异常,剔除这种异常用户后重新计算AA Test的结果, 如果不再显著,AA正常。

严谨一点,再检查AB 的检验中(一般B<新版> vs C+D)是否存在同样问题,即某一版本出现一些异常用户(订单数极高的用户), 如果存在,剔除后重新计算显著性。

算法说明

显著性计算

ABtestsample

我们将指标提升的百分比定义为lift$lift=\frac{Treatment}{Control-1}$

如上图的示例结果图所示,CR 的 lift 估计值为:-0.79%, 区间(-1.55%,-0%). CR lift 的真实值以95%的可能性落在区间(-1.55%,-0%)内。由于区间未包括0,所以CR显著, 并且从数值上看是显著下降。说明新版的CR明显低于老版的CR.

具体计算方案,以国内酒店频道的CR例,假设:

  • 老版本每个用户的订单数X为:$x1,x_2,…,x{n_1}$,其中$n_1$为老版本的用户数,且有:$E[X] = u_1, Var(X) = \sigma_1^2$
  • 新版本每个用户的订单数Y为:$y1,y_2,…,y{n_2}$,其中$n_2$为新版本的用户数,且有:$E[Y] = u_2, Var(Y) = \sigma_2^2$
  • 尽管 X 和 Y 的分布不满足正态的假设,由大数定律得到,老版人均订单数$(CR_1)$和新版的人均订单数$(CR_2)$分别满足 $CR_1 \sim N(u_1, \frac{\sigma_1^2}{n_1})$ 和 $CR_2 \sim N(u_2, \frac{\sigma_2^2}{n_2})$ 的正态分布。人均订单数即 CR。

那么 lift 值的计算方案就如下:

Step1: 估计$u_1, u_2, \sigma_1^2, \sigma_2^2$
根据上述四个公式即可得到这四个统计量的估计值。

Step2:抽样产生 lift 的n(一般取10000)个随机数,$lift^i, i = 1, …, n$
由于$CR_1 ~ N(u_1,\frac{\sigma_1^2}{n_1}), CR_2 ~ N(u_2,\frac{\sigma_2^2}{n_2})$,那么结合 Step1 中的参数估计,就可以,

  • 产生满足$N(\hat u_1, \hat \sigma_1^2 / n_1)$分布的n个随机数,$CR_1^i, i = 1,2,…,n$
  • 产生满足$N(\hat u_2, \hat \sigma_2^2 / n_2)$分布的n个随机数,$CR_2^i, i = 1,2,…,n$

然后我们就可以计算:$lift^i = (CR_2^i - CR_1^i) / CR_1^i, i = 1,2,…,n$

Step3:计算 lift 的均值和区间(置信度90%)
lift 均值: $\sum_{i=1}^n lift^i / n$;
区间上界: $lift^i$ 的95%分位数;
区间下界: $lift^i$ 的5%分位数。

功效(power值)计算

其中:

  • $\alpha$ 是 Type I Error, 一般为0.05 或者0.1;
  • $\sigma_1^2$是老版订单数(或其他指标)的方差,$n_1$是老版的uv数;
  • $\sigma_2^2$是新版订单数(或其他指标)的方差,$n_2$是新版的uv数;
  • $\Delta = lift * u$中的 lift 是实际实验新版相对老板提升的百分比,一般取值为0.02或者0.04,这里设此目标值是为了固定,使用实际的会出现波动太乱的情况;
  • u 是老版的 CR (或者其他检验指标)。

示例:一下以某一次酒店排序实验为例,其 type I error = 0.05, lift = 0.02, 计算 CR 对应的 power。
$n_1$ = 老版用户数 = 22917; $n_2$ = 新版用户数 = 34389
$\hat u$ = 老版 CR 估计值 = 0.37474
$\hat \sigma_1^2$ = 老版订单数方差估计值 = 0.7188733
$\hat \sigma_2^2$ = 新版订单数方差估计值 = 0.721059

显著性计算(date based)

方法简述

当总体呈现正态分布且总体标准差未知,而且容量小于30,那么这时一切可能的样本平均数与总体平均数的离差统计量呈T分布。

该方法采用统计中的two sample t test, 检验两组数据的均值是否相等。

例如100个男生身高数据和100个女生身高数据,通过该方法可以检验男生的平均身高是否显著不等于女生的平均身高。

在报表中我们输入的两组数据,一组是一个版本每日的指标数据,另外一组是选择的另外一个版本对应的每日的指标数据。指标可以是任意数值型指标,比如UV数,点击率,订单数等等。

该方法我们只做两两间的比较。

实验举例

我们以一个首页改版为例,酒店预定入口发生变化是实验变量,我们想知道位置的改变是否会影响酒店的点击数量,分流比:新版:老版=50%:50%

我们需要拿到每天新老版本的点击UV数,通过统计检验,判断是否新版的点击UV数明显低于老版。

检验方法

假设x:新版每日UV数,y:老板每日UV数。计算如下统计量:

这里,

  • $\bar x$ 是新版均值,$\bar x = \sum_{i=1}^{n_1} \frac{x_i}{n_1}$, $n_1$ 是天数;
  • $\bar y$ 是老板均值,$\bar y = \sum_{i=1}^{n_1} \frac{y_i}{n_2}$, $n_2$ 是天数;
  • $s = \sqrt{[(n_1 - 1) s_1^2 + (n_2 - 1) s_2^2] / (n_1 + n_2 -2)}$;
  • $s1^2 = \sum{i=1}^{n1} (x_i - \bar x)^2 / (n_1 - 1), s_2^2 = \sum{i=1}^{n_2} (y_i - \bar y) / (n_2 - 1)$

若 $| t | > t{n_1 + n_2 - 2, 1 - \alpha / 2}$,则显著,否则不显著。$t{n_1 + n_2 - 2, 1 - \alpha / 2}$数值可通过查表或者计算器获取。

示例剖析

基于上述方案,我们对前面的例子进行计算有:
$\bar x = 7555.111, \bar y = 14935$
共有9天数据,所以$n_1 = n_2 = 9$

$s_1^2 = 1556811, s_2^2 = 335096.8, s = 972.6015$
t = (7555.111-14935) / 3890.406/$\sqrt{2/9}$ = -16.09612

查表或者计算机可得:$t{n_1 + n_2 - 2, 1 - \alpha / 2} = t{16,1 - \alpha / 2} = 1.745884$(自由度=9+9-2=16)。
由于$| t | > t_{16,1 - \alpha / 2}$,所以新版还外加酒店宫格点击用户数相对老版是显著下降的。

最小样本量
在方法简述中提到:当总体呈现正态分布且总体标准差未知,而且容量小于30,那么这时一切可能的样本平均数与总体平均数的离差统计量呈T分布。

在ABtest中实验天数小于30天即可用T检验来进行判定。那么是不是实验天数越小越好呢?

答案显然是否定的,实验天数越多得到的结论可靠性越好。

但是业务人员希望实验天数越少越好,两者之间形成了悖论。在此,一般建议实验最少进行两周(14天):一周数据(7天)太少,且旅游数据大部分都是以一周为一个周期上下浮动,选择两周可以有效地平滑掉周期对结果的影响。

实验最小 uv 量

假设实验组分流比例 (B) = 对照组分流比例 (C+D), 指标(CR等)满足正态分布(Central Limit Theorem)且方差相等。

选择参与实验的主指标数量为 m (选项有CR, Quantity, GP-C)。对于每个选中的主指标, 计算该指标需要的最小样本量$S_i$:

  • $\Delta = lift * u_x$,大流量 lift 可取值0.02,小流量可取0.03
    ($u_x$可取该指标在试验频道前2周的均值;$lift = (u_y - u_x)/u_x$,其中$(u_y - u_x)$是实验组和对照组的均值差)
  • Type I Error 一般取$\alpha = 10 \%$;Type II Error 一般取$\beta = 0.2(Power = 10 \%)$
  • $z_x$是正态分布累计概率为 x 时对应的分位数
  • $\sigma^2$是该指标子啊试验频道前2周的方差。k = 实验组UV/对照组UV

最后选取实验的所需最小样本量的最大值 $max{S_i: i = 1, …, m}$

知识小科普:

T检验和成对T检验的区别:通常T检验或成对T检验是用来判断两组数据的平均值是否在统计上有差别。

换一个理解,对两组数据而言,每组数据本身内部有一个波动范围(组内变异),而两组数据之间平均值的波动相称为组间变异,如果组间变异相对于组内变异小的话,就可以认为两组数据之间的平均值是没有差异的,这是T检验的做法。
而对于成对T检验,在一组中的数据与另一组的数据有对应关系,也就是两组数据是以成队的形式出现的。这个时候运用这两个成队数据之间的差值,可以得到一个数据列,如果这个数据列的平均值在统计上是非零的,即可认为两组数据均值是有差异的。
在这个地方,没有单独的去考虑两组数据之内的差异,而是通过将两组数据中对应的数据相减,得到一组数据,通过类似偏倚的算法,来看它在统计是是否非零。
换一句话说,是当组内差异比较大(或者说是噪音较大),但是可以通过其它一个因子作区隔时,可以用成对T检验。


-------------本文结束感谢您的阅读-------------

本文标题:ABTest显著性计算

文章作者:

原始链接:https://www.xiemingzhao.com/posts/ABTestsignificancecomputing.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。