近年来,在线广告在整个广告行业的比重越来越高。在线广告中实时竞价的广告由于其良好的转化效果,占有的比重逐年升高。DSP(Demand-Side Platform)[1]作为需求方平台,通过广告交易平台(AdExchange)[2]对每次曝光进行竞价尝试。对于AdExchange的每次竞价请求,DSP根据Cookie Mapping [3]或者设备信息,尝试把正在浏览媒体网站、App的用户映射到DSP能够识别的用户,然后根据DSP从用户历史行为中挖掘的用户画像,进行流量筛选、点击率/转化率预估等,致力于ROI [4]的最大化。

美团点评的用户量越来越大,积累了大量的用户在站内的行为信息,我们基于这些行为构造了精准的用户画像,并在此基础上针对美团App和网站的用户搭建了美团DSP平台,致力于获取站外优质的流量,为公司带来效益。本文从策略角度描述一下在搭建DSP过程中的考虑、权衡及对未来的思考。

  • 在DSP实时竞价过程中,策略端都在哪些步骤起作用;
  • 对每一个步骤的尝试和优化方向做出详细介绍;
  • 总结DSP如何通过AB测试、用户行为反馈收集、模型迭代、指导出价/排序等步骤来打通整个DSP实时竞价广告闭环。

美团DSP在一次完整的竞价展示过程中可能涉及到两个大的步骤: 1. 对AdExchange的竞价请求实时竞价; 2. 竞价成功之后用户点击进入二跳页、浏览、点击、最后转化。

我们分别看一下这两个步骤中策略的支持。

图1 竞价广告示意图

图1给出了每一次竞价广告的粗略示意图,竞价Gateway在收到竞价请求之后,会识别出美团点评用户的流量,根据网站历史CTR、网站品类属性等因素进行简单的流量过滤,把流量分发到后端的AdServer。AdServer作为后端广告的总控模块,首先向RecServer(定向召回服务)获取站外展示广告召回结果,然后根据获取的广告结果向PredictorServer(CTR/点击价值预测服务)请求每个广告的站外点击率和点击价值。最后AdServer根据获取的点击价值*v*和*ctr*,根据\(v*ctr^t\)进行排序,从而挑选出top的广告进行展示。

图2 二跳页广告流程图

图2给出了竞价成功后,用户从站外展示的广告点击后,所经历的流程示意图。用户点击站外广告后,到达二跳页Gateway,二跳页Gateway向AdServer请求广告列表。AdServer从RecServer获取站内二跳页广告召回结果,然后根据获取的广告结果向PredictorServer请求每个广告的二跳页点击率并进行排序。排序后的结果返回给二跳页Gateway进行广告填充。

在上述两个步骤中,美团DSP策略端的支持由RecServer和PredictorServer提供,在图1和图2分别用红色的箭头和AdServer交互。其中RecServer主要负责站外广告和二跳页的广告召回策略,而PredictorServer主要负责站外流量的CTR预估,点击价值预估和二跳页内的CTR预估。整个策略的闭环如下图:

图3 策略闭环图

接下来详细介绍下美团DSP的召回、CTR预估、点击价值预估相关的策略。

从上一小节的介绍可以看到,定向召回服务分别在实时竞价过程中提供了站外广告的召回服务,在竞价完成之后提供了二跳页的广告召回服务。站外召回和站内二跳页召回没有本质的区别,比较常见的做法是二跳页会根据用户点击商品的品类进行品类过滤。下面我们具体看一下目前定向召回相关的具体策略。

基于实时行为召回

通过实时日志流平台准确的跟踪用户的实时点击浏览/收藏/购买行为,对于相应的用户重新投放用户近一段时间内发生过浏览/收藏/购买行为的商品。需要注意的是这个策略需要考虑召回概率按时间进行衰减,用户的实时行为能够比较强反映用户的近期兴趣,距离当前时间比较长的用户行为对于用户近期兴趣的定向偏弱。

基于位置召回

