暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

新媒体变现之二——DSP用到的那些算法和模型

数据极客 2015-06-24
814

在上一篇文章中我们提到了RTB给媒体变现带来的重大变革,并且顺道简要介绍了媒体端(以及SSP)如何做到变现最大化(既收益管理),这篇文章我们来介绍一下广告主端DSP主要解决的问题和挑战。先看流程图:



图中涉及到3个重要实体:Adx(Ad Exchange),DSP,DMP。用户浏览网页时,Adx在媒体放置的脚本(又叫Ad Tags)会向Adx发送广告请求,而Adx则针对该次展现向各个DSP发送RTB实时竞价请求,并在各DSP的响应中选择出价最高者通知其赢得本次竞价,然后由赢得出价的DSP完成此次广告投放,既发送广告素材到网页完成广告展现。在整个流程中,存在若干技术问题需要解决:

  1. 用户打开媒体页面,广告需要尽快展现,否则用户观看以及点击广告的愿望将大大降低。为此,Adx一般都规定了从发送RTB请求到接收响应之间的最大延迟,通常为100毫秒,甚至80毫秒。这意味着如果DSP没有及时响应请求,将被Adx忽略。需要指出的是,100毫秒延迟包含网络传输时间,如果DSP和Adx没有在同一个机房,网络传输会占据30到50毫秒,因此,基本上DSP必须在30毫秒以内返回请求。

  2. DSP每赢得一次展现,就需要给Adx付费,当然Adx也会给媒体付费。然而,只有广告被点击(部分则是转化),广告主才会给DSP付费。因此,DSP运营得不好,有可能会亏钱。因此,DSP需要分析媒体的请求,分析用户行为偏好,尽可能投放用户点击率高的广告,以根据点击率决定每次RTB请求的出价。然而,媒体展现所携带的信息是有限的,DSP需要借助更多的信息来获取某次展现背后该用户的属性数据,通常,这些数据来源有两方面:一种是来自DSP自身积累的历史数据,也就是说通过不断的购买流量积累的竞价数据;另一种是来自公开的数据交换提供商,称为数字管理平台DMP。实际上,经常把前者根据DSP自身积累数据构建的用户档案也称为DMP,只不过这种DMP仅供自己使用,并不参与外部的数据交换。DMP实质上就是用户画像系统,为每个用户提供相应的人群和行为属性标签,这些标签属性将协助DSP在出价过程中提供实时决策。

  3. 出价不仅仅要考虑点击率,还要考虑其余DSP的竞争,因为出价过低将会导致DSP无法赢得本次竞价,长期不出价或者出价过低将会被Adx降权从而无法获得更多流量;然而出价过高则会导致DSP自身获利过少甚至亏本,因此出价是个复杂的决策过程。

  4. 除了出价决策,点击预估,查询DMP获取访客的人群和行为属性之外,DSP还需要一系列的规则才能满足商用决策。一次媒体的展现请求,DSP需要设计一系列过滤器,包含活动排期过滤,广告位属性过滤活动(广告位宽高、物料类型、屏幕、媒体、底价等等),客户端信息过滤活动(浏览器、操作系统类型等),地区过滤活动,特定用户看过广告的频次过滤,查询Cookie Mapping得到访客在DSP系统的唯一ID,查询可用活动的出价以选择胜出的活动,以及其他更细致的过滤条件等等,这些过滤器部分是由广告主或者运营人员在后台进行设置。


因此,DSP设计面临不小的工程设计挑战:Adx通常每天的媒体请求会有30到80亿次PV,也就是每秒会有峰值5到10万次请求,理想情况下,DSP需要针对每次请求都要做出判定。DMP通常根据用户的ID来进行建模,PC端用户的ID基本上是cookie,移动端则有可能加入设备ID号。由于cookie变更频繁,且用户经常清理,因此建模的用户数量可以达到20亿乃至更多。假定我们为每个用户的建模画像都需要1K字节的存储,因此DMP的Online service需要2T以上的存储量,并且考虑到DSP的低延迟请求,DMP必须能够在超过2T的存储量上满足99%以上的获取用户画像请求响应延迟要小于1毫秒,而且请求并发数能够超过10万TPS,否则留给DSP做出价决策的时间将非常有限。


