【i技术会】2020.03.13 《常用视频广告算法经验谈》分享会
今天分享的主要内容分为以下四块内容:爱奇艺效果广告产品介绍,主要是介绍爱奇艺效果广告的主要资源位以及对应的售卖形式;二是效果广告排序算法实践介绍,这里主要介绍在排序算法过程中使用的精排模型和粗排模型;三是效果广告业务策略实践,该模块主要介绍针对新广告的冷启动策略以及针对于出价实行的智能出价策略和双目标出价策略。最后在以上三点的基础上进行效果广告的总结和展望。


效果广告产品——oCPX
在CPX投放的模式下,竞价是通过ECPM来排序的,ECPM在CPX模式下等于bid乘PCTR,在CPX投放过程中广告主遇到右上角三个痛点;一是转化成本不稳定,效果广告的广告主大多是中小广告,中小广告主主要关注用户最终的转化,包括下载、安装和付费等等。CPX计费模式以点击进行计费,无法保证广告主后续转化率以及对应的转化数,从而导致转化成本不稳定的情况。第二是人工优化繁重,广告主在使用CPX计费模式的情况下,需要筛选出最优的曝光质量,从而保证从点击到后续的转化具有较高的转化率。广告主通过设置用户的定向条件来保证曝光质量,定向条件包括用户的性别、年龄、层次和频道等等

从而实现在CPX广告投放模式下具有好的转化效果。第三是拓量困难。广告主在投放CPX模式的情况下,只能进行点击出价的操作,点击出价提高时确实可以达到曝光和点击数增加的效果,但是通常带来的副作用是转化率的下降以及转化成本的上升。
故我们尝试引入oCPX模式,oCPX模式下的计费公式是bid乘PCTR乘PCVR乘智能出价因子,广告主投放oCPX时只需要设置目标成本即可,由媒体方通过算法模型进行Ocpx广告的智能投放。接下来向大家主要展示为了实现广告投放的自动驾驶,我们在PCTR、PCVR和智能出价模块分别做的尝试和实践。
排序漏斗逻辑
在介绍具体的排序算法实践之前,先过一下排序的过程中所经历的排序漏斗逻辑。一个请求发生时分别经过以下三个环节,最终达到广告展示。第一层是召回环节,召回环节包括定向召回和智能定向两块,定向召回主要是根据广告主设置的定向条件,之前也介绍过,城市、地域、性别、年龄等等召回对应的广告。智能定向就是根据突破广告主设置的定向条件来筛选出相似度较高或者预估转化率/预估点击率较高的广告订单,参与到后续的模块,召回选出指定的订单之后进入粗排环节,粗排包括创意优选,轻量的点击率预估和转化率预估,以及对应的冷启动。创意优选模块主要是为了优选同一广告主底下最优的创意,可以实现平台的新颖度,提高平台的转化效果。
轻量的点击率和转化率预估解决召回之中大量的广告需要进入精排环节进行的轻量级的模型计算,用于广告的筛选逻辑。冷启动是为了解决在新广告投放的过程中由于模型没有拿到这部分新广告产生的数据而无法进行准确的预估。

进入粗排环节之后,筛选出少部分的广告进入精排环节,精排包括预算平滑、点击率预估和转化率预估三个模块。预算平滑主要为了解决广告主按天进行预算投放的过程中,预算可以分小时平滑的花费在每个小时内,解决部分广告主由于出价或者点击率预估效果较好导致短时爆量的问题,从而影响广告主最终的成本。点击率预估和转化率预估则使用较为复杂的预估模型进行对少量广告进行优选,按照ECPM进行排序后选出TOP1进行广告展示。智能出价模块则是涵盖到粗排和精排两个环节,智能出价主要为了保证广告在投放过程中一是成本稳定,二是能够及时进行扩量,故其会同时涵盖粗排和精排两个环节。
算法实践的整体框架
首先从最上方的数据流开始,投放引擎在进行广告投放之后产出对应的现场特征Tracking数据,现场特征主要是为了实时记录精排在排序过程中使用的具体特征而落的日志。现场特征和Tracking由广告数据团队产出Kafka流和Hive表进行落地。其中一部分数据用来生成HTTP接口实时数据,用于智能出价参数的计算,最终智能出价模块通过数据库的方式传递到投放引擎进行使用。特征监控是为了对现场特征的覆盖率和波动的情况进行监控,从而保证线上服务的稳定性。特征生产主要为了产出用户画像特征,此处的用户画像包括用户的基础属性,用户的商业兴趣画像和用户的广告兴趣画像,该部分会通过历史加实时的方式传递到投放引擎中,而特征解析模块主要将现场特征与Tracking日志进行关联后产出模型训练中需要使用的数据,以上则是数据流模块。

