25

数据与广告系列十四:智能定向 & 基于 FM 的标签组合推荐思路

 4 years ago
source link: https://mp.weixin.qq.com/s/g6jlbfYa0m1uU6zC_WyrOA
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

aMZfe2u.jpg!web

作者|黄崇远 (题图:ssyer.com,CCO协议) 公号,数据虫巢(ID: blogchong)

01 前言

上一篇是 《数据与广告系列十三: 广告中的异常预测问题(PU学习&CostSensitiveClassification) 》 ,时间是2019年10月18号,现在都2020年了。时隔2个多月,我们又继续回来继续这个系列。

在上一篇里,我们从广告场景中的异常预测问题出发,但实际上重点是解决样本不平衡和典型正样本敏感的问题。

包括本篇,甚至后续的一些文章,我们都将以类似的模式阐述下去,结合广告的一些业务场景,一边来学习广告的实际业务,一边来学习算法的一些内容,算法和业务相结合,以便于关注“数据虫巢”公众号的朋友能够更加了解广告业务,广告业务中使用的一些技术,以及一些机器学习相关的知识。

而这一篇的核心相关内容将围绕两个方向:一个是广告场景中的智能定向问题,以及智能定向实际要解决的技术难点;第二个是基于FM算法模型的解决思路。其中一部分是业务场景,另一部分是FM相关,以及算法模型与实际广告业务的结合。

02 广告中的定向问题

在在线效果广告中,早些时候,常规的投放方式为,广告主在广告营销平台创建广告,上传素材,然后为广告创建定向,然后设置出价,最终将广告投放出去。而这其中,最重要的一个点就是定向的创建。

所谓定向的创建,通俗点说就是构建投放的人群选择条件,比如,一些基于人口统计学基础的定向:年龄,性别,甚至是一些工作状态,婚恋状态,财产状态等等。如下图,以腾讯广点通为例。

yeEzUbi.png!web

对于用户基础定向标签来说,部分比较容易获得,比如基于用户填写的资料,上传的证件之类的,特别是对于腾讯来说,太多场景可以拿到有效的基础属性数据,但对于其他的一些广告平台来说就不一定的,这就是之前说到的,可能需要基于部分明确的数据,构建模型进行补充预测,详细见 《数据与广告系列十一:从性别预测的CASE开始手撕机器学习代码》 ,这里就不多说。

整体而言,基础定向基本上算是广告平台的最基本的支持能力,在定向里,更重要的是对于用户复杂行为,或者说兴趣的定向描述,这些东西对于广告投放来说可能会更有用。

举个例子,我需要投放一个理财的APP产品,那么对于时常关注财经新闻的人是不是更有转化效果呢,对于一些游戏来说,找对口行为的兴趣人群是不是更有效呢?还是以腾讯的广点通为例,看下图。

VzQFfya.png!web

在这个维度上,广点通提供了两个维度的定向标签,一个是兴趣,即选择长期对某类事情有兴趣的用户;第二个是行为,选择特定场景有特定行为的用户。其实可以看的出来,两个维度的偏重有所不同,一个是侧重于用户兴趣描述,偏长期的行为兴趣的刻画;另一个是侧重于用户做了什么事具有什么特定行为,这种行为可能不是兴趣,因为可能事需求驱动。

这个地方是广告主最喜欢的地方,因为他可以根据广告内容,结合兴趣或者行为标签定向,对中意的用户进行精挑细选,来确保自己广告的高效转化。

但是,任何事情都有其局限性,当年的定向条件越精准时,必定其对应人群就越少(见右上角的对应条件人群预估,条件越多人群越少,关于人群预估的话题,找个时间再聊),而部分高价值的人群是众多广告主所抢夺的。

怎么抢夺?控制出价呗。但一旦出价过高,广告是需要追求ROI(投入产出比)的,就会出现亏损。另外一个问题就是,一旦这部分人群的竞争充分时,单个广告主所能拿到的曝光就必然不多,就无法满足其投放量的诉求。

