前段时间做了一个项目,该客户是来自教育行业,其主要的宣传获客手段就是在各个渠道投放广告,用广告将用户引流至网站。
但是广告的渠道非常多,哪些渠道效果很好,哪些效果不好。需要对广告效果分析针对性做广告效果测量和优化工作。我就想到之前学到的KMeans聚类分析广告的方法,在这里整理出来方法思路。供日后参考。
import numpy as np
import pandas as pd
from sklearn.feature_extraction import DictVectorizer # 字符串分类转整数分类库
from sklearn.preprocessing import MinMaxScaler # MinMaxScaler库
from sklearn.cluster import KMeans # KMeans 模块
from sklearn import metrics # 效果评估模块
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(context='notebook',font='simhei',style='whitegrid')
%matplotlib inline
data = pd.read_csv('./ad_data.txt',delimiter='\t')
data.head(3)
渠道代号 | 日均UV | 平均注册率 | 平均搜索量 | 访问深度 | 平均停留时间 | 订单转化率 | 投放总时间 | 素材类型 | 广告类型 | 合作方式 | 广告尺寸 | 广告卖点 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | A203 | 3.69 | 0.0071 | 0.0214 | 2.3071 | 419.77 | 0.0258 | 20.0 | jpg | banner | roi | 140*40 | 打折 |
1 | A387 | 178.70 | 0.0040 | 0.0324 | 2.0489 | 157.94 | 0.0030 | 19.0 | jpg | banner | cpc | 140*40 | 满减 |
2 | A388 | 91.77 | 0.0022 | 0.0530 | 1.8771 | 357.93 | 0.0026 | 4.0 | jpg | banner | cpc | 140*40 | 满减 |
数据审查
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 889 entries, 0 to 888
Data columns (total 13 columns):
渠道代号 889 non-null object
日均UV 889 non-null float64
平均注册率 889 non-null float64
平均搜索量 889 non-null float64
访问深度 889 non-null float64
平均停留时间 887 non-null float64
订单转化率 889 non-null float64
投放总时间 889 non-null float64
素材类型 889 non-null object
广告类型 889 non-null object
合作方式 889 non-null object
广告尺寸 889 non-null object
广告卖点 889 non-null object
dtypes: float64(7), object(6)
memory usage: 90.4+ KB
从上可以看出各个字段的数据类型,并发现字段“平均停留时间”有两个缺失值。
对于有些数据缺失较多,不容易看出来,可以这样统计:
# 这样用表格形式展示每个字段有多少缺失值
pd.DataFrame(data.isnull().sum(),columns=["num"]).T
渠道代号 | 日均UV | 平均注册率 | 平均搜索量 | 访问深度 | 平均停留时间 | 订单转化率 | 投放总时间 | 素材类型 | 广告类型 | 合作方式 | 广告尺寸 | 广告卖点 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
num | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
# 缺失值用字段均值代替
data_2 = data.fillna(data["平均停留时间"].mean())
# 描述性统计
data_2.describe().round(3)
日均UV | 平均注册率 | 平均搜索量 | 访问深度 | 平均停留时间 | 订单转化率 | 投放总时间 | |
---|---|---|---|---|---|---|---|
count | 889.000 | 889.000 | 889.000 | 889.000 | 889.000 | 889.000 | 889.000 |
mean | 540.847 | 0.001 | 0.030 | 2.167 | 262.669 | 0.003 | 16.053 |
std | 1634.410 | 0.003 | 0.106 | 3.801 | 224.112 | 0.012 | 8.509 |
min | 0.060 | 0.000 | 0.000 | 1.000 | 1.640 | 0.000 | 1.000 |
25% | 6.180 | 0.000 | 0.001 | 1.392 | 126.200 | 0.000 | 9.000 |
50% | 114.180 | 0.000 | 0.003 | 1.793 | 236.660 | 0.000 | 16.000 |
75% | 466.870 | 0.001 | 0.012 | 2.216 | 357.930 | 0.002 | 24.000 |
max | 25294.770 | 0.039 | 1.037 | 98.980 | 4450.830 | 0.216 | 30.000 |
从描述性统计我们可以看到
- UV的数据波动很大,说明不同渠道差