数据分析_支付宝营销结果分析

'''
A/B测试是为了得到同一个目标进行制定的两个方案,在同一时间维度,分别让组成成分相似的用户群组随机使用一个方案,
最后根据结果进行判断哪一个方案效果好。
​
数据集来源:阿里云天池
  • dmp_id:营销策略编号(这里根据数据情况设定为1:对照组,2:营销策略一,3:营销策略二)
  • user_id:支付宝用户ID
  • label:用户当天是否点击活动广告(0:未点击,1:点击)
'''
'
A/B测试是为了得到同一个目标进行制定的两个方案,在同一时间维度,分别让组成成分相似的用户群组随机使用一个方案,
最后根据结果进行判断哪一个方案效果好。

数据集来源:阿里云天池

'
# 导入相关的包
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
​
alipay_audi_exp4076/
# 导入数据并进行处理
data = pd.read_csv("alipay_audi_exp4076/effect_tb.csv",header = None,names = ['dt','userid','label','dmp_id'])
data.head()
dt    userid    label    dmp_id
0    1    1    0    1
1    1    1000004    0    1
2    1    1000004    0    2
3    1    1000006    0    1
4    1    1000006    0    3
umns=
# 根据后面的计算,dt列在后面的处理中用不到,给予删除
data = data.drop(columns='dt')
data.head()
userid    label    dmp_id
0    1    0    1
1    1000004    0    1
2    1000004    0    2
3    1000006    0    1
4    1000006    0    3
描述性统计
# 查查描述性统计
data.describe()
userid    label    dmp_id
count    2.645958e+06    2.645958e+06    2.645958e+06
mean    3.112995e+06    1.456297e-02    1.395761e+00
std    1.828262e+06    1.197952e-01    6.920480e-01
min    1.000000e+00    0.000000e+00    1.000000e+00
25%    1.526772e+06    0.000000e+00    1.000000e+00
50%    3.062184e+06    0.000000e+00    1.000000e+00
75%    4.721132e+06    0.000000e+00    2.000000e+00
max    6.265402e+06    1.000000e+00    3.000000e+00
data.shape
# 查看是否有重复值以及相关的处理
data.shape
(2645958, 3)
data.duplicated().sum()
12983
data
data = data.drop_duplicates()
data
userid    label    dmp_id
0    1    0    1
1    1000004    0    1
2    1000004    0    2
3    1000006    0    1
4    1000006    0    3
5    1000007    0    1
6    1000008    0    3
7    1000014    0    1
8    1000016    0    3
9    1000018    0    1
10    1000018    0    3
11    100002    0    1
12    1000020    0    3
13    1000024    0    1
14    1000025    0    1
15    1000028    0    2
16    1000029    0    1
17    1000034    0    1
18    1000036    0    1
19    100004    0    1
20    1000040    0    2
21    1000046    0    3
22    1000049    0    1
23    1000057    0    1
24    1000058    0    3
25    1000059    0    1
26    1000060    0    2
27    1000064    0    1
28    1000067    0    1
29    100007    0    1
...    ...    ...    ...
2645928    999814    0    1
2645929    999819    0    1
2645930    999837    0    1
2645931    999840    0    1
2645932    999843    0    1
2645933    999858    0    2
2645934    999858    0    3
2645935    999863    0    2
2645936    999864    0    1
2645937    999865    0    1
2645938    999875    0    1
2645939    999877    0    1
2645940    99988    0    1
2645941    999889    0    1
2645942    999909    0    1
2645943    999910    0    1
2645944    999911    0    2
2645945    999911    0    3
2645946    999915    0    1
2645947    999940    0    2
2645948    999955    0    1
2645949    999957    0    1
2645950    999958    0    1
2645951    999960    0    1
2645952    999965    0    1
2645953    999966    0    1
2645954    999971    0    1
2645955    99999    0    2
2645956    999990    0    1
2645957    999992    1    1
2632975 rows × 3 columns

