广告投放数据分析

1 提出问题:如何实现广告的精准投放

  实现广告的精准投放就是最大化投入产出的过程,需要知道我们的用户在哪里,在哪些渠道能够更大化用户价值,以及各个渠道用户价值的变化规律。通过对渠道方式和渠道质量的追踪,以引流和转化率为关键事件,做好渠道的优化和维护。

  本文通过研究阿里天池数据,仅从渠道,投放时间,投放人群,以点击率为数据指标进行数据分析,从而给出更好的方案和建议,实现高效率高产出。

2 数据来源

2.1 数据源

 Ali_Display_Ad_Click是阿里巴巴提供的一个淘宝展示广告点击率预估数据集。

  https://tianchi.aliyun.com/dataset/dataDetail?dataId=56&lang=zh-cn

 

 2.2 数据理解

 数据集不存在投入产出字段,命题转化为以浏览量、点击率作为数据指标,进行数据分析。

3 分析思路

4 导入数据

#导入所需要的库
%matplotlib inline
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# from dateutil.parser import parse
import datetime as dt
plt.rcParams["font.sans-serif"]='SimHei'   #解决中文乱码
plt.rcParams['axes.unicode_minus'] = False   #解决负号无法

#读取文件,加载数据
df1 = pd.read_csv(r"E:\Data analysis\data\tianchi\AD data\user_profile.csv",encoding = "gbk")
df2 = pd.read_csv(r"E:\Data analysis\data\tianchi\AD data\raw_sample.csv",encoding = "gbk")
df3 = pd.read_csv(r"E:\Data analysis\data\tianchi\AD data\ad_feature.csv",encoding = "gbk")

  4.1 计算各个广告的点击次数

由于数据量巨大,宕机时间长,选择部分数据分析,以下计算各个广告的点击次数。

 

 4.2 选择子集

筛选广告点击凑数最多的710164作为新的数据集建表

 

 

 

 

5 数据分析

5.1 分析不同渠道点击率

group1 = df.groupby("pid").agg({"clk":"sum","pid":"count"})
rate = (group1["clk"]/group1["pid"]).apply(lambda x: format(x, '.2%'))
group1

 

 

 

 

 由于渠道有限,仅从2个渠道源分析来看,430548_1007需要继续维护渠道,提高转化率,430548_1007需要加大渠道投入,做好引流。

5.2 分析不同投放时间点击率

5.2.1 每日各时间段点击率分析

# 时间处理, 注意: unix时间戳,转北京时间(差8个钟)
df["time"]=pd.to_datetime(df['time_stamp'],unit="s",utc=True)+dt.timedelta(hours=8)#.tz_convert("Asia/Shanghai")
# 取日期,并新增列
df["date"] = df["time"].dt.normalize()
# 取hour,并新增列
df['hour'] = [dt.datetime.strftime(x,'%H') for x in df['time']]
# 每日各时间段点击率分析
group2 = df.groupby("hour").agg({"pid":"count","clk":"sum"})
xdata_1 = group2.index
ydata_1 = group2["pid"]
rate_1 = (group2["clk"]/group2["pid"])
# 绘双坐标图
fig,ax=plt.subplots()
ax.bar(xdata_1,ydata_1)
ax.set_ylabel('浏览量', color='b')
ax.tick_params('y', colors='b')
ax1 =ax.twinx()
ax1.set_ylim([0,0.14])
ax1.plot(xdata_1,rate_1,"r")
ax.set_xlabel('小时')
ax1.set_ylabel('点击率', color='r')
ax1.tick_params('y', colors='r')
fig.tight_layout()
plt.show()

a. 在浏览量达到一定数据时,每日的上午10点、下午3点的点击率出现了小高峰。

b. 晚上由9点开始浏览量主键提升,但点击率相对于前段时间较低,说明多数用户是目的性流量走低。

c. 深夜0-2点点击率超过12%,推测原因,可能是浏览量较低,偶然性提升,也可能是这部分人群的目的性较强,如果能获知这些人群画像,能高效的做好营销转化。

说明,目标客户在深夜转化的可能性更高。

5.2.2 每周各天点击率分析

df["dayofweek"] = df["date"].dt.dayofweek
group3 = df.groupby("dayofweek").agg({"pid":"count","clk":"sum"})
# 绘双坐标图
fig,ax=plt.subplots()
ax.bar(group3.index,group3["pid"])
ax.set_ylabel('浏览量', color='b')
ax.tick_params('y', colors='b')
ax1 =ax.twinx()
ax1.set_ylim([0,0.14])
ax1.plot(group3.index,group3["clk"]/group3["pid"],"r")
ax.set_xlabel('星期')
ax1.set_ylabel('点击率', color='r')
ax1.tick_params('y', colors='r')
fig.tight_layout()
plt.show()

 

 可知,周六、日,周一点击率较高,浏览量也不低,说明这几天带来的收益是更大的。

5.2.3 各天各时间段分析