最后介绍线上推理模块,投放引擎在请求到来时,会分别获取用户画像、用户向量、上下文特征和智能出价因子,将这些信息以及召回需要排序的广告放入到粗排模块,粗排请求粗排ranking使用用户向量和广告向量的乘积进行广告的粗筛,筛选出少量广告之后进入精排模块,精排将投放引擎中获取用户特征数据和一些额外信息传递到精排ranking,通过广告业务数据获取广告业务数据的同时进行FM模型的推理,或者调用TFserving请求得到预估转化率。得到对应的结果之后返还给投放引擎中的精排模块筛选出最优的广告进行广告展示。
模型训练模块
包括粗排和精排的模型训练。粗排主要的衍生原因是由于精排模型较为繁重,线上推理性能较差,对于无法处理召回传递过来的大量广告,从而衍生出粗排模块,粗排主要的目标即是推理效率问题。我们在刚开始落地粗排时尝试采用FM模型,但是随着广告业务的发展,FM模型远远满足不了线上推理效率的需求,故我们引入下图所示的双塔模型。

双塔模型分别产出用户向量和创意向量,通过两个向量的乘积实现线上推理的高效。在解决推理完之后,我们需要保证粗排模块能够预估的更加精准,主要通过三种方式进行提高模型的预估能力。
一是多维度特征,尽可能多的增加在模型训练过程中使用的用户特征以及创意特征。二是特征Embedding方式,我们尝试对于多值用户画像特征以及连续性特征和广告侧特征进行Embedding操作,提高特征的表征能力。最后对于用户向量和创意向量使用不同结构的MLP逻辑,提高模型的泛化能力,使得产出的用户向量和创意向量的乘积能够很好的代表最终预估得到的点击率和转化率。
解决预估精准度问题之后,我们需要考虑针对于新广告进行处理,就要求模型更新及时,我们通过天级别全量训练加上小时级别创意推理的逻辑,实现支持新广告业务,这里面主要是指每小时定期用右侧逻辑推理得到创意的向量,换入到投放引擎中进行使用,从而使得粗排能够更好的支持新广告。
精排模块中使用到的点击率预估
在爱奇艺效果广告开始投放的过程中直到现在我们共进行了四个主要版本的迭代。分别如下,第一个版本为逻辑回归模型,利用用户商业画像特征、上下文特征、广告业务特征进行拟合预估点击率,但是逻辑回估过程中由于模型较为简单,我们想提高预估的准确率,只能通过特征工程的方式,特征工程相对比较烦琐,为了解决这个问题我们尝试引入FM模型,FM模型的好处是可以构造低维的向量得到特征交叉的组合效果。另外在FM的基础上,我们构建了用户广告画像的特征。
在完成FM迭代之后,我们遇到了数据和模型时效性的问题,故我们尝试引入FM with online learning,实现实时的进行模型更新和训练,同时在FM基础上构建实时用户广告画像特征,从而提高模型的预估准确度。

FM模型通过低维向量进行两两交叉组合,后续我们发现模型和特征的表达能力存在不足的问题,故尝试引入深度学习,使用深度学习中的Embedding来进行提高特征的表征能力。使用MLP逻辑提高模型泛化能力。
引入深度模型首先面临的是模型的选择,这里我们对比了wide deep模型、DNN模型和DCN模型。相较于DNN模型来说,wide deep模型可以通过左侧wide部分提高模型的记忆能力,同时左侧部分也可以进行快速的迭代。相较于DCN模型来说,wide deep可以与DCN达到离线评估一致的AUC,其实现的复杂度以及线上推理的效率远远低于DCN,故最终我们选择了wide deep模型。在模型选择以后进行wide deep模型的优化,主要针对学习率、优化器以及隐层的陈述和隐层每层的神经单元的个数进行优化和尝试等等。如右图所示为详细模型结构,这里不再赘述。

