推荐系统解构
编辑整理:陈家辉
出品平台:DataFunTalk
导读:由于移动互联网时代用户每时每刻都会产生海量信息,伴随着大数据技术的快速发展,使得企业能够迎合用户的痛点,分析用户喜好,进行商品推荐。推荐系统诞生的益处:从用户角度,推荐系统可以缓解信息过载带来的时间成本;从企业角度,可以帮助企业进行精准营销,解决长尾营销,最大化收益。因此推荐系统的好坏对于互联网企业来说至关重要。
本次分享主要是以电商平台为例,从以下几个方面对推荐系统进行解构:
01
1. 工作思路
对于电商平台来讲,一套完整的电商流程应该包含以下完整流程:
推荐系统作为电商平台的一个子系统,其价值体现在商品与用户的匹配上,而匹配的效率与质量对于电商平台至关重要。
2. 推荐系统面临的挑战
多场景、多目标、考虑生态、场景间目标的差异
电商推荐系统的优化往往是多目标的,这个体现在场景和优化时效维度;在不同场景间, 推荐系统的目标侧重点也是不一样的,比如有的目标是提高用户在页面的停留时间,有的是提高用户短时间内的消费,比如猜你喜欢、购物车、商品详情页的推荐坑位。而从优化的时效维度来看,比如从短期来讲,目标有点击率、转化率和客单价等,从长期来讲,目标需要考虑留存、复购等指标。不仅如此,电商平台需要兼顾用户、商家、平台三者的利益,构建长期健康的生态。由于电商业务的购物链路较长,往往用户需要先浏览、点击、加购、下单、支付、履约配送、收货、评价/退货等环节构成,所以推荐系统往往需要将各个环节纳入其中。当然在其它业务类型的推荐系统中,也存在着链路长的挑战。如招聘行业的推荐系统,给候选人推荐合适工作只是第一步,后面还会伴随着长时间的简历投递,招聘人员的审核和邀请,参加面试,最终入职或者进行下一家的应聘。社交场景也类似,这种推荐系统存在这双向匹配,比电商平台的单项匹配链路更长,挑战也更大。
数据闭环
对于电商企业来说,数据是核心,是驱动业务迭代的关键点,从用户、商品、商家维度,需要持续积累和采集。从用户的角度,存在浏览、点击、成交、评价、物流全链路闭环数据。从商品角度,有潜力、新品、老品、衰落、下架等信息。从商家角度,也有价值、非价值和灰黑商家等。
3. 推荐系统中的关键因素建模
我们以电商推荐场景为例,用户的行为旅程包括浏览、点击、加购、购买以及长期的复购行为,大致可以由下图表示:
推荐系统首先需要在点击(也即流量的转化)这一环节进行建模,引导用户进入商品详情页,同时对详情页的加购/购买建模,依次引导后续行为。
另一个角度,从上面PPT下半部分的公式出发,产品运营可以被结构为以上三个模块,流量、转化、x因素(回访、复购)等;长期来讲, X因素非常关键,即复购回访的长期价值,只有长期生命周期价值高才能给企业带来持久收益(n为时间/天,x的少许增长可以带来长期巨大复利)。
结合上述用户旅程和公式拆解,如果想将V做大,自然的,我们需要构建转化率-访购率-毛GMV-净GMV-留存率-复购等关键节点的建模,并且这个也是推荐系统的观测指标。
在系统更大维度,我们需要关注长短期收益、用户/商家个体满意度和总体满意度以及兴趣探索成本、流量效率与商品/商家成长等维度。
02
1. 基本架构
我这里拿一个前几年我刚开始入门推荐系统时候的架构:
最开始的阶段是召回过程,分为多个模块;实时模块会拿到用户实时的信息,比如用户实时点击、收藏、加购的商品,并获取这些商品的相似商品;历史模块会获取用户的历史信息,如历史的购买行为;画像模块则会获取用户的静态信息和偏好标签,如用户的设备型号、年龄、性别、类目偏好等;最后还会包括现在以及过去的热门商品等。
在经过这些召回的过程后,我们会进行一层过滤。比如曝光过滤,即某个类目已经曝光了一定次数,但是用户都没有点击,隐式表明用户不感兴趣。还有用户购买过滤,即已经购买过的短期内不再推荐。同时还有购买率过滤、性别过滤等等。
经过过滤阶段后,我们可以对过滤后的商品进行一定的预估。如点击率、转化率预估等。同时可以考虑单价,多样性以及新品率等影响进行排序。随后我们可以通过规则或者模型,将这些粗排后的物品统一得分进行融合,最后再经过精排阶段给出最终得分,这个阶段还会增加一些业务规则进行强控,比如考虑多样性的打散、出于运营需求的置顶等。
上述是大致推荐系统的简单介绍,不同的业务和团队,在构建过程中也存在模块的差异,推荐系统没有特别强的标准存在。
2. 召回策略
主要策略包括:
① 实时行为召回:在线实时捕捉用户对商品的点击,收藏,加购,购买等反馈行 为,并召回相似商品,迅速抓住用户的短期购物需求。
② 历史行为召回:离线分析用户对商品的历史点击,收藏,加购,购买等反馈行为,并召回相似商品,兼顾用户的长期购物需求。
③ profile召回:从性别,年龄段,设备等多个维度,在线和离线同时对用户进行
画像,并召回相对应的热门商品。不要小看这个召回,非常关键,往往新用户需要用这些静态信息和标签来做召回,往往可以快速圈定其圈层进行精准的探索和数据反馈,比如5-6线城市和北京西二旗的用户往往大概率兴趣差异较大。这层召回是全局热门召回的更精细化拆解。
④ 热销&趋势召回:分析商品的长期和短期销量变化,召回爆款和近期热点商品。
召回模块特别重要,因为召回的来源/相似分可以作为排序特征(推荐日志落盘-回看/溯源机制)
召回作为漏斗的顶部,好坏对漏斗底部(排序)的影响很大。
3. 排序策略
排序阶段的影响因子较多,可以作为特征,也可以独立在外作为排序因子存在。比如以下的一些因子:Ctr Cvr Price、Ctr Ts、Match Score、Trigger score time decay、Match type ctr cvr、Match type score、...
当然针对不同的产品有不同的侧重点,比如电商的内容差异较大,甚至同是内容也会因为产品形态存在差异,比如快手的双列可以考虑点击率建模,而抖音单列下滑不需要考虑点击率建模。甚至还需要考虑多样性,惊喜性,新颖性等更多的指标。并且建模过程可以尝试end2end或单独建模的方式,这里面需要考虑的是稀疏性、正负比例、预估不准等问题。
如果一个指标不够,还可以考虑多个指标的结合,形成新的指标。如电商场景下,gmv这个指标,可以用CTRα*CVRβ*Priceγ代表gmv,那为什么还需要α、β、γ呢?因为如果ctr和cvr估计是准确的, α、β、γ均为1的排序公式是可解释的,你把这几个指标的分子分母拆开就看到了,相乘以后就是gmv。但是由于模型各自的准确率差异,导致了我们需要学习这几个参数,理论上建模越准确的指标系数越大。而这三个系数如果相对稳定可以通过离线统一参数学习的情况完成;如果不稳定,可通过强化学习来解决这个超参的设定。
可参看下图的电商场景建模的相关排序因子,当然部分因子作为特征可纳入排序模型。
4. 排序阶段还有一些常见的原则
① 针对不同的召回策略,主要秉持“短期行为优先,兼顾长期行为”,“保证多样性,避免过度个性化”原则。算法上主要通过长短期用户行为密度建模,正负反馈反向调节等手段来实现。
② 不同排序因子(商家质量/分发宽度及强度等等)可共用一套底层表征。
③ 覆盖率:通过类目,品牌,频道,场景等多粒度的打散重排,最大化各个维度的个性化覆盖率。
④ 疲劳度:通过引入一定的随机因子,针对不同个性化程度,建立合理的轮转机制,保证一定的新颖性。
⑤ 转化能力:通过对用户,商品,会场等多维度采集特征数据,训练点击转化和交易转化模型。大促期间 根据不同的阶段,采取差异化的处理策略。比如预热期强化点击转化,正式售卖期则强调交易转化。
5. 更加精细化的排序
① 考虑到召回和排序的压力,可以再精排和召回中间加一层,少量核心特征+简单模型进行粗排。
② 多过程建模:如直接购买还是收藏比价使用模型判断。举个例子,在购物车推荐中,用模型来操控推荐策略。在购物的流程中,通过数据分析可以发现,有一部分用户是希望通过加入购物车来进行比价, 还有一部分用户加入购物车是直接购买。通过模型来判断用户的行为,比如用户一直添加同类目的商品,那么比价的概率就高一些。如果判断出用户是直接购买,那么就尽量推荐相关商品,如果是比价用户,就推荐相似物品。
③ 粗粒度召回:离线产出不同类目下的精品数据,作为召回补充和兜底
④ E&E探索解决低置信度预估模型问题
6. 模型演进
模型的演进路线可以由下图表示:
而模型的时效性也从天级别,慢慢演化成小时(一天几次), 再演化成近实时级别,而目前主流的推荐系统都是实时级别。
目前模型的演进已经进入到深度学习时代,各个大厂提出的新的深度学习架构也层出不穷:
这里不对于模型具体结构过过多展开,主要趋势就是通过时序、行为特征的使用,通过embedding、LSTM、attention、tansformor等结构提取特征信息,拟合用户兴趣,提高预测精度。
7. 特征构建
这里主要解构一下电商推荐系统中特征的构建方式:
初级的方式,一般大家会对用户和商品进行一些用户画像,然后作为特征加入模型。但是长期来看,匹配类的特征非常重要,比如待排序的商品和用户历史行为的一个关系,上面提到的模型中,DIN和DIEN都很好的使用了这种行为序列。匹配特征一般是与点击特征结合在一起的,比如用户对于某个商品的点击,对于某个类别的点击,某类用户对于商品的点击等等。可以总结为下图:
8. 评估方式
针对于召回的评估方式,绝大部分都是通过命中率、准确率、覆盖率、F1-score等方式评估,参考下图:
但是因为推荐系统是串联的,我们往往需要考虑到前置模块对后置模块的影响,比如召回对于排序的影响,下图是LinkedIn的方式。
03
做一个推荐功能之前,我们需要对这个产品功能的作用进行一定的决策,如:
推荐功能对该产品有无价值 ( 可以 )
价值多大 ( 值得 )
成本和收益 ( 现在 )
优先级 ( 怎样 )
同时还要对推荐功能的工程上的要求进行决策,如推荐系统的实时性做到毫秒级是否有必要。是否是毫秒级,应该以用户的使用习惯来决定,如80%的用户其实都是秒级需求,没有必要做到毫秒级的响应。
2. 场景串联与用户旅程
不同的场景需要兼顾业务定位,进行场景间差异化。场景单独优化时往往召回、排序策略会趋同,带来局部增益与全局增益最优的冲突,解法往往是产品业务层的干预与算法场景通信两种手段。
3. 方向&外围
从系统和生态全局来看,建设推荐系统既要考虑短期的gmv等指标,更要考虑长期的发展 ( 回访、复购、netGMV ) 。因此需要从更多的层面考虑推荐系统的建设,如:
① 供应商、seller等级建设,流量分配,运营机制。对于高登记的seller需要有更好的流量,但是对于等级较低的seller,也应该分配流量,帮助其提高等级。
② 商品理解&建设: 良好的后备力量。每个商品都有生命周期,虽然可能旧款的商品质量很高,但是我们在推荐的时候也要对新品进行流量分配,进行新品测试、流量扶持。
③ 智能投放: 低延时、高效率展现。在考虑商品的流量分配时,还需要对用户的意图、兴趣、负反馈、视觉窄化进行考虑,不能不顾用户的体验。
④ 生态多目标,包括用户体验,如回访、活跃度、复购率、分群倾斜等,也包括商家层级、价值、收益、良性竞争等目标,同时还需兼顾平台收益。在增长过程中,一定需要兼顾上述若干指标,若置之不理,则最终用户、商家都会流失,最终让产品僵化。
4. 生态多目标
从推荐系统的构建之初,我们就需要从以下角度去关注系统,设定合理的目标和观测指标。不能什么都是先污染后治理,两眼一抹黑。在增长过程中,一定需要兼顾上述若干指标,若置之不理,则最终用户、商家都会流失,最终使产品僵化。从用户体验角度,我们需要关注回访、活跃度、复购率、分群倾斜等;从商家角度,需要考虑商家层级、价值、收益、良性竞争;最后我们还需要关注平台收益。
04
下面我们在逐个结合业务展开一些相关探讨,这些探讨想要让大家了解到推荐系统构建过程中,对业务拆解的重要性。
1. 分群
根据用户的活跃度及行为密度进行分群,并对分群后的用户投放对应的热销进行兜底补足,或者作为主召回源。其中用户行为较多(交互过的物料个数和品类/主题较多)时,作为兜底召回做补足;而部分用户行为过少(新用户或刚进入APP行为数较少的),可以作为主召回策略,这时候可以做更精细化地数据集。
比如针对国家/地区、性别、设备这些新用户也可收集的静态标签分别做热销数据;比如印度、男性、IOS 的用户A和印度、女性、Android用户B,使用的热销列表是不一样的。其实其它分群策略也非常有用,比如购买力分群、兴趣分群;群体对类目的强偏好和弱偏好均可以在推荐中使用。强偏好基本就是喜欢看、喜欢买什么品类就具有这类偏好;弱偏好就是某类人群从来不会交互或者交互过低的类目,利用统计概率进行显著性检验,可以挑出群体显著不关心的品类,在推荐过程中少推荐或不推荐。
2. 电商同店铺用户行为
做一下分析,看一下进入店铺页的用户后续的行为,可以酌情加重同店铺商品trigger的权重(实时获取),往往很多店铺有包邮门槛,这时候同店铺召回是满足包邮诉求。
同店x2i(i2i、c2i、b2i等)可以做一个很好的实时上下文强化,这里trigger数量和召回数量都需要进行控制。
考虑在rank的时候对每个召回源和召回分数进行埋点,在训练模型是考虑进行,这样就可以进行很好的多召回源融合,当然这个不是同店的情形也可以用。
3. 购物车推荐策略
在购物车场景,通过数据分析你会发现用户加购商品基本有2种用户,一种是对比,另一种是马上要买了再凑个单。这时候引入意图建模,通过实时的数据收集,对于用户加入购物车的商品进行意图预测,然后在i2i召回策略中使用不同的召回控制,比如召回相似和相关搭配。
这里推荐的策略可以考虑用加权融合的方式,对于相似和相关搭配召回源,根据预测的意图强弱进行比例调整;如果有埋点支持,还可以结合实时埋点,在排序层考虑上述融合。
05
需要明确的是,业务效果好的并不一定是复杂算法, 建立推荐系统需要遵循“假设->分析->策略->效果”的流程。在出现的badcase中,需要回顾案发现场,在产品增加埋点,跟着数据走(实时) 。迭代模型需要跟着业务走,在badcase中发现新的思路。系统化地思考全局收益、场景串联、局部与全局最优的情况。最重要的是合理的指标,从健康生态系统的定义出发。以上就是此次分享的主要内容,谢谢大家阅读。
今天的分享就到这里,谢谢大家。