[互联网]广告业务的前世今生
笔者曾在腾讯商业化、字节广告变现承担过多年广告后台相关工作,对业界的广告套路和广告架构比较熟悉。本文旨在以尽量容易理解的方式来分享广告相关的知识,来给对广告业务了解较少的同学形成一个基本的认知:
- 广告是如何赚钱的?
- 广告系统的组成是什么样的?
- 广告系统有哪些值得学习的策略?
商业模型
广告在平台内部的“永动机”
- 用户产品:把平台拉新进来的用户留存,转化成活跃用户
- 商业化:在活跃用户的浏览行为中插入广告,获得收入
- UG:把部分商业化的收入用来拉新、激励,使得有源源不断的新用户进来
广告做的是下面三个人群的生意
- 用户:需要使用平台的服务,如新闻、推文、博客、视频
- 广告主:需要构建自己的品牌价值、推销自己的产品等
- 平台:需要用自己产品的DAU变现
广告业务
广告形态
常见的广告形态
硬广
- 开屏广告
- 原生开屏广告
- 信息流广告
- 搜索广告
软广
- 图文视频软广
非标
- 锚点
- 彩蛋
- hashtag
- DOU+
交易链路
如果广告主想要在多个媒体(网站、广告网络、交易平台)投放广告 ,是一个非常繁琐的过程。因为每一个网站、广告网络、交易平台的媒体购买系统、操作规则不同,需要人工进行调整,费时低效;而且跨渠道媒体购买很可能重复购买同一部分人群。
DSP平台把广告主、代理人员从庞杂的重复手工操作中解放出来。广告主只要在DSP平台投放广告即可,由DSP平台帮助广告在多个媒体投放广告。
同理,如果流量主想在自己的网站流量位置上插入广告,如果自己去招商,也是个非常消耗人力的事情,寻找广告主、和广告主对接、广告主提供的素材匹配自己的广告位都需要很多时间。SSP平台可以快速满足流量主接入广告的需求,帮助流量主快速变现。
名词解释
- DSP (Demand-Side Platform): 需求方平台,可以简单理解为需要采买流量的平台(广告主自建或者第三方技术公司)
- SSP (Supply-Side Platform):供应方平台/媒体平台,管理流量和坑位。可以简单理解为流量(抖火西头)
- DMP (Data Management Platform):数据管理平台,管理人群,生成定向人群包
- ADX (AD Exchange):程序化广告****交易平台,通过技术对接的方式,支持客户(DSP)进行媒体的流量(用户)采买
- ADN (Ad Network ): 广告网络,聚合了大量App内的展示广告资源,主要包含中长尾App流量,帮助广告主实现媒体精准、灵活的投放。汇集了很多媒体的余量
各种公司的布局:
行业角色
变现公式
**广告收入 = 活跃用户数 * 人均展示数 * 广告负载 *** 广告点击率 * 广告价格
$$(Ad Revenue = DAU * Avg Imps * AdLoad * CTR * AdPrice)$$
-
活跃用户数(DAU):产品每天至少使用产品一次的用户数
-
人均展示数(Avg Imps):活跃用户平均每天请求次数
-
广告负载(AdLoad):活跃用户中进入广告场景的用户占比,即有可能看到广告的用户比例
-
广告点击率(CTR):实际点击广告的次数在整体广告展示次数中的占比,即广告点击率 = 广告点击次数 / 广告展示次数
-
单次点击广告价格(AdPrice):每一次广告点击广告平台愿意支付给我们的价格
通过这个收入公式,我们尝试看看能有什么办法提升收入: -
DAU和用户请求次数不由商业产品控制,由UG保证,商业产品只关注广告位
-
AdLoad一般不做改动,商业产品会针对新老用户做不同策略
-
CTR * AdPrice / eCPM *PV / CTR * CVR * AdPrice 是商业产品主要操作的方向(如下图)
- 提升填充率:无满足要求的广告、请求超时的时候兜底余量
- 提升展示率:提高用户页面停留时长,预加载大体积广告,提升广告加载速度等
- 提高点击率:采用原生广告,优化广告素材,增大button和点击区域
- 提高转化率:双链直达,App自动下载,内跳
广告架构
广告的服务架构和一般推荐的链路非常相似,也分为召回、粗排、精排几层,越往上,数据量级越大,对应的模型越简单,检索速度越快;往下,数据量级迅速下降,对应的模型也更加精准和复杂
召回
召回主要负责从千万级的广告计划中快速检索出可以下发的广告候选集。首先要求检索要快,然后要准确(符合广告主要求),最后要足够好(符合用户喜好)。我们分三块看下,其中targeting负责把“好”的广告加入候选,频控负责把“不好”的广告干掉;倒排索引则是检索速度的关键。
targeting
在满足定向条件的前提下,从广告全库中获得足够多的「好」候选。
- 硬要求(人工):广告主对希望投放的人群有清晰的认知
- 广告属性:比如限定安卓应用
- 人群属性:比如限制年龄、性别、地理位置
- 软要求(算法):广告主希望广告的效果好,但是没有明确诉求
- 兴趣定向:用模型预测用户是否对某些类别的长期兴趣
- 行为定向:用户的短期行为(转发过美妆视频,点击过游戏广告等等)
- lookalike:给定一组种子用户,根据模型学习找到和这组种子用户相似的用户。种子用户一般由广告主直接提供,比如产品的购买者,下载app的用户email,看过广告主官网页面的人等等
频控
频控是一种常见的新鲜度控制策略,可以提高用户对所推荐内容的满意度和广度,有效减轻过度拟合导致推荐越来越窄的问题
- 防止用户反感/审美疲劳:对同一用户重复曝光同一广告素材的意义不大,还可能导致反感
- 提升点击率和转化率:节省出来的流量可以投放不同创意的广告,提升广告效果
频控一般有下面几种:
- send(下发)频控,一般几个小时到一天
- show(曝光)频控,补充下发了看不到的情况
- dislike(负反馈)频控
还可以做更复杂的策略,比如给用户send了某个ad group里面的一条,或者用户主动dislike了某个ad group里面的一条,会在一定时间内整个组内的广告素材都不会下发
倒排索引
如何在数千万的广告计划中快速匹配用户的特征和广告主的诉求呢?倒排索引是广告定向检索的关键。
考虑下面4个广告计划,他们有性别和年龄段两个定向配置
计划1:投男性
计划2:投青年/中年,不可投男性
计划3:投女性,老年
计划4:不可投老年,不可忽略性别
分别构建正定向索引和反定向两个倒排索引,key是定向的维度,value是广告id的bitmap:
特征X不可投 = 正向all - 正向特征命中X + 反向特征命中X
可投广告 = 全集 - (特征1不可投 + 特征2不可投 + …)
粗排
粗排的主要目的是在召回的大量数据中对数据进行初筛,缩小到几千的数量级喂给精排。粗排不关心具体的数值,只关心精排的排序,在目标上和精排是一致的。
预估
因为最终决定广告价值排序的是精排,所以如果我们把粗排的优化目标和精排设定为完全一致是最好的。但是粗排处理的广告量级显然决定了不能和精排完全一致,必须要设计一个简单版本,来快速处理大量数据。我们考虑几种方案:
- 也把粗排的排序当做一个二分类问题来看,使用精排的某一个指标:比如只做CVR预估,放弃CTR预估?
- 使用精排的弱化版本,比如训练改成离线的?降低性能需求?
- 使用另一套简单的预估模型?
无论是哪种方案,都会带来一些不一致的问题,比如精排里最高打分的TopN还没有来得及打分就被粗排干掉了,这在推荐里是致命的badcase。
learning2rank
所以,直接预估的方法是不行的,我们还是要把粗排的目标设定为和精排保持一致,用模型学模型的方法去做。
假如精排的队列有100个排好序的样本,我们可以在前10里面取出一个A,作为好样本。再从后10个取出一个B当做坏样本。粗排的目标,就是要让自己也认为A好于B。越是这样,它就和精排越像,就越能帮精排分担压力。
精排
精排会对粗排的结果集做进一步筛选,并对广告素材进行打分,来确定最终的广告展示顺序。
精排是推荐系统的核心,直接对推荐系统的结果负责。推荐系统一般都有一个核心的优化指标,比如在短视频平台上,推荐看的就是观看时长、点赞,而广告看的则是eCPM(出价乘以CTR乘以CVR,参考上面的变现公式)。在电商平台上看的是GMV。线上提升是由线下的一个一个模型提升带来的。比如在广告场景下,既要提升CTR,也要提升CVR,还要改善出价机制,还要考虑隐匿成本(用户体验)。
精排学习的目标的范围一般是所有存在曝光的样本。以点击率(CTR)预估为例,以有曝光但没有点击的是负样本,有曝光也有点击的就是正样本。所以,一般会采取二分类模型来实现精排。
CTR预估
我们用一个最简单的LR模型为例子,看看精排怎么解决预估的问题。虽然业界目前采用的模型比这个简单版本要复杂的多得多,但是大多都是在一些特征的选取和加工、模型选取、专门针对模型问题的优化和解决上做工作,我们通过这个简单版依然可以看出一些基本的解决手段:
学习集合:用户的特征,广告的特征,是否点击的历史数据
输入:用户的特征,广告的特征
输出:点击的概率?
假设点击率和用户特征、广告特征是线性相关的,我们可以给每个特征加个参数w,用历史数据计算w
$$f(x) = w_0 + w_1 * 用户性别 + w_2 * 广告颜色 $$
|
|
求出每个参数的值后,当有新的用户或者广告进来,就可以用我们的公式算出用户会点击广告的概率,然后把概率大的排在前面
计费/竞价
精排在给广告做排序的时候,需要根据广告类型的不同对CTR/CVR做预估,当预估出结果后,计算出预估的eCPM参与竞价。竞价结束后,广告会下发并且曝光,我们的系统再根据广告实际的曝光/点击/转化结合不同的广告类型进行计费,确认广告主的消耗。
计费方式
广告系统根据不同广告主的诉求,推出了多种售卖方式,可以让广告主在目标上有偏重和权衡。比如品牌广告,广告主更加在意品牌的曝光,给用户留下深刻印象;效果广告的广告主则只为用户的行为买单,比如下载、购买、注册等实际能产生收益的行为。
广告类型 | 计费方式 | 竞价指标 | 特点 |
---|---|---|---|
品牌广告 | CPT (Cost Per Time) | 不参与 | 包断时段内整个位置,价格高 |
品牌广告 | GD (Guaranteed Delivery) | 不参与 | 购买特定数量,价格较高 |
效果广告 | CPM (Cost Per Mille) | eCPM= bid | 受众广,但是不精确 |
效果广告 | CPC (Cost Per Click) | eCPM = bid * CTR | 1. 受众精确 2. 但是和最终转化目标较远,广告主成本不可控 |
效果广告 | CPA (Cost Per Action) | eCPM = cpa_bid * CTR * CVR | 1. 和转化直接挂钩,对广告主友好 2. 需要广告主回传转化,有作弊风险 3. 转化很低时,平台承担前期成本 |
效果广告 | oCPC (Optimized Cost Per Click) | eCPM = cpa_bid * CTR * CVR | 1. 按照转化出价,但是按照点击计费(price * CVR) 2. 广告主和平台的利益相对统一 |
所以
平台风险大 | 广告主风险大 | |
---|---|---|
←———- | —– | ———-→ |
CPA(按转化) | oCPC | oCPM(按曝光) |
广告竞价
上面我们讲精排的时候讲过,精排会根据最终的eCPM排序来做出下发哪条广告的决定。那除了用户喜好、广告素材的预估点击率,广告主自己怎么来控制自己的素材可以下发呢?直接的手段就是通过竞价,让自己的出价处在广告主中比较有竞争力的水平。竞价系统做了这样一些工作:
目标1:让广告主觉得公平,没有多收钱
目标2: 广告平台收益最大化
广义一价
最终价格 == 最高用户出价
- 计算简单,容易理解,也常用于土地拍卖 / 股票市场
- 无法让广告主能够出内心真实价格。在该机制下,广告主有向下调价的动力。即如果广告主出100元达到了效果,下次可能就会想出90元试试看行不行
广义二价
最终价格 == 出价第二高的用户的出价
考虑两个广告: X (bid $100, eCTR_X = 0.01), Y (bid $80, eCTR_Y = 0.02)。
计算可得:
eCPM_X = 100 * 0.01 = 1, eCPM_Y = 80 * 0.02 = 1.6
因为eCPM_Y > eCPM_X, 因此Y赢得竞价。但是在收钱时,Y的每次点击只收取 1 / 0.02 = $50
。代表Y其实只需要出价 $50就可以赢得这次竞价,因此$50对Y而言是公平的价格。
- 对广告主而言较为公平,能出“内心价”
- 只适用于一个拍卖位置
策略工程
实验
怎么吹都不为过的一种思想,应该是广告系统里每一次新的需求的必经之路。每个用户量足够的产品都应该接入来辅助决策
- 流量切分,均匀地哈希用户到不同的桶中
- 建立AB实验,给实验组、对照组的用户打上标签
- 给实验组的用户生效特殊策略,观察核心指标波动
- 全量,反转实验,对换实验组和对照组,确保结果正向
定向
- 优点:确保投放到准确的人群上,“不浪费”每一个流量
- 缺点
- 向覆盖范围外的人群连触达机会都没有
- 容易让用户产生疲劳
流控
超投问题:当广告计费到达额度,即将下线的时候,广告链路上依然有很多广告在请求、定向、筛选、排序、曝光等等流程中,所以到量的那一瞬间依然会有很多广告在投放状态,产生扣费
如何解决?出价会根据PID算法做适当的调整,来影响eCPM改变排序,以保量的合约广告为例子:
- 当模型发现某个广告投快了,降低出价,放弃本次展示机会
- 当模型发现某个广告投慢了,提高出价,pk掉其他合约广告,并且有可能在精排里pk掉后续的竞价广告(如果本次pk失败,下次仍会继续提高出价),最终获得广告展示机会