# 5.2.3 各天各时间段分析
df["dayofweek"] = df["date"].dt.dayofweek
group4 = df.groupby(["dayofweek","hour"]).agg({"pid":"count","clk":"sum"})
group4["rate_3"] = group4["clk"]/group4["pid"]
# 前五
group4.sort_values(by="rate_3",ascending=False).head()

 

 5.3 分析人群特征点击率

5.3.1 各年龄层次人群点击率分析

# 5.3 分析人群特征点击率
# 5.3.1 各年龄层次人群点击率分析
group5 = df.groupby("age_level").agg({"pid":"count","clk":"sum"})
# 绘双坐标图
fig,ax=plt.subplots()
ax.bar(group5.index,group5["pid"])
ax.set_ylabel('浏览量', color='b')
ax.tick_params('y', colors='b')
ax1 =ax.twinx()
ax1.set_ylim([0,0.14])
ax1.plot(group5.index,group5["clk"]/group5["pid"],"r")
ax.set_xlabel('年龄层')
ax1.set_ylabel('点击率', color='r')
ax1.tick_params('y', colors='r')
fig.tight_layout()
plt.show()

 

 a. 广告投放在1/2/5年龄层带来的点击率更高,需要从时间维度考虑,增大广告投入对这三个年龄层的效果。

b. 对与年龄层6,可以从时间维度考虑增大样本投入后会不会有更大的点击率,从而判定是否需要更多的投入。

c. 对比年龄层1/5和3,说明可以放弃对年龄层3的投入,最好增加时间维度和投入资源维度。

d. 年龄层0需要投入更多的资源,观察效果后判定舍去与否。

5.3.2 各个消费等级人群点击率分析

# 5.3.2 各个消费等级人群点击率分析
group6 = df.groupby("pvalue_level").agg({"pid":"count","clk":"sum"})
# 绘双坐标图
fig,ax=plt.subplots()
ax.bar(group6.index,group6["pid"])
ax.set_ylabel('浏览量', color='b')
ax.tick_params('y', colors='b')
ax1 =ax.twinx()
ax1.set_ylim([0,0.14])
ax1.plot(group6.index,group6["clk"]/group6["pid"],"r")
ax.set_xlabel('消费等级')
ax1.set_ylabel('点击率', color='r')
ax1.tick_params('y', colors='r')
fig.tight_layout()
plt.show()

 

  高档人群点击率偏低仅有7.13%,原因可能是产品的客单价是109,不符合这类人群的需求。

5.3.3 各购物深度人群点击率分析

# 5.3.3 各购物深度人群点击率分析
group7 = df.groupby("shopping_level").agg({"pid":"count","clk":"sum"})
# 绘双坐标图
fig,ax=plt.subplots()
ax.bar(group7.index,group7["pid"])
ax.set_ylabel('浏览量', color='b')
ax.tick_params('y', colors='b')
ax1 =ax.twinx()
ax1.set_ylim([0,0.14])
ax1.plot(group7.index,group7["clk"]/group7["pid"],"r")
ax.set_xlabel("购物深度")
ax1.set_ylabel('点击率', color='r')
ax1.tick_params('y', colors='r')
fig.tight_layout()
plt.show()

 

 

中、深度用户点击率略高,如果逐步转化至付费阶段,相比于浅度用户,中、深度用户后续付费根能行会更大。

5.3.4 各职业(是否大学生)人群点击率分析

# 5.3.4 各职业(是否大学生)人群点击率分析
group8 = df.groupby("occupation").agg({"pid":"count","clk":"sum"})
# 绘双坐标图
fig,ax=plt.subplots()
ax.bar(group8.index,group8["pid"])
ax.set_ylabel('浏览量', color='b')
ax.tick_params('y', colors='b')
ax1 =ax.twinx()
ax1.set_ylim([0,0.14])
ax1.plot(group8.index,group8["clk"]/group8["pid"],"r")
ax.set_xlabel("是否大学生群体(1-是,0-非)")
ax1.set_ylabel('点击率', color='r')
ax1.tick_params('y', colors='r')
fig.tight_layout()
plt.show()

 

 

大学生的点击率略高,但总体区分度不大,说明样本用户群体对710164敏感度差异性不大,可能是价格109属于平价款的原因。

6 结论和建议

6.1 渠道分析

只有2个渠道,区分度不大,从引流和转化的角度看,430548_1007需要继续维护渠道,提高转化率,430548_1007需要加大渠道投入,做好引流。

6.2 投放时间分析

加大对深夜0-2点时间段广告投放,周六、日和周一,投放效果更好。

6.3 人群分析

(1)加大对年龄层1/2/5年龄层投放效果,建议减少对高档人群的投放,加大对中深度用户投放,加大对城市等级2/4投放,广告对职业不敏感,建议取消这部分投入

(2)多维度下其他特征,可以结合时间维度,多做测试,然后取舍。

posted @ 2019-10-15 16:37  找工作好爽啊哈哈哈呜  阅读(2916)  评论(0编辑  收藏  举报