广告相关知识大全

这将是我写的最详细的一篇博客,目的就是想把广告相关的一些机制、规则研究透彻,从而能够切实理解一些算法背后的含义。

先从广告的竞价机制开始说起

 

广义第一价格(GFP):02年之前的出价基本是这个价格,说白了就是谁出价高广告位就是谁的。

但是这个出价会有个现象,那就是对于拿到广告位的广告主他会在下次出价的时候降低成本,并且很容易知晓竞争对手的出价。广告主停止投放后还会对平台造成较大波动。看起来简单实用的方法其实并不是很理想。

 

广义第二价格(GSP):竞拍依然按照最高价获得,但是付费按照下一位竞拍者的出价竞拍。

这样做的话,当广告主较多时整体出价系统将趋于稳定,容易形成局部最优和整体稳定。也就是说广告主会完全按照自己的评价来出价而不是根据对手的策略来变化。但是这种拍卖方式并非是考虑到所有拍卖者福利最大化。

 

多物品拍卖机制(VCG):竞拍依然按照价高获得,但是扣费要计算价高者参与带来的全局损失。

也就是说你拍到了这个广告,你的参加给所有没拍到广告的人带来了损失,那么需要给你增加费用:先计算没有你拍的时候那些能拍到更好的广告位的人带来的收益,然后用这个收益减去你加入后他们现在带来的收益就是你总共需要支付的费用。但是并非这个机制就是较好的,因为难以向广告主解释而且并不像GSP那样稳定简单。所以GSP竞价机制更多一些。

 

当然,官方给出的价格可能还会和广告的其他属性有关,例如:pCTR(广告点击率预估)以及pCVR(广告转化率预估)

点击率:实际的点次数 / 展示的次数。

转化率:即给定广告、用户和上下文情况下广告被点击后发生激活的概率。

 

cpc付费模式:按照广告点击次数付费

cpa付费模式:用户点击后完成某些行为后才付费

 

我们根据19年腾讯广告赛的项目来熟悉一下相关的算法

比赛目标:通过对广告的历史信息预测未来某一天广告的日曝光量

 

数据先看一下样子(太长了我分开截图)

数据集   

user_data    用户特征属性文件

下图分别对应:用户id   年龄  性别  地域  婚恋状态 教育水平   消费能力   设备(安卓还是苹果)  工作 连接类型(2g 3g啥的)  兴趣爱好

这里预处理的时候,id 年龄 性别 教育 消费能力 设备 连接类型都转换成int,区域、行为把逗号分开。

 

 

 

totalExposureLog.out  广告曝光数据文件(按照请求时间排序)

每一列分别代表  广告请求id(标识每次请求)  广告请求时间  广告位置id  用户id  曝光广告id(区分不同广告)  曝光广告素材尺寸    曝光广告出价bid(记录cpc出价)   广告的pctr  曝光广告的质量ecpm分数   最终ecpm分数

 

 

ad_static_feature.out     广告静态数据(创建后一般无法修改)

每一列代表:广告id  创建时间  广告账户id   商品id   商品类型   广告行业类别id  素材尺寸  

 

ad_operation.dat  广告操作数据

   

 

 

 

test_sample.dat   测试数据

  每列的属性为样本id  广告id  创建时间  广告尺寸  广告行业id   商品类型   商品id  广告账户id  投放时间段  人群定向  出价(单位分)

 

 

 

拿到数据集后,因为数据集较大,先将数据用df.to_pickle()保存成pkl文件供后续使用。然后准备用数据画图来直观的观察一下数据的情况。

 这里上一个画图的代码,可以画出来2x2的布局 

fig = plt.figure(figsize=(10,10))   #图片大小

columns = 2                          #行列 
rows = 2
column_name = ['education','concuptionAbility','status','work']    #dataframe中的列名
for i,j in zip(range(1, columns*rows+1),column_name):
    fig.add_subplot(rows, columns, i)
    plt.scatter(df_user_data['uid'][:10000],df_user_data[j][:10000],s=1)

plt.tight_layout()
plt.show()

 

我们先处理曝光日志,这里request_day为

df_totalExposureLog['request_day']=df_totalExposureLog['request_timestamp']//(3600*24)

  这里有个小知识,那就是时间戳是从1970年开始经过的秒数,除以3600*24是一天,得到了17973天,那么变成年就是49年,也就是说这是2019年的数据。而且这个时间戳是可以和时间转换的,通过

time.localtime(1552924669)

  将这一串时间戳数据转换成了

time.struct_time(tm_year=2019, tm_mon=3, tm_mday=18, tm_hour=23, tm_min=57, tm_sec=49, tm_wday=0, tm_yday=77, tm_isdst=0)

posted @ 2021-04-20 11:11  灰人  阅读(779)  评论(0)    收藏  举报