O2O的业务特点与传统的电商有明显的区别,传统电商是在线上达成交易意向,然后通过快递送货的方式完成交易。O2O业务绝大部分消费者是在线上买入电子券,然后要到店进行消费,所以用户的位置信息在广告召回中起着举足轻重的作用。我们在基于位置的广告召回中尝试了以下三种策略:

1. 实时地理位置召回

根据用户所在的实时地理位置召回距离比较近的广告。 * 对于移动端的广告流量,可以比较准确的获得用户的实时地理位置,从而进行比较精准的投放; * 对于PC端的流量,地理位置是通过用户访问的IP地址进行推算的,所以地理位置是有偏移的,但是考虑到PC端浏览广告的流量用户位置一般都比较固定,比如用户一般是在上班或者在家休息,我们仍然使用了这个策略。

2. 实时商圈热单召回

根据用户所在的实时地理位置推断出用户目前所在商圈,给用户投放当前商圈的热门消费单。商圈的范围一般在几公里范围之内,对于用户到店消费是一个合理的距离范围,所以我们离线挖掘出每一个商圈的热门消费单,作为用户召回的候选。

可以看到策略1和策略2是不需要userid的,所以这两个策略也是我们在识别不到userid的时候一个比较好的冷启动召回策略。

3. 偏好商圈热单召回

通过离线分析用户历史的浏览/点击/购买行为,分析出用户的历史商圈偏好,召回用户偏好的商圈消费热单作为广告候选集。这个策略需要用户的userid,仅对于能够识别并能映射到userid的用户适用。

基于协同过滤召回

基于协同过滤的召回策略我们融合了user-based和item-based两种。

基于item-based的协同过滤,我们首先通过用户的购买行为计算item之间的相似度,比如通过计算发现item A和item B之间的相似度比较高,我们把item A作为候选推荐给购买item B的用户,作为item B的用户的召回候选集之一;同样也把item B作为候选推荐给购买item A的用户,作为购买item A的用户的召回候选集之一。因为item-based协同过滤的特征,这一部分召回基本能够把热门爆款单都拉到候选集中。

基于user-based的协同过滤,我们同样需要先计算用户之间的相似度。计算用户相似度时,除了考虑用户购买的商品,还可以把用户所消费过的商家及商家所在的商圈作为相似度权重考虑进来。这么做是因为,很多商品是在全国多个城市都可以购买的,如果只采用用户购买的商品来计算相似度,可能把两个不同城市用户的相似度计算的比较高,加入商家和商圈的权重,可以大大降低这种情况的可能性。

基于矩阵分解的场景化召回

对于O2O消费的某些场景,比如美食和外卖,用户是否发生购买与用户目前所处的场景有很大关系,这里的场景包含时间、地点、季节、天气等。举个例子来说,工作日的中午,如果还在下雨,这个时候外卖的购买概率一般是比其他商品高的。

基于此,我们开发了基于矩阵分解的场景化召回策略。我们采用了FM模型来进行建模,建模的特征包括季节、时间(工作日/周末,一天之内的时段)、地点、天气等。这个策略的目的是希望召回用户实时的基于场景化的需求。

上文提到在实时竞价阶段,AdServer会跟PredictorServer请求每个广告的站外点击率和点击价值,最后AdServer根据获取的点击价值*v*和*ctr*,根据\(v*ctr^t\)进行站外广告排序,挑选top的广告。最终的报价公式如下: \[a*\sum_{i=1}^k v_i * ctr{_i^t}+b\tag{1}\]

*k*是本次竞价要展示的广告数,t,a,*b*都是根据实际流量情况进行调整。其中*t*为挤压因子,为了控制*ctr*在排序和报价中起作用的比重,*t*越大,*ctr*在排序和报价中的比重越高;a,*b*需要根据DSP需要获取的流量和需要达到的ROI之间的权衡进行调整,a,*b*越大,出价越高,获取的流量越多,成本越高,ROI就减少。

公式1中CTR直接作为一个引子进行出价计算,所以这里的CTR必须是一个真实的点击率。因为在站外广告点击日志中,正样本是非常稀疏的,为了保证模型的准确度,我们一般都会采用负样本抽样。这样模型估计出来的CTR相对大小是没有问题的,可以作为排序依据,但是用来计算出价的时候,必须把负样本采样过程还原回去,我们在下面的小节中详细解释。

