锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

抛弃P值,选择更直观的A/B测试!

时间:2022-10-28 08:30:00 kubler传感器rv2

↑↑↑关注后"星标"Datawhale

每日干货&每个月组队学习,不要错过

Datawhale干货

作者:Dr.Robert Kubler,译者:张峰

如何选择两个选项?一个简单而智能的方法是A/B。本文将简要解释A/B测试背后的动机,总结背后的逻辑和问题:它使用的P值很容易被误解。

因此,本文使用贝叶斯魔法来完善这种方法,讲讲什么是贝叶斯A/B测试,不需要统计学A/B测试。

A/B测试的动机

想象一下,你经营着一家成功的网上商店,每天大约有1万名游客。在这1万人中,大约有100人真的从你的商店买了东西——你所谓的转化率大约是1万/1万=1%,相当小。(大多数网店的转化率约为1-3%,亚马逊甚至超过10%)

因为很多人都去过你的店,但只有少数人成为顾客,你的结论是改善商店转换率,因为这是增加收入的最大杠杆。

到底是什么让人们不买我的好产品呢?

你想不出好的解释,所以你向一些朋友寻求灵感。他们告诉你,他们不喜欢你购买按钮的蓝色。也许红色会更吸引游客?你可以用数据说话!

开始战斗吧! 方法如下:

将新访客随机分配给蓝队或红队的概率为50%。蓝队的人会看到蓝色按钮,红队的人会看到红色按钮。在这个过程中运行一段时间后,您可以检查哪个团队的转换率更高。

注:蓝队是对照组,红队是测试组。对照组给你一个指示,如果你让一切保持原样,测试组告诉你如果你做了一些干预,比如改变按钮的颜色。

请注意,如果你想轻松评估实验,这种随机化非常重要。你不应该做的事情包括:

  • 将所有男性分配给红色团队,所有女性分配给蓝色团队。无论团队的转换率有多高,你都不知道这是因为按钮的颜色还是性别。

  • 本周将每个人分配给红色团队,下周分配给蓝色团队。即使一个团队的转换率要高得多,你也不知道这是因为按钮的颜色,还是人们只是在一周内买了更多的东西,不管是什么颜色。也许一周包括黑色星期五或圣诞节,或其他更微妙的季节性模式。

为了提取按钮的颜色效应,不应该有其他混淆效应,可以解释两队的不同转换率。

准备A/B测试

不妨假设A/B测试已经进行了一天的适当数据收集,最终得到了一些数据。你只有1万名访客,你随机分成蓝色组(对照组)和红色组(测试组)。你记录了访客是否买了东西(编码1)或没有(编码为0)。

我们可以使用以下代码来模拟结果:

importnumpyasnp np.random.seed(0) blue_conversions=np.random.binomial(1,0.01,size=4800) red_conversions=np.random.binomial(1,0.012,size=5200) 

你可以看到,我把1%作为对照组的转换率,1.2%作为测试组的转换率。所以你已经知道,如果抽样不做太奇怪的事情,红色按钮应该表现得更好!这就是为什么我们必须把数据放在对照组中。但从现在开始,假设数据是未知的,因为这就是我们在现实中一直面临的情况。

请注意:这些小组规模不同,通常发生在随机分配中。它们大约是1000/200=5000人,但不太可能得到如此完美的50:50比例。

两个NumPy数组由1和0组成,大部分元素为0。

print(blue_conversions) #output:[000...000] print(red_conversions) #output:[000...000] 

我们可以检查的下一件事是访问者(即购买某物的访问者)的份额。

print(f'Blue:{blue_conversions.mean():.3%}') print(f'Red:{red_conversions.mean():.3%}') #output:Blue:0.854%,Red:1.135% 

这表明红色按钮的性能可能更好,但目前还不确定。即使不同组的转化率完全相同,一组的最终转化率也会高于另一组。

我们必须排除这只是偶然的,这正是事实 A/B 测试目的。

进行A/B测试

现在让我们看看如何更好地解释正在发生的事情。蓝色按钮还是红色按钮更好?首先,我们将以传统的方式再现,然后我们将以贝叶斯的方式再现。

传统方式

我不会在这里深入,因为有很多资源可以完美地解释如何正常工作 A/B 测试。您想知道以下两个假设中哪一个是正确的:

基本上,您计算测试统计数据,如Fisher's exact test或Welch's t-test 。然后计算一个 p 检查它是否在任何范围内,如5%。Welch-t检验。

fromscipy.statsimportttest_ind print(f'p-value:{ttest_ind(blue_conversions,red_conversions,equal_var=False,alternative="less").pvalue:.1%}') #output:p-value:7.8% 

因为有些人对P值很纠结,这里解释一下:

鉴于H?是正确的,我们得到所观察到的或更极端的结果的机会最多是7.8%。