怎么解决这个问题?扩大定向范围是一种方式,但是每个广告主对于平台上的人群的熟悉度是不同的,对于放宽定向,特别是没有经过测试的人群,极有可能导致投放效果的大幅下降,虽然可能整体曝光能有所上升,以及整体广告的CPC可能下降,但这个风险是相对不可控的。

目前有两个思路来解决,第一个是OCPX的能力提供。所谓OCPX,以OCPD为例,当你的广告投放一段时间之后,系统累积了部分你的Download(比如APP的下载)数据,即拿到了部分正向样本,然后模型通过已有的数据进行CTR(点击率)和CVR(转化率,以下载计算)预测,然后把部分竞争力低(即出价竞争不充分)但对应预测转化率又高的人群提供给你。

这样基本上让长尾流量得到了充分的利用,另一方面又一定程度上保证了效果,平台和广告主双赢,平台流量得到了更充分的利用。关于OCPC更具体的就不在这里阐述了,有时间开单篇讲。

另一种思路就是系统帮助广告主扩大定向,以解决人对于定向体系不熟悉的问题(再熟悉总不能比全局数据更熟悉)。

所以也就有了近些年比较火的智能定向,所谓智能定向即系统根据你已有的定向,自动的给你计算效果比较好的定向扩充,甚至对于一些老广告直接给你生成合适的定向组合,对于新广告直接根据提供的资料或者广告素材相关信息,结合老广告的优质转化数据,给你推荐合适的定向组合等等。

核心解决思路跟OCPX稍微有点不一样,他是基于现有的定向体系,来解决广告主定向不准的问题。今天我们要重点聊的就是智能定向,并且是智能定向中的重点,兴趣标签的组合和扩增的问题。

03 标签推荐&标签组合的问题

所以,基于上面,我们的问题转化为了标签组合,或者说标签推荐的问题。如上面的广点通的图,我们选择部分标签之后,系统给你推荐其他相关的定向,当然广点通这里的其他定向貌似是关键词标签维度的定向。但不管怎么说,核心目标都是想通过智能定向来放大放宽定向,并且这个放大和放宽一定是有所依据的。

我们把场景更加的纯粹点,即假设就只有一类兴趣标签定向,在广告主选择了窄定向之后,然后给他推荐更优质的组合,或者说基于他选择的标签进行额外的标签推荐。

乍一看,这不是推荐系统领域的问题吗。其实是类似的解决思路,可以用推荐的思路来解决,常规的推荐系统目标主体是用户,推荐的东西是实体目标,而这里是没有跟人直接挂钩的,基础点是已选择的兴趣定向标签,目标是推荐更多的定向标签,前提是广告的转化要一定程度上保证。

同样,你也可以把它看作是一个组合问题。比如目前你已经选择了AB两个标签定向,在这个基础上提供的ABC,ABD组合是不是可以保证效果转化,甚至更进一步,基于已有的先验知识,我告诉广告主,其实B的效果不好,你应该用ACF这个定向组合更佳。

我们不管是用标签推荐的思路还是标签组合思路来解决,核心的优化目标都是一定程度上要确保广告转化效果。

基于推荐的思路其实没有想象中好做,我们先以标签组合的角度来思考。

如果我们有足够多的历史投放数据,比如对于A广告来说,之前他投放过无数次,然后使用过无数次的定向组合,比如ABC,ABD,ACD,BDF等等等等。每次投放我们都可以拿到效果转化数据,这样我们是不是就可以知道什么定向组合好使?

这种场景有没有让你想起什么?什么ABC,ABD,有没有点购物清单的感觉?是的,如果把定向组合看成购物单,每次购物看成每次的广告投放,是不是这个问题可以转化成了超市购物篮的问题(不清楚购物篮CASE自行谷歌)。

