《易经》:“九二:见龙在田,利见大人”。九二是指阳爻在卦中处于第二位,见龙指龙出现在地面上,开始崭露头角,但是仍须努力,应处于安于偏下的位置。
本节是模块二第一节,模块二讲解传统机器学习推荐算法,这部分是作为一名推荐算法工程师的基础,我们将一起学习和掌握传统经典推荐算法和传统推荐算法发展脉络。
个性化推荐系统之所以能迅速占领各大 APP 的首要版块,取代很多人工运营的坑位,核心原因在于它可以在短时间内通过很短的路径让用户找到自己想要的商品,拉近了用户与商品之间的距离,即优化了流量分发效率,而这些都与个性化推荐系统中的推荐算法息息相关。因此,接下来的模块我们将紧紧围绕推荐系统中最核心、最关键的内容——推荐算法进行介绍。
这一讲我们将重点聊聊推荐算法的简单推荐策略,先从推荐系统算法的架构开始讲解,再详细说明此架构下极具代表性的推荐策略。
推荐算法架构
推荐系统的算法架构,通常分为离线架构和在线架构这两种。
1.离线架构
离线架构主要用来构建物品画像和用户画像,因为数据是算法的基础,底层数据的丰富程度决定了推荐能力的天花板。
比如系统通常不了解未登录用户的行踪,通过合适的引导,可以让访问推荐系统的用户未登录占比更低,从而大幅提升推荐系统的掌控力。再比如参考更丰富的用户行为(曝光、点击、点赞、停留时长、下载时长等等)和更多的用户特征(用户年龄、性别、地域、商品店铺、价格、类目等),也能大幅增强推荐系统的掌控力,而且这些参考因素越多越好。
从本质上来讲,算法系统是用来预测未来,但是如果过去什么都没有发生,预测出来的结果也就可想而知了。
关于物品体系及用户体系的构建过程,之前我们已经详细介绍过了,这一讲我们就不提了,你可以前往回顾 02 讲和 03 讲的内容。
2.在线架构
在线架构主要用来从海量物品池中选择合适的推荐的对象匹配给对应用户。在这个架构中,我们主要依靠检索技术(如协同过滤、内容过滤、用户偏好等)建立索引,然后根据索引生成第一步的结果。其中涉及的工程技术主要是用来提升系统整体的响应速度、吞吐效率等,使得整个推荐系统能一次性查得更多、更快。
下面我们以 58 同城本地服务推荐流程和算法架构为例,一起来看看推荐算法的具体架构,如下图所示。
从图中可知,在线架构主要分为召回层、粗排层、精排层、融合和重排层这四大部分。
-
召回层:从物品库中根据多个维度筛选出潜在物品候选集,并将候选集传递给排序环节。在召回供给池中,我们可以看到多个召回集,整个召回环节的输出量往往以万为单位。
-
粗排层:利用规则或者简单模型对召回的物品进行排序,并根据配额进行截断,截取出 Top N 条数据输出给精排层,配额一般分业务场景,例如对 58 同城本地服务推荐分品类进行配额,整个粗排环节的输出量往往以千为单位。
-
精排层:利用大量特征的复杂模型,对物品进行更精准的排序,然后输出给重排层(融合层),整个精排环节的输出量往往以百为单位。
-
融合和重排层:以产品策略为导向进行融合和重排,例如 58 同城本地服务推荐将商品、SKU、帖子、标签等不同展示元素融合在一个列表中,并且经过去除已曝光、去重、打散等策略,并根据点击回退在列表中插入新的信息来提升体验,最后生成用户可见的推荐列表,整个融合和重排环节的输出量往往以几十为单位。
以上我们阐述了数据生成部分的推荐算法架构,接下来我们着重讨论推荐算法在以上各个环节中的应用。
简单推荐策略
在复杂的推荐系统中,推荐算法作为其最核心、最关键的部分,很大程度上决定了推荐系统性能的好坏,且重点体现在数据决策层。
所谓推荐算法就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西。而个性化推荐算法实在是太多了,道德经中说”天下难事必作于易,天下大事必作于细”,所以这一讲我们先从简单推荐策略聊起。
在个性化推荐系统中,简单推荐策略主要分为:基于热门推荐推荐、基于基本信息推荐、基于内容推荐、基于关联规则推荐这几种,下面我们分别来看下。
1.基于热门推荐
热门推荐,顾名思义就是使用统计的方法将最热门的物品进行推荐,越热门的物品被点击的可能性越大。这个比较容易理解,因此我们就不过多赘述了。
2.基于基本信息推荐
基于基本信息推荐是根据用户的基本信息如:领域、职位、工作年龄、性别和所在地等给用户推荐感兴趣或者相关的内容,比如年龄-关联电影表、收入-关联商品类型表,性别-文章关联表等等。
因为基于热门推荐与基于基本信息推荐使用比较简单,所以这两个推荐策略应用比较广泛。
3.基于内容推荐
基于内容推荐是指(Content Based Recommandation)利用用户和物品的相关信息,例如前述用户和物品画像信息及用户对物品的行为构建的模型,例如浏览、点击、打电话、收藏、评论、下单等。内容推荐算法根据用户行为推断用户偏好,并为用户推荐相同偏好的物品。
基于内容推荐的计算过程一般分为四个步骤:
-
找到用户历史感兴趣的物品集合;
-
找到物品集合的具化属性;
-
抽象具化属性的共性属性;
-
由这些共性属性查找其他物品,并实施推荐。
下面我们以 58 本地服务推荐中的保姆 SKU 服务推荐详细描述这一过程。
假设用户访问过 3 个帖子的保姆 SKU 分别是保姆 A、保姆 B、保姆 C,我们可以直接从用户历史日志中得到访问集合(如地点、月薪、从业经验、学历等信息)。
再通过访问集合,我们可以得到保姆的相关具化信息,如下表所示:
由职位具化内容抽象出职位共性信息:例如,在上述表格中,我们可以抽象出保姆 A、保姆 B、保姆 C 共性职位信息为:保姆 SKU、地点为北京、月薪>5000。
通过共性信息检索其他职位并实现推荐:比如我们在 SKU 库中以“保姆 SKU 、地点为北京、月薪>5000”为检索条件,并按照一定规则进行排序(例如发布时间等)和截断,以此完成推荐。如果召回结果集过小,我们可以通过放宽条件召回,例如放宽检索条件为“保姆 SKU、地点为北京、月薪>2000”。
请注意:基于内容推荐的特征是推荐结果只与用户当前的行为有关,与用户的其他行为无关。
4.基于关联规则推荐
基于关联规则推荐(Association Rules)是通过数据挖掘的方法找到物品之间的相关关系,再进行标签推荐,比如大家所熟知的“啤酒”和“尿布”,就是某超市工作人员通过对顾客的购物清单进行分析后,才发现了啤酒和尿布之间的共现关系。
而衡量物品之间的关联性时,我们主要看支持度、置信度和提升度这三大指标。下面我们以 58 同城本地服务中的标签筛选为例,一起看下如何使用基于关联规则推荐策略推荐标签。
首先,我们在本地服务“保姆月嫂”品类下搜索“健康证”,这时推荐系统会提供精准的筛选结果,如下图所示。
当用户点击了其中一个标签“保姆”,就会生成新的“健康证”“保姆”的搜索结果,从而进一步对用户需求进行细化。
在APP 本地服务“保姆月嫂”品类下,我们通过分析常用用户搜索词,发现分词后的元素有“保姆”、“月嫂”、“育儿嫂”、“健康证”等,这些分词结果就是我们输入一个搜索词后需要推荐出来的标签的原料。
为了说明方便,我们只取 5 次搜索的搜索词(实际应用中以万为量级)为例,并把搜索词和分词结果单独列出来,如下表所示:
1)计算支持度
支持度表示 AB 共现情况占所有情况的比例,则有表达式 Support(A->B)=P(A&B),它往往用来评估搜索词当中该词出现的概率。
我们先来看一下单独词的支持度,比如“保姆”在 5 次搜索中出现 3 次,则单独“保姆”的支持度是 Support(保姆)=3/5,如下表所示。
下面再来看一下组合词的支持度,例如“保姆”和“月嫂”在 5 次搜索中共现 2 次,则组合词“保姆”->“月嫂”的支持度为 Support(保姆->月嫂)=2/5,如下表所示。
因此,在推荐系统中,我们会优先推荐支持度高的词,因为如果推荐支持度低的词,会使得转化率指标提升效果有限。
2)计算置信度
置信度表示 AB 共现情况占 A 情况的比例,其表达式为 Confidence(A->B)=P(A&B)/P(A)。通俗点说就是在搜索了“保姆”的情况下,有多大概率会继续点击“月嫂”,即“保姆”->“月嫂”的置信度是多少。
比如在下表中,我们可以看到“保姆”总共搜索了 3 次, “月嫂”出现了 2 次,则保姆”->“月嫂”的置信度为 Confidence(保姆->月嫂)=2/3。
需要注意的是,Confidence(A->B) 与 Confidence(B->A) 不一定相等,例如 Confidence(月嫂->健康证)=1,意味着只要搜索“月嫂”就会继续搜索“健康证”,因为“健康证”100% 出现(如下表所示);而 Confidence(健康证->月嫂)=3/5,意味着在搜索“健康证”的情况下只有 3/5 会继续搜索“月嫂”。
3)计算提升度
提升度表示以 A 为前提下 B 出现的情况与 B 情况的比例,表达式为 Lift(A->B)=P(B|A)/P(B) ,它往往用来评估推荐效果。
在计算 Lift(A->B) 时,主要出现以下三种情况:
-
Lift(A->B)>1 时,说明搜索 A 时推荐 B 比直接推荐 B 的效果更好;
-
Lift(A->B)=1 时,说明搜索 A 和搜素 B 属于独立事件,二者没什么关系;
-
Lift(A->B)<1 时,说明搜索 A 和搜索 B 负相关,搜索 A 还不如不去推荐 B。
这里我们也通过一个例子来说明下,比如在搜索“保姆”时推荐了“月嫂”,“保姆”总共搜索了 3 次,而“月嫂”出现了 2 次,则保姆”->“月嫂”的置信度为 Confidence(保姆->月嫂)=2/3;如果直接推荐“月嫂”,5 次搜索中出现了 3 次“月嫂”,则“月嫂”的支持度为 Support(月嫂)=3/5,即用户有 3/5 的概率点击“月嫂”,此时说明,使用关联规则算法后推荐效果变好了。
如果我们在搜索“月嫂”时推荐了“育儿嫂”,比如 含有“保姆”的总共搜索了 3 次,而这 3 次中只有 1 次含有“育儿嫂”,那么置信度 Confidence(保姆->育儿嫂)=1/3;如果直接推荐“育儿嫂”,5 次搜索中有 2 次出现“育儿嫂”,则“育儿嫂”的支持度为 Support(育儿嫂)=2/5,即用户有 2/5 的概率点击“育儿嫂”,此时说明,使用了关联规则推荐算法后,推荐效果反而更差了。
综上所述,我们可知使用 A->B 的关联规则推荐是为了取得更好的提升度,使得搜素 A 时推荐 B 比直接推荐 B 的效果要更好。
小结与预告
学到这里,首先恭喜你已经初步了解了推荐系统架构和简单推荐策略。这一讲讲解的简单推荐策略看起来比较简单,但是非常靠谱、实用,根据二八原则,使用简单推荐策略可以助力我们以 20% 的精力拿到 80% 的分数,并以此为基线向更高的分数冲击。06 讲我们将深入了解推荐算法中经典的算法——协同过滤算法。
道德经中说“图难于其易,为大于其细“,对于简单推荐策略,你是否有不同的见解?欢迎在留言区与我互动哦。
另外,如果你觉得此专栏有价值,欢迎分享给更多好友哦~