站外CTR预估

该模型目标是,对于RecServer召回的广告,预测出广告的相对点击率和真实点击率,相对点击率用于排序, 真实点击率用于流量报价。对于每个流量,AdExchange会下发给多个DSP,报价最高的DSP会胜出,获取在这个流量上展示广告的机会。为了能够引入更多的优质流量,减少流量成本,提高ROI、CTR预估模型需要充分考虑站点、广告、用户等维度的信息。

广告的点击与转化主要与用户、广告、媒体(user,ad,publisher)这三个因素相关。我们的特征也主要从这三个方向去构建,并衍生出一些特征[5]

特征选择

1. 用户特征

用户浏览,购买的品类,用户画像,浏览器,操作系统等特征。

2. 广告特征

  • 广告deal的属性特征,如商家、品类、价格、创意类型等特征。
  • 广告deal的统计特征,如历史CTR、CVR、PV、UV、订单量、评分等。

3. 媒体特征

网站类别,网站域名,广告位,尺寸等特征。

4. 匹配特征(主要是用户与广告维度的匹配)

  • 用户浏览、购买的品类与广告品类的match, 商家的match。
  • 用户浏览广告的不同时间粒度的频次特征,比如用户浏览当前广告的次数、用户上次点击广告距离当前的时间差。

5. 组合特征

在LR+人工特征的实现过程中,需要人工构造一些组合特征,比如,网站+广告、用户消费水平+价格、广告主+广告品类等,对于FM和FFM能都自动进行特征的组合。

6. 环境特征

广告的效果往往与用户所处的外部环境相关。比如 时段、工作日/节假日、移动端的经纬度等。

特征处理

最后再看我们具体如何构建模型。

1. 模型选择

由于站外的站点数量巨大、广告位较多、广告的品类较多,造成训练样本的特征数较大,需要选择合适的模型来处理,这里我们选用了LR+人工特征的方式,确保训练的性能。

2. 特征降维

点击率模型需要考虑用户维度的数据,由于美团的用户量巨大,如果直接用用户id作为特征会造成特征数急剧增大,而且one-hot encoding后的样本会非常稀疏,从而影响模型的性能和效果。所以我们这里采用了用户的行为和画像数据来表征一个用户,从而降低用户维度的大小。

3. 负样本选择

  • 对于站外广告,有很多广告位比较靠近页面的下方,没有被用户看到,这样的广告作为负样本是不合理的。我们在负样本选择的时候需要考虑广告的位置信息,由于我们作为DSP无法获取广告是否真实被用户看到的信息。这里通过适当减少点击率较低的展位负样本数量,来减轻不合理的负样本的情况。
  • 对于二跳页广告,只取点击的位置之前的负样本,而未点击的则只取top20的广告作为负样本。

4. 负样本采样

由于广告点击的正负样本分布极其不均,站外广告的点击率普遍较低,绝大多数样本是负样本,为了保证模型对正样本的召回,需要对负样本按照一定比例抽样。

5. 真实CTR校准

由于负样本抽样后,会造成点击率偏高的假象,需要将预测值还原成真实的值。调整的公式如下:

\[q=\frac{p}{\left(p+\frac{1-p}{w} \right)} \tag{2}\]

q: 调整后的实际点击率。 p: 负样本抽样下预估的点击率。 w: 负样本抽样的比例。

二跳页CTR预估

当用户点击了广告后,会跳转到广告中间页,因为站外流量转化非常不容易,所以对于吸引进来的流量,我们希望通过比较精细化的排序给用户投放尽可能感兴趣的广告。

由于进入二跳页的流量大概比站外流量少两个数量级,我们可以使用比较复杂的模型,同时因为使用比较多的用户/广告特征,所以这里我们选择了效果比较好的FFM[6]模型(详情可以参考之前的博客文章《深入FFM原理与实践》)。

