数据分析学习总结笔记14:A/B Test及Python实现

1 引言

A/B Test,又称为对比测试,指的是一种实验技术,以确定根据一个选定的指标,新的设计是否带来改进。

在Web分析和UI用户体验中,这个想法是通过随机分割流量并比较每个分割点的指标,来比较现有网站(a)和新网站(b)的区别。

举个例子说明:
让我们假设A公司正在考虑为其Gold会员重新设计登陆页面

对公司来说重要的衡量标准是:

  • 每次访问在登陆页上花费的平均时间
  • 转换率 :以交易结束作为本次访问的比例

A/B Test可以用来检验现有的设计。当然,如果担心由于版本B造成损失,可以不选择50:50的流量分割,并分配更多的流量到版本A。但是,一个非常倾斜的流量分割往往导致需要更长的时间,使A/B Test的结果在统计学上变为显著。

2 A/B Test的必要性

随着网站新功能的开发,人们事先不知道这些功能将带来何种结果:实际上,它们可能会损害业务或者使利润暴涨。

用户体验(User Experience,UX)设计师的知识对于挑选可行的功能至关重要。它通常遵循用户体验中的最佳实践或者在其他类似情况下被证明是成功的设计实例。

但是,任何预先的假设都无法与真实的测试相比,即A/B Test。

A/B Test通过真实的客户进行测试。如果在无偏情况下对总体进行抽样,得到A和B,那么该测试可以给出如果部署版本B会发生什么情况的最佳估计。

3 统计形式主义的必要性

在完成一些事先的市场研究之后,A公司认为在线测试b版本会很有趣,流量分配如下:
在这里插入图片描述
假设经过7天的A/B Test,实验的跟踪指标为:
在这里插入图片描述
仅仅从这些结果来看,一些问题就出现了:

  • 由于版本B具有更高的CR,这是否意味着版本B带来了改进?同样地,我们是否可以得出其影响平均花费时间的结论?
  • 如果是这样的话,置信度如何?
  • 版本B带来的较高CR和较低平均花费时间,是否为偶然发生?

在下结论之前,需要记住的是:

我们得到的原始结果只是更大样本。它们的统计特性在它们所来自的人群中各不相同。

因此,统计建模是必要的。引入统计显著性的概念在假设检验也是必要的。

4 假设检验入门

在这里,本文将简单介绍假设检验: 一个基于样本比较两个人群分布的工具。可以比较的是它们的分布参数(例如平均时间花费),或分布本身(例如转化率的二元分布)。

假设检验给出以下关于种群假设:

  • 零假设:H0。一般来说,是一个虚无(平等)假设: 例如,“这两个群体有着相同的均值”。
  • 备择假设:H1否定零假设:,例如,“第二个群体的均值高于第一个群体”。

测试可以总结为两个步骤:

(1)H0模型作为单个实值随机变量(称为检验统计量)上的分布;
(2)评估样本,或者更极端的样本,在 H0情况下出现的可能性。这个概率就是著名的p值。P值越低,就越大概率拒绝H0

将估计值与理论值进行比较,并使用z检验来评估。
在这里,将该框架扩展到A/B Test中,以A公司为例。

  • 如何应用z检验来评估使用版本B的客户平均花费时间是否更多
  • 如何使用卡方检验来评估版本B是否会导致更高的转化率
  • 如何使z检验适用于评估版本B的转换率,以及它是否产生与卡方检验相同的结论

4.1 z检验评估平均花费时间

需要验证的假设是:

  • H0: “两个版本的平均花费时间是相同的”
  • H1: “版本B平均花费时间更长”

(1)第一步:建立 H0模型

z检验应用中心极限定理来进行。
中心极限定理

中心极限定理:给定一个期望为μ,有限方差为σ的随机变量(rv) X。{ X1,… ,Xn }∼ Xn,为n独立同分布(iid),可以对平均值(同样为随机变量)作如下的近似:
在这里插入图片描述

在上下文中,将每个客户会话i所花费的时间做为一种建模实现:

  • 如果客户访问版本A,aᵢ 属于随机变量Aᵢ ∼ A
  • 否则,bᵢ 属于随机变量 Bᵢ ∼ B

