广告实时性能力建设

背景

在很多广告的场景,我们需要对广告及流量进行实时数据特征的建设。 例如对于广告侧,对于很多ADNet,可能每天的新广告能占20%, 新的广告没有很强的历史数据积累,需要实时地对效果数据特征进行统计以便反馈到模型中(很多广告联盟都会面临该情况)
对于流量侧, 用户的需求也是在实时变化的, 特别是对于很多低频的应用产品, 例如高德的用户, 可能平常也不用高德, 但使用高德的时候, 基本上都是带着LBS的本地生活需求来的, 而且这类的需求需要立马得到满足,否则用户可能就使用其他应用满足其需求了。例如异地的用户到了目的地城市需要住酒店, 就需要马上满足。

图:高德酒店搜索

所以, 无论从广告的角度, 还是流量的角度,都需要建设实时数据特征的能力来提升算法的效果。
同时,如何让实时方案更加高效, 如何保证流批一体的一致性, 就是极有挑战和意义的工作。

技术方案

广告侧能力建设

短周期统计特征

一般从模型使用特征的角度,在搜广推中,我们都会认为主要是流量+广告+场景的特征。 一般我们会周期性地(例如按天,或者按周,按月)统计广告在各个维度上的统计特征来作为广告侧的信号,例如统计广告在不同时间,不同地域,不同距离,甚至不同人群上的点击量等作为广告的统计特征。
上文提到,很多场景中, 广告更新比较频繁,这样就会导致在周期性统计会失效。 主要有以下原因:

  1. 新广告较多,导致很多广告没有周期性统计信息
  2. 长周期的广告侧统计相对稳定,但是很难捕捉近期快速的广告效果变化

基于以上考虑,我们不仅需要有长周期的统计特征作为模型输入,同时需要有短周期的实时特征,让模型能够感知到实时效果的变化。
具体的使用方式,可以根据特征物理含义的不同,使用不同的短周期对特征进行统计(例如15分钟/1小时/3小时/12小时),然后将统计值(例如impression,click, ctr,cvr)作为模型的输入。 具体的输入方式和特征的形式和模型相关, 例如可以直接embedding.

缺失值

很多时候, 如果最近一段短周期拿不到对应的广告特征,则我们使用最近的一段短周期特征作为替代,此时为了保证特征的一致性,我们在生产特征的时候, 就需要在特征生产计算的时候带上版本号, 例如版本号以生产的时间t表示,则在t+1的时间周期内, 我们都使用版本t的特征数据, 如果没有,则使用t-1周期产生的特征数据进行拟合。

效果

一般来说,如果广告变化越快,引入广告侧的实时数据,效果就越明显,在很多LBS的本地生活场景,引入这样的短周期(多个维度)后,点击率等指标的相对提升都超过10%

用户侧实时特征

在很多低频应用中,例如高德,美团等非kill time场景,用户带着需求而来,需要快速捕捉用户在端内的需求并在端内的各个场景都体现出来,此时用户侧的实时特征建设,更像是一个用户实时画像的快速动态刻画。 包括用户在各个场景的搜索,推荐内容的点击等显式和隐式的表达信息。
此时一方面需要有实时的流批一体建设捕捉这些信息,同时需要将在不同场景的query,点击,甚至挖掘内容均在同一个空间进行表达,此时一方面可以将所有的query,点击广告使用预训练的embedding进行pooling到同一空间,同时可以用人可以理解的tag体系进行这些信息的显性融合,之后作为模型的用户侧特征。
对于LBS这样的场景,经过丰富的实时特征处理,CTR的相对提升可以达到5%

工程实现

该部分不是本文的重点,后续可以由专门的文章介绍。但以上流批一体的操作,因为特征丰富多样,对时效性要求又极高,所以需要有高效的工程架构来支持。 我们团队目前实现了基于Blink的事件总线平台,能够通过配置, 就可以使用丰富的底层算子,生成Blink逻辑,并使用流水线的方式对实时数据进行加工,生成需要的特征供线上使用。类似于机器学习的tensorflow,能够根据底层算子自动进行组合。

目前平台还在打磨, 后续视情况可能会开源,有兴趣的同学也可以加入我们团队一起来进行该方面的建设。