AB测试

公司每月都会开展促销活动,虽然这种促销活动是销售比率比较高的经营策略,然而公司经营层指出“虽然促销活动的销售额较高,但购买率却比较低”。通过和公司的其他应用的促销活动相比,我们发现购买率确实比较低。

提出假设:

1、活动的内容有问题

  • 促销产品并不是用户需要的
  • 促销力度不够,对用户没有吸引力

2、广告的外观展示有问题

 

针对广告外观展示问题,广告的点击率比较低,从而对购买率产生影响。可以通过之前用户点击率较高的广告替换目前所使用的广告。

 

我们准备了两个不同广告,通过收集数据来比较那个广告更容易被用户点击。从而影响购买率

 

施行测试需要注意的几点:

  1. 采用AB测试的方法排除外部干扰
  2. AB测试中的用户分组必须遵循随机的原则。
  3. 同时进行AB测试的陷阱
  • 所有的AB测试都采用相同的分组方法
  • 各组中参与其他测试的用户比例不同
  1. 利用统计学上的假设检验来过滤

 

收集和加工验证所需的数据

  1. 关于广告曝光次数的信息
  2. 关于广告点击次数的信息

 

 

数据处理过程:

library(plyr)
> library(ggplot2)
> library(scales)
> imp_goal<-merge(IMP,GOAL,by=c('transaction_id'),all.x=T,suffixes=c('','.1'))
> head(imp_goal)
  transaction_id   log_date app_name  test_name test_case user_id
1              1 2013-10-02  game-01 sales_test         A   49017
2              2 2013-10-02  game-01 sales_test         B   49018
3              3 2013-10-02  game-01 sales_test         A   44338
4              4 2013-10-02  game-01 sales_test         A   44339
5              5 2013-10-02  game-01 sales_test         A   28598
6              6 2013-10-02  game-01 sales_test         B   30306
  log_date.1 app_name.1 test_name.1 test_case.1 user_id.1
1       <NA>       <NA>        <NA>        <NA>        NA
2       <NA>       <NA>        <NA>        <NA>        NA
3       <NA>       <NA>        <NA>        <NA>        NA
4       <NA>       <NA>        <NA>        <NA>        NA
5       <NA>       <NA>        <NA>        <NA>        NA
6       <NA>       <NA>        <NA>        <NA>        NA
> imp_goal$user<-ifelse(is.na(imp_goal$user_id.1),0,1)
> head(imp_goal)
  transaction_id   log_date app_name  test_name test_case user_id
1              1 2013-10-02  game-01 sales_test         A   49017
2              2 2013-10-02  game-01 sales_test         B   49018
3              3 2013-10-02  game-01 sales_test         A   44338
4              4 2013-10-02  game-01 sales_test         A   44339
5              5 2013-10-02  game-01 sales_test         A   28598
6              6 2013-10-02  game-01 sales_test         B   30306
  log_date.1 app_name.1 test_name.1 test_case.1 user_id.1 user
1       <NA>       <NA>        <NA>        <NA>        NA    0
2       <NA>       <NA>        <NA>        <NA>        NA    0
3       <NA>       <NA>        <NA>        <NA>        NA    0
4       <NA>       <NA>        <NA>        <NA>        NA    0
5       <NA>       <NA>        <NA>        <NA>        NA    0
6       <NA>       <NA>        <NA>        <NA>        NA    0
> 
> 
> a<-ddply(imp_goal,.(test_case),summarize, dianji = round(sum(user)/length(transaction_id),5))
> a
 
 
弄清楚AB的点击率是否存在显著性差异
  test_case  dianji
1         A 0.08026
2         B 0.11546
> chisq.test(imp_goal$test_case,imp_goal$user)
 
      Pearson's Chi-squared test with Yates' continuity correction
 
data:  imp_goal$test_case and imp_goal$user
X-squared = 308.38, df = 1, p-value < 2.2e-16
 
针对上述的卡方检验,结果的p值2.2e-16是个非常小的值。p值越接近0差异性越大。当p值小于0.05时,称为存在显著性差异。
 
 
广告A和B的点击率的时间序列变化的可视化
 

>

在时间序列图中,如果广告B的效果始终比A好的话,那就没有问题,但如果只是在某个时间段内广告B的效果更好,那就需要考虑别的原因了。通过上图可知,广告B的点击率大多数都优于A。所以总的来说,B的的效果始终都比A好

注意:存在显著性差异,需要确认这种差异在商业领域是否存在意义。

> db<-ddply(imp_goal,.(log_date,test_case),summarize,imp=length(transaction_id),cv=sum(user),cvr=sum(user)/length(transaction_id))
> db
     log_date test_case  imp  cv        cvr
1  2013-10-01         A 1358  98 0.07216495
2  2013-10-01         B 1391 176 0.12652768
3  2013-10-02         A 1370  88 0.06423358
4  2013-10-02         B 1333 212 0.15903976
5  2013-10-03         A 1213 170 0.14014839
6  2013-10-03         B 1233 185 0.15004055
> db<-ddply(db,.(test_case),transform,cvr.ag=sum(cv)/sum(imp))
> db
     log_date test_case  imp  cv        cvr     cvr.ag
1  2013-10-01         A 1358  98 0.07216495 0.08025559
2  2013-10-02         A 1370  88 0.06423358 0.08025559
3  2013-10-03         A 1213 170 0.14014839 0.08025559
4  2013-10-04         A 1521  89 0.05851414 0.08025559
5  2013-10-05         A 1587  56 0.03528670 0.08025559
6  2013-10-06         A 1219 120 0.09844135 0.08025559
> ggplot(db,aes(x=as.Date(log_date),y=cvr,col=test_case,lty=test_case,shape=test_case))+geom_point(size=4)+geom_line(lwd=1)+geom_line(aes(y=cvr.ag,col=test_case))+scale_y_continuous(label=percent,limits=c(0,max(db$cvr)))

 

 
 

 

 

 

mysql> use shuju;

Database changed

mysql> select log_date,test_case,count(transaction_id) as imp,sum(user) as cv ,s

um(user)/count(transaction_id) as cvr ,(select sum(user)/count(transaction_id) f

rom imp_goal group by test_case )from imp_goal group by log_date,test_case;

ERROR 1242 (21000): Subquery returns more than 1 row

mysql>

mysql>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值