使用中心极限定理提供的近似值来推导:
在这里插入图片描述
因此,随机变量之差服从(wikipedia: 正态分布的随机变量之和):
在这里插入图片描述
在H0下,假设均值相等,则模型为:
在这里插入图片描述
与N(0,1)有关曲线:中心和约化高斯分布,概率密度函数(pdf)和相关的p值

(2)第二步:判断样本不为H0的可能性有多大

由于A和B的真实期望和方差未知,它们各自的经验估计(样本估计):
在这里插入图片描述
样本生成了检验统计量z,并根据约化中心正态分布进行检验:
在这里插入图片描述
从概念上讲,Z表示观测值平均值之差距离为0的标准差。这个数字越高,接受H0的可能性就越小。

但是,在这种情况下,估计的期望实际上是不同的,样本数目越多,Z值越大。Z的公式中,需要证明的差异越小,需要的样本就越多。

Python实现:

import numpy as np
from scipy.stats import norm
mu_B = 62
mu_A = 60

std_B = 45
std_A = 40

n_B = 4000
n_A = 6000
Z = (mu_B - mu_A)/np.sqrt(std_B**2/n_B + std_A**2/n_A)
pvalue = norm.sf(Z)
print("Z-score: {0}\np-value: {1}".format(Z,pvalue))

Z-score: 2.2749070654279993
p-value: 0.011455752709549046

import matplotlib.pyplot as plt

z = np.arange(-3, 3, 0.1)
plt.plot(z, norm.pdf(z))
plt.fill_between(z[z>Z], norm.pdf(z[z>Z]))
plt.show()

在这里插入图片描述
p-value代表,观察到的极端结果H0发生的概率。按照α=5%的通用标准,p-value < α,可以拒绝H0。
如果样本量不大(每个版本均少于30个),中心极限定理不成立,则可以尝试使用Student’s t检验。

4.2 z检验评估平均花费时间

需要验证的假设为:

  • H₀:“两个版本的转化率相同”
  • H₁:“版本B的转化率更高”

与前面不同,每个客户会话的结果不是连续数值,而是二元的: “未转化”或“转化”。
观察结果如下:
在这里插入图片描述
卡方检验通常比较多项式结果的分布,但在这个例子中我们将保持二元的情况。

(1)第一步:建立H₀模型

在H0中,版本A和B的转化遵循相同的二项分布B (1,p)。将版本A和B的观测数据汇总起来,推导出转化率的估计量
在这里插入图片描述
得到 = 0.0170。因此,在假设H0下,理论结果为:
在这里插入图片描述
定义随机变量D,
在这里插入图片描述
D表示理论分布和观测分布之间的相对距离平方。根据Pearson’s theorem,在H0下,D服从自由度为1的卡方分布。
在这里插入图片描述
(2)第二步:判断样本不为H0的可能性有多大

计算观测D,并根据卡方分布推导出其对应的p值。

from scipy.stats import chi2
import numpy as np

T = np.array([102, 68, 5898, 3932])
O = np.array([90, 80, 5910, 3920])

D = np.sum(np.square(T-O)/T)

pvalue = chi2.sf(D, df=1)

print("distance d: {0}\np-value: {1}".format(D,pvalue))

distance d: 3.590449404583807
p-value: 0.05811252579106675

import matplotlib.pyplot as plt

d = np.arange(0, 5, 0.1)
plt.plot(d, chi2.pdf(d, df=1))
plt.fill_between(d[d>D], chi2.pdf(d[d>D], df=1))
plt.show()

在这里插入图片描述
存在一个 pvalue 概率,在 H0下,至少与我们观察到的理论分布一样遥远的结果会发生。按照5% 的通用标准,我们有 pvalue,H0是不能拒绝的。
p-value代表,在假设H0下,观测分布与理论分布至少相似的概率。按照α=5%的通用标准,p-value >α,接受H0。

4.3 Z检验评估转化率

Z检验可以通过将转化率建模为一个随机变量,以适用于转化率,例如{0,1} :

  • 成功转化为1
  • 否则为0

作为一种实现,保留了与以前相同的符号和每个客户会话i的模型转换:

  • 如果客户访问版本A,aᵢ 属于随机变量Aᵢ ∼ A
  • 否则,bᵢ 属于随机变量 Bᵢ ∼ B