由于 7.8% > 5%,我们保留原来的假设。不清楚红色按钮是否明显好,所以我们只留下蓝色按钮。

我认为 p 值的定义相当不直观-每个误解 p 值得的人都证明了这一点。最常见的误解如下:

蓝色更好的概率是 7.8%。(错了!

虽然没有人说要这样理解,但这样清晰简洁的描述似乎没有错,不是吗?现在,贝叶斯来拯救它 A/B 测试。

贝叶斯A/B测试的优点

贝叶斯 A/B 测试有以下优点:

  1. 它使你能够以一定的概率对一个版本做出比另一个版本更好的声明。这就是我们想要的。

  2. 你不需要知道所有的统计测试。您只需要建立适当的生成模型并按下贝叶斯推断按钮。

假设你现在已经有一些关于使用PyMC3的知识,没有的话,请查看上面链接的文章。

为了更清楚地说明这些优点,让我们在PyMC3的帮助下用贝叶斯的方式分析我们的问题。首先,我们需要考虑需要推断哪些参数。这很容易,有两个未知参数:

  • 蓝色按钮的转换率;

  • 红色按钮的转换率。

我们现在需要决定两个参数的先验分布。由于转化率可能介于 0 和 1 之间,因此Beta分布是有意义的。Beta 分布有两个参数 a 和 b,可以通过改变它们来创建不同的分布。

因为我们知道转化率相当小,所以它们的良好先验是 Beta(1, 99)。

现在,我们必须考虑如何将观察到的结果(包含0和1的数组)与这些参数联系起来进行建模。直接的方法是使用伯努利变量(Bernoulli_distribution),因为它们可以只取0和1的值,并使用一个概率参数。

长话短说,我们可以编写以下程序:

import pymc3 as pm

with pm.Model():
    blue_rate = pm.Beta('blue_rate', 1, 99)
    red_rate = pm.Beta('red_rate', 1, 99)
    
    blue_obs = pm.Bernoulli('blue_obs', blue_rate, observed=blue_conversions)
    red_obs = pm.Bernoulli('red_obs', red_rate, observed=red_conversions)
    
    trace = pm.sample(return_inferencedata=True)

加上这些解释,这个程序对你来说应该是有意义的。在模型的前两行,我们定义了先验参数。之后,我们设计了模型的输出(伯努利变量),并使用 "observed "参数给它提供了A/B测试准备中的观察结果。最后一行是著名的贝叶斯推理按钮的PyMC3版本。

trace对象的帮助下,你可以重建转换率的后验分布。

import arviz as az
az.plot_posterior(trace)

我们发现最大可能性估计转换率,蓝色约为0.854%,红色约为1.135%,甚至还有这些估计值的可信区间。例如,蓝色的比率在0.62%和1.1%之间,概率为94%。

很好,对吗?但这并没有回答我们的问题。红色按钮的转换率比蓝色按钮的转换率高的概率是多少?要回答这个问题,我们可以对两个后验分布进行抽样,看看红色比率比蓝色比率高的频率。幸运的是,这些样本已经存储在trace对象中。我们只需要看看红色比率样本比蓝色比率样本大的频率。

blue_rate_samples = trace.posterior['blue_rate'].values
red_rate_samples = trace.posterior['red_rate'].values

print(f'Probability that red is better: {(red_rate_samples > blue_rate_samples).mean():.1%}.')
# output (for me): Probability that red is better: 91.7%.

这是我们可以使用的东西!这对我们来说很容易,但其他人——我特别希望业务部门——都能理解。红色按钮更好,概率在 92% 左右?

“完美!”,可以选择店里的红色版本能够提高你的转化率!

现在想象一下:这只是一个有可能增加销售额的微小变化。可能还有其他各种更小和更大的东西可以修补,让你的商店变得更好。比赛才刚刚开始!

结论

有很多情况下,我们必须在两个选项中做出选择。这可以是一个按钮的颜色,也可以是网站上一个物体的位置,一个按钮或图片上的文字,任何有可能被改变的东西。

在两个版本中进行选择的一种方法是进行A/B测试。这个想法很简单。你可以把客户分成两组,这两组只在你想要更改的方面有所不同,即一个按钮的颜色。这样你就可以确定只有你改变的东西导致了结果的改变,而不是其他任何东西。不是人们的年龄或性别,也不是你收集数据的工作日。

通常情况下,人们使用经典的 A/B 测试,往往会使用 p 值。虽然这是统计学家熟悉的概念,但普通人经常会得到涉及 p 值的混淆陈述。这就是我们转向贝叶斯 A/B 测试的原因,它允许每个人都能轻松掌握结果。最后,我们甚至可以用 PyMC3 制定这样的结果,而不需要太多的代码。

原文链接????:

https://towardsdatascience.com/bayesian-a-b-testing-in-pymc3-54dceb87af74

整理不易,三连

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章