合约广告一般在门户网站和视频网站中较为常见。这是由于用户与视频广告的交互较少,缺乏点击等反馈数据,不宜直接评估后续的转化效果。 如刷剧时的视频广告。
合约广告一般以CPM(Cost per mille,千次曝光成本)进行结算,即每完成一千次曝光流量平台向广告主收取固定的成本。合约广告的客户通常是品牌类广告主,它们的主要诉求是向公众宣传自己的品牌形象,并不显式地评估后续的转化效果。
竞价广告最重要的形式是搜索广告。搜索广告的标的物是关键词,每个搜索广告可以对一些特定的关键词进行出价。用户输入的查询与广告竞标的关键词进行匹配,检索出所有符合条件的广告,并选择其中的一条或几条广告与搜索的网页结果一起展示,通常广告排在网页之前。如百度中搜索时带有“广告”字样的搜索结果。
搜索广告一般按点击结算,在用户点击之后按照广告主对该关键词的出价收费,没有点击则不收费,因此点击率预估算法对竞价广告的优化至关重要。
程序化交易广告能够让广告主更加灵活地选择自己的受众群体和曝光时机。 在每一次展示机会到来之时,广告交易平台将流量的相关信息和竞价请求发送给需求方平台(Demand Side Platform,DSP),需求方平台根据流量的实际情况代表广告主进行出价,价高者得到本次的曝光机会。如在某博客页面上京东赢得一次实时竞价机会而展示一个商品广告。
程序化交易广告通常以 CPA(Cost Per Action,每次行动成本)的方式进行结算,因此需要综合考虑广告预估的点击率、转化率等因素。
上图是一个简化的广告系统框架,主要展示了与算法相关的模块,而对其他系统模块有所省略。系统由分布式计算平台、流式计算平台和广告投放机三大部分组成。分布式计算平台负责根据海量的投放日志进行批处理计算,得到算法分析和建模的结果,例如用户画像、点击率/转化率建模等算法都是在分布式计算平台上运行的,并将得到的用户标签、模型特征和参数等数据更新至数据库中。流式计算平台负责收集和计算有实时需求的用户标签、特征、点击反馈等数据,并将它们实时地同步到数据库中去。当一个请求到来时,广告投放机根据请求对应的用户、上下文等信息以及数据库当前的状态进行广告检索、排序和选择。一次广告投放完成之后,相关的记录将被流式计算平台及时地获取并处理, 同时它们也被收集到投放日志中,供分布式计算平台稍后使用。
用户画像是计算广告学的核心组成部分之一,在合约广告、搜索广告、程序化交易广告等产品形式中广泛存在。在合约广告中,广告主可以根据自身品牌的受众群体指定合适的定向条件,以节省成本;搜索广告和程序化交易广告可以根据用户的画像对该用户对各广告的点击率和转化率进行更精确的预估,从而优化整体的投放效果。
监督学习和非监督学习技术在用户画像中都得到了广泛的应用。监督学习的模型可以采用逻辑回归、支持向量机、决策树、随机森林、梯度 提升决策树、前向神经网络等,采用的特征因具体的业务而异。例如,在搜索引擎中,可以根据用户的搜索和浏览历史来对用户的性别进行预测,从而实现更精准的搜索广告投放。如利用一个大型网站的历史访问数据进行实验,输入的特征为该用户搜索和浏览过的历史网页文本,其中的每个词作为单独的一维特征,最终分类器学习到一些较为显著的文本特征。结果显示,在预测女性时,较为重要的特征是孩子、食物、家庭等;而对于男性来说,较为显著的特征是体育、车、因特网等。所以,对特征的学习结果还是比较符合直觉的。
另外一大类用户画像方法是采用非监督学习。非监督学习的目的是发现数据本身存在的规律,并不需要使用带标注的数据。根据用户以往的行为和已有的特征,我们可以将用户聚为一些特定的类别。对于每一类用户,虽然很难描述他们所对应的确切标签,但是可以知道他们拥有很高的相似度,并据此预期他们对广告具有某种相似的兴趣。这样,通过应用聚类技术,并将得到的聚类结果用于点击率预估、广告排序与选择,通常能够带来明显的效果提升。常用的聚类方法有 K 均值、高斯混合模型、主题模型等,它们都属于非监督学习的范畴。例如,在用非监督学习的方法挖掘用户兴趣主题时,可以结合用户在移动端的搜索内容和上下文特征(时间、地点等),利用主题模型对用户的行为数据进行建模。结果展示了两个挖掘出来的主题实例,一个主题可以理解为在工作日的早晨搜索股票的相关信息;另一个主题可以理解为在周末的晚上搜索聚会的酒吧;IsRelevant表示该特征的取值与我们对主题的解读是否相关,这是一种人工的判断。当绝大多数的特征都是与主题相关的,说明主题挖掘的效果较好。
点击率预估是效果类广告中最重要的算法模块之一。为了优化广告效果,首先要对广告展示之后的效果(即点击率、转化率等)有一个准确的判断,才能据此进行合理的选择与投放。在搜索广告中,一般通过广告的点击数量进行效果的评估和结算,因此点击率预估的准确性在效果优化中起到非常关键的作用。如果最终评估效果的指标是转化,那么还需要同时对点击之后的转化率进行估计。在很多场景中,实际的转化数据非常稀少,很难直接利用转化数据对模型进行训练,所以经常退而求其次,对二次跳转、加入购物车等行为进行建模。对转化、 二次跳转、加入购物车等行为进行建模的原理与点击率预估十分类似,因此仅以点击率预估为例对算法流程以及常用模型进行介绍。
点击率预估可以抽象成为一个二分类问题。它所解决的问题是:给定一个请求以及与该请求所匹配的广告,预测广告展示之后获得点击的概率。标注可以从实际的投放数据中获得,在历史的投放结果中,获得了点击的记录标注为1,其余标注为0。在点击率预估模型中,一条训练/测试数据对应的特征,可能包括与用户、上下文、广告主、创意等相关的特征。在训练记录中,如果这条记录最终发生了点击,则记录为1,否则记录为0;在预测时,我们需要预测这条记录发生点击的概率,即CTR(Click- Through Rate)。
点击率预估主要分为样本采样、特征抽取与组合、模型训练、模型评估等步骤,下面分别进行介绍。
在点击率预估时,通常要对负样本进行采样,这是因为在点击率预估的二分类问题中,点击数通常要远远小于总曝光数(PC端展示广告的点击率一般在0.1% ~1%之间),这将导致正负样本严重不均衡。如果点击率为0.1%,那么简单地将所有样本都预测为负样本,分类器的准确率也可以达到99.9%,这在一些分类器和训练算法中会存在问题。更重要的是,一条负样本所包含的信息相比于正样本来说较少,如果我们能够对负样本进行采样,就可以减少训练时间,或者能够在同样的训练时间中处理更多的正样本,从而在训练时间不变的条件下取得更好的效果。需要指出的是,样本在采样之后会改变数据的分布,因此在预估点击率时还需要将原始分布还原。
抽取与用户、上下文、广告主、创意等相关的各维特征,并对这些特征进行组合。这一步听起来是一个比较简单的过程,但是实际上非常重要,里面包含着各种学问。尤其是在传统的机器学习模型中,特征工程的好坏将对模型的效果产生决定性的影响,并花了算法工程师大部分的时间。在点击率预估中,捕捉特征之间的交互非常重要,由于一些特征表达了广告的性质,另一些特征表达了用户的兴趣,因此需要学习到两类特征的交互,才能更加准确地对点击率进行估计。
传统的机器学习模型无法直接捕捉到两类特征之间的交互,因此需要显式地进行特征交叉,即将任意两个特征组合起来作为一维新的特征。这样做可能会遇到维度爆炸的问题,由于我们并不知道哪些特征的交互最好捕捉,因此需要尝试所有可能的特征组合。实践中,经常采用梯度提升决策树和分解机对原始特征进行预处理。在梯度提升决策树中,每一棵决策树的每一条从根到叶子结点的路径可以 作为一种显著的特征组合,然后将所有的特征组合作为逻辑回归模型的输入再进行训练(见下图)。这是Facebook在2014年发表的工作,后来被证明在很多应用场景中都取得了不错的效果。对于分解机来说,每个特征可以被分解成相同空间中的K维向量表示,它们的交互强弱可以通过向量的点积表达,因此将特征的向量表示作为逻辑回归模型的输入,可以帮助算法更好地捕捉到特征交互对点击率的影响。
进入到深度学习时代,深度神经网络为我们提供了一种更加自动地抽取组合特征的方式,可以直接端到端地对点击率进行建模和预测。下图是一种端到端的深度CTR预测模型,其中原始输入为最简单的独热编码,接着通过预训练分解机将输入表示为嵌入的向量,然后通过三个全连接层,最后应用Sigmoid激活函数输出点击率的预测结果。
在实际的产品线中,我们可能不方便推翻以前的架构,全部改为利用端到端的深度学习模型对点击率进行建模。这时,将深度学习模型输出的中间结果当作高层语义特征,输入到传统的浅层机器学习模型中,通常也能够取得不错的效果提升。
进行完特征抽取与组合,并选择一个合适的模型后,我们就可以对模型进行训练了。模型的训练与调优过程也蕴藏着许多经验与知识。例如,在线上进行实时点击率预估的时候,我们通常希望模型被全部加载到内存中,从而保证服务的响应时间。因此,需要在模型的稀疏性和预测效果之间进行一个折中,对模型的稀疏性有一定的要求。但是,如果采用 L2 范式对模型进行正则化,很难得到完全稀疏的结果,更好的方案是采用 L1正则。这就要求了解 L1 和 L2 正则化的特点和相关理论。例如,在编写深度神经网络模型对点击率进行建模和训练时,我们需要检验程序计算出的梯度是否正确,这需要对梯度验证技术有所了解。另外,由于深度神经网络模型的假设空间是非凸的,有时在使用随机梯度下降法优化时会陷入局部最优解难以自拔,这时需要对随机梯度下降法失效的原因进行深入分析,并利用改进的方法进行训练。
模型训练完成之后,就需要对其效果进行合理的评估了。模型评估主要分为离线评估和在线评估两个阶段。离线评估的任务是设计合理的实验和指标,使得离线评估的结果和将来上线之后的结果尽量吻合。由于单个指标通常只能评估模型的某个方面,我们通常需要采用不同的指标来对模型的效果进行综合评价。以点击率预估为例,离线阶段常用的评估指标有Log Loss和AUC。Log Loss衡量预测点击率与实际点击率的吻合程度;AUC评价模型的排序能力,即获得点击的样本应尽量排在未获得点击的样本前面。一方面,我们希望预测的点击率尽可能精 准;另一方面,又希望更有可能获得点击的广告被尽可能地排列在前面。所以要求两个指标都得到比较好的结果,至于哪个指标作为主要指标要视具体的业务场景而定。如果一个模型在离线评估阶段取得了好的结果,下一个阶段就是进行线上A/B测试了。这一环节在模型正式上线之前至关重要,因为即使一个精心设计的离线实验仍然与线上的环境有所差别。如何设计一个合理的A/B测试方案也是一个优秀的广告算法工程师必须掌握的。
广告检索阶段的任务是根据查询、受众等定向条件检索出所有满足投放条件的广告。例如,根据查询的模糊匹配,要求将与该查询文本在语义上相近的广告尽可能地召回,供下一阶段广告排序和选择算法使用。这一阶段主要以召回率为评估指标,因为被漏掉的广告在后面就没有机会被展示出来了。解决模糊匹配问题的经典方法是查询扩展。通俗地讲,就是为当前的查询找到一组语义相关的查询,然后至少被其中一个查询检索到的广告都可以加入备选集合。查询扩展本质上是计算两个查询之间的文本相似度,或者求出给定一个查询的条件下生成另一个查询的概率。前者可基于主题模型、Word2Vec等算法实现,后者可利用深度神经网络等方法进行建模。
不同的广告业务场景在此步骤中的决策方式是不同的。
对于合约广告来说, 我们的目标是满足合约中规定的每日曝光数量要求(当曝光数量不足时会受到惩 罚),并不涉及点击率预估,因此广告的排序和选择问题可以被建模成带约束的优化问题。
在竞价广告的模式下,广告投放机根据点击率预估的结果对广告进行排序和选择。对于一个新上线的广告,如果没有充分的曝光,是无法对其点击率做出准确预测的。这时如果我们仅采用利用的方案,会倾向于选择其他点击率更高的广 告,或给出一个较低的出价。长此以往,该广告很可能丧失足够的曝光机会,我们也永远无法对其点击率进行合理的估计。因此,我们需要对曝光量不足的广告进行探索,但仅仅采用探索的方案显然也是不行的。对于已有足够曝光量的广告,还是应该遵循点击率预估的结果进行排序、选择和出价。探索与利用是一对矛盾的主体,需要在其间找到平衡,才能达到最佳的投放效果,这也是强化学习所重点关注与解决的问题。在强化学习的场景下,一开始我们并没有足够多的带标注样本,需要与环境进行交互(投放广告),通过获得反馈的方式来改进模型,最终获得一个最优的投放策略。在程序化交易的场景中,需求方平台还需要对选定的广告进行出价,如何优化出价也是一个独立的研究课题,在这里就不展开了。
《百面机器学习算法工程师带你去面试》