背景
在线广告业务发展到程序化交易阶段,通过RTB(实时公开竞价)这种交易模式,实现了在线实时决策,让广告主得以从“挑资源”过渡到“挑人”。但RTB同样也不是万能钥匙,在该交易模式下,广告具体投在哪个媒体资源上、哪个位置、投放价格、投放量多大等等,都是不可预期的,尤其在国内,RTB流量质量参差不齐,暗箱操作严重,得不到品牌广告主的认可。因为RTB这些“缺点”,将RTB与传统合约广告模式相结合,产生PMP(私有交易市场)的概念,通过下单排期,明确广告资源和位置,提前约定好价格。这其中,PD(优先交易)投放方式,因为采用保价不保量的原则,广受媒体和广告主的欢迎。该交易模式,提前约定好资源和价格,媒体方无需承诺库存,广告主也不保证成交量,由代理DSP在特定资源里挑人。
但是PD交易模式执行时,我们也发现了一些问题。媒体提供的定向条件毕竟颗粒度有限,同时,DSP为了拿到更多流量去挑选,往往倾向于将定向条件设置得比较宽泛。这就导致,媒体方发送了大量的请求,但DSP消耗的却非常少,回退率非常高,网络资源浪费严重。腾讯旗下多款“国民应用”流量巨大,给DSP造成了很大的压力,高峰时超时严重。另外,DSP当日预算消耗完毕,却无法及时停单,依旧收到大量流量轰炸,苦不堪言。
方案概述
作为媒体方,通过对以上PD问题的分析,我们发现,在进行PD交易时,对流量缺乏个性化控制。在PD投放模式中,DSP通过建立订单来申请资源流量,一个订单包含如下信息:广告位、频道等资源属性,地域、年龄、性别等人口属性,广告主、行业等广告属性。将特定的流量(人)分配给特定的订单(最终发给对应的DSP),和点击率预估中给特定的流量(人)分配收益最高的创意,具有一定的相似性。
因此参考点击率预估,我们尝试引入机器学习。通过对PD历史交易数据进行学习,实时预估每个流量对于订单的接受率,根据接受率决定流量要不要发给DSP,以及发给哪个DSP。通过机器学习,对流量重新分配,将广告主的更喜欢的流量给发他,从而提高交易效率,进而提升整体收入。
该方案分为了两期工程来执行:
第一期,根据预估的接受率,设定阈值,自动过滤接受率极低的请求,实现流量的智能QPS控制,减少无效请求,提高网络利用率,降低DSP处理压力。
第二期,初步筛选出满足定向条件的多个候选订单,预估出各个订单的接受率,根据接受率和订单价格,决策选出综合收益最高的订单,实现流量的个性化分配,在降低无效请求的同时,提升PD流量的整体收入。
工程分为两期,第一期在于验证算法的可行性,第二期在于工程上对PD流量进行个性化分配。
特征选择
在进行特征选择时,DSP接受率预估和点击率预估具有不少相似之处,也有一定的差别。我们从请求的流量以及候选订单中,提取出基础特征。包含广告位类型、频道等广告位属性,年龄、性别等用户属性,客户、代理商等广告属性,以及时间属性。
由于我们预估的是DSP的行为,而不是个人的行为,我们又额外增加了若干属性,比如订单消耗,如果DSP做了平滑播放,或者当日预算消耗完毕,我们无法从现有的特征中获知,可以从其历史的消耗分布来学习。再比如是否有设备ID,某些DSP因为要精确定位到人,无设备ID则不会进一步处理,而另外一些DSP,则是针对一个范围之内的人群进行投放,即使无法准确定位到人,依旧可以进行投放。该规律如果进行人工配置,通过规则来限制发给DSP的流量,则配置非常繁琐且无法及时更新。通过将是否有设备ID作为一个特征看待,不仅可以实现流量控制的自动化,也可以一定程度上提升接受率预估的准确性。
在选用基础特征的同时,我们对特征进行了组合,为了防止组合特征数量爆炸,我们预先使用了过滤式特征选择,针对一段历史数据,计算单个特征进行分类的AUC值,从而筛选出若干有效的基础特征和组合特征。
一期工程
一期重点搭建机器学习的整体框架,从数据上报,到数据处理,再到机器学习,分发训练出来的模型,在线服务根据模型预估接受率,从而决策出是否需要主动过滤,并统计过滤效果,分析算法的可行性。
流程框架
整个机器学习的应用流程分为离线和在线两部分,离线处理特征,训练模型;在线预估接受率,做出决策。整体框架如下图所示:
离线部分:收集PD的历史交易数据,在数据清洗、格式转换、特征处理之后,采用ftrl算法,训练出模型,导出特征参数,并定期更新到线上服务。
在线部分:上游模块流转过来的流量,已经选好了特定的PD订单。在线服务从流量和订单中,提取出广告位、用户、广告、时间等特征,对缺失特征进行补齐,并进行特征组合之后,根据事先推送过来的模型数据,预估DSP对于该请求的接受率。如果接受率低于设定的阈值,则主动过滤掉,不再发给DSP,否则继续请求DSP。如果模型效果较好,可以大幅减少无效请求,提高交易效率。最后将请求DSP的交易情况以及主动过滤的数据,进行上报,用于后续的离线学习和效果分析。
效果分析
线上流量按照5:95的比例分成了两份:
5% 无算法:不采用任何策略,所有PD请求全部放行;
95%智能算法:预估接受率,并自动过滤接受率低的请求。
经过一段时间的测试,发现过滤效果明显,主动过滤的广告位请求数占比15%~60%,接受数损失率(估算)大多在1%以内,接受率提升20%~150%。数据的波动是因为智能算法对不同订单效果不一,不同订单的分布又影响了整体效果。
指标含义如下:
DSP接受率:实际发给DSP的请求中,DSP接收数占比。
接受率提升:智能算法相对于无算法的接受率的提升比例。
自动过滤比例:采用智能算法后,主动过滤掉的流量占比;
接受数损失率:此为估算值,以无算法的接受率乘以智能算法所有流量,得到假设无算法情况下,智能算法应该有的接受数,再和智能算法实际的接受数对比,得到接受数损失率。
比如某日数据情况如下:智能算法相对于无算法,DSP接受率提升150.30%,自动过滤比例为60.30%,而接受数损失率为0.63%。
以下两图是上线一段时间之后,接受率走势对比,以及智能算法的自动过滤率和损失率对比。
其中对于部分订单效果更加明显,比如某日的某订单,智能算法相对于无算法,DSP接受率提升4537.51%,自动过滤比例为97.86%,接受数损失率为0.55%。可见大量的无效请求得到了很好的过滤。
但是因为学习间隔为1天,有很大的延后性,导致行为突变的订单被大量误判。比如某订单,前一天是新增订单,并且没有消耗,因为是新订单所以几乎没有主动过滤,同时学习到了该订单在任何特征下都是没有消耗的。但是,该订单第二天突然有了不少消耗,此时智能算法根据前一天的学习经验,错误的过滤掉了98.53%的请求,损失接受数几乎100%。同样的道理,上面整体走势图中,最后一天的损失率比较高。因为某个消耗巨大的DSP的多个订单在前几天的接受率都极低,然后突然一天增加了几十倍的消耗,导致我们大量误判,影响到了整体数据。为了解决此类问题,我们需要在后续工程中引入实时训练模型的机制,及时对DSP的行为突变做出响应。
二期工程
在一期工程上线之后,通过对订单接受率的预估,自动过滤了大量的无效请求,提高了网络的利用率,降低了DSP的负载压力。证明了机器学习在该场景中的可行性。在二期我们投入了更多的资源,进一步改进智能流控方案。
流程框架
二期在一期的基础上,增加实时模型训练,并进行个性化选单。整体框架如下图所示:
离线学习部分:由原来的定时模型升级为实时流模型,及时更新模型,以应对DSP投放策略的实时调整。定时模型进行全量的机器学习,一般一天或者若干小时训练一次,以保证训练的准确性,训练出的中间结果用于实时模型的再训练。实时模型在定时模型的基础上,接收实时流数据,根据实时数据,对中间结果进行修正,实时更新模型,并将更新的模型参数,及时推送给在线服务。
在线部分:首先上游选单模块配合修改,将所有符合定向条件的PD候选订单全部传过来。在线服务实时预估该流量在各个订单上的接受率,将接受率乘以价格进行倒排,过滤接受率过低的订单,并综合考虑客户去重、RTB混合竞价、余量分销、时长/曝光数限制等规则,优选出最合适的PD订单,请求对应的DSP;如果无法选出合适的PD订单,则主动放弃此次请求,智能过滤。此外,因为在线服务自主选单,可能会导致部分PD订单永远都不会被选中,失去尝试机会,因此增加少量的随机决策算法,保证所有订单都有机会被选中,进行DSP请求,这样所有订单都有交易数据进行机器学习。同样在最后,将所有处理数据进行上报,用于后续机器学习以及效果分析。
效果分析
线上流量按照5:2:93的比例分成了三份:
5% 无算法:不采用任何策略,按原先上游模块选出的订单去请求DSP;
2% 随机算法:从所有备选订单里随机选择一个订单 。
93%智能算法:基于机器学习和各项规则,选择最优订单。
上线一段时间之后,总体来看,智能流控算法提升效果明显:主动过滤的广告位请求数占比15%~68.88%;DSP接受率提升 20%~272%;不同于一期损失DSP接受率,二期中DSP接受数(估算)增加 3%~15.79%。
衡量指标中,相对于一期接受数损失率,二期为接受数增加比例:
接受数增加比例:此为估算值,以无算法的接受率乘以智能算法所有流量,得到假设无算法情况下,智能算法应该有的接受数,再和智能算法实际的接受数对比,得到接受数的提升比例。
而作为对比的随机算法,相对于无算法,差别不大,偶尔还有一些接受率的损失。
以某日数据为例:智能算法相对于无算法,DSP接受率提升237.12%,自动过滤比例66.43%,接受数增加13.16%。
以下两图是上线一段时间之后,无算法和智能算法接受率的走势,以及智能算法自动过滤比例和接受数提升比例的对比。
结语
总体来说,这次改进方案取得了令人满意的效果,通过对历史交易数据的学习,实现了流量的个性化分配,减少了大量的低效请求,提升了PD投放的成交量,让广告主拿到了更多感兴趣的流量,让媒体方不同特性的流量得到了更好的售卖。
腾讯提出“AI in all”战略,这是我们在工程开发中对机器学习的一次尝试。后续我们将会把人工智能技术引入到更多流程决策中,充分利用我们积累的大数据,实现更多环节的智能控制。
领取专属 10元无门槛券
私享最新 技术干货