Python实战:A/B试验提升课程转化率的成效分析(二)

2021-09-17 14:21:57 浏览数 (1)

点击上方蓝字关注我们

A/B试验提升课程转化率的成效分析

上篇

1.试验背景和试验假设

2.试验设计和核心指标说明

3.实验所需样本量计算

下篇

1.流量随机性验证

2.核心监控指标检验

3.符号检验

4.小结

上篇文章链接:Python实战:A/B试验提升课程转化率的成效分析(一)

数据集和完整代码移步知识星球:https://t.zsxq.com/aAMByVv

如果需要了解A/B试验设计的流程及其试验误区的话可以点击下方链接,查看往期A/B试验相关文章!

数据分析师必会A/B 试验设计及其容易忽略的误区

Python实战:A/B试验提升课程转化率的成效分析(一)

01

流量随机性验证

为了保证试验结果的可靠性,此处试验设计了A/A试验。A/A试验可以监控试验设计的合理性,如果A/A试验中各个观测指标在两个组别中差异不大,则说明试验设计合理,不存在较大的偏差;如果观测指标在A/A试验中差异显著,则A/B试验的试验结果是不可采信的。

在此次A/B试验中有三个指标应该是保持不变的,分别是课程页面独立访客数量/免费试用按钮点击数量以及免费试用按钮点击率。这里的点击率指的是点击概率,即访问课程页面的独立访客中点击免费试用按钮的独立访客数量。因为A/B试验的试验变量是在用户点击免费试用按钮之后才触发的,所以触发试验变量之前的数据指标理论上是不应该发生变化的,只有这样才能够保证A/B试验没有受到其他因素的影响。基于以上的假设,我们进行数据可靠性验证。

代码语言:javascript复制
-计数差异性的验证
control=pd.read_csv("control_data.csv")
experiment=pd.read_csv("experiment_data.csv")
control.head()
Date         Pageviews       Clicks      Enrollments    Payments
Sat, Oct 11     7723         687         134.0           70.0
Sun, Oct 12     9102         779         147.0           70.0
Mon, Oct 13     10511        909         167.0           95.0
Tue, Oct 14     9871         836         156.0           105.0
Wed, Oct 15     10014        837         163.0           64.0 
 
 
control.describe()
 
          Pageviews       Clicks      Enrollments      Payments
count     37.00             37.00      23.00           23.00
mean      9339.00           766.97     164.57          88.39
std       740.24            68.29      29.98           20.65
min       7434.00           632.00     110.00          56.00
25%       8896.00           708.00     146.50          70.00
50%       9420.00           759.00     162.00          91.00
75%       9871.00           825.00     175.00          102.50
max       10667.00          909.00     233.00          128.00
 
 
pageviews_cont=control['Pageviews'].sum()
pageviews_exp=experiment['Pageviews'].sum()
pageviews_total=pageviews_cont pageviews_exp
print ("number of pageviews incontrol:", pageviews_cont)
print ("number of Pageviewsinexperiment:" ,pageviews_exp)
 
number of pageviews in control: 345543
number of Pageviewsin experiment: 344660

以上结果显示,试验组和对照组的页面访问人数接近

无论是对照组还是试验组的样本量,数据分析师都希望将总独立访客分一半到对照组,另一半放到试验组。对于一个独立访客来说,要么被分配到对照组,要么被分配到试验组,这是一个非黑即白的事情,那么该独立样本被分配到对照组的概率为0.5,则分配给对照组的独立访客数应该满足是满足二项分布的随机变量X。

当样本量N足够大时,由中心极限定理可知,二项分布可以近似正态分布,因此有以下公式

此处数据分析师需要测试的是观察到的概率值与p=0.5并无差异,为此计算出置信度在95%可以接受的边界误差以及置信区间,计算公式如下:

代码语言:javascript复制
#计算p值得公式
def cal_pvalue(z_score):
    returnscipy.stats.norm.sf(abs(z_score))
