一、项目背景
在媒体信息碎片化、用户行为移动化、需求个性化的大环境下,企业不仅需要靠自身产品和技术实力赢得用户关注度,还需要掌握有效的推广及营销策略以扩大知名度。此外,随着营销成本的与日俱增,越来越多的企业提出了精准营销的需求,企业希望每一个用户行为的记录都能被转化成客户,为下一步业务讨论和数据分析提供支持。这种用户行为的记录数据,在互联网、广告、电商等行业通常被称为“流量”。流量数据的分析与运营能够使企业的数据仓库不再是“数据坟墓”,最大化企业的营销正向效果,从而高效实现用户增长。
二、数据概述
本项目数据来源某公司的营销部门,包含了营销数据、网站分析系统数据和运营系统数据。公司投放广告的渠道众多且效果不同,现公司想要了解不同类别广告媒体的营销效果,以完成成本最小化、广告效果最大化的目标。
源数据共有889条数据记录,除了渠道代号外,有12个属性。源数据存在缺失值和异常值,属性解释如表所示。
属性名 | 说明 | 数据类型 |
---|---|---|
渠道代码 | 唯一性标志 | object |
日均UV | 每天从一个渠道 中 带来的一个访客 | float64 |
平均注册率 | 每天平均注册的用户数量/平均每日的访问量 | float64 |
平均搜索量 | 平均每个访问的搜索次数 | float64 |
访问深度 | 总页面浏览量/平均每天的访问量 | float64 |
平均停留时间 | 总停留时间/平均每天的访问量 | float64 |
订单转化率 | 总订单数量/平均每天的访问量 | float64 |
投放总时间 | 每个广告媒介在站外投放的天数 | float64 |
素材类型 | 包括jpg、gif、swf、sp | object |
广告类型 | 广告投放类型,包括banner、tips、横幅、通栏、暂停及不确定 | object |
合作方式 | 包括roi、cpc、cp、cpd | object |
广告尺寸 | 每个广告投放的尺寸大小 | object |
广告卖点 | 广告素材上主要的卖点诉求信息,包括打折、满减、满赠、秒杀、直降、满返 | object |
三、项目技术
- 数据预处理:Max-Min标准化、利用LabelEncode进行字符串转换、相关性分析、缺失值处理、数据合并
- 数据建模:KMeans聚类算法、基于最优数据尺度确定最佳K值、利用平均轮廓系数评估聚类效果
- 数据可视化:使用Matplotlib绘制雷达图
四、代码实现过程
(一)数据获取
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt #导入绘图包
from sklearn.cluster import KMeans # 导入sklearn聚类模块
from sklearn import metrics # 导入sklearn效果评估模块
from sklearn.preprocessing import MinMaxScaler,LabelEncoder #导入数据预处理模块
#数据获取
data=pd.read_table("ad_performance.txt",delimiter='\t')
(二)数据预处理
#数据预览
print(data.tail().T) #打印末尾五条数据,T进行行列转置
print(data.dtypes) #查看各列的数据类型
explore=data.describe(include='all').T #指定include='all'对所有类型的数据做描述性统计
explore['null']=len(data)-explore['count']#查看缺失数量
explore=explore[['null','max','min']]
print(explore) #查看缺失值、最大值、最小值
>>> null max min
渠道代号 0 NaN NaN
日均UV 0 25294.8 0.06
平均注册率 0 0.0391 0
平均搜索量 0 1.037 0
访问深度 0 98.9799 1
平均停留时间 2 4450.83 1.64
订单转化率 0 0.2165 0
投放总时间 0 30 1
素材类型 0 NaN NaN
广告类型 0 NaN NaN
合作方式 0 NaN NaN
广告尺寸 0 NaN NaN
广告卖点 0 NaN NaN
#查看值域
col_names = [] # 定义要查看的列
for col_name in col_names: # 循环读取每个列
unique_value = np.sort(raw_data[col_name].unique()) # 获得列的唯一值
print('{:^50}'.format('{1} unique va