比如用关联规则的思路来解决这个问题。是的,没错,是个思路,从逻辑上说是合理的。各种关联规则领域的算法模型,你可以试了,但今天我们不会按这个节奏走。我们的目标是FM,谁让FM以及FM系列衍生的模型近些年还是比较有市场的呢,多了解一下它总是没有坏处的。

聊FM模型之前,还有一个问题没有解决。我们一切的假设都是这个广告之前有过无数次的投放,或者更退一步,最起码是累积过了一段时间数据,经过不少次数的尝试和折磨,经历过灵魂的考验。

但问题是,如果需要做这么多定向的测试投放,这意味着之前的效果都不咋地,说不定广告主早就流失了,哪有让你有积少成多,然后灌入模型中的机会。就算是基于推荐的思路,同样会遇到这个问题,绕不过去的。

一个实操的解决方案就是,从广告上溯一层,比如A广告,它是属于金融广告下的理财广告,那么我们就可以归类数据了,把所有属于理财类的广告作为一个集合,我们基于理财广告去做标签组合的计算,如果再不行就上溯到金融广告,总能攒够足够多的样本数据。

不过同样缺点就是,我们针对的不是单一广告,而是广告所属的类别,相当于我们最终模型拟合是这个类别下的标签组合规律。

04 FM模型介绍

本篇的核心业务重点在于智能定向,但技术重点在于FM来解决标签定向的问题。之所以圈定FM算法,之前也说了,FM模型或者说FM系列模型还是比较多的应用的,比如用于广告的CTR预估,比如用于推荐系统等。

在实操上,它衍生出了FFM,以及结合DNN衍生出出来的DeepFM等,所以从技术维度上并没有想象中这么容易过时。

FM全称是Factorization Machine,翻译过来就是基于因子分解的学习。说到因子分解,不知道大家有没有想起什么,比如推荐系统中的经典算法ALS算法(经典的基于模型的协同过滤),核心原理就是一端是USER矩阵,另一端是ITEM矩阵,中间是隐向量矩阵,然后通过矩阵的分解(因子分解),最终构建起两端的关系。

来,看下图,回忆一下。

ABZrAfj.png!web

FM最基础的原理也类似。 最早FM设计出来的驱动力在于LR模型,并且是LR用于CTR大行其道的年代里,2010年。

按原作者Steffen Rendle的说法就是,LR大规模用于广告领域的CTR预估,但是一旦特征的规模上涨,且广告领域里特征通常会非常稀疏,而过度稀疏的特征对于LR来说并不是个好事,有没有一个好的解决方法呢?

况且,LR的底层逻辑里,只考虑了特征的线性或者非线性的加权,但并未对特征之间的关联性进行考虑,它认为特征之间都是相互独立的。

而我们在实际的机器学习场景里也知道,特征之间一定是存在某种关联性的,比如“情人节”这个时间特征和很多商品之间的关联性,比如美国和感恩节这种特征之间的关联性,比如年龄和典型行为的关联(中老年的古玩,中年大叔的传奇情怀,小年轻们在游戏上的行为特征体现等),比如化妆品和女性的关联性等。总之,特征之间确实存在很多的关联性。

过多的理论,我们不在这里阐述,对着论文推导公式也不是我所擅长的,我们直接上FM的模型表达式。

eyMbyq7.png!web

公式的前半部分,其实就是LR的表达公式,后面部分多项式表征的是特征Xi和Xj之间的关系,即XiXj的组合。

当然,这是二阶表达式,多阶的也类似,实际应用中大部分使用二阶,所以这里我们只针对二阶做了解。其中n表示特征数量,Xi是第i个特征,W0,Wi,Wij是模型参数。

结合前面ALS矩阵分解的过程图,Wij同样可以看作是一个对称矩阵,矩阵W分解为Vt*V,然后特征之间的关系通过隐向量构建,最终Wij可以用<Vi, Vj>进行表征。表达式转化为如下。

