作者·黄崇远
公众号
『数据虫巢』
全文8968字
题图ssyer.com
“ 人不够,系统给你凑。”
这个系列上一篇《数据与广告系列二十一:关于品牌广告,奔涌吧后浪》是五月底,这两个月时间倒不是停止了学习和前进,一直在进步从未停止过,只是确实没有通过公众号对外输出了,有点分身乏术。
一方面半年年关,项目要收尾,项目要回收数据,衡量产出,毕竟干了大半年不能当做白干。
另一方面新的半年开始,要做半年项目规划,前半年都熬过去了,可不能折在下半年。
性命(奖金)攸关,可不能大意。
这两个月把《深度学习推荐系统》看了一遍多,又结合自身周边的一些项目做思考,再加上对于项目中的一些深度学习模型进行了一些实践和探索,确实挺有收获的。
得找个时间,再补几篇关于人群召回,特征embedding化相关的文章。
今天这篇文章,承接自《数据与广告系列二十:oCPX大势下标签定向的发展演化》,核心的方向就是广告投放智能化。
主要目标是凑人。但说凑人的话,先把oCPX的逻辑大概了解清楚。
01
什么情况下需要凑人
人不够,系统来帮你凑。
什么情况下需要系统给广告主凑人?聊这个之前我们先看看之前在《数据与广告系列二十:oCPX大势下标签定向的发展演化》一章中,我们有提到过当前广告投放的趋势,其天平是逐步往广告主这边倾斜的。
从过去卖坑位(CPD),到卖流量(CPM),到按定向卖人(CPC),再到当前卖转化(CPA)。在当前oCPX的场景下,广告主的期望是保成本,其实保成本的逻辑就是保ROI。
举个简单例子,以一个APP的投放为例,他期望的激活成本是100大洋,那么在这个APP被引流用户激活之后,在一定的时间周期内,其实按照当前的激活成本来说,其最终带来的收益是可以实现移除引入成本之后达到正向收益。
所以,你会发现,实际上这种保激活成本的oCPX本质上是一种保ROI的过程。
oCPX具体的原理不会在这篇讲,这里只需要知道一个事就是oCPX核心逻辑是通过对CTR和CVR(转化率)的预估,从而系统能够通过预估的eCPM来确保平台是不亏本的,进而能够给广告主“夸”下保成本的“海口”。
如图所示,假设广告A进行oCPX投放,一般情况下会做定向投放,在oCPX第一阶段(即攒够CVR模型的样本数之前)时是按CPC收费的,所以此时对于广告主来说肯定会做一定的定向分析,然后尽可能的以低成本来攒够oCPX的启动成本。
在oCPX进入第二阶段之后,对于广告主来说,开始按成本收费,举个简单例子,平台给他带来一个转化,那么他就付一个转化的钱,这个转化单价在投放时已经设置好。
那么,这样看着是不是广告主就可以安枕无忧了,毕竟成本单价与收益单价肯定是核算过的,ROI肯定是正向收益的,这意味着广告主坐着数钱就可以了?
想多了。
在第二阶段,对于平台方来说其实是有挑战的,他需要通过第一阶段累积的转化样本数据,快速进行CVR模型的构建,最终计算eCPM,通过eCPM来估算自己的流量按广告主的成本单价会不会亏损。
那到底会不会亏损呢?对于平台来说,亏不亏损关键在于曝光流量会不会亏本卖。
当eCPM(就是预估的期望千次)比实际带来的CPM高的时候,也就是高估了,这个时候平台依然需要按广告主既定的成本单价给人家结算啊,这就意味着结算一个就亏一个,具体一个亏多少呢?实际单价-既定的成本单价。
反过来,如果eCPM长期低于实际的CPM,平台赚的差价就出来了,计算方式同上,只不过是正向收益。
所以,挑战来了,eCPM的预估要尽量的贴近真实的CPM,这样平台才不会亏损,如果一直高估,平台补这个差价会亏到爆。
当然,平台也不蠢,因为本身模型和数据回收也是个不断滚动迭代的过程,所以不可能说一直亏损下去也一直给你放量。平台的好处就是,可以自由掌控,如果我发现前个时间窗内,eCPM还一直高估,那么我就会终止给你的广告放量,从而降低损失。
最终的体现就是这个oCPX广告再也获取不到系统给予的保本流量了,基本上这个广告就可以宣告终结了。
所以,并不是说广告主熬过了第一阶段就可以安枕无忧了,因为平台随时可能把你的广告流量给咔嚓掉,哪怕你好不容易辛苦进入二阶段。
毕竟不能让人家亏本甩卖流量啊,是吧,放多少量就亏多少,这买卖谁也不愿意做。
那么,哪些因素会影响广告被咔嚓掉呢?
广告主的出价,当广告主的保本出价过低的时候,其实eCPM就很难与那些出价相对高的广告PK了,所以拿不到量是正常的。
其次是,oCPX中CVR模型的预估是否足够的准确,比如,如果eCPM总是错误的被估计,导致实际亏损加大,在修整的阶段,流量也会被强行擦咔掉。
所以,对于广告主来说,其可以操作的范围是,尽可能的出一个具有一定竞争力的出价,或者说最起码不能低于市场的平均水平吧。
其次是,在oCPX的二阶段,CVR的探索范围是否可以加大,通常有几种做法:
不改变初始定向,这意味着不改变人群范围,平台在既定的范围内做CVR预估。
突破部分定向条件,通常的做法是年龄、性别这种强基础定向是不会改变的,突破的是兴趣标签定向。
这两种做法优劣点在哪呢?
第一种,由于初始人群是广告主根据广告特点精挑细选的定向,所以不管怎么说定向人群与广告的相关度是有一定的保证的,其实相当于做了一次初始的人群召回控制。
所以,不管是一阶段也好,二阶段也好,对于CTR和CVR的预估是更具有把握的,相当于召回阶段剔除了相当不靠谱的人群,降低了模型学习的难度。
这意味着预估出来的eCPM是比较贴近,所以对于双方来说都是一个好事。但是,缺点就是人群范围窄,虽然广告主可以保本,平台方不会亏本,但是走不了量,因为都是在既定的小范围人群中折腾。
第二种方式就是解决第一种方式的问题,在保本的情况下,扩大人群的探索范围,将人群不再局限于当前标签定向中,这样,CVR阶段就可以对非初始定向的人群进行预估了,这天地一下子就开阔了。
看着皆大欢喜,但是,模型的压力瞬间会大很多,因为这几乎是全量用户其人群的复杂程度呈倍数级上升,一旦eCPM预估的不准,这不又回到了解放前吗,不又得回去咔嚓流量?
02
扩量诉求的场景
基于上面的情况,流量肯定是需要突破原始定向的,不然oCPX广告再怎么给你保本都没有用,因为走不了量。
关键在于进入二阶段之后如何进行流量扩充,并且又不能给oCPX二阶段模型带来致命的冲击。除非算法模型吊炸天,直接全量流量上,要什么扩量,要扩咱就扩全流量池。
所以,所谓的扩量,就是基于当前初始定向,是否可以通过某种方式来加大流量,说白了就是加大召回流量池,但又希望这个新增的召回流量池是一个可控的过程,而不是一下子放宽到整个全量活跃流量,从而对预估模型造成冲击。
关键在于,怎么搞?
先上土法。当广告进入二阶段之后,广告主自己进行定向的修改。比如,在当前定向的基础上,额外增加一些相关的标签,从而人为的进行人群范围扩大。
非土法就是,系统在初始定向的基础上,结合oCPX进入二阶段之后进行扩量,说白了还是适当的扩大二阶段的召回流量池。
基于系统的扩量,首先需要考虑的是扩量部分的流量与初始流量差异性不能过大,因为一阶段的模型就是通过初始流量的转化人群进行建模的,只要人群差异不过大,这意味着之前学习到的模型特征是具有高度可借鉴性的,特征空间的分布不会过大改变,这就为后续不断滚动的CVR模型迭代提供了稳定性的保证。
其次是,平台期望的是召回池能够可控,所谓可控就是,在转化达标的情况下,可以不断的去探索人群边界,这样平台的收益就能不断的被放大,对于广告主来说,付出了第一阶段的CPC成本就可以最大限度的回收,因为二阶段的转化出价成本是经过计算的,从ROI理论上是不会让广告主再亏钱的,所以,当然是多多益善了。
粗俗点说就是,这事得稳妥点,一步一步的放大流量,从而让模型能够逐步的去适应不断扩大的人群;用文雅的说法就是,我们需要进行人群的平滑过渡。
03
扩量的技术解决方案
基于上面,总之就是要扩量,并且是根据初始流量来扩,保证初始流量与扩量流量的相关度,或者更具体点说是与当前阶段转化人群的相关性,从而保证扩出来的流量在特征空间分布上是具有平滑扩展性的,能让模型不至于“崩盘”。
然后就是,需要做分阶段扩量,逐步扩,直到扩出来的流量eCPM再也无法满足CPM,才停止,最大化的挖掘流量的价值,这也是oCPX的价值。
所以,你会发现,oCPX与扩量场景是非常深度绑定的,并且也是一种相对平稳,且最大化挖掘平台流量价值的方式。
保证扩量与初始流量的相关性,或者与目标转化的相关性。
能够支持流量平滑稳定的逐步扩量,逐步放大流量。
我们基于上面两个要点来分析扩量技术的解决方案。
(1) 基于标签推荐的方案
为什么先说这种解决方案?一个是上面我们土法中也说到过,人为进行定向的拓宽,其实就是一种基于标签的扩展。
以上图为例,在初始定向的基础上,对于兴趣定向的标签进行扩展,额外增加了“股票”“产房”,相当于在初始定向流量的基础上,又加了身上附带有“股票”“房产”标签的人群。
这只是个比喻,广告主可以自行判断与初始定性标签相关的标签,然后人工进行扩展,如果放到平台测,那其实就是计算初始标签与待选标签的相关性了,其实就是一个标签定向推荐的过程了。
这里其实在之前的系列文章中有提到过一些《数据与广告系列十四:智能定向&基于FM的标签组合推荐思路》,你可以把他当成一个标签组合的思路来做,也可以单纯的基于标签之间的相关性来做(考虑标签的相关性),甚至可以计算标签与广告转化人群的关系来做推荐(不考虑当前标签与待推荐标签的相关性,只考虑待推荐标签与当前广告的相关性)。
具体的细节思路是不限的,核心是推荐标签,扩展标签,并且扩展的标签之间是具有可比性的,因为我们需要做逐步放量的过程,如果有可比性,待扩展标签就可以做排序,然后就可以分阶段不断的增加标签,从而达到平衡的目的。
这种扩量的方式比较直观,非常容易理解,挖掘标签的相关性,或者具体点说是人群的相关性的可解释性比较强,并且由于基于标签的相关性来进行人群扩充,扩展出来的人群是具有一定的相关性保证的,避免了一下子进来模型“不认识”的流量。
当然,也是有缺点的,缺点就是不同标签对应的人群量级是不同的,对于平滑扩量的场景来说,我期望的是在预估模型可控的范围内,慢慢的进行人群扩增。
比如,一开始扩个100万,再扩个200万,只要成本可控,就可以不断的一百万一百万的扩大人群。但是,如果是基于标签扩量,初始定向ABC标签,人群范围为500万,第一次扩量希望扩充100万,于是加了个D标签,结果D标签对应的人群一下子是300万,这种情况就比较难以平滑的进行量级扩充了。
这里具体的标签推荐技术和模型不做展开讲,后续有机会会着重的讲,本篇重点在于扩量的解决方案和策略,关于细节其实还有很多很多,比如推荐的模型,如何做截断,怎么控制量级,其实有很多的门道。
(2) 基于兴趣标签的关联程度做人群扩大
先考虑一个问题,在我们构建一个兴趣标签时,是如何构建的。
假设,我们是基于统计行为来做标签,那么对于标签是不是可以根据行为的频繁度、行为的表现时间等等,给用户打上标签兴趣分。
又或者,假设我们是基于模型来构建标签与用户的关系的,大概率是一个判别模型,那么必然就有预测的概率评分。
基于上面两种常见的标签获取方式,是不是不管哪种评分方式,其实都是可以通过分数来衡量用户与对应标签的紧密关系程度。
在实际操作中,我们如何给一个用户打上标签,最终放到线上呢?通常是取一个置信较高的分数,然后将满足分数的标签打上标签,然后进行兴趣标签定向投放。
可以推断的是,理论上这个分数越低,对应的人群就会越广,当然对应的人群与对应标签的相关性也会随之降低。
所以,也就有了第二种扩量的技术策略,如下图。
假设,我们通常认为高置信的分值是80分,这是一个用户带有的高置信标签,所以在初始定向中,我们只使用高置信的分值进行人群截断。
当我们需要更多的流量时,我们通过移动标签的置信分值来控制人群的大小,比如,我们将初始定向中的兴趣标签“理财”的阈值分值从80分调整为60分,对应的人群就扩展了,如果需要继续扩展,就进一步下调分值,最终将所有与“理财”相关的人群都覆盖进去。
这种扩量的技术策略在相关性上是可控的,因为我们在标签挖掘的逻辑上,只要挖掘逻辑设计是足够合理的,那么这个分值与人群对应标签的相关性就一定是正相关的,所以通过分值来控制人群范围的方式是可行的。
同样的,这种扩量方式也是有缺点的,一个是由于标签定向结合了分值来控制,所以在定向召回的逻辑里,将会复杂很多,特别是在广告播放逻辑中是需要保证服务的时效性的。
通常人与标签的关系是存储在内存中的,这样才可以保证快速的进行人和广告的匹配召回,但是一旦使用这种逻辑,那么意味着每个标签对应人的关系都要保存下来,哪怕是弱关系,还得保证召回服务的时效性。
这是其一。
其二,每个标签,哪怕是算上弱关系(就是那种分值可能只有十几分的人),标签覆盖的人群还是有限的,一旦基于这种方案扩量,意味着其扩充上限就是初始定向中那些标签的全量人群(包括那些分值低,并不是那么靠谱的弱关系人群)。
这对于充分利用平台的全局流量是不利的。
(3) 基于广告与用户emb计算的扩量方案
这种扩量方案应该是借鉴于推荐系统中的召回模型策略。以双塔(DSSM)模型作为代表的,emb相似关系计算的方案。
这些类似推荐召回的技术,也算是比较“潮流”的召回技术了,以Youtube、AirBnb、阿里、百度等为代表。
如果抛开实现的角度来说就是,利用模型计算广告的emb向量,以及用户的emb向量,然后在某个用户播放广告时,利用该用户的emb向量,快速的对广告池进行向量匹配计算,则可以快速确定广告池的广告与当前用户的相似关系,再通过阈值卡断,则能决定这个广告对于用户是否需要召回。
先说几个问题,为什么叫embedding向量,因为这个技术流派一开始是从word2vec衍生出来的,而word2vec最典型的输出代表为word embedding,从NLP领域逐步的推广到其他领域,这就变成了万物皆可emb,进行向量化。
在《数据与广告系列十九:推荐召回与广告LookAlike,万物皆可Embedding》一文中简单提到相关的场景和概念。但是那篇文章中只是提到了如何将item进行向量化,没有说明为什么向量化之后,向量计算内积就可以表征两者的关系。
这里以最常见的DSSM模型为例,大致的讲下为什么通过emb计算就可以表征两者之间的关系,更具体的DSSM实践相关的,可以看其他的一些资料,或者等有机会后面某个章节来重点围绕一个实践来讲,基于DSSM如何做实际业务的优化。
这是一个最最最常规的,以广告和用户为例子的DSSM模型结构。为什么叫双塔模型,因为整个网络结构模型就像两个塔,各自叠加网络层,在最顶端进行汇总,所以被形象的称为“双塔模型”。
两塔的底层都是各自的特征,然后对特征进行向量化,这里的向量化其实就是维度映射,将比如广告类型,假设有N个广告类别,映射为假设为32维的网络空间,也叫做嵌入矩阵,如果以tensorflow为例的话,其实就是一次tf.nn.embedding_lookup的过程。
然后将各个特征进行embedding的拼接,还是以tensorflow实操为例的话,其实就是一次tf.concat的过程。接下来,如果你觉得有必要的话,你可以做N次网络的转换,最终拿到各自的embedding特征。
这里所谓的embedding特征,其实就是最后一层网络中的参数权重集合,来表征广告和用户。
那么,还是回到为什么emb内积计算就可以表征两者关系呢?因为我们在目标拟合的时候,做的就是两者emb进行内积计算,再进行Sigmod转化为01,再与样本集的01label做匹配,然后借助梯度不断的去拟合和调整各个网络层的参数。
这就意味着,只要最终AUC目标拟合是靠谱的,反推他们相乘的关系就是靠谱的,再反推他们的各自emb相乘就是与广告转化与否强相关的。
大体逻辑如上,但是如果设计到真正的调优实操,会非常有挑战,比如样本如何构建,特征如何构建,网络到底要给几层,每层的激活函数该怎么选,每个层次的维度怎么定,为什么不做在线推理,而直接使用向量计算的方式来确定关系等等等,太多的细节了,不再这里讨论,这里只做大逻辑的理解(等着下次出emb召回的实践篇吧)。
其实说了那么多,一个是让大家理解基于双塔EMB到底是如何做不同item之间的关系召回的,核心还是说为什么这种方式是可行的。
回到我们的主题,所以我们需要做的事就是通过历史数据,将每个广告的emb和用户的emb计算出来,然后存储起来,需要的时候就做一下内积计算,然后通过分值来决定要不要给他召回。
如上图,他的扩量部分其实就是两者emb计算分值,当分值满足卡断阈值时,则进行广告召回,从而实现了扩量的目的。
我们可以发现,这种基于emb扩量的逻辑,其实扩出来的流量与初始定向的流量相关性是不大的。
那么,会不会造成扩量流量部分对于oCPX模型的冲击呢?理论上不会。
因为从上面DSSM双塔的构建过程可以发现,我们依然使用了广告与用户的转化数据去计算两者emb,而oCPX中的CVR模型,其拟合目标同样也是预测用户对于广告的转化,其实两者从大目标的角度来说,方向是一致的。
所以,基于emb的扩量,虽然抛开了初始定向的人群相关性的模型构建方式,但是基于DSSM的这种目标拟合关系,同样保证了人群不至于太不靠谱。
至于做平滑扩展,只需要通过控制emb计算的阈值就好了,不断的调小阈值,从而让可召回人群不断扩大,实现了平滑扩量的目的。
这种方案的优势在于,很多牛逼公司的召回策略都这么搞,你要是不这么搞感觉跟不上潮流,体现不了深度模型的技术。
这是玩笑,核心是这种方式能够把扩量的颗粒度控制在单个用户层级,这就意味着扩量能够达到极限的平滑,哪怕你是一个用户一个用户的扩展,理论上我也能实现。其次在于,这种计算方式其拟合的目标与oCPX的转化目标高度一致,这就让oCPX阶段的模型适应性能加强,让CVR模型能够很好的适应新扩展出来的流量。
缺点也是有的,比如,这种方式对于新广告,或者历史数据并不是很丰富的广告就不太好使了,即对于广告冷启动不是很友好。
对于新广告来说,压根儿就没有其对应的emb,如果使用在线推理,性能上是一个巨大的挑战。对于历史数据累积少的广告来说,虽然其特征之间的表征可以借鉴其他类似广告的特征关系,从而生成其emb,但其emb与那些样本数据丰富的广告来说,emb的表征效果还是相对没有那么靠谱的,其实就是受限于其对应的训练样本数据的丰富度。
此外就是,模型更新的代价较高,如果是大厂,用户侧级动辄亿级十亿级,广告侧动辄十万级,如果一时兴趣,多加几个网络层级,你可以试试模型训练需要多少资源,需要多少时间。
如上,在实操的过程中,其实还有很多很多的细节,比如样本如何构建,特征如何选择(这个非常重要,搞好了是决定性因素),网络层级如何设计,代价函数如何选择,对于不同广告的不同目标是否可以做多目标的拟合(比如游戏看ROI,一些广告看激活,然后模型是否考虑eCPM平台利益等)等等。
我们在后面的系列章节里,再来聊具体的emb召回实践,如何做优化等。
04
展望以及总结
首先需要确认的一个点就是oCPX是大势所趋,也是广告算法模型发展到一定阶段的必然产物,加大对于平台方的要求,弱化对于广告主的操作需求,进一步挖掘平台的长尾流量价值。
其实我(公众号:数据虫巢)个人认为,广告行业发展的终极形态就是,广告主只需要给到最基本的信息,比如要投什么APP,期望ROI是多少,剩下的都交给平台方。
素材?不需要的,平台会根据你的APP自动构建最合适的素材。
广告位?不需要选的,平台会把你的广告放在最适合你广告的位置上。
流量定向?不需要的,平台会给你分发最合适的流量,确保你的ROI,然后把平台中最旮旯里的流量都挖掘出来,利用好。
总之,你提个目标就好了,剩下的事交给平台方,或者更切确地说是交给算法模型来解决。
好吧,YY结束,回到主题。基于上面,oCPX是个大环境,而在CVR预估模型能够一担子解决问题(即直接对全局进行CVR预估)之前,扩量这种场景将会存在很长一段时间。
三种扩量的方案,不能说哪个就一定差,哪个就一定好,上文中我们都有提到各自的优缺点,各自的技术挑战和难度。
当然,从表面上看,基于emb的扩量还是为不同厂子所喜欢的,也被技术人员所喜欢,毕竟涉及到各种深度学习模型,然后诸如Youtube、阿里之类的做了一个比较好的表率,所以,这种酷炫屌炸天的技术解决方案还是比较受欢迎的。
但我个人认为,技术只是技术,看你如何利用。比如,用标签推荐的扩量方案,难道就不能用屌炸天技术,你也可以用DSSM模型啊,构建广告跟标签之间的召回关系是吧。
从这篇文章中,大家会发现,文中不断的引用之前的一些章节,比如《数据与广告系列十四:智能定向&基于FM的标签组合推荐思路》《数据与广告系列十九:推荐召回与广告LookAlike,万物皆可Embedding》《数据与广告系列二十:oCPX大势下标签定向的发展演化》都与本文具有较强的相关性。
05
挖坑以及推荐
而系列写到了第二十二篇了,我发现越写下去,摊子铺开的就越大,越来越多的东西要思考,而我所期望的是给了理论不行,还得给实践操作,给了技术不行还得给业务逻辑,给了业务逻辑不行还得给产品逻辑。
我发现我仿佛把自己放在了一个坑里,把自己给坑了,越写下去,感觉需要补充的知识就越多,感觉再写下去我的头发都快秃噜了。
但有点意外的就是,随着不断写下去,前面写的一些篇章逐渐的可以串联起来看了,这里我也建议对广告感兴趣的朋友,可以把整个系列回过头去看下,或许有不一样的收获。
本文中,有很大一块说道了基于emb的扩量,以及涉及到DSSM模型,本文由于不是专门介绍DSSM模型的篇章,所以各位读者可以适当去其他地方找找,比如知乎一些专栏。
DSSM模型的知识其实已经非常非常多了,当然如果DSSM结合业务做实践优化的倒是不多,毕竟每个公司这些调优策略都是经过了不知道多少算法工程师头发才撸出来的,不会轻易放出来。
关于DSSM以及一些深度模型的理论知识,或者实践知识,推荐一个朋友的公众号:《数据拾光者》。
里头包含了大量的行业潮流的深度学习技术,比如上面说到的DSSM,还有NLP的BERT等等,讲解的比较深,不过会偏技术多一些。
随便来几篇大家感受一下:
《广告行业中那些趣事系列11:推荐系统领域必学的Graph Embedding》
《广告行业中那些趣事系列10:推荐系统中不得不说的DSSM双塔模型》
《广告行业中那些趣事系列9:一网打尽Youtube深度学习推荐系统》
欢迎大伙儿关注,是个靠谱的公众号,更新比我频繁多了。
打完收工,来,猜一猜我下一篇什么时候发(捂脸)?
参考文献
关于说扩量的技术方案参考的资料并不多,这篇也算是别具一格了,数据虫巢从来不喜欢炒冷饭,要写就写技术与业务的结合,写自己的技术和业务思考,不过文中涉及的一些技术,这里可以推荐一番。
【01】书籍《深度学习推荐系统》,王吉吉大佬的大作,或者去他知乎看他专栏《王喆的机器学习笔记》。
【02】公众号《数据拾光者》,包含了很多BERT、推荐相关模型的拆解分析。
【03】知乎专栏《深度推荐系统》,各种深度推荐系统技术拆解的姿势都有。
文章都看完了,还不点个赞来个赏~
OTHER相关系列文章(数据与广告系列)见本专辑吧,里头都是这个系列的。