前言
一直想整理一下统计方法在网站分析中的应用,刚好前几天遇到类似的问题,借这个机会整理一下网站分析中T检验的思路。在统计面前我们并没有生产方法,我们只是方法的搬运工,希望能用的恰到好处而已。T检验全称为student’s T检验,是由19世纪末的一位酿酒师戈塞特推导出的小样本统计方法,因其发表研究成果时用的笔名为“学生”,这一方法被称作是student’s T检验,虽有其名,但使用者却未必是学生。
产品经理在进行产品方案选择时,往往会面临多个方案选择的情况,面对这样的问题,最简单直接的方法是找一个相同的指标,分别在多个方案上进行计算,查看计算结果的差异,这一方式固然是最为简单的,但是引发的弊端也非常的明显,比如:测试往往会针对不同的人群、不同的数据量,这些因子会对计算的结果产生影响,但是在上面单纯指标的计算中,却并没有将其考虑在内,导致计算结果并不公正。
为解决上面的问题,大家开始使用统计学中的T检验来进行结果计算,这一方法剥离了数据中的业务属性,单纯从统计的角度考虑两组数据所对应的方案的差异,能有效避免不同人群、不同数量集引发的计算差异。
T检验的优势除了他自身的统计属性外,还在于他的稳定性,这一方法对数据的正态性有一定的耐受能力,当数据不满足正态时,可以采用一定的数据变换方式,将数据转换成正态,进而使用这一方法进行计算。
哪些场景下会用到T检验和方差检验
在产品设计中,能够用到T检验的地方非常多,我们最常见的就是A/B测试:在进行网站功能优化时,每个设计师或产品经理会产生不同的设计思路,最终形成多个设计方案,那么问题来了,如果不能进行公正的分析,用哪一个方案就成了一种风险性决策。方案上线到APP上如果不能引发用户的积极态度,不仅会影响产品的活跃度,更有可能影响产品进一步的优化。为公正起见,在A/B测试的场景中,经常会看到T检验的影子。
除了A/B测试外,T检验还常被用在对网站进行改版或推广上,APP上线一个新的功能或者设计一个新的推广活动,其效果是否会有明显的不同,就需要进行T检验。此时往往会在不同时间段取两组数据,计算两组相同的指标,对两组指标进行对比。讲一个相对专业一点的话语:这一方法实际上是在检验一个二元分类变量是否对一个连续变量有明显的影响。
另外,在运营推广活动中,优惠券的设计是设计成“满15减3”还是“满15减5”?在页面设计中,按钮是设计在页面顶部还是在页面底部?在问卷调查中,题目是设计7个还是设计10个?这些实验性的、选择性的方案中,往往都会有T检验的身影。
总结可知,T检验的应用场景是在方案选择中,而使用的范围则可以总结为:
1)样本来自的总体应服从或近似服从正态分布;
2)两样本相互独立,样本数可以不等;
两独立样本T检验目的是:利用来自两个总体的独立样本,推断两个总体是否存在显著差异。
T检验和方差检验的原理
T检验在统计学中是与Z检验、卡方检验齐名的三大统计方法之一,在网站分析中得到广泛的应用,T检验以假设检验为分析基础,在假设成立的基础上查看样本数据对各种分布的满足程度。
首先,我们来了解一下假设检验方法:
假设检验是用反证法来证明某一假设是否成立的方法,其思路为:
1)假定这个假设H0是成立的,并构造出一个服从某一分布F(X)的统计量X(X~F(X));
2)计算服从分布F(X)的随机变量x大于(或小于)统计量X的概率P{X<x}(或者P{X>x}),这一概率值记为p-value;
3)选定一个显著性水平alpha,如果p-value<alpha,则认为原来的假设H0不成立;如果p-value>alpha,则认为原来的假设成立。
数据的语言总是很生硬的,因为其严谨性要求他必须字斟句酌,但是我们在生活中却需要一些听得懂的表达来理解,我尽量用一些通俗的语言,帮助大家理解这一思路:
我们先来解释一下显著性水平表示的是什么,所谓的显著性水平alpha是指一次实验中小概率事件发生的概率,统计中往往会假设小概率事件是不会发生的事件,所以小概率事件会被称作是错误概率,例如:alpha=0.05即为小概率事件发生的概率界限为0.05,小于这一概率即为小概率事件(即为错误概率),大于这一概率则为非小概率事件(即为正确概率)。在假设检验中常用的显著水平取值有:
以A/B测试为例,假设A、B两个方案无显著差异,即H0成立(H0和H1的定义见如下解释,指标x往往是用均值来计算):理解完显著性水平之后,我们就可以探索假设检验了:
H0:不同方案(统计中将其称为不同的水平)中,指标x没有显著性差异;
H1:不同方案中,指标x有显著性差异;
我们假设H0成立,并依据样本的数据构造一个统计量X,根据假设这一统计量就会服从F(X)分布,则随机产生的数据大概率会落到这一分布中,落在这一分布长尾中的数据相对较少,我们选择显著性水平为0.05,则长尾概率小于0.05的事件即为小概率事件,也即不可能发生的事件,这一事件发生时,我们推翻H0假设,即H1成立,两个方案有显著性差异。
图中阴影部位即为小概率发生事件的位置,也就是长尾发生的位置,在进行假设检验中往往存在两个注意点:一个是两类错误(alpha错误和beta错误);另一个是单尾检验和双尾检验(本文的T检验是双尾检验)。因为本文的思路是先构建一个T检验的基本思路,所以,这两个注意点在本文中暂不做介绍。
在了解完假设检验之后,我们的T检验方法就呼之欲出了,下面我们介绍一下T检验的思路:
1)建立检验假设和确定检验水准。H0: μ=μ0,H1: μ≠μ0,α=0.05,双侧检验;
2)选定检验方法和计算统计量。用单样本的t检验;
在不同的前提下可以构建不同的统计量,并且服从不同的分布状态,总前提是涉及检验的两组数据都服从正态分布。
本文中以正态分布为例进行计算,在正态情况下,t值的计算公式为:
df=n-1
公式中的含义转化成文字即为:t值=(两个样本残差的均值-理想情况下残差均值)/残差标准差,计算残差的情况下u0=0。
通过上面的公式可以计算出对应的t值,以及自由度df。
确定P值和作出推断结论
在确定好t值和自由度后,我们就需要确定对应的P-value值,然后再以这个P-value值与显著性水平alpha做比较,即可确定两个方案是否是显著性差异。
传统的统计学中存在一个t分布表,记录了t-p的转化关系,主要思路是通过确定的自由度n和单尾显著性水平alpha/2查找出对应的标准t值,然后将运算的t值与标准t值进行比较,得出p-value值与alpha的关系。
P<alpha时拒绝原假设,两个方案存在显著性差异。
感觉大家在看到这里的时候,对T检验马上就要失去信心了,一个方案选择而已,又是t值,又是p值的,好不麻烦,临了还给出一个t分布表,简直要放弃掉;好在现在互联网发展快速弥补了这一缺陷,将这一流程封装成函数,简化了这一流程,我们只需要输入两个样本数组,就可以得出两个方案对应的p-value值,直接将p-value与alpha进行比较即可。
T检验的应用涉及面非常广泛,自身也有其不足之处,比如面对三个或三个以上的方案选择时,T检验就失去了作用,此时可以借助方差检验,方差分析又会有单因素方差分析、单因素协方差分析、双因素方差分析、含两个协变量的双因素协方差分析等多种方式,各种繁琐,此处也只能是抛砖引玉,梳理出一个常用的思路而已,对于方差分析,我就不多做描述了。
网站页面设计方案A/B分析
在做页面设计时,对于按钮在顶部还是底部进行AB测试,通常希望获知它对网站流量pv是否有显著的影响。基于分析目的,我们获取两个方案各15天pv数据:
1)在进行使用这一数据进行检验时首先要验证数据的正态性,如果不符合正态特性,则需要将数据正态化之后再进行检验。
2)利用levene检验两个样本的方差齐次性(方差齐次性可简单理解为两总体方差相等,有兴趣可以百度深入了解):
如果返回结果的p值远大于0.05,那么我们认为两总体具有方差齐次性。
如果两总体不具有方差齐性,需要加上参数equal_val并设定为False。
对应计算代码如下:
代码语言:javascript复制from scipy import stats
data1 = [10231,12874,11229,9870,11804,11654,13259,
11891,12876,14562,12933,13548,15230,13815,15766]
data2 = [10740,13368,11730,10384,12302,12159,13735,12389,
13381,15067,13415,14034,15739,14327,16267]
# 正态性检验:
print(stats.shapiro(data1))
print(stats.shapiro(data2))
# 方差齐次性检验:print(stats.levene(data1, data2))
# 在具有方差齐次性时,检验结果为:print(stats.ttest_ind(data1, data2))
# 在不具方差齐次性时,检验结果为:print(stats.ttest_ind(data1, data2, equal_var=False))
结论:
通过上面的运算我们可以得出,两个样本具有方差齐次性,推广前后两个样本的P-value=0.427,而alpha值对应为0.05,因此P-value>alpha,两个方案差异性不明显。
代码语言:javascript复制