分享嘉宾:李欣如 京东 算法工程师
编辑整理:Hoh
出品平台:DataFunTalk
本文来自早些时候,李欣如老师在DataFun的分享。
导读:个性化推荐在电商领域的作用不言而喻,推荐算法直接影响产品体验、用户留存和平台收益。本次分享结合电商推荐和广告营销两个领域,介绍复杂业务形态下的算法技术应用,以及如何打通业务领域的壁垒,达到整体收益更优的目的。
主要内容包括:
业务介绍:场景、目标、架构;
召回优化:几个召回的优化点;
多任务探索:排序的多任务探索,迭代路径以及一些小的trick;
推荐、广告结合:推荐和广告产品形态以及能力的一些结合复用。
01
业务介绍
业务场景:包括分期商城推荐页、楼层推荐页、京东出众、营销推荐等页面,中间两栏为app截图。
业务指标:主要是CTR、GMV、ARPU(用户价值)、单量、加购、收藏、浏览时长、分享等。
用户的决策路径:如,从曝光(看到) > 点击 > action > 支付。
右图是推荐系统的架构图,流量通过接入层到推荐系统中控,中控依次取画像、带画像调多个召回服务,汇总召回结果,分发到排序服务进行特征加工,进行线上预测;预测结果经过重排后,将展示列表的特征快照数据经MQ落库,如画像、商品特征及一些实时特征,落库后拼接接入层落的label数据,形成最终样本,进行模型迭代、测试、推到线上完成模型更新。
02
召回优化
1. 画像召回-优化
首先我们在常规的画像召回上进行了优化。常规画像召回的流程是取画像、取对应倒排索引,根据索引分用规则打分,返回topN。
这里我们采用画像预召回+模型的方式,主要可以解决画像召回量大,召回内部人工规则排序效果差,难以迭代的问题。
模型选型:
从LR模型迭代到FFM,挖掘特征交叉信息,离线效果FFM优于LR、FM,常规的思路是使用排序的样本,但这样未能考虑从未曝光过的样本,和推断空间有差异,因此负样本不仅采用曝光数据,也加入了部分召回数据,上线后取得不错的效果;后面又迭代到更复杂的NN模型。
FFM模型主要是特征对不同的field有不同的embedding表达,如图所示,由于引入了field,无法像FM那样降低计算复杂度。在FFM隐向量的长度为k,特征数为n时,预测的计算复杂度为o(kn2)。
右下图是画像+模型的流程,通过spark生成样本及特征,在docker上训练,把画像预召回结果根据模型分排序截断,返回topN。
2. 相似召回&评测
相似召回的基本思想是根据行为序列,推荐相似的item,实时性好。线上常规使用的几类相似召回,典型的代表是itemCF ,我们根据不同周期、过滤方法、相似度计算方式,活跃用户降权等进行迭代优化。后来使用embeding方式解决泛化性问题,embedding的发展过程,由最早的MF、ALS发展到word2vec,再到多对1的tag2vec,以及近几年的randomWalk、line、node2vec,item的embedding表征能力也逐渐增强。
我们通过构建用户和商品的graph,利用randomwalk的方式得到一系列item序列;这里容易控制序列长度和以每个节点开始的序列个数,将该序输入word2vec得到item对应的embeding向量,完成对复杂关系链路建模。
接下来是怎样评估embedding的好坏:
比较直接的是将i2i召回上线,上线评估核心指标,适合快速迭代等场景;
离线评测,将embedding输入到排序模型,看对离线loss和AUC的一个收益;也可以离线生成U2I的推荐列表,评估召回的精确率、召回率、F1值等;
第三种,使用排序模型对U2I列表进行打分,评估均值、分布。
但这几种评测成本较高,i2i的相似关系怎么评测,以及相似阈值怎么确定没有解决。
我们采用的方式是,先找一路线上效果较好的相似召回,比如ICF,使用item pair的内容特征、统计特征去拟合ICF的物品相似关系,离线生成模型。这个模型可以离线评估embedding生成的i2i相似列表,例如相似分均值等;
另外,我们使用该模型将线上相似召回汇总成一路。一般召回系统中有多路相似物品召回,每路相似召回,线上预测压力较大,我们使用得到的模型离线对所有ICF结果汇总后离线评分,输出一路相似召回,在效果略涨的前提下,也缓解了在线推断压力。
03
排序优化
问题和挑战:有CTR、单量、GMV等多个目标,多个目标会此消彼长、转化数据稀疏,影响建模。
任务迭代的过程:主要经过单模型loss加权,多模型独立学习,单模型hard share+联合训练,soft share以及调优探索等过程。下面为大家详细介绍下:
1. 样本调权
先看样本调权,样本调权是解决正负样本比例不均衡的一种方法。由于业务中考虑多个目标,我们将转化相关的行为样本进行不同程度的加权,同时根据转化金额、根据点击后转化时间对部分样本进行调权,这里可使用log平滑等方式。
另外尝试使用了focus loss,缓解正负样本不均,相比交叉熵,放大了分错样本的loss影响,也取得一些提升。
总而言之,调loss权重,会干预学习的梯度,严格来讲还是单目标优化,这种过采样方式兼顾了其他目标指标;其优点是,可以复用线上整套流程,无需改动,实现简单,效果明显。缺点是AB成本较高,线上需维护多个模型,加权权重难定义,调节成本大,周期较长,模型分含义不好解释,对线上转化相关收益,难以达到全局最优。
右图是使用的特征,除了上下文、用户、商品侧等常规特征外,hash类特征交叉,匹配类特征交叉都对最终效果有正向影响。
2. 多模型集成
第二种方式,是多模型独立训练,然后集成的方式。
线上按订单和GMV导向时,分别采用右图的公式,追求订单是,使用CTR*CVR,会对price做些特殊处理;优点是任务解耦,模型独立,缺点也很明显,模型多维护成本高,参数共享困难,数据稀疏问题;同时由于线上使用期望成交额排序,也就是说乘了price,这里需要pCTR pCVR预估的准确性要求较高,且分布要和实际分布相似,这样才能保证期望成交额的准确性。
那为什么要预估校准?前面的模型,考虑到性能和训练效果,一般会对负样本抽样、正样本加权等方式训练模型,从左图的预估CTR(横轴)和真实CTR(纵轴)的散点分布,可以看到预估CTR高于真实CTR,尤其是预估CTR高的那部分,偏差更大。
首先对采样进行校准,校准的公式在sigmoid的入参中加入了ln(r),r为负采样率,比如说5%;
对预估使用保序回归去校准;保序回归是一个加权最小二乘的二次规划问题 。举个具体例子,把测试样本按预测值降序排列,依次计算每1w样本的CTR统计均值,使用保序回归,输出一个非递减序列,也就是图中的橘色这条线,最小化预估值和真实统计值的MSE误差。线上维护pCTR和真实统计值的映射关系,查表使用。保序也就意味着正负样本的相对序不变,AUC也就不变,但交叉熵和均方误差均有大幅降低。
右图是在对样本使用不同分桶大小时,校准前后,预估值和真实值的MSE的大小,蓝色这条线是pCTR和真实值的MSE,红色线是校准后,保序值和真实值的MSE,可以看出,在各分桶大小下,MSE下降都非常明显的,在我们场景下,下降了约88%,在实际中根据业务规模采用不同分桶大小,一般分桶在几百、几千这个量级,logloss也由0.1499降低至0.1234,降低了17%的。
3. 多任务模型
首先我们使用hard share,同时训练ctr和ctcvr的方式,既类似ESMM的方式训练神经网络模型。遇到的问题是ctcvr的AUC,GAUC偏低,如左图所示,我们尝试调节了网络结构,也观察俩个塔训练过程中指标的变化。具体是,ctr侧的loss随着训练降低,AUC提升;ctcvr侧的loss虽然在降低,但auc在0.5附近。
这里考虑,交叉熵作为损失函数,auc作为评估函数,模型在优化过程对数据进行迭代训练,使loss达到最小,当loss为0极端值时,auc为1,但在不同数据训练的中间过程时,loss的优化降低和auc的提升不一定成正比。在实际的业务数据中,曝光到转化过于稀疏,原始比值约10000:1,即使对曝光数据进行负采样也无法缓解极低比例。因此结合上图具体训练过程中ctcvr的loss明显比ctr的loss小一个数量级这个情况,当pctcvr预估值都在0附近时,loss能达到很低,但ctcvr的auc只在0.5附近,同时调出模型训练过程中ctr侧和ctcvr侧fc层权重的变化,可以看到CTR侧参数分布有明显变化,ctcvr侧fc层的参数分布没有明显变化,fc层的参数没有充分学习出来,导致AUC较低。我们对ctcvr的loss加强正样本错误的惩罚力度,可以直接对转化样本进行过采样或对ctcvrloss进行加权,是会影响点击样本的分布,进而影响ctr侧的学习,尝试发现对ctcvr侧发生转化的样本学习错误l的oss进行常数量倍加大解决了此问题,ctr和ctcvr都进行了充分学习。
我们后面又探索了几种hard share的优化,例如后期固定CTR侧的参数,只学习CTCVR侧;在CTCVR侧,将曝光样本的反传梯度置为0,防止影响CTR学习,尝试使用swish激活函数,提升模型学习能力。
由于特征在点击阶段和转化阶段的表征,及用户关注差异的不同,像这个图所示,又尝试了softshare ,即MMOE+转化序列的方式,加attention网络,考虑到用户购买的决策过程,将加购、下单未支付等也当做正样本来训练,只是设置较小的权重;这里列了加购到转化间隔天数的一个分布,当天加购当天下单,和之后下单的比例约符合8:2的关系,加购一天及之后的转换比例,如图所示。
预估GMV也引入了pAVR这个任务。还有是关于position bias的一些探索实践,将postion置为0,使用PAL塔预测曝光概率等,减小bias。
04
推荐+广告业务概览
1. 推荐+广告业务
首先介绍下两块营销业务,目前我们营销算法主要在优化万川RTA和DSP的投放。RTA是19年左右新兴的广告投放模式,其集广告主自身数据、算法能力以及媒体的画像数据,两方两阶段预估,联合投放,实现广告效益最大化。
但很多广告主没有足够的数据和算法能力,为优化广告投放效果,就将该工作委托给专业的第三方平台,我们的产品万川RTA就是这么一个投放平台,孵化于20年初。对外提供投放引擎、算法预估、参竞动态控制、分桶效果展示等一系列能力DSP投放,这里列了个简单示意图,RTB是一种利用预估技术在数以十亿计的流量上,针对每个流量进行质量评估以及出价的竞价技术。在该模式的广告投放中,DSP提供流量接入、反作弊、CTR/CVR预估及智能出价技术,采买流量,在ADX平台成交,以最大化投入产出为目标,为众多广告主提供优质服务。推荐+广告结合,指的是:
第一,一些广告聚合页,页内是活动推荐或者相关推荐,这里和推荐很类似;比如我们采用CPM方式引流,推荐页内部使用CPC结算的方式,这种模式也在探索。
第二,推荐能力在广告上的复用,例如RTA深层转化预估模型,CPC、ROI约束下的智能出价问题,这些都复用了推荐算法能力。
2. 冷启动投放
RTA客户一般转化成本较高,转化样本数量过少,模型难以学习充分,前期效果一般,但广告主又想尽快看到效果;还有,媒体不回传曝光数据。
这里我们采用部分参竞争样本作为曝光数据,复用推荐的多任务建模能力,辅助学习转化模型,受RTA模式限制,RTA无法决策出哪个广告创意,这里仅用CVR在线预估;因为样本量过下,我们先后尝试了几种方式对样本进行增广,达到提升线上指标的目的,使用了样本融合的方式,即融合客户提供或其他场景的一些正负样本,效果一般。
我们还使用了SMOTE线性插值的方式对连续特征进行扰动增广,取得一定效果;但mixup及类似的增广方法与随机噪声的增广方法可扩展性较弱,后来使用GAN进行增广。
难点:
如果生成embedding形式的样本,由于模型训练时,其embedding的权重也在改变,会出现二者不在一个空间的问题。
如果生成真实样本,由于使用了类别特征,对GAN非常不友好,其梯度的稀疏程度较高。(在这里使用该方法,并使用onehot方式降低梯度的稀疏程度)
生成的样本不像图片一样可以肉眼检查有效性,只能看样本的大致情况,或者重新训练模型,或者将正样本替换成增广的正样本并查看训练好的模型的auc。
主要方法:
使用WGAN即基于W距离的GAN,提高训练GAN的稳定性。
判别器同时预测样本的真实性和转化概率,即将先增广样本再分类,改为同时预测,即端到端的训练。
条件GAN强制生成不平衡类别的样本,比如转化样本,防止模式崩塌。
不只增广单一类别的样本,为了防止不同类别的样本存在“包裹” 问题,比如正样本的空间包裹负样本的空间,那么通过正样本空间增广得到的样本很有可能是负样本。
利用半监督学习的方法将增广样本打上soft伪标签,从而一定程度上指导判别器解决转化的分类问题。
3. CPC控制
DSP主要有三类客户,CPM跑量不跟单客户、CPC投放客户、ROI效果客户。
根据用户真实的ROI或期望值,ROI由客户指定,根据投放,ROI不断调整,如果设置ROI不合理,投不出去;算法预测用户的转化价值,得到CPM出价,会投很多外部流量,无法按ECPM出价;流量价值的预估也复用了推荐的多任务能力;我们的挑战是流量按CPM采买,但按照CPC与客户结算,这里同时需要保证对CTR的精准预估和CPC的稳定控制,其中CPC是否稳定会影响客户的预算决策,这里采用了控制理论中经典的PID算法去解决这个事;像无人机定高悬停、温室控制都用到了该技术。
PID是比例、积分、微分单词的首字母缩写,公式如上图所示,err(t)代表t时刻的差值,Kp代表对差值的放大幅度。第一项是目标值和实际值的差值,然后是差值的积分和变化率,也就是微分。
举个例子说明这几项的作用,比如说通过加热的方式使水温保持在60度,每秒钟使用传感器采集下水温,比如第一次采集是20度。
根据差值决定加热幅度,加热过快容易将水温烧过60,加热较慢时,根据实时反馈差值调节加热力度,会进入到加热和散热持平,水温一直保持在比如50度以下不变了,这个叫做静态误差。
解决的方法是对误差进行积分,也就是这些部分,也用来干预加热力度。为了减小震荡,这里引入微分,也就是提前减速,更平稳的接近目标值。
右上图是根据目标成本调控出价以及成交价,线上通过误差监控不断的调整出价,进而调整成交价;右1是出价和成交价的一个拟合关系;右下图是几个价格之间的关系,橘色代表出价,蓝色代表成交价,最后调控结果实际成交均价等于目标成交价。
调控公式如左下图,UT为误差,经过函数变换后作用到CPM出价公式。
4. 转化反馈延迟
因为用户在下单前有决策时间,延迟转化这中情况在推荐和广告中都有,但由于广告的归因周期较长,一般为30天跟单,尤为明显;由于客户属于周期性投放,每天新增计划较多,这是每日新增计划的一个占比。
图二是广告主日订单占比的情况,大约在10天左右能跟到60%的订单,这个广告主间还是有差异的;我们根据网上论文,采用同时建模转化概率和第几天转化的方式,对转化时间做了个指数分布的假设;做广告的朋友应该对这个比较熟。
公式1即为转化概率,公式2是转化,且在第d天转化的概率;在右图,Y=1,代表label。这里分别推导出了d天转化,以及负样本的概率,使用交叉熵损失函数,学习wc,wd参数。推荐中也能借鉴使用,感兴趣的同学可以研究下。
05
成果与规划
看下业务成果:
在推荐业务,从单目标切换到多目标模型,点击率和UV价值具有明显提升,尤其是UV价值,第二个图是我们推荐场景GMV,场景GMV上升趋势显著;
在DSP的广告业务上,点击率提升显著,同时降低了引流成本CPC,ROI数据也有稳步提升;
万川RTA,对外部客户的产品的转化率提升累计到达15%,主要基于数据挖掘和算法能力。
右图是算法能力矩阵,是我们之后重点打磨建设对象,包括算法总控,画像、检索、预估能力,分层实验,预算分配能力,结合NLP和CV多模态特征,对外输出算法能力,并承接上游的多个业务。
这里的预算分配是指,DSP业务分桶实验,一般是指按device或请求id分桶,但AB时会有预算消耗不均的问题,即一个分桶效果好,但预算被其他分桶抢去,扩量后效果变差,我们采用对预算进行切分,分桶到计划下的单元维度。
后续攻克方向,例如uplift这类增量模型、转化时延模型、多任务+ROI精准预估,参数自动寻优(CEM、遗传算法),行业特征挖掘等。
今天的分享就到这里,谢谢大家。