文章作者:姚凯飞 Club Factory
编辑整理:Hoh Xil
内容来源:作者授权发布
出品社区:DataFun
注:欢迎转载,转载请注明出处
▌前推荐时代
准确地说这个时代,不能称之为推荐系统的时代,这一个时代未能给每个用户构建属于他的推荐结果,没有很好地解决个性化长尾问题,所以这个可以叫前推荐时代。
这一阶段推荐系统特点:
- 推荐功能简单,全局推荐,没有个性化。
- 召回 & 排序逻辑都集中在离线,推荐服务逻辑较轻,只负责一些数据去重和数据渲染等功能。
- 推荐召回 & 排序策略主要由人工或人工制定策略来定,当然也开始有机器学习介入其中。
▌1. 人工选品排序及运营
1.1 人工排序
早期的推荐产品,主要靠平台运营人员依靠业务知识进行手工配置,策略投放也是基于场景相关性的固定位置展示;这一阶段主要出现在产品或场景构建初期,这时候条目量较小,主要是运营进行条目的筛选与选取。根据这些商品的点击、转化、订单数据进行排序,这时候往往此场景只有一份条目排序,用户访问此场景时,将会“千人一面”地展示这些商品;当然也会从业务角度选取重要且区分性较大的维度,穷举并构建若干列表;举个例子,比如不同地区,不同性别需求会有差异,比如印度人和中国人,男性和女性对于商品、资讯等条目的需求都会有很大的差异。
人工排序,由运营手动调整商品的排序,当 SKU 少的时候,小百个的情况下,人工运营不算繁重,但是一旦商品量起来,有几万商品时候,工作量可想而知。
1.2 实时热点
当然人工推荐和干预也不是一定存在弊端,在未来的很长时间都会继续存在,因为某些突发性的事件和时事热点在没有好的舆情监控体系下 ( 如果有,可以借助此来做推荐 ),还是需要人工干预,因为热点带来的推荐效果也是很高的;比如世界杯、奥运会、时政要点等黑天鹅事件,需要人工加入推荐列表。
▌2. 自然排名
2.1 热快全
自然排名最主要依赖三点:热、快、全,先做热、后做快、再做全。其中热指的是通过某几个维度选取并排序,快主要是考虑时间因子,全指的是个性化,这里主要着重介绍热。
那如何做热门推荐呢?就热门推荐简单的方式,可生成多维度的热门数据,热门数据有各种排行榜,比如点击的排行榜,购买排行榜等。当客户需要热门推荐的场景时可把热门推荐生成的结果直接返回给客户。另一方面,热门推荐也可以捕捉一些场景,比如处理冷启动。热门推荐的结果通常有一定理论依据,比如按购买、销量排序其实也是很多人容易接受的方式,在这部分也可以夹杂人工编辑的分析。
2.2 举个例子
比如 B2C 电商,先根据用户点击率、页面停留时间、购买次数综合考虑排序,要让大部分用户喜欢的产品排在前,但是"一千个读者心中有一千个哈姆雷特",不可能有一个让每个人满意的排序。大部分品类默认最佳的排序,应该是一个考虑了销量、库存深宽度、新品、价格区间等若干个因素的权重,最后进行综合算法的排序。当然也有电商会将多种常见商品排序枚举给用户,把选择权交给用户,比如销量、新品、价格、人工等。
- 按销量:对某个时间窗口内(近一个月、近一周等)卖得好的商品,这里会让新品几乎没有任何机会得到展示,马太效应较强。
- 按新品:按商品上新的时间排序(按上架时间)。
- 按价格:用户的购买力差异大,所以每个人对价格有不同的诉求,按价格排序。
- 其他维度(评论,收藏等):其它相关产品诉求。
2.3 时间
前期产品冷启动,没有足够的数据积累,热门排序以时间 人工运营结合排序,即新上架的排在前,随着中期数据积累及产品健全,再考虑其它因子影响排序。
2.4 综合指数
人气排序(按综合指数)则多维度考虑影响因子,前期按时间顺序积累一定数据后,中期用户喜欢的产品 ( 即转化率高的产品排在前面,转化率高相当于详情页内评论、商品属性等信息对用户有吸引力 ),后期在物料 ( 如商品 ) 数量积累到一定程度,在兼顾用户体验的基础上,可以考虑毛利率,用户在信任该平台的时候,就可以推出转化率+毛利率高的产品,默认排序是转化好及毛利率高的商品排在前面。
继续以电商为例,下面介绍相关的排序因子,未来也会在个性化推荐中发挥重要的作用。影响商品综合排序的因素有:单位时间的转化率、点击率、成交量、好评率、收藏量、退货率、上下架、单位时间的销量排名、复购率、页面停留时间、浏览量、SKU 的齐全率、收藏排名、活动类型(满减/满返/折扣)、库存等,根据结合自己的平台列出影响商品排序的因素,前期可以酌情选择部分;也会给所有因子的影响权重比例给他一个系数,并将上述若干因子按照权重比例系数进行融合。
比如单位时间的转化率为 a,复购率为 b,好评率为 c,点击率为 d,SKU 的齐全率为 e、加购率为 f,排序公式可能为 a(1-b)(0.5c 0.1d 0.03e 0.2f),这里只是举例,可能会有指数的权重影响排序,关键是每个排序因子的影响力,不同的影响力体现在排序公式中就是权重及计算方式 ( 乘法、指数使重要的因子权重变高 ),针对人群去制定不同的排序规则,可以针对不同群里的排序不一样。将所有排序因子分成两类:升权项和降权项,升降权除了要考虑质量优劣的维度,也要考虑马太效应。
其中会对权重的大小如何更合适,一般在线上或测试环境(真实数据)中跑一跑,并且有运营团队 采购团队参与评测、赋予权值,并不断调整,如果条件允许 ( 有埋点及数据收集 ) 也会看看真实的用户反馈数据,看看排序结果是否符合,不符合的话通过调整系数,也就是权重来进行优化。
▌3. 机器学习预估条目转化排序
这一阶段主要是通过打点数据,收集每个条目的曝光、点击、加购、购买等,设定点击率、转化率等目标,通过构建特征,训练模型,产出一份条目排序列表,并且训练过程也通常通过单机完成。特征往往也包括了我们上面介绍的若干排序因子,比如商品近7天的曝光数、点击数、平均点击率、转化率、退货率等。
诞生之初的推荐系统虽然非常简陋,但是在设计之初,就预留好人工调整商品特征权重的功能,产品同学可以快速的调整推荐排序策略来达到“人工智能”的效果,前期也能较好的满足业务需求。
▌石器时代-马太效应及相关策略
前推荐时代,人工运营、热门排序、机器学习排序都能够在产品初期为产品积累数据,为后期个性化打下基础;产品前期没有积累用户数据的时候,采取这种基于热度和内容的推荐算法也是常见的手段,但是这一类做法还是没有很好地解决一些一直以来的问题,比如马太效应,如果是资讯类的产品,马太效应也就是一定程度上的舆论引导。本文将结合马太效应及初期的一些方法缓解此类问题。
前期不可避免,后期加入个性化算法。
▌1. 马太效应
1.1 有者愈有,强者愈强
热门商品越热门,新商品很难发现。采取这种算法,很容易会引起马太效应,比如说某个商品在初期获取了流量后,或者商家有刷单的情况,排序依据此类数据,就会长期对用户产生误导。B2C 电商平台的综合排序,就会尤为重要,即综合排序能够一定程度上减小马太效应的影响。
1.2 随机因子
补偿不利位置商品 - 随机
- 通过引入随机因子,在热门排序中考虑一定的比例插入全新的商品或者排序靠后的新商品,比如每10个商品中有1-2个位置可以插入。
- 直接降权,也属于补偿机制的一种。对排名位置靠前的商品定期降权,如对前两页的图文信息每隔几个小时降权至原来的30%,位置靠后的商品有机会晋升。其中需要考虑时间效应,引入半衰期的概念。
上述方法简单、易实现,可以一定程度上快速让不利位置的商品可以获取到一定数量的曝光,这样可以让这部分商品积累数据,如果是潜力商品就有机会开始上浮。当然可以晋升的商品都是需要经过审核,晋升商品的质量需要有一定保障。
1.3 继承下的清零尝试
利用文本及文本标签算法,找到相似的老商品作为参考。此类方法是通过文本算法方式,建立条目之间的相似性,新商品的得分预测(补偿),解决商品更新的问题。如发布一天内的商品,缺乏足够的原始数据计算得分,通过机器学习来预测得分;通过计算新商品信息与老商品信息的相似度,预测新商品信息可能的得分值。预测结果具有时效性,因为是预测,得分有时效性,预测得分生效一天后需按照实际得分排序。
比如a商品最相似的 k 个商品中,选取聚类中得分最高(平均)的商品得分(转化率、点击率、销量等),按照它的得分以及新商品与它的距离(文本相似度)对新商品排序,最终插入原有排序列表,指定为某 rank 位置的得分。
注:分页内随机排序,同一页内的商品排序也不受得分的限制也是一类办法。
▌2. 继承与清零
2.1 更短的时间窗口
马太效应中时间是一个非常重要的因子,往往马太效应中越长的时间越容易积累更多的曝光,只要确定一个合适的时间窗口,就可以在窗口内进行合理的控制,加之以上述的若干方法来缓解马太效应。后续文章会介绍 MAB 算法,这类算法用来控制和最大化流量价值。
2.2 赛马
所谓赛马机制,在相同平台的条件下通过给予各类商品公平的曝光机会公平的曝光机会,然后通过若干指标考察商品能力。赛马就是根据商品的实时表现进行资源分配,表现好的商品能够获得更多的资源展示。
赛马的好处是什么?平台可以建立一个良性生态系统,商家之间合理地开展竞争,为用户带来更优质的体验。对于商家来说,赛马相较于原有的提报方式覆盖面更广,可以让更多商家免费参与并获取大促期间的活动流量;二是商家可以发挥自主能动性,通过提升对应的考核指标来为自己争取更多资源位及流量。
赛马机制综合考察产品的蓄客能力和综合的表现力,根据这个来确定在商品的排名,而且这个排名是不断变化的,预热期的赛马机制分为3个阶段。
为保证流量利用效率,体现公平公正,常见的赛马机制是按小时/天赛马,以单品点击、转化、成交金额赛马;当然在活动和某些选品频道,分为主会场和分会场;表现优异的外场打标商家及商品将有机会晋级分会场“新发现”楼层中展示分会场到主会场间会有赛马晋级机制;当然也会有一些专门独立地频道来作为过渡来承接这些商品;前一个时间窗口的表现确定后一时间段的展示排序。
如果想避免马太效应,业界也有一些实践成果,最著名的包括 Reddit,Hacker News 的 Ranking 算法等,主要从时间和负反馈出发,感兴趣的可以自行深入了解。从分发算法解决只是一方面,更关键的问题是解决内容更新的快和内容的全,然后借助后面介绍的个性化推荐算法来将分发效率提升。
▌青铜时代-关联与个性化
商场如战场,中国古代军事巨著《孙子兵法》的谋攻篇中就有论述“知彼知己,百战不殆”的道理,其中蕴藏深刻的“洞察”思维。在零售电商领域内,“知彼”不仅代表要对竞争者的动作了若指掌,更重要的是时刻关注目标客户群体需求的变化,而个性化则是尤为突出的标志,从而在“知彼知己”的基础之上,持续优化 提升“己”,最终获得用户的认可。
石器时代,推荐系统主要依赖于每天获取到的条目表现数据进行推荐,还没有做到千人千面,热门的内容总是得到更多的爆光,冷门的内容从没机会被关注,使内容生产生态两极分化,关联与个性化推荐则帮助平衡平台的生态,避免马太效应。而青铜时代逐步构建个性化推荐系统,帮助用户发现更多优质的长尾内容,一般平台用户访问的只局限在热门的10%左右的内容,很多内容永远沉在数据库中没有人发现,精细化地服务将会带来了更大的收益。从相关、相似的产品推荐过渡到多特征、多维度、用户实时行为、结合用户场景进行的全方位智能推荐。
关联与个性化推荐产生的初衷是为了解决信息过载和物品长尾的问题。关联推荐使用了不同用户行为计算物品的相关性;个性化推荐就是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。关联推荐可以认为有大部分的工作与个性化重叠,这里主要介绍个性化推荐。
推荐系统根据用户的隐含信息或显示信息,对用户进行建模,同时对物品信息进行建模。推荐系统根据不同的推荐算法对用户兴趣和物品特征进行匹配筛选,找到用户可能感兴趣的推荐物品。
通过对海量数据的整合和分析,形成独立的数据矩阵,服务于个性化场景。平台可以发展多种大数据产品,如:对购物者的个性化需求分析, 将顾客需求与供应商资源进行快速匹配 。新一代消费者自我意识更强,而消费态度和行为也更加个性化。如通过多种手段追踪消费者习惯和变化,在消费者决定购买之前对其行为进行判断和预测,将消费者的需求通过零售商传递给供应商, 提供个性化的产品和服务以及个性化的营销和促销手段, 营销作为信息而不是广告。
消费者从“人以群分”到“千人千面”,前一阶段我们没有考虑个性化,这一阶段我们会去考虑如何数字化地定义用户喜欢(感兴趣),并且如何从数百万商品中选取出用户可能感兴趣的商品。
▌1. 个性化落地
1.1 假设
用户的历史行为可以代表用户的兴趣,群体的偏好可以一定程度上作为用户的初始兴趣;好商品和相关的商品总是会被用户经常点击和购买。
1.2 流程
1. i2i数据生成:通过收集平台上某个时间窗口内(近 N 天)的用户行为数据(包括点击、加购、收藏、购买),并且给不同的行为赋予不同的权重(购买>加购>收藏>点击,越大的值代表了此种行为更能代表用户喜欢这个商品),然后使用协同过滤、图、内容算法计算商品与商品的相似性(类似啤酒与尿布的故事)。
2. 候选商品召回:通过用户的近期的行为(点击、加购、收藏、购买),捞取这些行为操作的商品的相似商品(比如用户点击了 A,A 的若干个相似商品会被召回),一般这样的商品会有几十到几千个。
3. 排序:根据捞取的这些商品使用一个点击率预估模型进行预测,得分高的将会在靠前的位置(点击率预估:通过收集用户的曝光未点击,和曝光有点击数据构建正负样本,然后使用二分类模型,预测某个用户对候选商品的点击概率)。
4. 打散:上述模型对候选商品进行打分后,由于用户行为可能比较单一或短时间比较集中,会造成排序商品可能集中于某几个类目,所以引入打散策略(通过算法控制不能同时出现多少个同类目的商品)。
1.3 三个问题
1. 用户没有行为怎么办:此类用户无法通过行为关联商品,推荐系统通过国家、性别等捞取对应的热销、置信高转化商品(比如曝光大于 n,转化率大于 x),并按照点击率、转化率排序。此数据称为默认排序。如何给新用户做个性化推荐?
- 做非个性化推荐,如热门排行榜、人工推荐等。等到用户数据收集到一定的时候,再切换为个性化推荐;
- 利用用户的注册信息做粗粒度的个性化推荐;
- 利用社交网站授权,导入好友关系,给用户推荐好友喜欢的物品(今日头条基于微博兴趣图谱做个性化推荐)。
2. 用户有行为但是近期无购买:此类用户对平台还未产生足够强的购买心智,考虑对这类用户展现全站性价比最高的商品(价格低,转化高)。
3. 有些商品是新品没有转化数据如何进入推荐系统:通过新品预测给新品一个预测值,并在某些场景给予一定的测试曝光,进行数据收集,优胜劣汰,最终有一部分商品会流入其它各个推荐场景。
▌青铜时代-冲突与协调
大数据带来了机器学习的原料,个性化在此基础上进行挖掘,但是也就带来了问题,大数据带来了大计算,想要获取较优的结果,需要构建更加大的数据集,更好的模型去建模,由于用户决策的复杂性,必然导致模型会往复杂方向发展(或者说往更细粒度的多决策模型发展)。
机器学习的核心就是基于过去的事实和数据,用来发现趋势和模式;这里体现的两过程就是从学习过程到决策过程(配图);传统数据分析旨在回答关于过去的事实,机器学习模型提供了对于结果的洞察力,机器学习帮助揭示未来的一个结果的概率而不仅仅是过去发生的事情,回答关于未来事件的可能性的问题。在推荐领域的核心问题就是如何构建一个用户对商品的评价模型。推荐系统通过收集用户和商品数据,利用机器学习算法构建用户模型,最终影响推荐结果。形象地来说,我们通过机器学习构建了模型 f(也可称之为映射),然后我就可以用这个模型预测出人对商品的感兴趣程度,即 f(人,商品)=人对商品的感兴趣程度。
所以你会说那么推荐岂不是很简单,只要利用数据构建特征与训练数据,然后学习到上面所述的打分模型 f,那么一个用户来到平台,把所有商品逐个和用户组合放到模型里面打分,最终按分数从大到小排序就可以了?对,你非常聪明,但是你可能忽略了以下若干问题:
▌1. 成本与资源问题
1.1 时间与资源
互联网时代个性化推荐的典型应用场景中,商品/内容一般是海量的(百万-万亿级别),如果要做到对每个用户商品预测分数那么这将是一件耗时耗力的事情,而在体验至上的互联网时代,留给计算机的时间在百毫秒以内,那么必然需要机器资源来解决海量计算问题,而这就涉及到了成本与效果问题。
如果推荐效果满分是100分,则使用其它不那么完美的技术可以使用20%资源达到80分的效果,但是可能另外的20分可能需要80%的资源甚至更多;所以这时候我们是不是可以在模型打分之前先做一层初筛,简单的做法有很多,比如在总的商品池子里面先删除一些低质量的商品(比如售后评价低,退货率较高的等等);再比如根据用户行为,提取少量不在用户兴趣范围但热销的商品等等。当然这肯定会损失一定的效果,所以我们是不是在初筛这一层好好下功夫做一下,这样既能保证效果,也能节省成本。其实不光有初筛这一步,整个推荐还可以做其它拆解,引入流水线式推荐流程,每个环节专注自己的事情,可以把效率和效果都做好。只要做好各个环节的衔接工作(api),那么整个流程将可以高效运转。
1.2 流水线
让我们来看一下推荐系统常见的模块分解图(架构图),分别为召回,过滤,排序,重排序。
召回模块:主要是根据各种任务类型在全站商品库进行商品筛选,其中任务类型主要为上一讲中介绍的基于用户,商品,内容,模型等等常见方法;过滤模块则更多地考虑用户购买力/性别/年龄/已购商品等问题,利用规则或模型剔除召回模块初筛后的商品。
排序模块:会更细化地利用用户/商品特征/召回各类模型得分等因素,并以点击率/转化率等指标为目标,对用户商品对打分预测,并根据得分进行排序。
重排序/打散:则会更多考虑多样性,当然还有新颖性,惊喜性,实时性,商品覆盖率等指标。而最近推荐系统地发展,则开始探索强化学习(反馈学习),深度学习等技术,开始对原有模块深挖与拓展。后面几章我们会具体展开。
1.3 架构图
为了配合上述模块的构建,系统工程架构上需要考虑日志收集与回流模块,算法离线计算模块,近实时/实时计算模块,推荐服务与容器,api 业务耦合模块等,当然上述模块还可以单独再做拆分,类似现在普遍采用的微服务概念,具体我们也会在后面讲到,并作拆解的分析与介绍。
▌青铜时代-召回模块概述
有了前文的介绍,我们来了解一下召回的做法,其本质就是如何通过算法来计算两两相似性(用户与用户的相似性,商品与商品的相似性等等)。召回目前在推荐系统中是一个重要的模块,在整个流程的一环,数据流漏斗的顶部。召回做的好,后面精排的效果也不会太差,反之召回很差排序再好也无法达到不错的效果。并且相比优化精排算法、建立新的数据模型、或者开发实验新的特征,优化召回操作简单、方便实验,有四两拨千斤的效果。
其实在推荐系统的早期个性化推荐就直接基于召回来做的,根据召回商品相似度高低推荐;包括现在也是有很多非个性化的场景也是直接使用召回推荐,比如电商的商品详情页的相似推荐。
- 非个性化召回:最常见是热度召回,也就是把热门的内容召回,例如前面京东“热销召回”就属于热度召回。也可以做一些运营召回。
- 个性化召回:上下文、兴趣、行为等。
▌1. 召回来源
1.1 上下文相关
时间、空间、状态、推荐场景等,不同的上下文会影响推荐的结果。如新闻推荐中的时事热点,o2o 推荐中的附近餐馆,电商产品详情页的相似推荐、不同季节不同品类商品的推荐等,此类来源主要与用户所处环境有关。
1.2 兴趣相关
兴趣维度主要围绕用户展开,主要是基于用户的关系、消费行为、长期/短期兴趣、人群兴趣来推荐。如在社交产品中根据用户的好友来推荐好友的一度人脉,在电商产品中根据用户的品类偏好推荐相关品类商品,根据长期偏好和短期偏好来推荐相关条目。还有就是基于人群,比如性别、地域等,有区分的进行推荐。兴趣主要以用户画像为代表的信息抽取,包括了关系,消费行为,长期/短期兴趣,人群兴趣;属于某类指标的聚合,一般具有准确的度量。并且兴趣相关召回在长短周期下的特例就是上下文相关与行为相关召回。
1.3 行为相关
行为与兴趣具有一定的重合度,这里主要指的是基于协同过滤、矩阵分解等来推荐条目给用户,并且推荐结果与用户之前的行为强相关,比如用户看了某个或者买了某个商品,然后推荐商品相关的一些商品。行为相关其实是上下文相关的长周期下的聚合与筛选,主要借助协同过滤/模型/专家系统等手段进行商品召回,一般依赖数据和模型的离线或近线处理。
1.4 热门/补足
由于可能基于若干推荐来源无法做到一定数量的条目,最后各个推荐产品均会考虑在召回层加入一个补足条目数据,这个补足大部分情况下以热门为主。根据某个或某几个指标来对条目进行排序选出的条目列表。热门和补足则会为了避免商品覆盖率及推荐零结果率所做的一些工作,因为目前更多考虑上面3种召回策略,热门召回还无法较好地融入上面3中算法中。
▌2. 召回四象限
通过前面介绍也看到了,后续流程对召回层的依赖特别强,最终用户看到的商品必然是召回层条目的子集,所以在召回层我们就需要考虑若干评价指标。如流行、多样、新鲜、相关。目前相关与多样在各大公司的推荐系统中会更多地被考虑,流行与新鲜还没有非常好的算法和解决方案handle,不过也有很多paper进行一些描述和尝试。
▌3. 总结
目前业界比较主流的方式是多路召回(业界完善的推荐系统可能有上百路召回,少的也有5-6路召回),每路召回都尽量去满足召回四象限中的若干维度,最终对路融合就可以在召回阶段兼顾四个象限,当然现在也有一些研究人员在尝试用一个模型来融合多路召回,比如通过增加特征的方式。其实召回模块也可以称之为一个粗排模块,在很多公司的初期没有引入精排前,其实也是一个简单的推荐系统内核;后期发展过程中,可能会再加一层 CTR(CVR、时长等)预估复杂模型,相当于精排序。其实对于整个系统而言,由于流程属于链式串行结构,所以这个模块也非常重要,下一节我们将逐个介绍若干常用召回模型和策略的细节。
-- to be continued