defcal_confidence_interval(molecular,denominator,p=0.5,alpha=0.05):  
    p_obs=round(molecular/(denominator),4)
   sd=mt.sqrt(p*(1-p)/(denominator))
    z_score=(p_obs-p)/sd
   p_value=round(cal_pvalue(z_score)*2,4)
   ME=round(get_z_score(1-(alpha/2))*sd,4)
    print ("P_value为",p_value,"置信区间的范围在[",p-ME,",",p ME,"],观测到的样本比率值是",p_obs,)

首先,我们先对独立访客数量、点击免费试用按钮的独立访客数量以及免费试用按钮点击率进行检验,用户在访问课程首页时并未涉及道不同策略,只有点击了免费试用按钮才会出现不同的策略。所以用户在点击免费试用按钮前的数据指标在试验组和对照组应该是无显著性差异的(原假设),为了验证这个问题,这里对这三个指标进行显著性检验。

代码语言:javascript复制
#计算试验组样本量的置信区间分布
cal_confidence_interval(pageviews_cont,pageviews_total,p=0.5,alpha=0.05)
 
P_value为 0.3188 置信区间的范围在[ 0.4988 , 0.5012 ],观测到的样本比率值是0.5006

有上述统计结果可知,独立访客数量在试验组和对照组之间是没有显著性差异的。

代码语言:javascript复制
 
#验证试验组的用户点击数
#验证试验组的用户点击数
clicks_cont=control['Clicks'].sum()
clicks_exp=experiment['Clicks'].sum()
clicks_total=clicks_cont clicks_exp
#计算试验组的置信区间
cal_confidence_interval(clicks_cont,clicks_total,p=0.5,alpha=0.05)
 
P_value为 0.8118 置信区间的范围在[ 0.4959 , 0.5041 ],观测到的样本比率值是0.5005

对点击免费试用按钮的独立访客数量进行检验得到同样的结果,该指标在试验组和对照组之间仍然是不显著的。

免费试用按钮的点击率的差异验证

对于免费试用按钮点击率(CTP)这个比例类型的指标来说,数据分析师的期望是其在对照组和实验组里是没有差异的(原假设)。如果记试验组的免费试用按钮点击率为,对照组的免费试用按钮点击率为,则原假设可以记为:

根据以上理论基础,我们对免费试用按钮点击率这个指标进行假设检验,不同的是本案例中的总体的免费试用按钮点击率是已知的,可直接带入公式进行计算。

代码语言:javascript复制
def cal_proportion_confidence(p1,p2,p,n1,n2):
   d=round(p2-p1,4)
   sd=mt.sqrt(p*(1-p)*(1/n1 1/n2))
   z_score=d/sd
   p_value=round(cal_pvalue(z_score)*2,6)
   ME=round(get_z_score(1-(alpha/2))*sd,4)
    print("P_value为",p_value,"置信区间的范围在[",d-ME,",",d ME,"],由于试验产生的变化值",d*100,"%")
 
# 验证试验组和测试组之间的点击率是否有差异
p1=clicks_cont/pageviews_cont
p2=clicks_exp/pageviews_exp
p=clicks_total/pageviews_total
n1=pageviews_cont
n2=pageviews_exp
cal_proportion_confidence(p1,p2,p,n1,n2)
 
P_value为 0.8798 置信区间的范围在[ -0.0013 , 0.0013 ],由于试验产生的变化值 -0.01%

通过对免费试用按钮的点击率进行显著性检验,我们发现该指标在试验组和对照组之间是不显著的。到此为止A/A试验结果分析完毕,所有的辅助指标都已经通过验证,说明除了受到策略影响外,A/B两组用户并未受到外界不可知因素的影响,这也是后续数据分析结论可靠的前提。

02

核心监控指标的检验

辅助指标的出现是为了保证A/B试验除了试验策略本身,不受其他外界不可控因素的影响。辅助指标的验证是试验可靠的保障,有了这重保障之后数据分析师更关心的是试验策略对于业务带来的影响,这时候就需要对核心的数据指标进行验证。此处,我们对课程转化率以及课程付费转化率进行假设检验。

首先,我们先对指标课程转化率进行显著性检验,实现代码如下。

0 人点赞