特征和样本处理方面的流程基本类似CTR预估模块中的样本处理流程。差别在于广告在展示列表中的位置,对广告的点击概率和下单概率是有非常大影响的,排名越靠前的广告,越容易被点击和下单,这就是position bias的含义。在抽取特征和训练模型的时候,就需要很好去除这种position bias。

我们在两个地方做这种处理: * 在计算广告的历史CTR和历史CVR的时候,首先要计算出每个位置的历史平均点击率ctr_p,和历史平均下单率cvr_p,然后再计算i广告的每次点击和下单的时候,都根据这个item被展示的位置,计算为ctr_0/ctr_p及cvr_0/ctr_p。 * 在产生训练样本的时候,把展示位置作为特征放在样本里面,并且在使用模型的时候,把展示位置特征统一置为0。

上文提到广告是根据\(v*ctr^t\)进行排序,并通过公式1进行报价。这里面的*v*就是点击价值(点击价值是指用户发生一次点击之后会带来的转化价值)。

广告业务的根本在于提高展示广告的eCPM[7],eCPM的公式可以写为\(v*ctr*1000\),准确的预估点击价值是为了准确预估当前流量对于每一个广告的eCPM。刘鹏在《计算广告》[8]中提到,只要准确的估计出点击价值,通过点击价值计算和CTR计算得到的eCPM进行报价,就始终会有利润,这是因为AdExchange是按照广义第二出价进行收费的。

在实际投放过程中,出价公式可以随着业务目标的不同进行适当的调整,比如我们的出价公式中包含了挤压因子*t*,和*a *,*b*两个参数。出价越高带回来的流量越大,可能带来质量参差不齐的流量,一般在一段时间之内会引起CTR的降低,这样会带来CPC点击成本的提高,所以ROI会降低。反之出价比较低的情况下,带来的流量越少,经过比较细致的流量过滤,CTR能长期保持在一个较高的水平,点击成本CPC比较低,ROI就会比较高。

美团DSP在点击价值预估上经历了两个阶段: * 第一阶段是站外广告的落地页是广告的详情页面时,广告的点击价值预估比较简单,只需要预估出站外流量到达广告详情页之后的CVR即可。正负样本的选择也比较简单,采集转化样本为正样本,采集浏览未转化样本作为负样本。我们也进行了适当的负样本采样和真实CVR校准,这里采用的方法跟上一节类似,不再赘述。 * 模型方面,在控制特征复杂度的基础上,我们选择了效果不错的二次模型FFM,复杂度和性能都能够满足线上的性能。 * 特征方面,我们使用了站外实时特征+部分离线挖掘特征,由于FFM预测复杂度是(k*n*n),*k*是隐向量长度,*n*是特征的个数,特征的选择上需要挑选贡献度比较大的特征。

  • 第一阶段投放之后,经过统计,详情页的用户流失率非常高,为了降低流失率,我们开发了广告二跳页,在二跳页里面,用户在站外点击的广告排在第一位,剩下的是根据我们的召回策略和排序策略决定的。根据公式1,点击价值是由二跳页的*k*个广告共同决定的。但是在站外广告排序和报价的过程中,我们无法获取中间页的召回结果,所以在实际情况中是无法适用的。目前我们的策略是直接对当前用户和当前商品的特征建立一个回归模型,使用用户在二跳页上成交的金额作为label进行训练,模型分别尝试了GBDT和FM,最终采用了效果稍好些的GBDT模型。

离线评估

业内常用的量化指标是AUC,就是ROC曲线下的面积。AUC数值越大,模型的分别能力越强。

Facebook提出了NE(Normalized Entropy)[9]来衡量模型,NE越小,模型越好。

\[NE=\frac{-\frac{1}{N} \sum_{i=1}^n \left(\frac{1+y_i}{2}\log(p_i)+\frac{1-y_i}{2}\log(1-p_i) \right)}{-(p*\log(p)+(1-p)*\log(1-p) )} \tag{3}\] > N:训练的样本的数量。 yi:第i个样本的lable,点击为+1, 未点击为-1。 pi:第i个样本预估的点击率。 P:所有样本的实际点击率。