然而,在实际操作中,大量的DSP提供商对如上假设做出了各种简化:比如,复杂的出价过程简化为线性出价甚至固定出价;拿掉DMP模块;仅仅针对Adx提供的流量属性进行受众购买。这样,DSP就被简化成一个由运营人员驱动的实时流量购买系统,工程挑战大大降低。不过,这不是本文所关注的重点,本文仍然试图从理想情况下来介绍一个真正数据驱动的DSP背后的设计和模型。


一个DSP的出价决策流程如上图所示,决策引擎所做的事情,就是根据广告主定向条件选出适合的受众人群,然后根据人群的内部和外部属性数据和广告主的预算控制输出最终出价。我们以M6D为例谈论一下这个决策是如何做出的。M6D现在已经改名为Distillery,尽管不是一家出名的广告公司,但却为学术界贡献了良多论文,其中在2012年发表于SigKDD的文章获得当年工业界最佳论文,因此以M6D为例可以更细地了解DSP工业级实现在面临算法和模型上的挑战是如何解决问题的。


先来看下M6D的DMP。首先M6D根据运营人员的需求定义好广告活动投放的segment。Segment是市场营销术语,既单个segment就是市场营销所面对的人群最小单元,实质上就是标签体系。M6D对每一个campaign(即每一个广告主的每个推广活动)都训练一个单独的模型, 该模型以在广告主的网站上发生转化行为(例如注册,购买,等等)的用户为正例,没有发生转化行为的用户为负例。得到模型后,对所有的用户预估对这个campaign的转化概率p(c | u),即该用户u有多大的概率会在广告主的网站上发生转化行为(c表示conversion),去掉大多数转化概率非常小的用户,将目标用户根据转化概率高低分到不同的segments中。具体在实现中,模型分为两层,首先是仅仅根据用户访问URL做线性回归进行粗选,其次再根据粗选的结果利用用户画像信息进行细选。之所以分2个阶段主要是出于性能考虑的原因。整个这部分工作都是offline进行,避免昂贵的操作影响线上的延迟。


当Adx发送媒体展现请求时,M6D会找到该请求背后用户的segments,由于每个segment都会有多个对应的campaign,因此需要根据规则,预算以及频次控制对campaign做过滤,剩余的campaign,M6D会分别计算出价,然后选择最高出价的campaign返回给Adx做为RTB响应。那么针对每个campaign的出价如何计算呢?首先,运营人员(Account Manager)会针对广告主的每个campaign提供一个基础出价,运营人员可以拿到每个segment的平均预估转化概率,来辅助他们设定基础出价。因此,对于DSP来说,运营人员自身的经验和智慧,是影响最终投放效果的重要因素之一,这在所有的DSP公司都成立。这个基础出价考虑的是用户和campaign的适合程度,但并没有考虑当前媒体请求的广告位是否适合该campaign,因此M6D的做法是在基础出价之上再乘以一个调整因子Φ——M6D的假设是,对于同一个campaign,如果一个展现的转化率是另外一个展现的Φ倍,那么前面那个展现的出价应该是后面那个展现的出价的Φ倍,因此既然segments出了一个平均价格base price,当一个展现的转化率是这个segments中用户的平均转化率的Φ倍,我们应该为这个展现出base price∗Φ。根据前边假设,Φ应当是用户针对当前展现的转化率跟campaign的平均转化率之比:Φ=p(c|u,i)/p(c|u) ,这里c代表campaign,u代表用户,i代表展现广告位。这个概率模型并不容易计算:每个campaign的数据可能非常少,因此常见的机器学习算法并不有效。M6D此时的做法是扩充模型的特征空间——转变计算公式为Φ=p(c|s,i)/p(c|s),这里s代表segment,就是说同一个segment里的用户看作是一样的。计算p(c|s,i)模型时,要得到这个模型的训练数据,必须事先对这些segments进行投放,然后把那些最终带来转化的展现标记为正例,没有最终带来转化的展现标记为负例。计算p(c|s)则类似,只不过不需要广告位ID作为特征。