V3AB7vf.png!web

其中,Vi是第i维特征的隐向量,<>里头的代表点积,也就是意味着i和j维的关系表征。多项式的推导演变,以及中间的因子分解过程可以看成如下。

EnIbAj3.png!web

由上面可以知道,FM在拟合的过程中参考了特征之间的关系,并且是以因子分解的方式来进行实际的计算,而二阶的FM则对两两特征之间的关系进行了分解计算,最终把特征之间的关系量化到X到Y的拟合中。

由公式可以看到,FM对于特征之间的关系进行了计算,而在我们的场景里,恰巧我们就需要这种特之间的关系,比如我们把单个定向标签看作是特征呢?拿到了特征之间的关系是不是就解决了这个问题。

而FM应用于广告CTR预估的一个应用中,就是通过FM来实现大规模的稀疏特征的降维,即大规模的特征进行向量化,变成有限维度的向量,然后再灌入到LR中,考【03】,其中有FM与LR结合的,在广告领域CTR预估解决方案。

可以想想,FM的输出中一方面是包含了特征的有限维的向量化,而向量化后的特征,则可以进行点积计算,即可以计算相关度,而他们的相关度的前提都是FM最终基于样本数据的拟合。

关于FM原理这块,可以结合文献【2】一起看,比较清晰,理论这块想讲清楚真的有点难,也着实枯燥,凑合着看这个小节吧,结合其他网络资料来看FM的原理,这方面的资料不少,这里就不多阐述了。

05 FM模型用于标签组合推荐

基于04章节,我们知道FM的中间输出包含了一个重要的东西,即特征的固定4维向量表示,而只要特征向量化了,求特征之间的相关关系只需要计算点积即可。

在广告的智能标签推荐场景里,我们利用FM的特征之间的关系计算,把定项条件中的标签选择当成一个特征,然后产生的广告效果当成Y。

在实际的操作过程中,我们可以使用一个复合的score计算逻辑,来拿到最终的效果score,比如把ctr,roi,dtr等融入其中,最终加权拿到一个分数,然后通过分数阈值截断,将结果转化为01,最终转化为FM的分类问题,或者不转化直接量化为回归问题。

具体逻辑过程如下:

  • 历史的广告与tag之间的关系,可以认为是广告效果(比如roi指标,或者复合指标)与tag特征之间的关系(tag定向列表)。

  • 通过onehot编码,每个广告最终都会转化为与N(假设当前定向体系共N个tag)维的tag特征矩阵的关系。

  • 有了Y(广告效果指标)以及X(TAG的N维特征矩阵),进行FM训练拟合,最终达到AUC评估标准。

  • 在拟合的情况下,寻找特征之间的关系(这个是FM擅长的),最终通过特征的隐向量,计算特征之间的点积,从而获取特征之间的关系。

  • 最终通过tag与tag之间的关系列表,实现基于tag的推荐。

在实际操作过程中,对于Y,我们取得是一个曝光/转化/点击/付费/roi等综合加权的一个score,并最终将score转化为1/0(粗暴点,小于mean值得为0),最终转化为FM分类模型,进行拟合。

在代码工程层面,我们可以使用xlearn库,里头集成了FM,FFM等实现,参考【文献4】。

简单的示例:

import xlearn as xl


#创建一个fm的model

fm_model = xl.create_fm()


#加载训练数据和验证数据

fm_model.setTrain(train_file)

fm_model.setValidate(vali_file)


#设置参数,以auc为目标进行训练拟合

param = {'task':'binary', 'lr':0.2, 'lambda':0.002, 'metric':'auc'}


#实际我们需要获取的是特征权重和特征的隐向量

fm_model.setTXTModel(f"./output/model_txt/model_cate_{cate_id}.txt")

fm_model.fit(param, f"./output/model_out/model_cate_{cate_id}.out")


