数据集介绍
数据来源:https://tianchi.aliyun.com/dataset/dataDetail?dataId=56
Ali_Display_Ad_Click是阿里巴巴提供的一个淘宝展示广告点击率预估数据集。
主要数据关系如下:
原始样本骨架raw_sample
- user_id:脱敏过的用户ID;
- adgroup_id:脱敏过的广告单元ID;
- time_stamp:时间戳;
- pid:资源位;
- noclk:为1代表没有点击;为0代表点击;
- clk:为0代表没有点击;为1代表点击;
广告基本信息表ad_feature
- adgroup_id:脱敏过的广告ID;
- cate_id:脱敏过的商品类目ID;
- campaign_id:脱敏过的广告计划ID;
- customer_id:脱敏过的广告主ID;
- brand_id:脱敏过的品牌ID;
- price: 宝贝的价格;
其中一个广告ID对应一个商品(宝贝),一个宝贝属于一个类目,一个宝贝属于一个品牌。
用户基本信息表user_profile
- user_id:脱敏过的用户ID;
- cms_segid:微群ID;
- cms_group_id:cms_group_id;
- final_gender_code:性别,1:男,2:女;
- age_level:年龄层次;
- pvalue_level:消费档次,1:低档,2:中档,3:高档;
- shopping_level:购物深度,1:浅层用户,2:中度用户,3:深度用户;
- occupation:是否大学生 ,1:是,0:否;
- new_user_class_level:城市层级;
用户的行为日志behavior_log
- user_id:脱敏过的用户ID;
- time_stamp:时间戳;
- btag:行为类型, 包括以下四种:
类型 | 说明 |
---|---|
ipv | 浏览 |
cart | 加入购物车 |
fav | 喜欢 |
buy | 购买 |
- cate_id:脱敏过的商品类目;
- brand_id: 脱敏过的品牌词;
用户流程分析
以下是关于用户行为简化的流程图:
提出问题
通过对用户行为流程的分析,我们知道用户首先会看到展示出来的广告,随后会发生一系列的行为,作为商家,我们希望的是将用户最终引导到购买的这一行为上。在此案例中,我们先重点关注如何使尽可能多的用户点击广告,即提高广告的有效性。所以在这里我们需要关注的第一关键指标就是点击率,问题就可以转化为如何提高广告的点击率?
整理数据
首先通过Navicat将数据导入数据库中,这里我们仅需要用到raw_sample、ad_feature和user_profile三张表。
1. ad_feature数据概览
由于数据样本较多,所以我想首先选定一个品牌再进行后面的分析,就选择投放广告最多的品牌吧。
SELECT
brand_id,
COUNT( brand_id )
FROM
ad_feature
GROUP BY
brand_id
ORDER BY
COUNT( brand_id ) DESC
结果如下:
由图可知,投放广告最多的是品牌id为353787的品牌,我们暂且称它为A品牌,现在我们就以A品牌公司数据分析师的身份进行进一步的分析。
2. 数据提取
查看A品牌公司各个广告的点击率
SELECT
adgroup_id,
total_ads,
total_clk,
ROUND( total_clk / total_ads, 2 ) AS clk_rate
FROM
(
SELECT
adgroup_id,
count( adgroup_id ) AS total_ads,
sum( clk ) AS total_clk
FROM
raw_sample
WHERE
adgroup_id IN ( SELECT adgroup_id FROM ad_feature WHERE brand_id = '353787' )
GROUP BY
adgroup_id
) AS sub
WHERE
total_ads >= 1000
ORDER BY
clk_rate DESC
为了避免样本量过小的影响,这里筛选出来的是至少展示过1000次的广告,结果如下:
可以看到,adgroup_id为569209的广告的点击率略低一点,那么我们就选择该条广告来进行进一步的分析。当然,由于每条广告的样本量不同,不能说它的吸引力就是最低的一个,我们无法得知其余3条广告的点击率是否会随着样本量增加而略有降低。
接下来提取adgroup_id为569209的广告信息以及相应的用户信息
SELECT
from_unixtime( r.time_stamp, '%Y-%m-%d' ) AS '日期',
from_unixtime( r.time_stamp, '%k:%i:%s' ) AS '时间',
r.pid AS '资源位置',
r.clk AS '点击',
u.user_id AS '用户ID',
u.cms_segid AS '微群ID',
u.cms_group_id AS '组ID',
CASE
WHEN u.final_gender_code = 1 THEN '男'
WHEN u.final_gender_code = 2 THEN '女' ELSE NULL
END AS '性别',
u.age_level AS '年龄层次',
CASE
WHEN u.pvalue_level = 1 THEN
'低档'
WHEN u.pvalue_level = 2 THEN
'中档'
WHEN u.pvalue_level = 3 THEN
'高档' ELSE NULL
END AS '消费档次',
CASE
WHEN u.shopping_level = 1 THEN
'浅层用户'
WHEN u.shopping_level = 2 THEN
'中度用户'
WHEN u.shopping_level = 3 THEN
'深度用户' ELSE NULL
END AS '购物深度',
CASE
WHEN u.occupation = 1 THEN
'大学生'
WHEN u.occupation = 0 THEN
'非大学生' ELSE NULL
END AS '职业',
u.new_user_class_level AS '城市层级'
FROM
raw_sample AS r
JOIN user_profile AS u ON r.user_id = u.user_id
WHERE
r.adgroup_id = '569209'
结果中会有一些Null值,暂时先不处理,然后将结果导出为csv文件。
探索性数据分析
广告维度
资源位置
两个位置所展示的广告的点击率其实相差不大,在广告位置上并没有什么优化空间,除非寻找新的广告位置。
时间
点击率虽然在凌晨3点最高,但样本量较小,受个别个体影响较大,没有什么探讨的价值。
在12点、13点及18点的点击率高于总体的平均值,这两段时间正常来说应该是人们正在吃饭或者吃完饭小憩的时间,这是否说明人们更乐意在吃饭时或者吃完饭后去点击广告呢?这点可以进一步探讨,同时我们也可以留意到,在8点至11点的广告展示量很大,但是点击率却较低,可能大家都在忙于工作和其他事情,上网都有较为明确的目标,没有闲暇时间去点开广告查看。
用户维度
年龄层级
年龄层级2的点击率明显高于其他年龄层级,可以增加向该年龄层级的用户展示广告。
性别
男女的点击率差别不大,由于我们不知道该产品具体是什么,但如果该产品是男女都适用的,那为什么广告会更倾向于向女性展示?我们是否会忽视或者错过了男性的浏览甚至购买呢?
购物深度及消费档次
图中圆的大小代表展示数,颜色深浅代表点击率(标注在圆的旁边)
深度用户中低档和中档消费档次的用户的点击率其实相差无几,虽然高档用户的点击率为5%,但是样本量太小了,没有参考价值。也因为整体的样本量太少了,这张图也无法为我们提供哪些特定用户会具有更高点击率以及我们是否向这些特定用户足够多地展示了我们的广告,这个问题其实可以在一个足够大的样本量下探讨或者直接与用户交流,获得他们的意见与想法。
职业
由于这里只有大学生与非大学生的差别,且大学生的样本量较小,就暂且不进行深究了。
城市层级
2级城市的点击率较高,可以进一步增加向2级城市的广告展示,而4级城市似乎有着一定的发展潜力,可以进行更深入的调查。
得出结论
- 考虑是否可以调整广告位置,以及调整广告位置所带来的收益是否能够覆盖调整位置所产生的成本。
- 通过某些途径,更多地向年龄层级为2的用户展示广告,最好在午饭以及晚饭这两段时间向用户推送广告。
- 进一步探讨男性群体以及4级城市的用户是否有进一步推广以及增长的空间。