本文会涉及较多的统计学知识,如果已经遗忘统计学基础的同学,可以去看我之前写的文章复习一下鸽子学统计。
正如之前的文章所说:如果微积分是研究变量的数学,那么概率论与数理统计是研究随机变量的数学。
研究一个随机变量,不只是要看它能取哪些值,更重要的是它取各种值的概率如何!!!
这句就是本文的核心内容,这篇文章里的所有概念都在是描述一件东西,那就是概率!概率!概率!
优点:
缺点:
超多指标之间的选择:
DAU、新用户量、曝光量、点击量、CTR、用户停留时长、留存、用户转化率、GMV、ROI/ROAS
过程中会遇到超多问题:
实验方案怎么定?该验哪个指标?数据从哪来?数据准不准?原假设与备择假设是否贴合业务目标?控制变量设置对不对?抽样具不具有代表性?样本数量够不够?灰度发布有没有起效?
If A then NOT B ;
则逆反命题为:B then NOT A ;
例如:
如果我有钱(A),我就不会(NOT)买安卓手机(B);
如果我有钱(A),我就不会(NOT)买十万以下的汽车(B);
如果我有钱(A),我就不会(NOT)继续打工(B);
则如果先决条件成立,则逆反命题也同样成立:
如果我买安卓手机(B),则我没钱(NOT A);
如果我买十万以下的汽车(B),则我没钱(NOT A);
如果我继续打工(B),则我没钱(NOT A);
但是如果前面3个先决条件的把握度不高的话,会严重影响我们对B出现后NOT A的推断,导致NOT A无法绝对成立。
由于普通事件无法确定把握度,后面就可以引入我们假设检验的思想:
If A then probably (β) NOT B ;
这个时候,如果我们知道同条件下的各β,我们就能判断各先决条件的可信度。
同理,也有逆反命题:
B then probably(β) NOT A ;
例如:
如果我有钱(A),我就大概率(β)不会(NOT)买安卓手机(B);
如果我有钱(A),我就大概率(β)不会(NOT)买十万以下的汽车(B);
如果我有钱(A),我就大概率(β)不会(NOT)继续打工(B);
则如果先决条件成立,则逆反命题也同样成立:
如果我买安卓手机(B),则我大概率(β)没钱(NOT A);
如果我买十万以下的汽车(B),则我大概率(β)没钱(NOT A);
如果我继续打工(B),则我大概率(β)没钱(NOT A);
到这里,我们就能推导出假设检验的基本逻辑:
所以我们只需要证明“事件A成立时很大概率不会发生事件B”,我们就能让以上的逻辑成立
让我们用一组最简单的硬币实验来说明这个流程:
假设我们是一家游戏机中心,我们有一款投币游戏机,如果投进去的硬币足够均匀,那么投的玩家就特别不容易赢。所以我们对硬币生产厂的生产的硬币要求很高。
为了检验硬币是否是均匀的,我们甚至研发了一款投硬币机,可以同时快速地投100枚硬币,并记录投币结果,然后依据一组投递结果,筛选出合格的硬币。但是现在离研发成功还差最后一步,就是给机器设定硬币合格的阈值:
在假设检验的基本逻辑中,我们把想证明的结论写成备择假设,把想拒绝的结论写成原假设。
在我们的假设检验逻辑中,A成立一般会被我们选为原假设H0;而A不成立,一般会被我们选择为备择假设H1(国外一般使用Ha)。
H0: A事件成立 A
H1: A事件不成立 NOT A
我们主要做的事情:是通过证明B在A条件的前提下是一个小概率事件,只要出现了事件B,就能证明事件A不成立,选择拒绝原假设。
那我们抛硬币实验的假设就可以设置为如下:
H0:硬币是均匀的(A)
H1:硬币是不均匀的(NOT A)
比如我们找了几个负责研发投硬币机的同事,让他们给出当硬币是均匀的时候基本不会发生的极端事件:
B1:投100次硬币有90次都是正面
B2:投100次硬币有54次都是正面
B3:投100次硬币有60次都是正面
B4:投100次硬币有58次都是正面
B5:投100次硬币有63次都是正面
这个阈值即平常所说的显著性水平,一般我们设置为0.05(5%),也可以根据具体业务情况设置。
显著性水平代表大概率出错的概率,亦或者说是小概率事件发生的概率。例如我觉得明天大概率(95%)会下雨,则代表了明天大概率会下雨这个事件有5%的可能出错,或者说明天不会下雨这个事件有5%的概率发生。
犯一类错误的后果越严重,那么显著性水平就需要越低。
假设检验的结论与实际情况:
实际情况 | H0为真 | H0为假 |
---|---|---|
拒绝H0 | 一类错误α(拒真) | 正确 |
不拒绝H0 | 正确 | 二类错误β(存伪) |
比如我们的投硬币实验,假设我们的硬币是均匀的,那我们的总体分布就符合p=0.5的二项分布。
知道总体分布后,我们还需要知道样本符合什么分布。
假设我们做一组10次投币的实验,这时候我们会出现多少种可能的结果?
我们用无顺序的组合数公式可以算出来:
C n + k − 1 k = C 11 10 C^k_{n+k-1}=C^{10}_{11} Cn+k−1k=C1110
(n:每次试验可能出现的结果 k:每组试验重复多少次)
而每种结果,对应的就是我们的样本,每个样本出现概率的分布,就是样本分布。
EXCEL二项式样本分布概率计算公式=BINOM.DIST(各个样本结果,一组实验的次数,其中一项的概率,FALSE(概率密度函数))
上述的分布就是事件A(硬币的质量是均匀的) 成立时的样本分布。
对于二项分布的样本分布,我们一般描述为:
X ∼ B ( n , p ) X\sim B(n,p) X∼B(n,p)
其中n为重复次数,p为出现其中一项的概率。在上例中,可以表示为
X ∼ B ( 10 , 0.5 ) X\sim B(10,0.5) X∼B(10,0.5)
对于二项分布:
E ( x ) = π E(x)=\pi E(x)=π
其中π为实验其中一项的概率,在上例中π=0.5
那回到开始的例子,实验做k次,每次实验投硬币100次,我们直接带入n和p到EXCEL中用原来的算式来计算概率分布。
这时,我们的总体期望为:π = 0.5;总体方差为:π (1 - π) = 0.25
除EXCEL外,我们也可以利用中心极限定理来求样本分布概率:从均值为μ、方差为σ2的任意一个总体中抽取样本量为n的样本,当n充分大时,样本均值xbar的抽样分布近似服从均值为μ、方差为σ2/n的正态分布。
x ˉ ∼ N ( μ , σ 2 / n ) \bar{x}\sim N(\mu,\sigma^2/n) xˉ∼N(μ,σ2/n)
这时候,我们的样本比例p的分布同样可以适用于中心极限定理,其样本比例的期望π可以直接套用其公式中的均值μ,套用公式可得:
p ∼ N ( π , π ( 1 − π ) / n ) = N ( 0.5 , 0.0025 ) p\sim N(\pi,\pi(1-\pi)/n) =N(0.5,0.0025) p∼N(π,π(1−π)/n)=N(0.5,0.0025)
比“投100次硬币有90次都是正面”(B1事件) 更极端的事件有什么?
比如“91 次正面,9 次反面”、“91 次反面,9 次正面”……
转化为比例则为:“正面比例为0.91”,“正面比例为0.09”……
极端事件的概率P值就是比所得到的样本观察结果**(B1事件,即90次正面)** 更极端的结果出现的概率。由于计算公式复杂,我们一般用EXCEL计算:
= 1 − N O R M . D I S T ( B 发生的概率 , 样本的期望比例 π , 样本比例的标准差 π ( 1 − π ) / n ) , 是否是累计概率 ( 1 ) ) =1-NORM.DIST(B发生的概率,样本的期望比例\pi,样本比例的标准差\sqrt{\pi(1-\pi)/n}),是否是累计概率(1)) =1−NORM.DIST(B发生的概率,样本的期望比例π,样本比例的标准差π(1−π)/n),是否是累计概率(1))
本例中,我们使用Excel函数(由于正面和反面90次都是同一极端事件,是双尾,所以要乘2得到极端事件的概率P值):
P值=(1-NORM.DIST(0.9,0.5,0.05,1))✖2
求得P值为0(实际应为1.2442E-15,但是这个数据过小,Excel计算不出来)。
由于上面求出的P值小于显著水平α,这时我们可以说B1事件是极小概率事件。
这时我们就能利用之前的逻辑:B then probably NOT A
所以当B1事件出现时,我们有足够的理由拒绝原假设,接受备择假设。 之后我们将B2~B5的情况都计算一遍:
从上表中,我们可以发现,当正面占比为0.6的时候,即“投100次硬币60次都是正面”的时候,P值刚好小于显著性水平,所以我们一般选取60次正面为本例中判断硬币是否均匀的小概率事件,当我们投100次硬币时,观测到样本发生大于60次正面(或者反面),我们就可以拒绝硬币是均匀的假设,即硬币不均匀。
但是在日常工作中,用上面的列表计算起来有些麻烦,所以有的时候,我们直接使用显著性水平计算一个统计量的阈值。
使用Excel的函数NORM.INV(),可以快速求出显著性水平所对应的阈值:
N O R M . I N V ( 阈值对应位置 , 样本比例的期望 π , 样本比例的标准差 π ( 1 − π ) / n ) ) NORM.INV(阈值对应位置,样本比例的期望\pi,样本比例的标准差\sqrt{\pi(1-\pi)/n})) NORM.INV(阈值对应位置,样本比例的期望π,样本比例的标准差π(1−π)/n))
其中 , 阈值对应位置 : { α / 2 双侧检验左侧拒绝域 1 − α / 2 双侧检验右侧拒绝域 α 单侧检验左侧拒绝域 1 − α 单侧检验右侧拒绝域 其中,阈值对应位置:\begin{cases} \alpha/2\qquad 双侧检验左侧拒绝域\\ 1-\alpha/2\ 双侧检验右侧拒绝域\\ \alpha\ \ \ \ \qquad 单侧检验左侧拒绝域\\ 1-\alpha\ \ \ \ \ 单侧检验右侧拒绝域\\ \end{cases} 其中,阈值对应位置:⎩ ⎨ ⎧α/2双侧检验左侧拒绝域1−α/2 双侧检验右侧拒绝域α 单侧检验左侧拒绝域1−α 单侧检验右侧拒绝域
根据上面例子的步骤计算后,这时我们会发现,假设检验逻辑与原来的逻辑相比,变化为:
(变化已标红)
T分布与标准正态分布(Z分布)都是以0为对称的分布,T分布的方差大所以分布形态更扁平些
卡方分布是大于0的右偏分布,随着自由度的增加会趋近于正态分布(注意不是标准正态分布)
卡方分布在左侧的拒绝域特别小,所以拒绝的区间的值也比较少,所以卡方检验的拒绝域一般放在右侧,F分布同理。
概率中的PDF\PMF\CDF\PPF\ISF函数:本文内容中出现的所有公式均是基于中心极限定理和正态分布曲线来计算各种概率及标准差等,下面是各种概率函数的解释,看完基本能理解本文公式本后的逻辑。
让我们用一个电商中常见的ABTest来说明这个流程:
某电商平台发现,中小店铺面临的流量问题,形成了大店铺流量越来越多,中小店铺流量越来越少的局面。现在需要数据分析师研究一个策略来改变这种业务现状。
经过一番讨论,我们初步决定,在用户支付完成页面的推荐商品页中,固定设置中小店铺展示位置,来增加中小店铺的展示流量。
现在我们需要设计一个AB实验,来对比不同地固定展示位数量,哪个对业务目标地提升最大。
如何确定业务目标:
在本例中,我们确定的业务目标为:
在下单推荐页设置固定中小店铺展示位置,通过对比3个固定展示位、6个、9个的区别,探究最优展示位个数。
我们一般选择一个一类指标和一个二类指标(也可以选择多个),来对比不同实验条件的优劣:
一类指标:不能容忍变差的指标;
二类指标:业务目标需要提升的指标。
如何确定一类指标:从业务出发,去寻找最无法忍受变差的指标,如下图所示
确定试验目标后,我们会从该试验所改变的用户路径点出发,从变动点后面的路径中选择我们所需的二类指标。第一类则前后都可以选,如下面的电商用户路径图所示:
在本例中,我们的目标是提升中小店铺在下单推荐页的下单量,那么应该提升多少呢?
这时候我们应该使用科学的方法来计算提升量,不然实验的可信度会大大降低,因为老板并不知道应该提升多少才是好的。
根据正态分布的性质,1个标准差内包含68.2%的数据,2个标准差内是95.5%的数据,3个内是99.7%的数据;数据在3个标准差内波动为正常现象。为观测到显著的提升,所以我们一般设置提升量为实验前的两个标准差。
那么根据公司的实际业务不同,我们计算实验前中小店铺人均下单量的二倍标准差,求得提升量为30%。
此时我们就能确定二类指标:C类店铺人均下单量上升 30%。
由于在下单推荐页将一部分流量固定分配给中小店铺,那大店铺的流量肯定会受到损失。
那么我们的一类指标就可以确定为:A类店铺人均下单量下降在15%以内(实验前大店铺人均下单量两个标准差以内)
在实际业务中,如果实在无法计算提升量,我们也可以不计算,直接使用双侧检验来检验实验组对于对照组是否有显著变化,再根据实验组与对照组的差值或比值来判断变化方向。
在本例中,我们确定的两类指标都是人均下单量,即均值,所以我们的统计量则为实验组和对照组的均值之差,由此可得到2.3.8补充资料中的均值之差计算公式:
x ˉ 1 − x ˉ 2 ∼ N ( u 1 − u 2 , σ 1 2 n 1 + σ 2 2 n 2 ) \bar{x}_1-\bar{x}_2\sim N(\,u_1-\,u_2,\frac{\sigma_1^2}{n_1}+\frac{\sigma_2^2}{n_2}) xˉ1−xˉ2∼N(u1−u2,n1σ12+n2σ22)
我们一般设置我们想要验证的结果为备择假设H1,所以本例中,两类指标的假设如下:
一类指标
二类指标
在统计学上,我们一般根据统计量抽样分布和边际误差确定样本量。而在业务层面,我们则是以一类错误临界值二类错误临界值计算:
n = ( Z α / 2 ) σ 2 E 2 n=\frac{(Z_{\alpha/2})\sigma^2}{E^2} n=E2(Zα/2)σ2
n = ( Z α / 2 ) ⋅ π ( 1 − π ) E 2 n=\frac{(Z_{\alpha/2})\cdot\pi(1-\pi)}{E^2} n=E2(Zα/2)⋅π(1−π)
x ˉ ± E 2 , 其中 E 2 = Z α / 2 ∗ σ 2 / n \bar{x}\pm E^2,其中E^2 =Z_{\alpha/2}*\sqrt{\sigma^2/n} xˉ±E2,其中E2=Zα/2∗σ2/n
但是,在日常工作中,由于各种实验的策略都不一样,导致实验组和对照组可能服从不同的总体分布,所以我们一般选择两个总体的样本量计算公式,如下面四个公式所示,而非上面的公式:
A 组样本量 n A = k n B B 组样本量 n B = ( 1 + 1 k ) ( σ z 1 − α / 2 + z 1 − β μ A − μ B ) 2 A组样本量n_A=kn_B\\B组样本量n_B=(1+\frac{1}{k}) (\sigma\frac{z_{1-\alpha/2}+{z_{1-\beta}}}{\mu_A-\mu_B})^2 A组样本量nA=knBB组样本量nB=(1+k1)(σμA−μBz1−α/2+z1−β)2
A 组样本量 n A = k n B B 组样本量 n B = ( p A ( 1 − p A ) k + p B ( 1 − p B ) ) ( z 1 − α / 2 + z 1 − β p A − p B ) 2 A组样本量n_A=kn_B\\B组样本量n_B =(\frac{p_A(1-p_A)}{k}+p_B(1-p_B)) (\frac{z_{1-\alpha/2}+{z_{1-\beta}}}{p_A-p_B})^2 A组样本量nA=knBB组样本量nB=(kpA(1−pA)+pB(1−pB))(pA−pBz1−α/2+z1−β)2
A 组样本量 n A = k n B B 组样本量 n B = ( σ A 2 + σ B 2 / k ) ( z 1 − α + z 1 − β μ A − μ B ) 2 A组样本量n_A=kn_B\\B组样本量n_B=(\sigma_A^2+\sigma^2_B/k) (\frac{z_{1-\alpha}+{z_{1-\beta}}}{\mu_A-\mu_B})^2 A组样本量nA=knBB组样本量nB=(σA2+σB2/k)(μA−μBz1−α+z1−β)2
A 组样本量 n A = k n B B 组样本量 n B = ( p A ( 1 − p A ) k + p B ( 1 − p B ) ) ( z 1 − α + z 1 − β p A − p B ) 2 A组样本量n_A=kn_B\\B组样本量n_B =(\frac{p_A(1-p_A)}{k}+p_B(1-p_B)) (\frac{z_{1-\alpha}+{z_{1-\beta}}}{p_A-p_B})^2 A组样本量nA=knBB组样本量nB=(kpA(1−pA)+pB(1−pB))(pA−pBz1−α+z1−β)2
求两个总体的方差σ:
比例之差
σ = p A ( 1 − p A ) n A + p B ( 1 − p B ) n B \sigma=\sqrt{\frac{p_A(1-p_A)}{n_A}+\frac{p_B(1-p_B)}{n_B}} σ=nApA(1−pA)+nBpB(1−pB)
其中:
也可以用以下的网站直接生成样本量,无需手动计算:
在本例中,由于我们明确了一类指标的下降阈值和二类指标的上升目标,所以都使用单侧检验。使用均值之差时的样本量计算公式(单侧)计算得到第二类指标的最小样本量为3382.83,第一类指标的最小样本量为1483.21。由于我们平台的日活跃用户为1000万,所以我们给每组分配0.1%的流量,即每组1万人。
在统计学中,检验统计量差异是否显著的方法有T检验、Z检验、卡方检验和F检验。在ABTest中,主要是对样本均值或比例进行检验,所以一般用T检验和Z检验。但是在业务中,一般只使用T检验来检验最终的统计结果与指标的目标是否显著,因为T分布较Z分布多了一个自由度的变量,惩罚小样本,增加其拒绝原假设H0的难度,因而一般采用T检验,优于Z检验。
在本例中,由于我们明确了一类指标的下降阈值和二类指标的上升目标,所以使用单侧独立样本T检验。
我们的分组策略是:
P值就是我们错误拒绝原假设的概率。例如P值为0.01的时候,也就是说我们错误地拒绝原假设的概率只有0.01,那么我们有理由相信原假设原本就是错误的,而非检验错误导致。简而言之,P值越小,越有理由拒绝原假设。
如果对概率P值计算不太清楚的话,可以看2.3.8中的概率中的PDF\PMF\CDF\PPF\ISF函数部分解释,本文内容中出现的所有公式均是基于中心极限定理和正态分布曲线来计算各种概率及标准差等,下面是各种概率函数的解释,看完基本能理解本文公式本后的逻辑。
通过统计量及统计量的P值来观测。即我们抽样产生实验组和对照组的统计量(也可以叫统计结果,即μA-μB及PA-PB)在这个用户总体中出现的概率是多少,如果概率P值小于我们的显著性水平α,我们既可以认为这个样本的实验结果对比总体是小概率事件,即不是由于样本随机波动的因素导致的,而是由于实验因素导致的。则可以拒绝原假设,接受我们的备择假设。
不同统计量对应不同的P值计算公式:
右侧检验:H1: μA - μB > a 或者 πA - πB > a ,这时候,检验为右侧检验,拒绝域为右侧。
均值之差公式:
概率 P 值 = s t a t s . n o r m . s f ( x ˉ A − x ˉ B , μ A − μ B , S A 2 n A + S B 2 n A ) 概率P值 = stats.norm.sf(\bar{x}_A-\bar{x}_B,\mu_A-\mu_B,\sqrt{\frac{S^2_A}{n_A}+\frac{S^2_B}{n_A}}) 概率P值=stats.norm.sf(xˉA−xˉB,μA−μB,nASA2+nASB2)
比例之差公式:
概率 P 值 = s t a t s . n o r m . s f ( p A − p B , π A − π B , p A ( 1 − p A ) n A + p B ( 1 − p B ) n A ) 概率P值 = stats.norm.sf(p_A-p_B,\pi_A-\pi_B,\sqrt{\frac{p_A(1-p_A)}{n_A}+\frac{p_B(1-p_B)}{n_A}}) 概率P值=stats.norm.sf(pA−pB,πA−πB,nApA(1−pA)+nApB(1−pB))
p_A : 抽取的实验组的比例
p_B : 抽取的对照组的比例
πA - πB:H1: πA - πB > a,即a
n_A :抽取的实验组的样本量
n_B :抽取的对照组的样本量
左侧检验:H1: μA - μB < a 或者 πA - πB < a ,这时候,检验为左侧检验,拒绝域为左侧。
均值之差公式:
概率 P 值 = s t a t s . n o r m . c d f ( x ˉ A − x ˉ B , μ A − μ B , S A 2 n A + S B 2 n A ) 概率P值 = stats.norm.cdf(\bar{x}_A-\bar{x}_B,\mu_A-\mu_B,\sqrt{\frac{S^2_A}{n_A}+\frac{S^2_B}{n_A}}) 概率P值=stats.norm.cdf(xˉA−xˉB,μA−μB,nASA2+nASB2)
比例之差公式:
概率 P 值 = s t a t s . n o r m . s f ( p A − p B , π A − π B , p A ( 1 − p A ) n A + p B ( 1 − p B ) n A ) 概率P值 = stats.norm.sf(p_A-p_B,\pi_A-\pi_B,\sqrt{\frac{p_A(1-p_A)}{n_A}+\frac{p_B(1-p_B)}{n_A}}) 概率P值=stats.norm.sf(pA−pB,πA−πB,nApA(1−pA)+nApB(1−pB))
观测实验结果的第二种方法:
通过样本量分布和显著性水平来确定拒绝域和接受域,从而拒绝或者接受结果。见假设检验部分,100次掷硬币实验的显著性阈值为60次正面或反面,只要超出60次则认为是小概率事件,而接受硬币是不均匀的备择假设。
在本例中,我们最后在测试日结束后,计算的值为:
一般我们根据下图的流程来进行决策:
在本例中,我们的决策为:
够:无法达到最小样本量。可以减少实验条件,或者重新设计实验;如果是统计量比例,可以延长实验周期;如果是小众用户,可以考虑配对样本T检验。