比较测试的设定和分析

——数据的上下文5

Controlled-Trial  基于前一篇文章——T检验和卡方检验中提出的数据比较方法,其实我们在生物或者化学的实验中经常也会涉及比较,这篇文章就来具体介绍如何在现实的网站分析环境中使用这些方法,使用的前提和环境是怎样的。

  其实我们在做数据分析的时候经常进行比较分析,但往往以观察分析法为主,“T检验和卡方检验”为我们的比较分析提供了很好的科学的定量分析方法,让比较的结果更有置信度和说服力。但在使用定量分析的比较方法前,还有很多因素需要考虑,当我们需要精确地分析比较的效果,我们一般都会做比较测试,而其中涉及测试环境的设定,数据的选择和获取等,以排除一些非相关因素的干扰,让比较的结果更加真实可信,所以下面就介绍下如何合理地进行比较测试。

比较测试的类型

  比较测试或实验的类型有很多,但都跳不出抽样、重复、分组、比较这几个流程,所以从实验设计的角度,我们可以简单地把比较测试分为两类:基于时间序列的组内比较基于对照实验的组间比较

时间序列的组内比较

  基于时间序列的组内比较一般在时间序列上的某个时间点引入实验变量或者施加实验刺激,并在实验刺激的前后进行重复测试,分别叫做“前测”和“后测”,对前测和后测分别进行抽样比较,从比较的结果反映实验刺激是否对结果有显著的影响。详细的流程见下图:

Time-Serial-Comparison

  举个有趣的例子,如果公司的员工前4个月在正常的薪资待遇的水平上工作,体现出正常的工作效益和工作满意度;然后从第5月开始给员工进行加薪(施加实验刺激),再观察之后4个月员工的工作效益和工作满意度,将之前4个月的结果(前测)与后4个月的结果(后测)进行比较,分析员工的工作效益和工作满意度是否存在显著性差异,进而证明加薪这个实验刺激是否对提升员工的工作效益和满意度有显著性影响。这就是简单的时间序列比较测试的基本流程。

  但基于时间序列的比较测试会受很多因素的干扰,比如上面的例子在实验过程中CPI的增长、公司业绩的下滑或者运营环境的恶化都可能导致实验结果的失效,或者验证的结果不可信,所以下面会具体说明需要排除的干扰因素。

对照实验的组间比较

  基于时间序列的组内比较只是基于一组样本,只是样本在时间序列的某个点上受到了实验变量的刺激;而对照实验需要设定两组样本,也就是“实验组”和“控制组”,并对实验组施加实验刺激,控制组维持原状态不变,从而比较实验组和控制组是否存在显著差异来反映实验的刺激是否影响了结果。因为对照实验涉及两组样本,所以这里需要额外注意抽样的规范性,我们需要保证两组样本的特征具有相似性,可以进行比较。具体的实验设计见下图:

Controlled-Trial-Comparison

  还是使用上面的例子,但在对照实验中设置对照组和实验组是必需的,比较不再是基于前测和后测。比如我们让部分员工维持当前的薪资待遇继续工作,而另外一部分的员工提升他们的薪资待遇,从而比较为提升待遇的员工和提升待遇的员工的工作效益和工作满意度的差异,如果差异显著就可以证明提升薪资待遇这个实验刺激对结果是有显著影响的。

  对照实验因为参与比较的两组样本都是基于相同的时间序列轴,所以随着时间变化的影响因素对实验的比较结果的影响不再重要,因为两组样本同时受到了同样的影响,但因为是组间比较,所以两组样本如果存在差异性,那么对结果就会造成较大影响,比如上例中A组选择的是基层员工,B组选择中高层员工的话,比较的结果显然是缺乏科学性的。下面就具体介绍下比较测试中可能存在的影响因素有哪些?

前提与影响因素

  首先看一下从用户体验的角度,如果我们进行可用性实验,需要考虑的影响因素有哪些:

  • 外部噪声和干扰:外部干扰信息、临时的电话和呼唤等;
  • 经验和熟练:因为可用性实验一般需要重复过程,所以随着实验的进程,用户渐渐熟悉对网站和工具的使用;
  • 消耗:随着实验进程,用户可能失去耐心,或者精力无法集中;
  • 主观预测:当进行重复实验时,用户容易用先前的测试结果来推测之后的测试,同样会影响实验结果的可信度。

  以上是可用性实验中需要考虑的影响因素,有些只存在于实验环境中,如果衍生到WEB分析中,同样需要注意一些影响因素,而对于上面介绍的时间序列组内比较和对照实验组间比较,各自的影响因素又各不相同:

时间序列的组内比较

  基于时间序列的组内比较可能存在的干扰因素相对较多,因为外部环境和内部环境都会随着时间发生变化,所以为了让基于时间序列的前测和后测两组数据具有可比性,我们必须规避以下几类因素的影响:

  • 数据本身存在的自然增长或下降趋势;
  • 规避节假日或者外部事件的影响;
  • 规避特殊的营销推广其带来的影响;
  • 规避内部其他可能影响测试结果的因素(实验刺激必须唯一)。

对照实验的组间比较

  对照实验因为两组样本处在相同的环境和时间序列上,所以需要规避的影响因素比上面要少很多,但相较组内比较,组间比较需要额外考虑两组样本是否具有可比性:

  • 两组样本特征相似,可比较(抽样规范性);
  • 实验组跟对照组之间只存在唯一的实验刺激导致的差异。

  无论是基于时间序列的组内比较还是基于对照实验的组间比较,都要规避外部环境的重大变动,或者特殊的外部事件对网站造成的重大影响,或者服务器故障或数据统计异常造成的数据不完整或不准确,因为这些因素造成的影响已经可能导致用于比较的数据本身就存在巨大误差,或者不可信,都是无法规避和弥补的。

网站应用实例

  网站环境下最常见的比较测试显然就是A/B Testing,AB测试为网站的改版和优化提供了对照实验的比较测试环境,具体的流程如下:

A-B-Testing

  访问网站的用户被AB测试的系统自动分成了两组,一般情况下是按比例对半划分,当然很多情况下也会根据需要按其他合适的比例,如1:3,1:5等。这里的A方案和B方案一个是未做改动的原方案,另一个是改版后的新方案,如果一次需要测试多个改进方案的效果,那么就需要设定多个实验组,而控制组只要一个就行。

  A/B Testing属于对照实验的组间比较的测试方法,所以同样需要符合对照实验的前提,规避对照实验可能存在的其他影响因素。因为A/B Testing遵循了简单随机抽样的方法,所以我们可以认为实验组和对照组之间的样本无明显的差异,具有可比性。同时,对照实验基于相同的内外部环境和相同的时间序列,所以诸如节假日、数据自然增长或下降、特殊推广期等的影响可以不用考虑,但某些特别重大的外部事件或者网站服务器故障导致的数据问题还是需要在比较测试之前进行排除。另外对照实验中必须控制每个实验组的实验刺激只能是1个,不然无法区分到底是哪个实验刺激对实验结果造成的影响。

  在规避上述影响因素后,基于A/B Testing的数据比较可以使用我在上篇文章中介绍的“T检验和卡方检验”的方法直接进行显著性的检验,进而验证实验刺激对结果是否存在显著性影响,这里不再重复举例了。

  A/B Testing有自己的优势,它比基于时间序列的比较的限制因素要少很多,但A/B Testing毕竟需要预先构建相应的自动分流系统,可能在某些特定的环境下或者对某些特殊的网站而言没有相应的环境可以进行AB测试,这个时候我们就不得不选择时间序列的比较测试。

  基于时间序列的组内比较需要规避推广、节假日和外部营销事件的影响,这个可以通过选择合理的测试起止时间,选择合适的前测和后测样本进行规避,但如果网站本身数据存在明显的上涨或下降趋势,那么我们必须对数据进行必要的处理:

改版前 改版后
用户数 订单数 用户数 订单数
12395 576 13920 704
13237 641 14391 715
13450 732 15692 781
13872 693 16533 839
14673 770 15916 813

  上表是某电子商务网站基于时间序列改版前后的比较测试,前测和后测各选取5天的数据进行比较,以“订单数”作为比较指标,为了说明改版能不能显著地提升每天订单的数据。如果我们不考虑数据本身的自然增长,直接比较改版前后日均订单数的差异:

  改版前日均订单数682.4 < 改版后日均订单数770.4

  显然改版后日均订单有显著提升,说明改版有效?那么我们将数据的自然增长考虑进去,我们可以将日均用户数的增长率作为整个网站数据的自然增长率:

  (改版后日均用户数 – 改版前日均用户数) / 改版前日均用户数 = 13.05%

  改版前日均订单数682.4 * 1.13 = 771.1 > 改版后日均订单数770.4

  比较的结果发生了改变,改版前的日均订单数在乘上自然增长率后要比改版后的日均订单数高,但相差不多,从结果看应该是改版对订单数的提升无显著影响。显然后面考虑网站自然增长率后的比较结果更加科学,更加可信和具有说服力。这就是我们在基于时间序列的比较测试中需要考虑的一些问题。当然上面是基于简单的观察分析比较,如果需要更具统计学意义的定量比较,同样可以对数据进行自然增长处理后使用T检验或者卡方检验。

  这篇文章可能写得有点长,本来想分两篇发布,但因为内容不太好分段,也怕影响内容的连贯性,所以最终都整合到了一篇,希望大家有耐心能够看完。当然期间的一些看法如果有问题,或者大家有自己的其他见解,都可以在下面评论留言,非常欢迎大家提出其他的看法。一边在看羽毛球世锦赛男单决赛一边更新了这篇博客,希望文中不要存在过多地错误或者错别字 ;)

