因为原分析是用jupyter notebook做的,不知道怎么直接搬运到简书上来,因此暂时采用截图方式,后续若有好的方式再改进。
背景:广告投放数据分析,由于组内接入号码卡的投放业务,因此需要尽早找出能够上量的定向,产生少数能跑起量的广告,以便给人工运营减少工作量;提高起量效率。
同时,该广告分析过程其实并不仅限于广告分析,其他的分析思路其实差别不会特别大。
import pandas as pd
import numpy as np
import matplotlib as plt
df=pd.read_excel("../excel_output/telecom_data/广告数据.xlsx")
df
image.png
df.columns
#看一眼表头分别都有什么
#注:除了部分列例如id、花费、曝光等,这当中的大多数列,都是从一个整合列抽取出来的,例如{"brand": {"brand_img": "53664323", "brand_name": "中国移动"}, "description": "5GB特惠流量包赶紧办理", "image": "54689487", "title": "5GB大流量包,移动过分了"}
#因此列里面我已经提前处理了空值,各位可以根据自己的业务去判断空值的填充,提示用fillna喔~
#1、广告投放的业务中有些因素确实是不存在的,为了方便整理数据,因此我填充为“空”,因为填充为0会有意义,代表我选取了这个选项,以此区分开,或者可以填充为None或者Null
#2、填充为0,填充为0就代表着这个数据是不存在的,所以可以直接填充空值为0
#3、填充为上值、下值或平均值,当你观察了数据后发现数据按照一定规律,那么可以填充为这个格子上面的值,或者上下值的平均值等等,遵从数据的规律
image.png
df.describe()
image.png
#观察上述数据,重点观察数据的分布,即四分位的数值比较,看分布广不广,受极值点的影响大不大,分析时需不需要去掉极值点
#看我的这份数据 排除id的字段 这是数据库自增或者是广点通返回的id
#花费cost、曝光量impression、点击量click、填单intonum的分布都非常散,也就是说拔尖的几个广告才能上量,而其他的广告一般都直接沉寂下去了
#这是几个账号一起的数据,如果账号投放的产品类型不一样,那么可以分不同的产品类型分别查看 我这个都是号卡的
product=np.unique(df['api_sdk'])#这里有11个账号
product
image.png
for i in product:
print(df[df['api_sdk']==i])#取出每部分的数据,分别做分析就好啦,我这里需要合起来计算,就不分开了
#这一步可以选取自己需要的列,不是每列都需要的,这里我包括id都比较需要,所以只删掉一列汇总列
df=df.drop('adcreative_elements',axis=1)
#let's see.
pd.set_option('display.max_columns', None)
df.sort_values('cost',ascending=False)[:10]
image.png
#关于广告的分析 要么直接去复制极值的这条广告的所有因素,然后将这条广告的某一因素进行突变,看是不是能出现另外一个奇迹
#或者看看达到标准的数据中,有什么规律
#可以看出在几千条数据中,花费上万的广告就一条,那么怎么去复制呢?我第一个想法是拉长时间节点,看有没有出现多一点的数据达到上万的量级
#或者降低你的及格线,很有可能你的账号的质量就是不好,很可能真的达不到这个及格线,那么我放到上千的花费呢?总能多几条
#ps:每个媒体的广告投放排名算法都不相同,但是你在投放的时候可以找到一些“经验”,即你会发现已经跑起来的账户会更加容易跑起来啦;
#预算设置大一点消耗得快一点;账户“养"起来会更容易投放些等等,虽然不能完整地找到媒体的排名公式,但是可以依据他们放出的这些方向和自己的经验
#去找出能起量的原因,也有一点”玄学“,即同样的广告、同样的账户就是有一个跑的起来一个跑不起来
#第一种 极值点 我们的做法是突变其中的因素 也是运营常用的手法 复制广告计划再测试新的计划 这个比较简单 因为通常上量的广告真的不多
#只要控制变量法测试即可 这里不展开讲了
#第二种 除去极值外的众多广告 例如花费多、但是也还是有填单的广告表现如何?去寻找有潜力的广告。
df[(df['cost']>=30)|(df['intonum']>0)].reset_index(drop=True)
image.png
#接下来每个因素看一遍透视表 需要的话直接画图也可以
#let's do it
col=['cost', 'intonum', 'ad_id', 'impression', 'click']
col_rename={'impression': sum, 'click': sum, 'intonum': sum, 'cost': sum,'ad_id': 'count'}
#透视表动作基本差不多,封装起来简便一点
def pivot(column,data):
data = pd.pivot_table(data, index=[ column],
values=col,
aggfunc=col_rename)
data = data.replace([np.inf, -np.inf], "")
return data
def dataAddCol(data):#增加ctr cpc cpa几列
# data=self.data
data['CTR']= (data['click'] / data['impression']).apply(lambda x: format(x, '.2%')).replace([np.inf, -np.inf,np.nan,-np.nan], 0)
data['CVR'] = (data['intonum'] / data['click']).apply(lambda x: format(x, '.2%')).replace([np.inf, -np.inf,np.nan,-np.nan],0)
data['CPC'] = (data['cost'] / data['click']).apply(lambda x: round(x, 2)).replace([np.inf, -np.inf,np.nan,-np.nan], 0)
data['CPA'] = (data['cost'] / data['intonum']).apply(lambda x: round(x, 2)).replace([np.inf, -np.inf,np.nan,-np.nan], 0)
data['平均每计划曝光'] = (data['impression'] / data['ad_id']).apply(lambda x: round(x, 0)).replace([np.inf, -np.inf,np.nan,-np.nan], 0)
data=data.rename(columns={'cost':'花费','impression':'曝光量','click':'点击量','intonum':'填单', 'ad_id':'广告数'})
data = data.loc[:, ['花费', '曝光量', '点击量', '填单', 'CTR', 'CVR', 'CPC', 'CPA', '广告数', '平均每计划曝光']]
# data = data.sort_values(by=['填单'], ascending=False)
return data
#1st step 年龄
age_data = pivot('age_range',df)
age_data = dataAddCol(age_data)
age_data
image.png
#1、产品分析的年龄大范围
#对产品进行简单的产品分析,如号码卡的目标用户是偏年轻化的,锁定人群最好就60岁以下,并且可以恰当地加入低龄的用户。
#如果是信用卡的新户,那么就必须大于18岁,且多数大学生申请信用卡是不通过的,所以最好是大于22岁的年龄设定
#2、聚焦部分年龄段
#可以看出投放的最多的还是18-50岁、14-47岁和无定向,因为流量卡很多时候都小年轻在买,所以最好不把年龄限定得很严苛,
#如果把条件设置的过严苛可能会导致流量骤降,就是你也找不到人看你的广告了,在投放广告可以体会到这一个现象
#3、年龄的分层测试,聚焦部分年龄段,得出基础年龄定向
#不同年龄段的着重点不同,年龄定向还配合着其他的定向,因此很多时候会个别年龄段的效果更好,这个就需要进行A/B test去进行测试分析,最后收窄定向
#该分析过程适用于大多数的广告启动过程,从大致的定向->聚焦部分年龄段->年龄分层测试->收窄定向
site_set = pivot('site_set',df)
site_set = dataAddCol(site_set)
site_set.sort_values("CPA")
#多广告位投放实际并不知道广告实际展示在哪个广告位上,因此不作拆分
#对CPA进行了排序,单一个广告位或者自动推荐的花费都很少,并且平均每计划曝光都较低 从而可以看出效果较好的是腾讯视频、腾讯新闻的两个广告位
#多广告位一起投放的曝光较大,可以作为一个流量补充
#此处省略对其他因素的透视表分析,对其他因素全部做一遍透视分析,对影响账户的量级、CPA的因素有简单了解
#例如这个分析最后得出的第一阶段的广告收敛结果是:
#投放的年龄放开限制,可选14-60岁,也可以选无年龄定向;优质广告位是腾讯视频,那么意味着要多准备视频广告素材;
#广告的出价范围在15-25元之间;广告策略选优先曝光或者优先转化;计费方式选择按CPM收费....
#如此,就得到本阶段的优化广告建议
总结:
1、熟悉数据,查看列名,数据的表示意义,数据的分布
2、关于数据的意义以及数据的空值处理、异常值的处理
3、透视分析,得出第一阶段的建议
网友评论