由此,我们可以看到M6D总体上是为每个广告投放活动训练单独的模型,这样做的好处主要是可以做到M6D声称的隐私保护,意思是假如有2个广告主A和B,互为竞争对手,那么利用M6D的平台则不会出现拿A的广告转化数据来训练B的模型的情况,这一点对于部分品牌大客户来说十分重要。然而,这样的缺点也很明显,因为在大多数情况下,单个campaign的数据十分稀疏,模型训练很容易导致过拟合,所以其实很多DSP公司都没有采用这种为每个campaign单独训练模型的方式,而是把所有的广告日志汇总起来训练一个大的模型,这样不论是大的campaign,还是小的campaign,都可以积累足够的点击或者转化数据,因此模型的泛化能力更强——当然,对于所谓的隐私保护来说,这样就无从谈起了,可是换个角度,有哪个广告主知道自己的投放过程中日志数据是如何使用的呢?


M6D并没有为每个campaign的选择复杂的模型,并且出于自身业务考虑,选择了针对转化数据建模而不是点击数据。在实际中,绝大多数DSP一般选择针对点击数据建模,同样也选取简单的模型,例如AdPredictor,逻辑回归,GBDT,等等,因此这些模型常被称为点击率预估模型,这在DSP的所有算法中起着举足轻重的作用,通过点击率预估,使得每次展现得以进行价值评估:点击概率*点击价值 ,这是出价的首要考虑因子。


DSP在出价过程中,还需要进行预算控制,这个术语叫做pacing。首先来看看为什么要进行pacing。下图中,蓝色的点代表广告获得展示的机会,黄色的圈代表广告赢得展示,在没有pacing时,容易造成可以看出广告预算在早期用尽,造成前期竞争激烈,但后期无竞争的状态。

在加入均匀pacing后,可以看到有更多的赢得出价的机会,因此广告主能够收获更多有效的展现。


Pacing的做法还有很多,著名的DSP公司Turn在他们的文献中对此作了总结如下图,除了均衡pacing之外,还有根据流量以及效果进行的pacing策略。


DSP在出价中,还需要考虑一个因素。因为上面的讨论,都是仅考虑DSP自身,而没有考虑其他DSP竞争的情况。在实际应用中,还需要引入这些因素,通过预测出价与购买到流量的函数关系,根据自己的需求来调整自己的出价。例如在“Bid Landscape Forecasting in Online Ad Exchange Marketplace”这篇文章中就专门针对这个话题进行了研究,具体做法是针对每种定向条件的组合利用梯度提升决策树GBDT拟合曲线。然而,在后来的学者进行的研究中已经证明,频繁更新的模型可以修正单次预测中的拟合错误,因此在工程上,常常使用更简单的手段来优化出价模型,例如简易的根据时间序列分析调整预估流量,以此来修正最终出价。


以上大体谈及了DSP设计中所面临的问题和需要的算法,由此可以看到,一个理想状况下的DSP是个复杂的系统,综合了工程和科学上的双重挑战,是名副其实的大数据应用。正如前所述,实际使用中的DSP都做了大量简化,乃至去除了部分关键组件,随着RTB产业的发展和迅速占据主导,构建完全状态之下的DSP将成为市场上最终胜出之选。然而,我们不得不说,尽管一切看起来很美好,从竞价,到用户画像,到点击率预估,这相比以前的广告系统已经有了天翻地覆的变化,但是,DSP自身并没有严格意义上的用户数据,它们必须从Adx不断购买流量以积累数据,乃至跟外部DMP合作,但首先前者受限于Adx有限的数据供给,后者则在国内实际上还很少有严格意义上的数据交换提供商,绝大多数用户行为数据都垄断在BAT手中,这使得DSP的发展愈发困难甚至会最终出现红海——有限的数据上面,再厉害的模型也会巧妇难为无米之炊,为此也会有DSP算法工程师自嘲为算卦工程师的囧境。当然,问题出现总有解决之道,国内特殊的产业环境,也自然营造出了通过电信/移动运营商合作的数据团队,通过在电信机房直接牵出数据通道确保能够获得全网用户的行为数据,只是,这不过又是一种中国特色的创新罢了。



文章转载自数据极客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论