转化率预估
首先考虑能否直接复用点击率预估中使用到的widedeep模型,答案肯定是不可能的。在转化率预估遇到的主要难点一是转化目标多,当前爱奇艺整个效果广告投放平台支持包括下载、安装、关注微信号、激活、注册等等,二是转化数据少,转化数共十万级别每天,且主要集中在注册和关注微信号,其余转化目标数据更少,三是采用点击和转化作为正负样本,但是对所有曝光请求都会预估转化率,从而导致训练和推理样本分布存在偏差,四是不同资源位、不同转化类型对应的转化率差异都比较大,类似于其中一个例子,下载关注微信号能达到5%-10%的转化率,付费和提交表单达到千分之一甚至更低的转化率,针对转化率预估过程中遇到的这四个问题采用如下方式进行解决。


额外的模块校准
校准之所以存在的原因,因为在ECPM进行排序的过程中,使用到bid乘PCTR和PCVR,PCTR和PCVR需要保证和点击率、转化率一致,才能使得ECPM相对比较稳定。但是在模型预估的过程中真能够保证预估点击率或者预估转化率与点击率或者转化率一致吗?答案通常是否定的,主要是由左边所示的三个原因。一是新广告预估偏差大的问题,之前我们也说到在新广告投放的过程中,由于没有历史数据的积累,通常预估会偏差比较大,表现出来的是部分广告无法曝光以及部分广告预估值偏大的情况。第二个正负样本归因问题,以转化率为例,转化率在生成训练样本的时候,由于转化延迟的问题,训练数据集通常没有办法完全涵盖所有的转化样本,会导致最终我们预估出来的转化率会比真实的转化率相较来说低很多。准确性与稳定性不一致的问题,我们在实践的过程中发现模型在预估的过程中,通常情况下PCTR或者PCVR预估值越高的流量,其对应的方差越大,这里将PCTR或者PCVR与稳定性相挂钩,从而导致整体来说模型预估并不准确,最终引入校准逻辑。

效果广告进行业务策略的实践
冷启动模块主要是为了解决Exploit和Explore问题,同时也尽量解决模型预估不准确的问题,模型预估不准确主要是由于在竞价后真实的点击率分布和预估点击率之间的分布存在差别,模型训练则是使用模型筛选出来的样本进行训练,从而形成马太效应。

策略实践过程中最主要的模块——智能出价
由ECPM计算公式可知,ECPM等于PCTR乘PCVR乘转化出价乘智能出价因子。智能出价因子主要目标是控制成本增加消耗。当广告主设置目标转化成本时,广告在投放的过程中出现目标成本高于转化成本时,我们通过调高出价增加广告消耗,当目标转化成本低于实际转化成本时,我们调低智能出价因子实现控制成本。接下来向大家介绍我们为了实现智能出价的精细化操作来尝试的各种处理。



考虑成本动态调整策略基础上,我们思考了如下的问题,广告主在拓量的过程中能否对优质的流量进行激进放量,对于劣质的流量尽量减少其拿到量的机会。我们引入了流量优选策略,流量优选策略主要通过精排模块预估的PCTCVR值与历史PCTCVR均值进行对比,当PCTCVR大于历史的均值时我们认为该流量是优质的流量,在上一步的基础上继续提高智能出价因子。当PCTCVR低于历次的均值时,我们认为这是劣质的流量降低智能出价因子。
分资源位控制策略,在爱奇艺广告投放的过程中具有多个不同的广告资源位,不同的广告资源位对应的转化成本和转化率也不一致,为了实现智能出价引资的精细投放,我们对资源位进行拆分,分别计算不同的资源位的智能出价因子,从而实现智能出价因子能够对广告进行精细化的调解,如右图所示在广告投放过程中当目标转化成本大于实际转化成本时,智能出价因子提高导致智能出价价格提升,可以获得更多的曝光量,从而实现广告的顺利拓量问题。
最后则是介绍在业务策略实践过程中使用的双目标出价逻辑,广告主在投放的过程中,通常会关注前端成本和后端成本,前端通常包括下载和激活等等,相对来说转化数较多的转化目标,后端成本则是包括付费、次留、下单等等,转化数据较少无法直接进行模型训练,为了保证广告主后端分差大的问题,根据广告主设置的前端转化成本和后端转化成本,我们分别设置计算其对应的智能出价因子和后端智能出价因子,后端智能出价因子处于放量状态选择两者之间最大的值进行放量,后端成本不满足/出现偏差大的时候我们对两者进行加全操作,权重由后端转化成本进行决定,后端转化数越多,在最终的智能出价因子中占比越高,最终实现广告主后端成本偏差小的问题。
