使用 Python 进行 A/B 测试应用程序
使用 Python 进行 A/B 测试应用程序
什么是 A/B 测试?
A/B 测试只是“两个或多个组之间的”。 统计 ' 方面 ' 重要的' 这是一种实验方法,我们试图了解是否存在差异。
换句话说,它是一种基于统计基础的测试方法,哪种变化最适合您希望您的产品覆盖的用户。
A/B 测试在哪里使用?
今天,从移动应用程序设计到数字营销活动,从产品评论和评分排名到比较已建立算法的效率,A/B 测试被用于许多领域。
例如,您有两个不同的产品图片来宣传您正在销售的产品。您对这两个图像进行了 10 天的测试,图像 A 的访问者率为 0.18,图像 B 的访问者率为 0.20。这种差异是偶然产生的吗?还是有统计学上的显着差异?
或者,您更改了移动应用程序的设计,并为某个群体尝试了新设计。您观察到在移动应用程序上花费的时间随着您的新设计而增加。这种增长在统计上是否显着?
A/B 测试是一种广泛使用的统计方法,可以找到这些问题和许多类似示例的答案,并科学地解释这些差异是否巧合。
A/B 测试阶段
1- 假设的成立
2-假设控制
3- 假设的应用
比较AB测试和投标方法的转换——Python实现
业务问题
Facebook 最近推出了一种新的出价类型“平均出价”,作为现有出价类型“最高出价”的替代方案。我们的一位客户决定测试这项新功能,并希望进行 A/B 测试,看看平均出价的转化率是否高于最高出价。 A/B 测试已经进行了 1 个月,现在期待我们分析这次 A/B 测试的结果。我们客户的最终成功标准是购买。因此,我们将重点关注购买指标进行统计测试。
数据集故事
在这个包含公司网站信息的数据集中,有用户看到和点击的广告数量等信息,以及来自这里的收益信息。有两个独立的数据集,控制组和测试组。这些数据集位于 ab_testing.xlsx excel 的单独工作表中。最高出价应用于对照组,平均出价应用于测试组。
变量;
印象:广告浏览量
点击:展示广告的点击次数
购买:广告点击后购买的产品数量
收益:购买产品后的收益
准备和分析数据
图书馆的设置和安排;
将 numpy 导入为 np
将熊猫导入为 pd
将 matplotlib.pyplot 导入为 plt
将 seaborn 导入为 sns
# !pip install statsmodels
将 statsmodels.stats.api 导入为短信
从 scipy.stats 导入 ttest_1samp、shapiro、levene、ttest_ind、mannwhitneyu、\
pearsonr, spearmanr, kendalltau, f_oneway, kruskal
从 statsmodels.stats.proportion 导入 ratios_ztest
pd.set_option('display.max_columns', 无)
pd.set_option('display.max_rows', 10)
pd.set_option('display.float_format', lambda x: '%.5f' % x)
读取数据集;
df_control = pd.read_excel("ab_testing.xlsx", sheet_name="控制组")
df_test = pd.read_excel("ab_testing.xlsx", sheet_name="测试组")
结合对照组和测试组数据;
df_control["group"] = "控制"
df_test["组"] = "测试"
df = pd.concat([df_control,df_test],axis=0,ignore_index=True)
首先,我们在两个数据集中都定义了一个名为“group”的变量,并为控制组定义了“control”,为测试组定义了“test”值。然后我们将这两个数据集与 pd.concat 结合起来。
定义 A/B 测试假设
要确定两组的平均收入是否存在差异,首先必须建立假设。
何:控制组和测试组的平均收益回报率没有差异。
H1:控制组和测试组的平均收益回报率存在差异。
假设结果根据要计算的“p”值来解释,该值是要进行的测试的结果。
p<0.05 ise hipotez REDDEDİLİR。
如果 p>0.05,则不能拒绝该假设。
分析对照组和测试组的购买平均值;
df.groupby("group").agg({"Purchase": "mean"})
测试组的平均增益似乎更高。我们的目的是确定这种差异是否作为要执行的测试的结果在统计上显着。
假设控制
假设检查,这是测试的第二阶段,对数据集执行正态性假设和方差同质性测试。如果提供了正态性和方差同质性的假设,则应用参数检验,如果两者均未提供,则应用非参数检验。
1-正态假设
H0:提供正态分布假设。
H1:未提供正态分布假设。
test_stat, pvalue = shapiro(df.loc[df["group"] == "control", "Purchase"])
print('Test Stat = %.4f, p-value = %.4f' % (test_stat, pvalue))
test_stat, pvalue = shapiro(df.loc[df["group"] == "test", "Purchase"])
print('Test Stat = %.4f, p-value = %.4f' % (test_stat, pvalue))
对于这两个组,我们使用 shapiro 测试测试了 Purchase 变量与正态分布的兼容性。
对照组的“p值”0.5891
测试组的“p 值”为 0.1541。
由于 p > 0.05,HO 不能被拒绝。它满足两个正态分布假设。
2-方差同质性
H0:方差齐次。
H1:方差不均匀。
test_stat, pvalue = levene(df.loc[df["group"] == "control", "Purchase"],
df.loc[df["group"] == "test", "Purchase"])
print('Test Stat = %.4f, p-value = %.4f' % (test_stat, pvalue))
我们使用 Leneve 检验测试了两组的方差同质性。
p 值 = 0.1083
由于 p > 0.05,HO 不能被拒绝。方差是均匀的。
假设的应用
保证了正态分布和方差的同质性。 ** '独立的两样本 T 检验(参数检验)'** 我们将实施。
test_stat, pvalue = ttest_ind(df.loc[df["group"] == "control", "Purchase"],
df.loc[df["group"] == "test", "Purchase"],
equal_var=True) # 如果正常但没有方差则为 false
print("测试统计 = %.4f, p-value = %.4f" % (test_stat, pvalue))
我们使用 ttest_ind 函数应用了独立的两样本 T 检验。
p 值 = 0.3493
由于 p > 0.05,HO 不能被拒绝。
结论:对照组和试验组的平均增益之间没有统计学上的显着差异。
df.groupby("group").agg({"Purchase": "mean",
“收入”:“平均”})
当我们检查汇总统计数据时,可以看到 Purchase 和 Earning 变量的平均值和中值相对较高。如果成本相同,则可能首选应用于测试组的平均投标方法。但是,如果成本不同,应该首选低成本的方法。
在本文中,我尝试用一种尽可能简单的语言来解释 A/B 测试。我希望这是有用的内容。对于您的问题,您可以通过我的 LinkedIn 帐户与我联系。在我的下一篇文章中见。
资源 :
米尔讲义
瓦希特凯斯金
领英 : https://www.linkedin.com/in/ufuk-arslan-7a6a3063/
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明