比较测试的设定和分析》上有 24 条评论

  1. Justin

    拜读了,等把博主的文章都消化得差不多了,再跟博主请教和交流更多,现在还不好贸然发问,呵呵!

    回复
  2. maomao

    最后这里有点疑问,不知道是否正确,请指正:
    1.考虑到自然增长率的问题,我们是不是仅考虑改版前的自然增长率会更准确点?因为改版前后的用户比较已经受改版影响,所以已经包含第三方因素改变增长,而不是自然增长。
    2.使用订单数*用户增长率衡量改版前后订单数,这样会不会放大了实际订单数?因为用户数是订单数的n倍,所以订单数*用户增长率*衡量订单数衡量订单数前后比较是不是可能偏大了?

    回复
  3. joegh 文章作者

    @maomao: 非常好的问题,但我的理解是这样的:
    1、如果网站的自然流量增长速度比较恒定,那么你说的考虑改版前也是可以的;我这边指的改版更多考虑网站内部的优化,一般而言这种优化对网站流量的影响相对较小,即使有影响也是后续和缓慢的,所以如果分析抽样刚改版后的近期数据,这些影响基本可以忽略;
    2、这里考虑的自然增长率是增长的比率,跟数值的大小无关(除的基数已经削去数值量级的影响),使用“用户数”主要是更好地衡量网站流量的自然增长速率,所以乘上这个增长率不会导致订单数的虚高,或者说当网站流量不断增长时,人均订单数(订单数/用户数)在正常情况下保持恒定。

    回复
  4. abbo

    博主,您的博文我经常用来反复的阅读,里面许多值得学习的。我有个题外问题,不知道您博文的配图是自己制作还是网上搜集的呢?若是自己制作又是用何种软件制作的呢?

    回复
  5. joegh 文章作者

    @abbo: 你好,之前的文章的图片自己制作或PS的比较多一点,现在的文章文章开始的缩略图基本都是网上找的素材,有时可能会稍微处理下。文章中间的图片涉及流程和实例解读之类基本都是自己制作的,因为内容都是原创,所以网上也找不到合适的配图的。我一般会用Word的Smart Art或者用PPT把一些素材拖到一起组合起来。

    回复
  6. wx

    博主,你好:
    我也有个问题,为啥不用日均订单增长率乘以改版前日均订单数,而要用日均用户数的增长率呢?

    回复
  7. Cloga

    感谢joegh的分享~A/B Test或者MVT可以使用Google提供的网站优化工具(GWO)来进行,GWO可以控制分流,并可以进行一些计算及分析。

    回复
  8. joegh 文章作者

    @wx: 日均订单数是比较变量,是因变量,这里改版的目的就是提升日均订单数,所以数据的自然增长需要考虑网站自然流量的增长,用“用户数”的增长更合适。

    回复
  9. joegh 文章作者

    @Cloga: 对,可以借助Google的Website Optimizer,但如果有现成的比较数据或者没有使用GWO的环境或配置,使用的是其他数据源,那么使用上面文章介绍的方法一样可以实现定量分析比较。当然使用第三方的测试工具会事半功倍。

    回复
  10. wx

    博主,再请教一个问题哈,就是进行完AB测试后,我要对两组数据的转化率进行卡方检验,需不需要考虑样本数量,比如两组数据的访问平均是1000,转化是15,这么少的样本数量,可以进行卡方检验吗?

    回复
  11. joegh 文章作者

    @wx: 貌似卡方检验需要满足样本量40以上,每组频数高于5个,这个样本容量的要求在网站分析的应用中基本都可以满足的,你说的1000的样本量完全可以应用卡方检验。

    回复
  12. Pingback 引用通告: 比较测试的设定和分析 | 优酪网

  13. bobo

    你好:我觉得应该对改版前的订单数(y)和用户数(x)做回归分析,得到订单数和用户数的回归方程;再将改版的后的用户数代入回归方程求出预测出的订单数;最后对改版后实际的订单数和预测的订单数用T检验,这样是不是更好点呢.

    回复
  14. joegh 文章作者

    @bobo: 你好,很好的想法,不过订单数和用户数做线性回归可能没什么必要,一般而言网站的人均订单是相对恒定的(在运营环境未作出大调整的前提下),所以一般拟合的结果是y=ax,如果是基于这种结果,其实跟我文中提到的方法得到的最终结果的差异不会很大。
    当然,你的建议非常不错,在其他的应用环境下可能会非常有效。

    回复
  15. Pingback 引用通告: 行走在互联网路上——UE之旅 » T检验和卡方检验

  16. Pingback 引用通告: 行走在互联网路上——UE之旅 » 比较测试的设定和分析

  17. 左左

    我有个疑问,像T检验最早是用在传统行业的生产吧?比如从生产线上抽一组样本,平均数跟标准的误差很小(譬如正常均值是100,今日抽样的均值是100.5),但可以用T检验来判断生产线是不是正常。
    我自己的理解,像统计学的显著性检验,感觉一般用的范围不是是分布很稳定、差异很小的时候判断?如果说数据本身变化已经很大了,其实已经很明显比如(上周均值100,本周均值110),其实很明显有显著差异了,那再做T检验意义何在呢?
    在过来实际的网络数据,基本浮动还是很大的,一般不用T检验只看均值都知道存在显著差异了。另一个角度,如果差异小到需要动用T检验来判定的时候,实际如3%左右的影响,实际工作中影响又多大呢?甚至可能是其他误差引起的(这也很难避免)。
    所以我的困惑就是,明显不一样的,一眼就看出来,费得着用T检验吗?差异很小的变化,在互联网的实际环境,因为影响的不确定因素太多,即使T检验是显著的也没多大的说服力。

    回复
  18. joegh 文章作者

    @左左: 你好,因为数据存在波动性我们才需要去验证排除随机波动之后的显著差异。我们去比较本周数据和上周数据的差异不是为了说明本周数据好于上周数据(本身就是总体数据,直接比较就能说明问题),而为了说明本周数据的提升具备长久保持这个优势的可能,你可以认为这一周数据是长期数据(总体)的一段抽样,我们要验证的是优化是否具备长期的效果,而不仅仅是在这一周中表现出差异。
    至于你说的不确定因素因素比较多,所以文章里面罗列了“前提和影响因素”,使用A/B测试也正是为了控制这些无关因素的影响。假设检验本身就是为了说明差异是由系统误差引起,而不是由于随机误差所引起的。

    回复
  19. nian

    你好,我想问的是既然考虑到日均增长率,那为什么不也加上日均流失率呢?用户有增长,但其实也伴随着流失啊。?

    回复
  20. joegh 文章作者

    @nian: 嗯,用户的增长和流失确实是同时存在的,但文中统计的用户数的变化其实已经包含了用户增长、流失等个方面因素共同影响之后用户数的变化情况。其实我这边只是想说明有时间先后顺序的组内比较分析需要屏蔽数据自然变化的影响,而具体这些变化由哪些诸多因素的影响其实并不是这里的重点。

    回复
  21. 李乐

    你好,我现在正在做AB test,遇到一个问题,我用最优检验推导的那个估算样本容量大小的公式,估算的样本容量值大致都是万以上得量级。而我实际的AB test 测试的样本都是一千以下的量级,我的OEC是网页的转化率,把每个点击进入网页的人购买或者离开看成一个随机变量,服从二点分布。
    我想问一下,对于这种小样本量的(样本大小通常在一千以下)AB test有必要用假设检验和置信区间那套理论去计算吗?我总感觉计算出来的结果和我们直观上拍脑袋做决定一样。

    回复

sean_zhou 进行回复 取消回复

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>