共计 7309 个字符,预计需要花费 19 分钟才能阅读完成。
近年来,在线广告在整个广告行业的比重越来越高。在线广告中实时竞价的广告由于其良好的转化效果,占有的比重逐年升高。DSP(Demand-Side Platform)作为需求方平台,通过广告交易平台(AdExchange)对每次曝光进行竞价尝试。对于 AdExchange 的每次竞价请求,DSP 根据 Cookie Mapping 或者设备信息,尝试把正在浏览媒体网站、App 的用户映射到 DSP 能够识别的用户,然后根据 DSP 从用户历史行为中挖掘的用户画像,进行流量筛选、点击率 / 转化率预估等,致力于 ROI 的最大化。
美团点评的用户量越来越大,积累了大量的用户在站内的行为信息,我们基于这些行为构造了精准的用户画像,并在此基础上针对美团 App 和网站的用户搭建了美团 DSP 平台,致力于获取站外优质的流量,为公司带来效益。本文从策略角度描述一下在搭建 DSP 过程中的考虑、权衡及对未来的思考。
在 DSP 实时竞价过程中,策略端都在哪些步骤起作用;
对每一个步骤的尝试和优化方向做出详细介绍;
总结 DSP 如何通过 AB 测试、用户行为反馈收集、模型迭代、指导出价 / 排序等步骤来打通整个 DSP 实时竞价广告闭环。
美团 DSP 在一次完整的竞价展示过程中可能涉及到两个大的步骤:
对 AdExchange 的竞价请求实时竞价;
竞价成功之后用户点击进入二跳页、浏览、点击、最后转化。
我们分别看一下这两个步骤中策略的支持。
上图给出了每一次竞价广告的粗略示意图,竞价 Gateway 在收到竞价请求之后,会识别出美团点评用户的流量,根据网站历史 CTR、网站品类属性等因素进行简单的流量过滤,把流量分发到后端的 AdServer。AdServer 作为后端广告的总控模块,首先向 RecServer(定向召回服务)获取站外展示广告召回结果,然后根据获取的广告结果向 PredictorServer(CTR/ 点击价值预测服务)请求每个广告的站外点击率和点击价值。最后 AdServer 根据获取的点击价值 v 和 ctr,根据 v∗ctrt 进行排序,从而挑选出 top 的广告进行展示。
上图给出了竞价成功后,用户从站外展示的广告点击后,所经历的流程示意图。用户点击站外广告后,到达二跳页 Gateway,二跳页 Gateway 向 AdServer 请求广告列表。AdServer 从 RecServer 获取站内二跳页广告召回结果,然后根据获取的广告结果向 PredictorServer 请求每个广告的二跳页点击率并进行排序。排序后的结果返回给二跳页 Gateway 进行广告填充。
在上述两个步骤中,美团 DSP 策略端的支持由 RecServer 和 PredictorServer 提供,在图 1 和图 2 分别用红色的箭头和 AdServer 交互。其中 RecServer 主要负责站外广告和二跳页的广告召回策略,而 PredictorServer 主要负责站外流量的 CTR 预估,点击价值预估和二跳页内的 CTR 预估。整个策略的闭环如下图:
接下来详细介绍下美团 DSP 的召回、CTR 预估、点击价值预估相关的策略。
定向召回服务
定向召回服务分别在实时竞价过程中提供了站外广告的召回服务,在竞价完成之后提供了二跳页的广告召回服务。站外召回和站内二跳页召回没有本质的区别,比较常见的做法是二跳页会根据用户点击商品的品类进行品类过滤。下面我们具体看一下目前定向召回相关的具体策略。
一、基于实时行为召回通过实时日志流平台准确的跟踪用户的实时点击浏览 / 收藏 / 购买行为,对于相应的用户重新投放用户近一段时间内发生过浏览 / 收藏 / 购买行为的商品。需要注意的是这个策略需要考虑召回概率按时间进行衰减,用户的实时行为能够比较强反映用户的近期兴趣,距离当前时间比较长的用户行为对于用户近期兴趣的定向偏弱。
二、基于位置召回 O2O 的业务特点与传统的电商有明显的区别,传统电商是在线上达成交易意向,然后通过快递送货的方式完成交易。O2O 业务绝大部分消费者是在线上买入电子券,然后要到店进行消费,所以用户的位置信息在广告召回中起着举足轻重的作用。我们在基于位置的广告召回中尝试了以下三种策略:
实时地理位置召回
根据用户所在的实时地理位置召回距离比较近的广告。对于移动端的广告流量,可以比较准确的获得用户的实时地理位置,从而进行比较精准的投放;对于 PC 端的流量,地理位置是通过用户访问的 IP 地址进行推算的,所以地理位置是有偏移的,但是考虑到 PC 端浏览广告的流量用户位置一般都比较固定,比如用户一般是在上班或者在家休息,我们仍然使用了这个策略。
实时商圈热单召回
根据用户所在的实时地理位置推断出用户目前所在商圈,给用户投放当前商圈的热门消费单。商圈的范围一般在几公里范围之内,对于用户到店消费是一个合理的距离范围,所以我们离线挖掘出每一个商圈的热门消费单,作为用户召回的候选。
偏好商圈热单召回
通过离线分析用户历史的浏览 / 点击 / 购买行为,分析出用户的历史商圈偏好,召回用户偏好的商圈消费热单作为广告候选集。这个策略需要用户的 userid,仅对于能够识别并能映射到 userid 的用户适用。
可以看到策略 1 和策略 2 是不需要 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∗∑i=1kvi∗ctrti+b(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)这三个因素相关。我们的特征也主要从这三个方向去构建,并衍生出一些特征。
特征选择
用户特征
用户浏览,购买的品类,用户画像,浏览器,操作系统等特征。
广告特征
广告 deal 的属性特征,如商家、品类、价格、创意类型等特征。广告 deal 的统计特征,如历史 CTR、CVR、PV、UV、订单量、评分等。
媒体特征
网站类别,网站域名,广告位,尺寸等特征。
匹配特征(主要是用户与广告维度的匹配)
用户浏览、购买的品类与广告品类的 match,商家的 match。用户浏览广告的不同时间粒度的频次特征,比如用户浏览当前广告的次数、用户上次点击广告距离当前的时间差。
组合特征
在 LR+ 人工特征的实现过程中,需要人工构造一些组合特征,比如,网站 + 广告、用户消费水平 + 价格、广告主 + 广告品类等,对于 FM 和 FFM 能都自动进行特征的组合。
环境特征
广告的效果往往与用户所处的外部环境相关。比如 时段、工作日 / 节假日、移动端的经纬度等。
特征处理最后再看我们具体如何构建模型。
模型选择
由于站外的站点数量巨大、广告位较多、广告的品类较多,造成训练样本的特征数较大,需要选择合适的模型来处理,这里我们选用了 LR+ 人工特征的方式,确保训练的性能。
特征降维
点击率模型需要考虑用户维度的数据,由于美团的用户量巨大,如果直接用用户 id 作为特征会造成特征数急剧增大,而且 one-hot encoding 后的样本会非常稀疏,从而影响模型的性能和效果。所以我们这里采用了用户的行为和画像数据来表征一个用户,从而降低用户维度的大小。
负样本选择
对于站外广告,有很多广告位比较靠近页面的下方,没有被用户看到,这样的广告作为负样本是不合理的。我们在负样本选择的时候需要考虑广告的位置信息,由于我们作为 DSP 无法获取广告是否真实被用户看到的信息。这里通过适当减少点击率较低的展位负样本数量,来减轻不合理的负样本的情况。对于二跳页广告,只取点击的位置之前的负样本,而未点击的则只取 top20 的广告作为负样本。
负样本采样
由于广告点击的正负样本分布极其不均,站外广告的点击率普遍较低,绝大多数样本是负样本,为了保证模型对正样本的召回,需要对负样本按照一定比例抽样。
真实 CTR 校准
由于负样本抽样后,会造成点击率偏高的假象,需要将预测值还原成真实的值。调整的公式如下:$$q=p(p+1−pw)(2)$$q: 调整后的实际点击率。p: 负样本抽样下预估的点击率。w: 负样本抽样的比例。
二跳页 CTR 预估
当用户点击了广告后,会跳转到广告中间页,因为站外流量转化非常不容易,所以对于吸引进来的流量,我们希望通过比较精细化的排序给用户投放尽可能感兴趣的广告。
由于进入二跳页的流量大概比站外流量少两个数量级,我们可以使用比较复杂的模型,同时因为使用比较多的用户 / 广告特征,所以这里我们选择了效果比较好的 FFM 模型。
特征和样本处理方面的流程基本类似 CTR 预估模块中的样本处理流程。差别在于广告在展示列表中的位置,对广告的点击概率和下单概率是有非常大影响的,排名越靠前的广告,越容易被点击和下单,这就是 position bias 的含义。在抽取特征和训练模型的时候,就需要很好去除这种 position bias。
我们在两个地方做这种处理:在计算广告的历史 CTR 和历史 CVR 的时候,首先要计算出每个位置的历史平均点击率 ctr_p,和历史平均下单率 cvr_p,然后再计算 i 广告的每次点击和下单的时候,都根据这个 item 被展示的位置,计算为 $ctr_0/ctr_p 及 cvr_0/ctr_p$。* 在产生训练样本的时候,把展示位置作为特征放在样本里面,并且在使用模型的时候,把展示位置特征统一置为 0。
上文提到广告是根据 v∗ctrt 进行排序,并通过公式 1 进行报价。这里面的 v 就是点击价值(点击价值是指用户发生一次点击之后会带来的转化价值)。
广告业务的根本在于提高展示广告的 eCPM,eCPM 的公式可以写为 v∗ctr∗1000,准确的预估点击价值是为了准确预估当前流量对于每一个广告的 eCPM。刘鹏在《计算广告》中提到,只要准确的估计出点击价值,通过点击价值计算和 CTR 计算得到的 eCPM 进行报价,就始终会有利润,这是因为 AdExchange 是按照广义第二出价进行收费的。
在实际投放过程中,出价公式可以随着业务目标的不同进行适当的调整,比如我们的出价公式中包含了挤压因子 t,和 a,b 两个参数。出价越高带回来的流量越大,可能带来质量参差不齐的流量,一般在一段时间之内会引起 CTR 的降低,这样会带来 CPC 点击成本的提高,所以 ROI 会降低。反之出价比较低的情况下,带来的流量越少,经过比较细致的流量过滤,CTR 能长期保持在一个较高的水平,点击成本 CPC 比较低,ROI 就会比较高。
美团 DSP 在点击价值预估上经历了两个阶段:第一阶段是站外广告的落地页是广告的详情页面时,广告的点击价值预估比较简单,只需要预估出站外流量到达广告详情页之后的 CVR 即可。正负样本的选择也比较简单,采集转化样本为正样本,采集浏览未转化样本作为负样本。我们也进行了适当的负样本采样和真实 CVR 校准,这里采用的方法跟上一节类似,不再赘述。模型方面,在控制特征复杂度的基础上,我们选择了效果不错的二次模型 FFM,复杂度和性能都能够满足线上的性能。特征方面,我们使用了站外实时特征 + 部分离线挖掘特征,由于 FFM 预测复杂度是 (knn),k 是隐向量长度,n 是特征的个数,特征的选择上需要挑选贡献度比较大的特征。
第二阶段,经过统计,详情页的用户流失率非常高,为了降低流失率,我们开发了广告二跳页,在二跳页里面,用户在站外点击的广告排在第一位,剩下的是根据我们的召回策略和排序策略决定的。根据公式 1,点击价值是由二跳页的 k 个广告共同决定的。但是在站外广告排序和报价的过程中,我们无法获取中间页的召回结果,所以在实际情况中是无法适用的。目前我们的策略是直接对当前用户和当前商品的特征建立一个回归模型,使用用户在二跳页上成交的金额作为 label 进行训练,模型分别尝试了 GBDT 和 FM,最终采用了效果稍好些的 GBDT 模型。
离线评估
业内常用的量化指标是 AUC,就是 ROC 曲线下的面积。AUC 数值越大,模型的分别能力越强。
Facebook 提出了 NE(Normalized Entropy)来衡量模型,NE 越小,模型越好。$$NE=−1N∑ni=1(1+yi2log(pi)+1−yi2log(1−pi))−(p∗log(p)+(1−p)∗log(1−p))(3)$$N:训练的样本的数量。yi:第 i 个样本的 lable,点击为 +1,未点击为 -1。pi:第 i 个样本预估的点击率。P:所有样本的实际点击率。
离线我们主要使用的是 AUC 和 NE 的评估方法。
在线 AB 测试
通过在线 ABtest,确保每次上线的效果都是正向的,多次迭代后,站外 CTR 提升 30%,广告二跳页 CTR 提升 13%,二跳页 CVR 提升 10%。
在线监控
在线 AUC 监控
在线预估的 CTR 和 CVR,建立小时级流程,计算每个小时的在线 AUC。发现 AUC 异常的情况,会报警,确保模型在线应用是正常的。
在线预估均值监控
在线预估的值会计算出平均值,确保均值在合理的范围之内。均值过高会导致报价偏高,获取流量的成本增加。均值过低,造成报价偏低,获取的流量就偏少,对于估值异常的情况能及时响应。
本文介绍了美团 DSP 在站外投放过程中的策略实践。很多细节都是在业务摸索过程中摸索出来的。后续有些工作还可以更细致深入下去:
流量筛选
流量筛选目前还是比较粗暴的根据网站历史的 CTR 等直接进行过滤,后续会基于用户的站内外的行为,对流量进行精细化的筛选,提升有效流量,提高转换。
动态调整报价
在 DSP 的报价环节,点击率预估模型会对每一个流量预估出一个 CTR,为了适应 adx 市场的需要,会加上指数和系数项进行调整。但是通过这种报价方式获取的流量,由于外部竞争环境的变化,流量天然在不同时段的差异,经常会出现 CPC 不稳定。该报价的系数对于所有的媒体都是一致的,而一般的优质媒体都是有底价的,且不同媒体的底价不一致,造成该报价方式无法适用所有的媒体,出现部分优质媒体无法获取足够的流量。我们的目标是在 CPC 一定的情况下,在优质媒体、优质时段尽可能多的获取流量,这里我们需要根据实时的反馈和期望稳定的 CPC 来动态调整线上的报价。从而在竞价环境、时段、媒体变化时,CPC 保持稳定,进一步保证我们的收益最大化(同样的营销费用,获取的流量最多)。
位置召回
基于位置的召回策略中,我们对用户的商圈属性没有作区分,比较粗粒度的统一召回,这样其实容易把用户当前时间 / 位置真正有兴趣的商品拍的比较靠后;比较好的办法是通过精准的用户画像和用户消费时间 / 位置上下文挖掘,根据用户竞价时的位置和时间,分析出用户转化率高的商圈,从而进行更加精准的投放。
在业务上,美团 DSP 会逐步接入市场上主流的 AdExchange 和自有媒体的流量。技术上,会持续探索机器学习、深度学习在 DSP 业务上的应用,从而提升美团 DSP 的效果。
欢迎订阅「K 叔区块链」– 专注于区块链技术学习 博客地址:http://www.jouypub.com 简书主页:https://www.jianshu.com/u/756c9c8ae984segmentfault 主页:https://segmentfault.com/blog/jouypub 腾讯云主页:https://cloud.tencent.com/developer/column/72548