离线我们主要使用的是AUC和NE的评估方法。

在线AB测试

通过在线ABtest,确保每次上线的效果都是正向的,多次迭代后,站外CTR提升30%,广告二跳页CTR提升13%,二跳页CVR提升10%。

在线监控

1. 在线AUC监控

在线预估的CTR和CVR,建立小时级流程,计算每个小时的在线AUC。发现AUC异常的情况,会报警,确保模型在线应用是正常的。

2. 在线预估均值监控

在线预估的值会计算出平均值,确保均值在合理的范围之内。均值过高会导致报价偏高,获取流量的成本增加。均值过低,造成报价偏低,获取的流量就偏少,对于估值异常的情况能及时响应。

本文介绍了美团DSP在站外投放过程中的策略实践。很多细节都是在业务摸索过程中摸索出来的。后续有些工作还可以更细致深入下去:

1. 流量筛选

流量筛选目前还是比较粗暴的根据网站历史的CTR等直接进行过滤,后续会基于用户的站内外的行为,对流量进行精细化的筛选,提升有效流量,提高转换。

2. 动态调整报价

  • 在DSP的报价环节,点击率预估模型会对每一个流量预估出一个CTR,为了适应adx市场的需要,会加上指数和系数项进行调整。但是通过这种报价方式获取的流量,由于外部竞争环境的变化,流量天然在不同时段的差异,经常会出现CPC不稳定。该报价的系数对于所有的媒体都是一致的,而一般的优质媒体都是有底价的,且不同媒体的底价不一致,造成该报价方式无法适用所有的媒体,出现部分优质媒体无法获取足够的流量。
  • 我们的目标是在CPC一定的情况下,在优质媒体、优质时段尽可能多的获取流量,这里我们需要根据实时的反馈和期望稳定的CPC来动态调整线上的报价[10]。从而在竞价环境、时段、媒体变化时,CPC保持稳定,进一步保证我们的收益最大化(同样的营销费用,获取的流量最多)。

3. 位置召回

基于位置的召回策略中,我们对用户的商圈属性没有作区分,比较粗粒度的统一召回,这样其实容易把用户当前时间/位置真正有兴趣的商品拍的比较靠后;比较好的办法是通过精准的用户画像和用户消费时间/位置上下文挖掘,根据用户竞价时的位置和时间,分析出用户转化率高的商圈,从而进行更加精准的投放。

在业务上,美团DSP会逐步接入市场上主流的AdExchange和自有媒体的流量。技术上,会持续探索机器学习、深度学习在DSP业务上的应用,从而提升美团DSP的效果。

  1. https://en.wikipedia.org/wiki/Demand-side_platform
  2. https://en.wikipedia.org/wiki/Ad_exchange
  3. https://developers.google.com/ad-exchange/rtb/cookie-guide?hl=en
  4. https://en.wikipedia.org/wiki/Return_on_investment
  5. http://www.xiutx.cn/archives/263
  6. https://www.csie.ntu.edu.tw/~cjlin/libffm/
  7. http://baike.baidu.com/view/1666309.htm
  8. http://book.douban.com/subject/26596778/
  9. http://www.herbrich.me/papers/adclicksfacebook.pdf
  10. https://en.wikipedia.org/wiki/PID_controller

鸿杰,美团平台与酒旅事业群用户增长策略负责人,曾就职于阿里,2015年加入美团点评。主要致力于通过机器学习提升美团点评平台的活跃用户数,作为技术负责人,主导了站外渠道投放、站内新客运营等项目的算法工作,提升营销效率,有效降低营销成本。

李乐,美团点评美团平台与酒旅事业群用户增长组DSP业务基础召回和设备下载的负责人,2014年7月从浙江大学硕士毕业后加入美团。负责过CPS搜索广告、新客运营、DSP基础召回、DSP设备下载等业务,致力于推动全网设备的精准触达。

** 因团队业务急剧发展,诚招广告算法工程师,级别不限,欢迎邮件wuhongjie#meituan.com咨询。**