作者:固林的游戏鱼塘
广告投放系统的工作原理很简单,就是在一定规则约束下,给用户匹配ecpm最高的广告。
【资料图】
概述
每⼀次send,就是在广告系统下使用机器学习等算法,将广告和用户匹配的结果。实际上用户的请求数很多,但广告系统不保证每⼀次都会有广告匹配。
从用户请求广告到返回广告,大致会经历四个阶段:召回、粗排、精排、混排。每⼀个阶段都是由广告候选量级和机器算力间tradeoff的结果。
召回
召回阶段负责广告的粗选,会在当前请求中快速筛选大概1000~2000条相对匹配的广告进⼀步排序和优化。召回阶段主要包含以下几个部分:
◾ 广告主业务定向过滤,⼀般是广告主在计划粒度上设置的定向规则,如性别、年龄、人群包、app过滤等。
◾ 广告系统的频控过滤,为保证使用体验,不能让用户在短时间内看到重复的广告。用户dislike过于频繁,会让整个request在之后不推送广告。
◾ 广告系统的流控过滤,根据广告主预算和当前消耗,控制广告主快速消耗预算的策略,防止广告在超预算后还被继续投放。防止广告主过度集中在某一流量位消耗的策略,如激励位置的广告。
◾ 召回模型过滤,可以把模型理解为黑盒,它会预估每个候选广告在当前用户请求下被成功send的概率,概率越高广告排名越靠前。⼀般来说,召回模型如果过滤较多,基本都是广告竞争力不够,或广告系统下游(精排和混排)对广告类型打压所致。同时随着时间推移,会使模型学习的预估分偏低,从而逐渐让该类广告投放量越来越少。
◾ 返回结果,此时大概量级为1000~2000条广告。
粗排
粗排的任务是根据当前用户请求和候选广告队列,用⼀个比召回模型更复杂的模型得到更精细化/个性化候选的过程。这里大概会将量级从2000条降到150条左右。主要的业务逻辑控制和过滤有:
◾ 候选广告按照adv_id和ad_id打散,每个ad_id最多返回1个cid,每个adv_id返回最多两个cid。
◾ 设置了⼀些业务保量的逻辑,防止粗排返回的广告过于单一。
◾ 经过粗排模型,进行截断返回。
精排
精排主要包括两部分,⼀是参与到大模型的预估逻辑,另⼀个是参与复杂过滤/排序逻辑。
◾ 主要的过滤对象,当sorted ecpm
◾ 风控出价,广告消耗占比最⼤,成熟期主力出价。大部分广告主均是通过成本来表达自身诉求,并希望系统能够保证成本。所以系统目标是满足客户的成本诉求,并最大化跑量。
系统根据后验计费比反馈,通过PID调控机制来动态调整出价,最终实现保成本的目标。对于风控出价来说,最好的结果广告主的计费比=1,这是系统需要调控的目标。
◾ 流控出价,对应优先低成本出价,广告消耗占比非常低。因广告主预算设定不合理,没法达成优先低成本的效果。这里可以通过智能调价来满足广告主的保成本诉求。基于最优出价理论,通过PID调价来实现预算按照预期花费速度花完,从而实现最低成本的目标
◾ 关于Hidden Cost,Hidden cost表示广告对系统本⾝的隐藏损失,这个损失和之前的频控规则不同,是通过⼀种线性分数的行为引⼊到排序公式中。
◾ 打压策略,dislike/report打压,当用户对广告点击投诉或dislike后,会使这部分广告的hc升⾼。用户历史展现广告和当前广告相似度打压,防⽌用户看到过多相似广告。低质素材打压。
◾ 素材挤压的判断逻辑,在系统粗排阶段,对相同ad_id下的cid控制。⼀般来说,模型会选择最优解输送到下游,所以粗排之后每个广告主基本都只有1~2个广告返回。而这个广告本⾝,是不区分“素材”的,因此不太会出现挤压,而只会自己和自己的广告产⽣挤压。
混排
并不是所有的广告位都有混排,因此有些广告到精排阶段就结束了。对于有混排广告位的广告,主要是和自然结果的文章进行pk和插入的过程,这里有⼀些计费逻辑和刷内频控的逻辑进行广告过滤。
◾ 刷内频控,对于广告候选队列中的相同维度会进行过滤(如adv id、customer id、app name等),保证同request内返回多条广告的时候,不会推送连续相同的广告。
◾ 和推荐侧pk并插入的逻辑,文章内容混排;确定在文章内容队列中需要插⼊的广告位;确定插入的广告模型,返回上游。
以上就是关于广告投放系统的简介,希望对大家有所帮助。