#进行数据验证,这里test数据集和validata数据集是同一份,sigmoid可以转换为01

fm_model.setTest(f"./src_data/vali_data/vali_cate_{cate_id}.csv")

fm_model.setSigmoid()


fm_model.predict(f"./output/model_out/model_cate_{cate_id}.out", f"./output/result_data/result_cate_{cate_id}.txt")

几个重要的点:

  • setTXTModel 是我们的核心目标,包含了特征的向量化。

  • 最终我们的目标前提是拟合auc,实际的model还有predict其实不重要,这里只是顺带输出。

  • 实际操作中,我们是以广告类别cate为单位维度进行拟合,而非单个广告维度,解决数据量不足的问题。

如下是官网截图, setTXTModel 输出的中间态txmodel文件,其中v_N=0/1...就是我们所需要的,每个特征vector向量,4维表征,然后特征之间就可以计算相似度了,即点积。

veYBju2.png!web

将所有的定向标签根据广告的category结合目标score进行向量化之后,基于这些特征(定向标签)就可以计算特征之间的相关关系了,然后根据相关关系进行标签的组合推荐。

这一切的前提是auc拟合的足够好,这意味着特征围绕目标优化的向量化足够的合理,那么特征之间的向量计算就是有据可循的。

以上基本上就是围绕FM,以FM的中间计算态作为智能化标签组合推荐为原理的解决方案了。

一种依赖于FM模型典型特征相关计算原理的标签组合推荐解决方案,至于说效果,自己试着玩吧,不敢保证,毕竟场景和数据不一致,无法保证,但值得一试。

06 总结

这里从业务角度上我们讨论解决广告投放竞争过度的一种解决方案,即智能化定向,又从标签组合推荐的逻辑上讲解了智能化定向的解决方案。

结合FM模型,提供了一种相对比较巧思的标签组合推荐算法实现模型思路,一方面是可以提供这种解决思路的尝试,另一方面对于FM模型可以多加了解,其在其他领域都具有广泛的应用。

在后面的章节里,我们将始终围绕在线计算广告的一些业务和技术,特别算法应用场景的一些知识体系结构,将结合业务场景进行阐述,并且尽量的围绕场景结合实际的机器学习案例进行学习,从而也加强机器学习相关的技术知识。

除了前面已经了解过的,从简单的性别预测了解机器学习的基本过程,结合广告的异常检测问题学习SMOTE算法以及代价敏感学习,再到这篇基于智能化标签组合推荐学习FM的相关知识。

在后续的广告算法应用场景里,我们可能继续了解比如CTR预估,RTB实时竞价,标签的商业化兴趣建模,LookAlike人群预估等相关核心概念和算法解决方案。

除此之外,我们还会继续补充业务相关领域知识,除了之前我们已经了解过的二类电商业务,SMB业务,还会补充比如分发广告,游戏广告相关的特色。

在纯粹的数据领域,将补充部分数据架构,或者广告数仓构建相关知识。总之,我们希望《数据与广告系列》能真正的围绕在线计算广告的业务,数据流,算法应用场景几个维度充分的带大家去了解和学习相关的知识体系结构。

07 文献参考

【01 FM论文】

http://www.cs.cmu.edu/~wcohen/10-605/2015-guest-lecture/FM.pdf

【02 美团FFM实践】

https://tech.meituan.com/2016/03/03/deep-understanding-of-ffm-principles-and-practices.html

【03 FM用于程序化广告预估】

https://www.cnblogs.com/Matrix_Yao/p/4773221.html

【04 xlearn中FM相关】

https://xlearn-doc-cn.readthedocs.io/en/latest/python_api/index.html#id2

顺手点个“ 在看 ”吧, 置顶 一下“数据虫巢”, 转发 朋友圈, 赞赏 一杯深夜写文的咖啡,都是给我/给数据虫巢公众号持续写下去的动力。

OTHER 相关系列文章


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK