一、项目背景与目的
1. 背景
随着互联网的飞速发展,各种网络产品应运而生,如电商网站,移动应用,视频媒体,新媒体等等。网络广告也成为了一种主要的广告形式。而网络广告的形式具有复杂和多样化的特点。
2. 问题
当我们完成一个重点活动的全网营销。该从哪些维度来总结和评估本次推广的得失呢?
实现广告的精准投放就是最大化投入产出的过程,需要知道我们的用户在哪里,在哪些渠道能够更大化用户价值,以及各个渠道用户价值的变化规律。通过对渠道方式和渠道质量的追踪,以引流和转化率为关键事件,做好渠道的优化和维护。
二、分析维度
1. 主体方向
本次项目将通过研究阿里天池数据,从广告及渠道,投放时间,投放人群,以点击率为数据指标进行数据分析,从而给出更好的方案和建议,实现高效率高产出。
2. 维度细分
2.1 广告及渠道
- 不同的商品价格对点击率的影响
- 100元以内广告商品点击率的用户组成
- 哪些类别的广告点击率更高,哪些类别的点击率低
- 低点击率商品分析
- 高点击商品与用户性别关系
- top10商品资源位点击量
2.2 投放时间
- 各时段点击量
- 每日点击量趋势
- 高点击商品各时段点击量
2.3 人群画像
- 年龄层与消费档次
- 购物深度与性别
- 不同年龄段、不同性别的用户点击率有什么差异
- 用户价值
三、数据概览
1. 数据描述
本数据集是阿里巴巴提供的一个淘宝展示广告点击率预估数据集,抽样114万用户8天内的广告展示(2600万条记录)以及全部广告的基本信息,用户的基本信息。
本项目将三个数据集链接在一起,以方便后续分析。
2. 数据含义及基本信息
(1) user_id:脱敏过的用户ID; (2) adgroup_id:脱敏过的广告单元ID;
(3) time_stamp:时间戳; (4) pid:资源位;
(5) noclk:为1代表没有点击;为0代表点击; (6) clk:为0代表没有点击;为1代表点击;
(1) adgroup_id:脱敏过的广告ID; (2) cate_id:脱敏过的商品类目ID;
(3) campaign_id:脱敏过的广告计划ID; (4) customer_id:脱敏过的广告主ID;
(5) brand:脱敏过的品牌ID; (6) price: 宝贝的价格
(1) userid:脱敏过的用户ID; (2) cms_segid:微群ID;
(3) cms_group_id:cms_group_id; (4) final_gender_code:性别 1:男,2:女;
(5) age_level:年龄层次; (6) pvalue_level:消费档次,1:低档,2:中档,3:高档;
(7) shopping_level:购物深度,1:浅层用户,2:中度用户,3:深度用户
(8) occupation:是否大学生 ,1:是,0:否 (9) new_user_class_level:城市层级
******************** 基本信息
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1048575 entries, 0 to 1048574
Data columns (total 20 columns):
user 1048575 non-null int64
time_stamp 1048575 non-null int64
adgroup_id 1048575 non-null int64
pid 1048575 non-null object
nonclk 1048575 non-null int64
clk 1048575 non-null int64
cate_id 1048575 non-null int64
campaign_id 1048575 non-null int64
customer 1048575 non-null int64
brand 862458 non-null float64
price 1048575 non-null float64
userid 987618 non-null float64
cms_segid 987618 non-null float64
cms_group_id 987618 non-null float64
final_gender_code 987618 non-null float64
age_level 987618 non-null float64
pvalue_level 460409 non-null float64
shopping_level 987618 non-null float64
occupation 987618 non-null float64
new_user_class_level 717615 non-null float64
dtypes: float64(11), int64(8), object(1)
memory usage: 164.0+ MB
None
******************** 空值
user 0
time_stamp 0
adgroup_id 0
pid 0
nonclk 0
clk 0
cate_id 0
campaign_id 0
customer 0
brand 186117
price 0
userid 60957
cms_segid 60957
cms_group_id 60957
final_gender_code 60957
age_level 60957
pvalue_level 588166
shopping_level 60957
occupation 60957
new_user_class_level 330960
dtype: int64
******************** 重复值
False 1048575
dtype: int64
3. 数据处理
3.1 去空
df = df.dropna(subset=["userid"],axis=0)
3.2 异常极值处理
bin2000_10 = np.arange(0,200000,1000)
df_cut_10 = pd.cut(df.price,bin2000_10).value_counts()
df_cut_10
Sql写法
DELETE FROM ad WHERE price > 100000 OR price < 1
这里以1000作为区间,进行切片,发现出现价格过大的情况,属于异常值,因此截取价格在1~100000的数据。
3. 新增日期项
df["day"]=df["time_stamp"].apply(lambda x:datetime.datetime.fromtimestamp(x))
df['date'] = df['day'].dt.date
df['week'] = df['day'].dt.dayofweek+1
df['hour'] = df['day'].dt.hour
Sql写法
alter table ad add date VARCHAR(32);
UPDATE ad SET date = FROM_UNIXTIME(time_stamp,'%Y-%m-%d %H:%i:%s');
新增日期(%Y-%m-%d)一列
alter table ad add day VARCHAR(32)
UPDATE ad SET day = cast(date as DATE)
新增小时列
alter table ad add