现在在许多产品中,我们都可以见到推荐机制的应用,比如抖音、淘宝等产品中的推荐页面。那么作为一名运营,你了解推荐系统、或者个性化推荐吗?你又是否能理解“推荐”和“流量”之间的关系?本文作者就对推荐一事做了详细总结,一起来看。
推荐对于非技术同学而言更像是一个黑盒,越来越多产品都引入了推荐,而推荐又和流量紧紧挂钩。此文献给所有的运营同学。
这篇文章写于年前,希望可以系统又简单地给业务、运营同学讲清楚推荐的运转逻辑、推荐可以做什么、以及如何掌握推荐的流量密码。
本文比较长,大约 字,我把目录放在前面,大家可以先看是否有感兴趣的部分,再决定是否往下看,节约时间。
我对推荐好奇,可以通过这个文档了解什么?
? 简单理解推荐
什么是个性化推荐——直观感受、产品参考,对推荐有个初步概念。
推荐系统解决什么问题——知道推荐这件事的价值是什么。
推荐怎么知道我对什么感兴趣——推荐的原理,对推荐有更深入的了解。
推得不准我怎样让它推准点——推荐的原理,对推荐有更深入的了解。
推荐有目标吗——我们对于推荐的预期是什么。
什么是推荐能做的——推荐擅长解决哪些问题。
什么是推荐做不来的——哪些问题不能依赖推荐解决。
? 深入理解推荐
推荐是如何运作的?
推荐在咱们业务是如何运作的?
为什么要有召回、粗排、精排?
推荐模型是如何优化的?
推荐模型多久开一次实验?
为什么上了新策略没有效果?
为什么要做实验?不能直接全量?
没有收益的策略,一定不能上线吗?
? 我是一个运营,我希望能掌握一些流量密码
没有流量,是什么原因?
为什么点击率很高,曝光不高?
这个内容很差,为什么曝光这么高?
推荐怎么给新用户做推荐?
怎么多一些曝光机会?
? and,最后,你可能会关心的问题是怎么给推荐提需求?
你打开今日头条、抖音时最先看到一个页面,一般这个页面也会命名为「推荐」。当然,我们不能因为它叫推荐我们就把它视为推荐。还有像淘宝这种,它叫做「猜你喜欢」。你会发现,你越看什么,就越容易刷到什么,这就是个性化推荐在起作用。
个性化推荐系统解决的是用户和商品/内容中间的关联关系,它是二者之间的桥梁。可能你会好奇,我有需求会用搜索,不会用推荐啊。你用过搜索,应该能感受到推荐和搜索的区别:搜索是人去找商品、推荐则是商品找人。推荐系统会根据你的兴趣偏好,把你可能会感兴趣的商品或内容推到你面前、提升。
哪里有海量信息,哪里就有推荐系统,我们每天最常用的APP都涉及到推荐功能:
资讯类:今日头条、腾讯新闻等
电商类:淘宝、京东、拼多多、亚马逊等
娱乐类:抖音、快手、爱奇艺等
活服务类:美团、大众点评、携程等
社交类:微信、陌陌、脉脉等
于用户而言,推荐既要解决互联网信息过载、用户筛选信息乏力的问题,又要关注用户没有目标但想“随便看看”的场景。
于平台而言,推荐还需要减少马太效应和长尾效应的影响,使商品/内容的利用率更高,盈利增长。简单来说,推荐是为了不占用用户太多时间的基础上把商品卖给他/让他消费内容。
推荐系统世纪年代就被提出来了,但真正进入大众视野以及在各大互联网公司中流行起来,还是最近几年的事情。
随着移动互联网的发展,越来越多的信息开始在互联网上传播,产生了严重的信息过载。因此,如何从众多信息中找到用户感兴趣的信息,这个便是推荐系统的价值。精准推荐解决了用户痛点,提升了用户体验,最终便能留住用户。
推荐系统本质上就是一个信息过滤系统,通常分为:召回、排序、重排序这个环节,每个环节逐层过滤,最终从海量的物料库中筛选出几十个用户可能感兴趣的物品推荐给用户。
推荐系统会收集你的历史行为数据,可能会有这些:
你买过的商品,推荐系统会获取到价格、类目、风格/类型、机构/商家,并推荐相关的商品给你。
你浏览的商品,你点击了、或没有点击,推荐会把点击过的都标记为你感兴趣,滑过去的暂时不感兴趣。
你搜索的关键词,推荐系统会认为与这个关键词相关的商品你都可能会感兴趣。
还有一些其他的行为,比如收藏、分享、评价……
感觉推得不准可能有两方面原因:一是推荐模型还不完善,二是你喂给推荐的数据不够多。如果你想让推荐推得更准,可以尝试进行以下两个操作:
主动表达兴趣:点击、收藏你喜欢的商品/内容;搜索你你感兴趣的关键词;设置你的兴趣偏好。
主动反馈问题:通过 dislike 告诉推荐你不喜欢的商品/内容、类型,推荐就会少推这些。
注意,dislike 只能尽量过滤掉你不喜欢的内容,无法帮你找到喜欢的内容,所以如果想训练你的推荐模型,尽量进行操作一 [主动表达兴趣] 。
我们平台推荐的目标是提升付费率,希望推得更准,用户愿意点、愿意买。付费率是核心目标,拆解下来也会看点击率、人均点击数、人均浏览数等等,这些中间指标也能衡量推荐推的准不准。
为什么要拆中间指标?点击率 = 你推给用户他是否愿意点,更能代表推的是否准;人均点击数 = 点得越多,越能证明推荐猜你喜好猜得准。用户进入商品详情页后面的事情推荐管不到,所以用付费率不能完全代表推的是否准。
用更多的 [特征] 来训练模型,让模型猜得更准。特征值得是这个用户的信息标签,比如你的浏览信息、搜索信息、购买信息、分享信息、评价信息……这些都是特征,是区别给你推什么、给我推什么的关键信息。
除此之外,还可以通过一些 [策略] 来满足业务其他诉求,如通过 boost 规则给指定商品/内容曝光(关于如何使用 boost 规则见本文第条)。
如果你在逛推荐时遇到一些问题,需要注意以下几类问题不能依赖推荐解决:
)画风不好
画风是一个主观感知,用户 A 觉得这个画风不好(标题、文案、封面、音乐等使人不适),可能用户 B 会觉得不错,即便用户 A 反馈了画风不好的问题,也不意味着用户 B 就不喜欢。
推荐不解决主观感受,只解决“这个商品/内容本身你是否会感兴趣,而不是这个画风你是否会喜欢”。画风问题依赖审核和推荐审核,同时我们也会通过 dislike 收集关于封面体验不好的问题,并交给供给侧去优化。
)标题不好
不要试图希望推荐推一些标题更好的商品/内容,因为它不知道什么是好标题。如果一个商品/内容的标题很差、但点击、付费率很高,它在推荐里就会很容易被推出。审核和推荐审核是非常重要的。
)质量不好
解决不了有一些盗版内容、分销课程(在多个机构上传)、换多个标题都是同一门课/内容的问题。从推荐来看,如果本身点击率很高,推荐通过用户历史行为、预估这些课程都是用户可能会感兴趣的,都会展现,但对于用户而言同一个商品/内容看到好多遍,体验必然不好。这个还是需要审核去解决。
用户打开App,刷新首页(下拉刷新 or 重启app刷新),客户端会请求服务端(数据),服务端会请求推荐(模型),这个时候推荐会返回几条数据给服务端,服务端传给客户端,最终在用户的手机上展示。
那么,推荐是如何选择内容的呢?为什么用户最后看到的是这些?选择-呈现过程是这样的:
召回:运营从所有商品/内容里挑选出 {用户可能感兴趣} 且{质量符合平台标准}的商品/内容放至{推荐池}。
粗排:用一个简单的模型预测用户有可能感兴趣的内容、模拟每个商品/内容的得分,从高到低排序。
精排:在粗排的结果上,预估用户的点击率、付费率等,得出预估分,从高到低排序。
规则:考虑到用户体验 or 运营诉求,在精排的基础上会应用一些规则,如打散、强插、boost 等。
收集反馈:把课程推给用户后,基于用户的点击、购买、dislike 行为,会收集起来用于优化模型。
这个部分是我原来业务的推荐运转流程,保留这个部分是为了还原一个推荐应用场景,帮助大家理解后面的东西。
)召回
运营同学建立《推荐课程审核标准》,从所有课程中按照推荐标准,将符合标准的课程审核召回至推荐池。即:在售课程池(全量)➝推荐课程池(部分),能被推荐的只有推荐课程池的课程。
)粗排
推荐取了所有召回课程的历史点击率、转化率、销量数据,尽可能的模拟精排模型的打分,在所有召回的课程中选出得分靠前的几百个视频送给精排。粗排是大数据结果,也就是根据所有用户产生的数据做了一个预估,最终呈现给其他用户的也是大数据的结果。
比如ABCD都买A课,那么XYZ来了我优先推A课、他的付费概率更高。粗排召回更适用于新用户,因为新用户没有任何行为,推荐模型没办法预估他可能喜欢什么类型的课程,这个时候就用大数据的预估(大家都买什么、点什么)来推给用户。一句话解释:你可以理解为粗排相当于一个热销榜。
)精排
对于已经有消费行为的用户(付费、点击、收藏等),我们会把他的这些行为特征收集起来,去预估他可能还会对什么课程感兴趣。精排是在粗排的基础上做的,粗排的作用是把得分靠前的课程递给精排。一句话解释:如果你有行为,最终推给你的课就跟推给我的不一样。
)规则
在精排的基础上应用几个规则,比如
分钟 send 消重: 分钟内服务端下发过的数据不会下发第二次;
天 show 消重:客户端展示过的课程天内不会再展示;
打散策略:每一次请求数据,~个课程,同三级类目最多出 个。
把这些规则应用完之后,会把排在前面的课程展现给用户。
打散策略是为了避免相同类型的课程扎堆,容易引发用户不好的体验:刷来刷去都是讲学习音标的,平台的内容会不会太少了些。
而 send 消重和 show 消重的区别是:
send 消重是服务端下发了,只是用户还没刷到(服务端一次下发 - 条数据,用户每屏只能看到-个课程)。下发了、用户没看到,分钟后依然可以推。
show 消重是用户在手机屏幕上看到了这个课,滑过去了没有点击,那么代表用户不感兴趣,一段时间内不再推。
)收集反馈
你点击了短视频剪辑课程,推荐认为你对短视频课程更感兴趣,则后面短视频剪辑的课程得分就更高,更容易优先展示给你。也就是你越用,推荐模型就可能预估得越精准,推给你的内容你越感兴趣。
性能因素。直接用一个复杂的模型从大量数据中找几十条内容速度会非常慢。所以先召回几千条,再用粗排找到几百条,再从几百条里找到几十个推给用户。
推荐模型的优化由两部分驱动:模型本身训练、调优需求,业务侧新需求。
模型训练调优主要是指性能优化、新增用户特征让模型猜的更准,如模型结构的改进、增加更多用户/商品特征、扩大候选集(召回)、提高数据反馈时效(模型更及时的得到数据反馈);业务侧也会有控制价格出现比例、给精选课程增加 boost 等优化体验需求和运营需求。
但,无论是模型调优需求还是业务需求,每一次修改(称作一个策略)都需要遵循下述流程:
明确目标:这个动作的目标是什么?想要得到什么结果?
制定策略:根据目标,提出解决方案,一般会有多个策略可以达成目标,需要业务&推荐一起评估实验成本、效果,最终排出优先级进行开发。
设计实验:明确实验开启方式、观测的核心指标和预期收益。
检查实验结果:如果符合预期,判断是否全量上线;如果不符合预期,需要判断放大流量继续观察或分析实验,根据分析结果判断是放弃该策略、还是优化该策略。
上线/关闭:如果符合预期,上线。继续下一个策略。
推荐实验是非常高频的。并不是一个实验/策略有了结果才可以开启新实验,可以多个实验并行、同时验证多个策略,最终选择效果更好的策略全量上线。比如我们两个月就开了 多组实验。
推荐是一个长周期的事情,不是一朝一夕就训练好的。推荐相信的是长期有收益,且模型的养成是需要数据喂养的,喂得越多就推得越准。
所以一个新的推荐策略上线,肯定不会马上有效果。就像我们要增肥,不是今天吃一顿明天就能胖了,身体需要吸收、持续吸收。
经验上,预期的效果和实际的效果可能会有非常大的差异。不做AB实验直接上线,可能会带来严重的影响。不是每一个策略都是正向的,推荐模型只是预估用户更可能喜欢什么,这不意味着用户真的喜欢。所以新的策略上线后,有一定概率是负向的,也就是用户觉得推得更不准了。
一般,实验需要观测 - 周来看数据是否稳定。如果有正向收益or损失不大,但相信长期有收益,即可上线。
AB 实验没有显著正向或略负向也可以上线。必须满足以下大前提:
判断需要长期迭代,必须在此基础上叠加其他策略,可以接受短期无收益。
推荐需要逐步积累用户数据,此策略才能发挥作用,数据越多,训练周期越短。
没有流量的原因有很多。一般来说会有以下几种可能,不仅仅是推荐的原因:
商品/内容已经上架,但未审入推荐池。
相似、同质的商品/内容比较多,大家数据都很好的情况下,展现的概率就更低。
商品历史销量、点击、转化率都不高,在推荐候选中的排序本身就比较靠后。
dislike 较多反馈了标题、封面差等问题。
为什么有些商品/内容一开始曝光数很高,后面就没有了?
推荐会把商品/内容推荐给可能对它感兴趣的用户。一开始推的多,是因为预估可能感兴趣的用户多,在推了万次之后,大家都不点击,推荐就会认为这部分用户对这个商品/内容不感兴趣、该商品/内容的得分就会越来越低(推荐排序就会靠后),那么越往后就越推不出来了。
点击率高是因为推得比较准,推过去后用户更爱点。曝光数不高的可能性有很多:
喜欢这个商品/内容的用户是有限的。
相似、同质的商品/内容比较多,推荐时不一定能胜出。
dislike 较多反馈了标题、封面差等问题。
判断比较主观,推荐看的不是一个人的主观判断,而是用户的行为选择。
冷启动包括新用户冷启动和商品冷启动。新用户冷启动是当一个用户没有任何行为数据和辅助信息的情况下,如何给他做好推荐?商品的冷启动即长尾问题——如何将新的物品快速推荐给可能对它感兴趣的用户?
一个新内容,推荐无法判断谁可能会喜欢它。推荐会根据跟它相似的课程可能会被用户喜欢来做尝试。如果想要推得更准,就需要给内容增加更多特征、让推荐可以猜测得更准一些。
一个新用户,推荐无法判断他可能会喜欢什么。会尝试把“大家认为的好内容”推给用户,如果想要推的更准就需要借助用户主动选择兴趣、加快用户动作反馈等方法来提高推荐对新用户的作用效率。
新用户是没有历史行为数据的,那个性化推荐模型就无法对其产生作用,我们如何做推荐呢?
一种方法是新用户主动选择兴趣偏好,让用户自己去选自己对什么感兴趣;另一种是先按照统计模型(Thompson 汤普森采样 – 可以理解为按照一个标准)去推。也就是如果从第一天开始,所有新用户看到的都是一样的,但同时我加快动作的反馈,也就是当用户一旦有了点击、收藏、付费等行为,那么下一次请求数据的时候,推荐就可以起作用了。
这个问题需要先理解另外两个问题:为什么推荐不多给老师一些曝光机会?如何理解boost?
为什么不多给老师一些曝光机会?
推荐的目标是让用户满意(买课的人),一般不会考虑老师的满意度。当然,从平台生态的角度来考虑,只有让老师满意,老师才会传更多的课到平台,平台才有更多的课提供给用户(推荐去推)。
所以,在让用户满意的基础上(推得更准),也会加一些规则去保证老师的利益。比如课程冷启动规则(给一些新课固定的曝光资源)、运营精选boost(给一些优质课加权重)、已购老师boost(购买过的老师的课程加权重)。当然,后续可能也会有一些其他新策略,既让推荐推的更准,也能给到老师一些资源保证。
如何理解 boost ?
从推荐视角来看,是反对 boost 的,因为任何 boost 都是人的主观意愿:我认为用户对这个更感兴趣、我希望用户能看到这个内容。实际上,boost 并不能让推荐推得更准,过多的 boost 干扰还可能影响推荐的策略。
那为什么我们还会加一些 boost 的策略呢?
适当、合理的 boost 可能会提高推荐准确度,注意,只是可能。比如我们从数据发现,一半的用户都第二次下单都是买的原来老师的课程,那我们就加了相同老师(已购老师)的 boost ,让这个用户购买过的老师的课更容易展现给你。
对于老师而言,适当的 boost 是为了平台的老师生态,包括新课 boost 和精选 boost 。
如果运营侧有给老师曝光的诉求、想用流量作为运营老师的激励点,或者为了让一些尾部但优质的课程有售出机会,需要在推荐模型的基础上加干预规则,那么可以把你的诉求提给产品,产品和推荐同学会在不伤害用户体验、推荐仍然有作用空间、且能实现运营目标的基础上共同制定策略。
可以以这样的姿势给推荐同学提需求:需求目的是什么?想要解决什么问题?预期效果是什么?对用户会有什么影响?你要相信,推荐同学了解的推荐策略会比你多很多,把你的问题交给他,他们会选出更能帮你实现目标的策略。
❌ 错误的方式:我想在推荐强插某老师课程。
✅ 正确的方式:我们想要给优质课程更多的曝光机会,一方面是这些课程质量很好应该不会对用户体验造成损伤,另一方面也可以作为老师运营的抓手,能激励老师产生更多优质课程。
❌ 错误的方式:我想在模型里加个特征。
✅ 正确的方式:我发现最近给我推的课程价格都偏高,调研了几个用户也是如此。如果我们持续推高于用户消费水平的课程,付费率可能会越来越低。我们看下是通过推荐价格占比、还是引入用户历史/最近一次消费金额,来减少大量推高单价的情况。
❌ 错误的方式:能不能给新课加 boost。
✅ 正确的方式:老师拉新团队最近拉了很多新老师入驻,但是这些老师的课程都没有曝光量,这影响了老师传课的积极性,长期来看我们会做大量的老师拉新工作、如果新老师的新课没有流量会影响整个平台的老师生态。有没有什么方法,可以给这些老师/课程一些曝光的机会?
这篇文章不能说把推荐讲得非常透彻、但也尽力从业务视角把一个技术逻辑讲得更易懂。
我们是个平台产品,既有C端用户也有B端用户。负责B端拓展的同学就希望流量有倾斜,运营同学对各项指标负责又希望基于他的目标做策略调整,产品考虑用户体验也会有体验向的需求,不同角色的需求经常会相悖。而推荐本身也有自己的运转逻辑,一定会有不能满足、或者满足的不好的地方。
想要取得好的沟通效果、达成目标,就要先了解对方的逻辑(推荐),以及如何利用资源(推荐机制),这篇文章原本是写给我合作的运营同学,借此也献给所有会关注推荐和流量的运营伙伴。