(1)第一步:建立H₀模型

在假设H0下,μ(A) = μ(B),则
在这里插入图片描述
相应的检验统计量:
在这里插入图片描述
此次,对于二元随机变量,可以证明标准差的估计量是期望的函数:
在这里插入图片描述
(2)第二步:判断样本不为H0的可能性有多大

为此,计算Z-score和相应的右尾p-value:

import numpy as np
from scipy.stats import norm

mu_B = 0.02
mu_A = 0.015

var_B = mu_B * (1-mu_B)
var_A = mu_A * (1-mu_A)

n_B = 4000
n_A = 6000

Z = (mu_B - mu_A)/np.sqrt(var_B/n_B + var_A/n_A)
pvalue = norm.sf(Z)

print("Z-score: {0}\np-value: {1}".format(Z,pvalue))

Z-score: 1.8427115179918694
p-value: 0.03268557071858785

import matplotlib.pyplot as plt

z = np.arange(-3, 3, 0.1)
plt.plot(z, norm.pdf(z))
plt.fill_between(z[z>Z], norm.pdf(z[z>Z]))
plt.show()

在这里插入图片描述

使用这种建模方法,p-value略低于卡方检验方法。使用相同的α=0.05标准,则拒绝H0假设(! ! !) 。
这种差异可以用z检验的一个缺点来解释,z检验在这里不承认随机变量的二元性质: μ(B)-μ(A)实际上在[-1,1]中是有界的,因此观测值被归因为一个较低的 p-value。

5 总结

假设检验就是建立一个零假设H0的模型,然后根据A / B Test中得到的样本来评估它的可能性

其中关键是H0模型,它可以从中心极限定理(Z检验)或皮尔逊定理(卡方检验)推导得到。

要时常质疑所做的检验

永远不要做假设。在决定新特性的相关性时,A / B Test确实是减少偏差的一个很好方法。但是,A / B Test仍然依赖于一个真理模型: 正如我们已经看到的,可能服从不同的模型。

在大样本情况下,他们倾向于收敛到类似的结论。特别是,中心极限定理可以比小样本的到更好的结论。

在小样本情况下,可以探讨Student’s t检验,Welch’s t检验和Fisher’s exact 检验。也可以探索强化学习的领域,以最大限度地增加收益。

不仅应该对结果有严格的解释,还应该意识到进行A / B Test时其他因素的影响:

  • 每年、每月、每周的时间、天气、经济环境都会影响客户的行为
  • 即使进行两天A / B Test后,结果是显着的,在一个星期的测试中却可能不同。

本文主要参考于:
A/B Test的数学艺术——统计显著性之美(沈浩老师)

相关笔记:

  1. Python相关实用技巧01:安装Python库超实用方法,轻松告别失败!
  2. Python相关实用技巧02:Python2和Python3的区别
  3. Python相关实用技巧03:14个对数据科学最有用的Python库
  4. Python相关实用技巧04:网络爬虫之Scrapy框架及案例分析
  5. Python相关实用技巧05:yield关键字的使用
  6. Scrapy爬虫小技巧01:轻松获取cookies
  7. Scrapy爬虫小技巧02:HTTP status code is not handled or not allowed的解决方法
  8. 数据分析学习总结笔记01:情感分析
  9. 数据分析学习总结笔记02:聚类分析及其R语言实现
  10. 数据分析学习总结笔记03:数据降维经典方法
  11. 数据分析学习总结笔记04:异常值处理
  12. 数据分析学习总结笔记05:缺失值分析及处理
  13. 数据分析学习总结笔记06:T检验的原理和步骤
  14. 数据分析学习总结笔记07:方差分析
  15. 数据分析学习总结笔记07:回归分析概述
  16. 数据分析学习总结笔记08:数据分类典型方法及其R语言实现
  17. 数据分析学习总结笔记09:文本分析
  18. 数据分析学习总结笔记10:网络分析
  19. 数据分析学习总结笔记11:空间复杂度和时间复杂度
  20. 数据分析学习总结笔记12:空间自相关——空间位置与相近位置的指标测度
  21. 数据分析学习总结笔记13:生存分析及Python实现
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值