涉及字段如下:
- dmp_id:营销策略编号(源数据文档未作说明,这里根据数据情况设定为1:对照组,2:营销策略一,3:营销策略二)
- user_id:支付宝用户ID
- label:用户当天是否点击活动广告(0:未点击,1:点击)
一. 数据清洗(python)
1. 导入常用库并导入数据
import pandas as pd
import numpy as np
data = pd.read_csv('E:\datalist\zf/effect_tb.csv')
data.columns = ['dt','user_id','label','dmp_id']
# 日志天数属性用不上,删除该列
data = data.drop(columns = 'dt')
data.head()
2. 重复值处理
data.shape
data.nunique()
- 数据行数与独立用户数不统一,检查是否存在重复行.
data[data.duplicated(keep = False)].sort_values(by = ['user_id'])
- 不难看出user_id有重复行.
data.drop_duplicates()
data[data.duplicated(keep = False)]
- 删除重复值,并展示.
3. 空值及数据类型
data.info(null_counts = True)
- 数据集无空值且数据类型正常,无需进行处理。
4. 保存数据
data.to_csv("./output.csv", index = False)
二. 【A/B测试】(mysql)
1. 导入数据
-
目前的数据的保存格式为csv,需要先将数据导入到数据库当中才能执行查询,第一部选择一个库右键选择导入向导.
-
第二步选择导入类型,直接选择CSV文件.
-
第三步为选择数据源的路径,我们找到对应的数据后,勾选需要导入的表.
- 完成前文的操作之后便可以点击">>"跳至最后的步骤,中间的步骤由于数据十分工整,不需要进行额外操作.
- 到达下图的界面,按照指引直接点击"开始",导入成功,会在日志兰中显示Finished successfully,如下图所示.
2. 假设检验
- 通过营销策略编号分组,求出点击率.
select dmp_id,avg(label) 点击率
from output
group by dmp_id;
- 首先假定我们希望新的营销策略能让广告点击率至少提升1个百分点.
- 可以看到策略一和策略二相较对照组在点击率上都有不同程度提升。
- 其中策略一提升0.2个百分点,策略二提升1.3个百分点,只有策略二满足了前面我们对点击率提升最小值的要求。
- 接下来需要进行假设检验,看策略二点击率的提升是否显著。
a. 零假设和备择假设
- 记对照组点击率为p1,策略二点击率为p2,则:
- 零假设 H0: p1 ≥ p2
- 备择假设 H1: p1 < p2
b. 分布类型、检验类型和显著性水平
- 样本服从二点分布,独立双样本,样本大小n>30,总体均值和标准差未知,所以采用Z检验。显著性水平α取0.05。
2.1 用户数
- 后续的查询都是基于筛选后的数据,因此这里新建一个表user_num去储存查询结果.此处用到了联合查询(union).
create table user_num as
(select dmp_id,count(dmp_id) 用户数
from output where dmp_id=1
union
select dmp_id,count(dmp_id)
from output where dmp_id=3);
2.2 点击数
- 同上新建表click.
create table click as
(select dmp_id,count(dmp_id) 点击数
from output where dmp_id=1 and label=1
union
select dmp_id,count(dmp_id)
from output where dmp_id=3 and label=1);
2.3 计算点击率
- 新建表rate.
create table rate as
(select a.dmp_id,b.`点击数`/a.`用户数` as 点击率
from user_num a
join click b on a.dmp_id = b.dmp_id);
2.4 总和点击率
select sum(b.`点击数`)/sum(a.`用户数`) 总和点击率
from user_num a
join click b on a.dmp_id = b.dmp_id;
- 得出总和点击率为0.014.
2.5 计算统计量Z
select (list1.`差`)/sqrt(c.`总和点击率`*(1-c.`总和点击率`)*(list2.`和`)) 值
from
(select a.`点击率`-b.`点击率` 差
from rate a ,rate b where b.dmp_id =3 and a.dmp_id =1) list1,
(select sum(`点击数`)/sum(`用户数`) 总和点击率
from user_num join click on user_num.dmp_id = click.dmp_id) c,
(select (1/d.`用户数`)+(1/e.`用户数`) 和
from user_num d ,user_num e where d.dmp_id = 3 and e.dmp_id =1) list2;
- z_alpha = -1.645, 检验统计量z = -59.566,该检验为左侧单尾检验,拒绝域为{z<z_alpha}。
- 所以我们可以得出结论:原假设不成立,策略二点击率的提升在统计上是显著的。
总结
- 综上所述,两种营销策略中,只有策略二对广告点击率有显著提升效果,相较于对照组点击率提升了近一倍,因而在两组营销策略中应选择第二组进行推广。