data.info(null_counts = True)
<class 'pandas.core.frame.DataFrame'>
Int64Index: 2632975 entries, 0 to 2645957
Data columns (total 3 columns):
userid    2632975 non-null int64
label     2632975 non-null int64
dmp_id    2632975 non-null int64
dtypes: int64(3)
memory usage: 80.4 MB
# 异常值的检查
# 通过透视表检查各属性字段是够存在不合理取值
data.pivot_table(index='dmp_id',columns = 'label',values='userid',aggfunc = 'count',margins=True)
label    0    1    All
dmp_id            
1    1881745    23918    1905663
2    404811    6296    411107
3    307923    8282    316205
All    2594479    38496    2632975
d
# 查看字段类型
data.dtypes
userid    int64
label     int64
dmp_id    int64
dtype: object
# 样本容量检验
'''
在进行A/B测试前,需检查样本容量是否满足试验所需最小值
首先需要设定点击率基准线以及最小提升比例,我们将对照的点击率设为基准线
'''
'
在进行A/B测试前,需检查样本容量是否满足试验所需最小值
首先需要设定点击率基准线以及最小提升比例,我们将对照的点击率设为基准线
'
l
data[data['dmp_id'] == 1]['label'].mean()
0.012551012429794775
# 对照组点击率为1.26%,假定我们希望新的营销策略能让广告点击率至少提升1分百分点,则算的最小样本量为:2167
data['dmp_id'].value_counts()
1    1905663
2     411107
3     316205
Name: dmp_id, dtype: int64
,index=False
# 两组营销活动的样本量分别为41.11万和31.62万,满足最小样本需求
# 将处理好的数据保存
data.to_csv('data_ali_output.csv',index=False)
3
# 假设检验
# 先观察几组试验的点击率情况
print('对照组: ',data[data['dmp_id'] == 1]['label'].mean())
print('策略一: ',data[data['dmp_id'] == 2]['label'].mean())
print('策略二: ',data[data['dmp_id'] == 3]['label'].mean())
对照组:  0.012551012429794775
策略一:  0.015314747742072015
策略二:  0.026191869198779274
'''根据结果可以看到策略一和策略二都有一定的提升,其中策略一提升0.2个百分点,
策略二提升1.3个百分点,只有策略二满足了前面我们对点击率提升最小的要求.
​
接下来进行假设检验,看策略二点击率的提升是否显著
​
a 零假设和备择假设
记对照组点击率为p1,策略二点击率为p2,则
    零假设H0:  p1 >= p2
    备择假设H1: p1 < p2
​
b. 分布类型、检验类型和显著性水平
样本服从二点分布,独立双样本,样本大小n>30,总体均值和标准差未知,所以采用Z检验。显著性水平α取0.05.
​
''''根据结果可以看到策略一和策略二都有一定的提升,其中策略一提升0.2个百分点,
策略二提升1.3个百分点,只有策略二满足了前面我们对点击率提升最小的要求.

接下来进行假设检验,看策略二点击率的提升是否显著

a 零假设和备择假设
记对照组点击率为p1,策略二点击率为p2,则
    零假设H0:  p1 >= p2
    备择假设H1: p1 < p2

b. 分布类型、检验类型和显著性水平
样本服从二点分布,独立双样本,样本大小n>30,总体均值和标准差未知,所以采用Z检验。显著性水平α取0.05.

'
r
# 公式计算
# 用户数
n_old = len(data[data.dmp_id == 1])   #对照组
n_new = len(data[data.dmp_id == 3])   #策略二
# 点击数
c_old = len(data[data.dmp_id == 1][data.label == 1])
c_new = len(data[data.dmp_id == 3][data.label == 1])
​
# 计算点击率
r_old = c_old / n_old
r_new = c_new / n_new
​
# 总和点击率
r = (c_old + c_new) / (n_old + n_new)
r
​
D:Anacondalibsite-packagesipykernel_launcher.py:7: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
  import sys
D:Anacondalibsite-packagesipykernel_launcher.py:8: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
  
0.014492310074225832
z
# 计算检验统计量Z
z = (r_old - r_new) / np.sqrt(r *(1-r)*(1/n_old + 1/n_new))
z
-59.44168632985996
z_alpha
# 查看α=0.05对应的Z分位数
from scipy.stats import norm
z_alpha = norm.ppf(0.05)
z_alpha
-1.6448536269514729
是显著的。
# z_alpha = -1.64,检验统计量z=-59.44,该检验为左侧单位检验,拒绝域为{z<z_alpha}
# 所以我们可以得到结论:原假设不成立,策略二点击率的提升在统计上是显著的。
于对照组点击率有近一倍,因而在两组营销则略中应该选择第二组进行推广。
#结论
综上所述,两种策略中,策略二对广告的点击率有显著提升效果,且较于对照组点击率有近一倍,因而在两组营销则略中应该选择第二组进行推广。
原文地址:https://www.cnblogs.com/spp666/p/13657245.html