背景
在整个广告系统中, 计费是处在和钱最相关的环节:检索端把结果展现给用户,如果用户感兴趣,并且产生点击之后,这些点击就需要通过计费系统进行流转,对广告主的费用进行扣费。
因为计费系统和钱完全相关,所以任何问题都是钱的问题,而钱的问题在广告系统里边都是最受到重视的所以在各个广告平台当中,都会有专人对计费系统进行升级,维护和监控。
想象一下出了问题之后,要么是广告平台的钱受到损失,要么是广告主的钱受到损失,计费系统如果有问题,要么广告主直接跳出来找你,要么就公司收入受损失,所以一般做计费系统的同学的压力都是比较大的。
例如在大厂(比如腾讯,阿里巴巴,字节),如果一天的广告收入是一亿,在高峰时段,出了故障半小时就损失大几百万,而且有一些事故的收入是回补不回来的,这个收入是回补不回来的这个还是挺恐怖的。
下面就给大家介绍一下积分系统的实现逻辑。
图:计费系统系统位置
在用户看到检索端呈现的结果之后,如果用户感兴趣,就会发生接下来的点击和转化,此时,这些信息就流转到计费系统去进行计费。
计费数据链路
广告计费平台涉及以下内容:资金管理,实时计费,投放控制,日终结算等和钱相关的工作,重要性非常高。
上图中的几个组件功能如下:
- 资金管理平台, 主要是对用户的账户资金进行管理,包括交易,结算,充值等。
- BP,主要对投放进行管理, 包括投放计划/单元的设置,投放预算的设置。
- 计费平台,为本文的核心部分,主要和广告投放引擎,资金管理平台进行协同进行计费,同时进行投放的控制和结算。
计费系统的挑战很多,主要体现在以下几方面:
- 实效性非常高, 否则会造成较多超投,或者少投,相当于是资损。
- 涉及金额较大, 广告平台涉及到的所有的钱都会通过该系统链路
- 线上‘钱’的链路的最后一环, 需要对上游系统错误进行容错,最大程度避免钱的损失。
超投控制方案
超投: 超过广告主余额,计划预算的投放流量是不能找广告主收钱的,该种情况就是超投。 超投不可避免,但可以尽量降低超投或者少投,这就是一种开源节流。
为什么超投不能避免?
原因很简单,以CPC为例(CPA等其他模式会更加严重,因为转化路径和转化延迟更为严重),广告平台的展现,到用户的点击是有时间差的,如果广告展现的时候还有预算,但用户点击时预算花完,该点击就不能向广告主收费,就会出现超投。
另外系统的数据链路本身也会有延迟。 所以超投不可避免。
图:计划撞线
如何降低超投?
控制超投的思路, 就只有一个, 就是在预期计划可能超投的情况下, 进行投放的减速。
具体来说,就是**降速在消耗接近预算/余额前,进行降速,以期望在预算为0时,正好停止投放。 思路就类似于预算/余额接近0的时候开始刹车。
在具体实施的时候,可以使用以下方法进行刹车控制:
- 根据预算/余额直接进行计算是否开始踩刹车。参见图:刹车控制超投
- 根据剩余点击数,根据预算/余额,以及最近的N条点击的花费,计算出剩余的点击数进行控制
- 根据剩余预算/余额/点击分段进行控制, 这是更精细化的方式,越接近刹车终点,速率越慢。
- 缓升控制, 该方法不仅考虑预算控制的刹车的方法,还需要考虑计划投放启动的速率,主要是避免有些预算较少的单元,因为一开始投放较多, 直接就控制不住超投。参见图:缓升控制超投。
计费收益优化
排序
为了实现平台的收益最大化, 以及统计口径的统一, 在计费日志遍历的过程中,需要对排序逻辑进行优化, 排序优化分为以下4个阶段:
- 按日志的自然顺序计费,该计费的方式优点比较直接, 就是计费逻辑比较简单,同时能够保证计费结果的一致性;但缺点也很明显: 该方式对平台不利,很容易出现较多的超投。
- 引入贪心算法, 即大价格在前,该方式对于自然顺序有一定优化。
- 引入改价策略,即排序的时候进行计费日志改价,这样就能够保证最后一条日志能够计费。
- 引入排序稳定性改价, 多次重跑,保证结果一致。
最后,大量招人,算法,工程,数据P6~P9,具体岗位参见: 招聘信息