python进阶项目设计_推荐系统进阶:设计和构建推荐系统流程综述(1)

内容目录推荐系统应用场景概述

为什么需要推荐?

推荐系统的目标?

推荐系统的工作?

推荐系统的基本模型

构建推荐系统的方法

相关参考?

1、推荐系统概述以及它们如何提供有效形式的定向营销

推荐系统

推荐引擎尝试向人们推荐产品或服务。推荐人在某种程度上尝试通过向人们提供最有可能购买或使用的建议来缩小选择范围。推荐系统从亚马逊到Netflix几乎无处不在。从Facebook到Linkedin。实际上,亚马逊的很大一部分收入仅来自推荐。像Youtube和Netflix这样的公司都依靠其推荐引擎来帮助用户发现新内容。我们日常生活中的一些建议示例包括:亚马孙

亚马逊使用其数百万客户的数据来确定通常一起购买的商品,并据此提出建议。http://Amazon.com中的建议是根据明确提供的评级,购买行为和浏览历史记录提供的。我打算购买“ Show Dog”,但最终也购买了“ The Compound effect”!领英

Linkedin利用您过去的经验,当前的职称和认可中的数据为您推荐可能的工作。

奈飞

当我们为电影评分或在Netflix上设置偏好时,它会使用此数据和来自其他数百个订阅者的类似数据来推荐电影和节目。然后,Netflix使用这些评分和操作来提出建议。脸书

诸如Facebook之类的推荐系统不直接推荐产品,而是推荐连接。

除此之外,Spotify,Youtube,IMDB,Trip Advisor,Google新闻和许多其他平台会不断提出建议和建议,以满足我们的需求。

为什么推荐

如今,在线商店蓬勃发展,我们只需单击鼠标即可获得几乎所有商品。然而,在实体时代,用于存储商品的空间有限,因此所有者仅展示最受欢迎的商品。这意味着,即使像书籍或CD这样的高质量产品,许多产品甚至都没有被展示。简而言之,店主必须对内容物进行预过滤。

但是,在线购物行业改变了这种情况。由于空间有限,因此无需进行预过滤。相反,这引起了被称为长尾效应的现象。

这种效应意味着受欢迎的产品很少,并且可以在在线和离线商店中找到。另一方面,不太受欢迎的产品很多,只能在网上商店中找到,最终构成了长尾巴。但是,即使是不受欢迎的产品也可能很好,并且在网站上找到此类产品是一项艰巨的任务,并且需要某种形式的过滤器。这样的过滤器实际上构成了推荐系统。

预测版本

此版本处理预测用户项组合的评级值。在这种情况下,我们拥有由用户给出的评分组成的训练数据。目的是利用此数据并预测用户未与之交互的项目的等级。排名版本

老实说,没有必要预测用户对特定商品的评价以提出建议。在线零售商或电子商务公司并不太在乎用户的预测。相反,他们会更感兴趣产生一份有限的清单,以呈现给给定的最佳事物。而且,客户不想看到系统预测其物品等级的能力,而只是想看到自己可能喜欢的东西。推荐引擎的成功取决于其为人们找到最佳推荐的能力,因此,专注于发现人们会喜欢的东西而不是我们预测人们讨厌的东西的能力是有意义的。

推荐系统的目标

推荐系统的最终目标是增加公司的销售额。为此,推荐系统应向用户显示或仅向用户提供有意义的项目。Charu C Aggarwal在他的《关联

推荐的项目只有在与用户相关时才有意义。用户更有可能购买或消费他们认为有趣的物品。新颖性

与相关性一起,新颖性是另一个重要因素。如果项目是用户以前从未看过或消费过的东西,那么推荐的项目将更有意义。机缘巧合

有时推荐一些出乎意料的商品也可以促进销售。然而,偶然性与新颖性不同。用作者的话说:

“如果附近有一家新的印度餐厅开业,那么该餐厅向通常吃印度食品的用户的推荐是新颖的,但不一定偶然。另一方面,当向同一用户推荐埃塞俄比亚食品时,如果用户不知道这种食品可能对她具有吸引力,则该推荐是偶然的。多元化

同样,增加建议的多样性也同样重要。仅仅推荐彼此相似的项目并没有多大用处。

推荐系统的工作

那么推荐系统如何工作?假设亚马逊想向您展示“图书”类别中的十大建议。在这里,亚马逊的推荐系统将从有关您的某种数据开始,以弄清您的个人品味和兴趣。然后,它将有关您的数据与其他所有人(如您)的集体行为进行合并,以推荐您可能喜欢的东西。但是,有关您喜欢和不喜欢的数据从何而来?数据流进入推荐系统

以两种方式收集用户的偏好数据:显式数据

要求用户以一到五颗星的等级对某项进行评分,或者以类似或不赞成的态度对他们看到的内容进行评分,这是显式数据收集的一个示例。在这些情况下,系统会明确询问用户是否喜欢某个特定项目,然后使用此数据建立该用户兴趣的资料。

但是,存在一个缺点,因为并非每个用户都留下反馈或评分,即使他们留下评分,对于不同的人也可能意味着不同。例如,一个3⭐️评分对一个人来说可能很好,但对另一个人来说则是平均。隐式数据

隐式数据是从用户与站点的交互中得出的,并将其解释为表示感兴趣或不感兴趣的指示。例如,从亚马逊购买产品或观看完整的youtube片段被认为是积极兴趣的标志。隐式交互可以为您提供更多可使用的数据,就购买数据而言,甚至可能是更好的数据开始。

推荐系统的基本模型

当今行业中有很多推荐人。但是,重要的决定是确定哪种类型适合我们的需求以及我们可以使用哪种数据。选择主要取决于:我们要识别的目标

我们的数据中指定了哪种类型的关系。

用于建议的一些常用方法包括:

让我们对它们中的每一个做一个简要的概述:

基于内容的过滤

基于内容的筛选涉及根据项目本身的属性来推荐项目。基于内容的过滤器提出的建议使用个人的历史信息来告知显示的选择。这样的推荐者寻找人们过去购买或喜欢的物品或产品之间的相似性,以在将来推荐选项。content based

例如,如果用户喜欢“ 文学”类别中的一本书,则向用户推荐同一类别中的书是有意义的。此外,推荐在同一年份和同一作者发行的书籍也是一个好主意。这就是基于内容的过滤的工作方式。

基于内容的方法的优势在于,由于我们只需要有关产品的信息,因此我们实际上不需要大量交易即可构建模型。但是,缺点是该模型无法从事务中学习,因此随着时间的推移,基于内容的系统的性能不会有太大改善。

协同过滤

协同过滤使用许多用户/客户提供的综合评级能力来提出建议。这意味着根据其他人的协作行为推荐东西Collaborative

协作过滤有两种方法:基于内存的方法,也称为基于邻域的协作过滤算法,其中,根据用户的邻域来预测用户项组合的评级。可以使用以下两种方法之一进一步定义这些邻域:基于用户的协作过滤:

找到喜欢您的其他人并推荐他们喜欢的物品。基于项目的协作过滤:

推荐人们购买的商品,同时也购买您喜欢的商品。

2.基于模型的方法通过将问题视为正常的机器学习问题,使用机器学习方法来提取评级数据的预测。

可以使用PCA,SVD,矩阵分解,聚类,神经网络等技术。

混合和基于集合Hybrid Collaborative

基于内容的方法和协作方法都有其优点和缺点,并且可以通过将许多算法结合在一起(称为混合方法)来获得更好的系统。混合系统利用项目数据和交易数据来提供建议。

使用混合方法的一个很好的例子是Netflix。在Netflix,建议不仅基于人们的观看和搜索习惯(协作系统),而且还建议共享相似特征的电影(基于内容)。混合协同过滤的推荐过程

评估推荐系统:围绕准确性的炒作用户并不真正在乎准确性

没有一种简单的方法可以衡量推荐系统的质量。该领域中的许多研究都将重点放在预测用户对他们尚未评级的任何事物(好或坏)的评分问题上。但这与推荐系统在现实世界中需要做的工作完全不同。衡量准确性并不是我们希望我们的推荐系统真正做到的。那么,为什么在推荐系统领域中,RMSE和准确性被如此重视?

好吧,很多事情都可以追溯到2006年,当时Netflix宣布了著名的100万美元奖金挑战赛。比赛结束了他们的RMSE 0.9525,终点线降低到0.8572或更小。由于该奖项的重点是RMSE,所以人们只关注它,这种影响一直持续到今天。

设计和构建推荐系统流程

果酱实验推荐问题:选择太少是不好的选择,但选择太多会导致瘫痪

您听说过著名的图片来源:选择的悖论

那到底发生了什么?好吧,似乎很多选择似乎都很吸引人,但是这种选择超载有时可能会给客户带来困惑和阻碍。因此,即使没有良好的推荐系统,即使在线商店可以访问数百万种商品,这些选择也可能弊大于利。。

术语与架构

Items/Documents

这些是系统推荐的实体,例如Netflix上的电影,Youtube上的视频和Spotify上的歌曲。

Query/Context

系统利用一些信息来推荐上述项目,并且该信息构成查询。查询还可以是以下各项的组合:User Information,可能包括用户ID或用户之前与之交互的项目。

Some additional context,例如用户的设备,用户的位置等。

Embedding

嵌入是一种将分类特征表示为连续值特征的方法。换句话说,嵌入是将高维向量转换为称为嵌入空间的低维空间。在这种情况下,必须将要推荐的查询或项目映射到嵌入空间。许多推荐系统都依赖于学习查询和项目的适当嵌入表示。嵌套 (embeddings)

一种分类特征,以连续值特征表示。通常,嵌套是指将高维度向量映射到低维度的空间。例如,您可以采用以下两种方式之一来表示英文句子中的单词:

表示成包含百万个元素(高维度)的

区别于集成学习:集成学习 (ensemble)

多个深度模型和宽度模型属于一种集成学习。

这是有关Recommender系统的大量资源,值得一读。我已经在上面对它进行了总结,但是您可以对其进行详细研究,并且它从建议的角度对Google的建议进行了全面的介绍。https://developers.google.com/machine-learning/recommendation/​developers.google.com

架构概述

推荐系统的通用体系结构包含以下三个基本组件:

1.候选人的产生

这是推荐系统的第一阶段,将用户过去活动的事件作为输入,并从大型语料库中检索一小部分(数百个)视频。主要有两种常见的候选人生成方法:基于内容的过滤

基于内容的筛选涉及根据项目本身的属性来推荐项目。系统会推荐与用户过去喜欢的商品相似的商品。协同过滤

协作过滤依赖于用户项目交互,并且依赖于类似用户喜欢类似事物的概念,例如,购买此商品的客户也购买了该商品。

2.计分

这构成了第二阶段,在该阶段中,另一个模型通常以10的比例进一步对候选者进行排名和评分。例如,在Youtube的情况下,排名网络通过根据期望的目标函数使用以下方法为每个视频分配得分来完成此任务一组描述视频和用户的丰富功能。向用户展示得分最高的视频,并按其得分排名。

3.重新排名

在第三阶段,系统考虑了其他约束条件,以确保多样性,新鲜度和公平性。例如,系统删除了用户较早之前明确不喜欢的内容,并且还考虑了站点上的任何新鲜项目。典型推荐系统的整体结构

相似度

您如何确定一个项目是否与另一个项目相似?事实证明,基于内容的过滤和协作过滤技术都采用某种相似性度量。我们来看两个这样的指标。

考虑两部电影-movie1和movie 2属于两种不同类型。让我们在2D图形上绘制电影,如果电影不属于该类型,则分配值为零;如果电影不属于该类型,则分配值为1。在此,电影1(1,1)属于流派1和2,而电影2仅属于流派2(1,0)。可以将这些位置视为向量,并且这些向量之间的角度充分说明了它们的相似性。

余弦相似度

它是两个向量之间的角度的余弦,

similarity(movie1,movie2) = cos(movie1,movie2) = cos 45

大约为0.7。余弦相似度为1表示最高相似度,而余弦相似度值为零表示无相似度。

点积

两个向量的点积是角度的余弦乘以范数的乘积,即

similarity(movie1,movie2) = ||movie1|| ||movie 2|| cos(movie1,movie2).

推荐流程

典型的推荐器系统管​​道包括以下五个阶段:典型的推荐系统管道

假设我们正在构建电影推荐系统。该系统没有用户或电影的先验知识,只有通过用户给定的评分,用户与电影之间的互动。这是一个数据帧,由电影ID,用户ID和电影等级组成。电影分级数据框

由于我们只获得评级,而没有别的,因此我们将对我们的Recommender系统使用协作过滤。

1.Pre-ProcessingUtility matrix conversion

我们首先需要将电影评分数据帧转换为用户项矩阵,也称为Utility matrix。

用户为电影指定的等级填充了矩阵的每个单元格。该矩阵通常表示为稀疏矩阵,因为由于该特定电影没有任何评级,因此许多单元为空。如果数据稀疏,则协作过滤效果不佳,因此我们需要计算矩阵的稀疏性。

如果稀疏度值大约为0.5或更大,则协作过滤可能不是最佳解决方案。这里要注意的另一个重要点是,空单元格实际上代表着新用户和新电影。因此,如果新用户比例很高,那么我们可能会再次考虑使用其他一些推荐方法,例如基于内容的过滤或混合过滤。

Normalization

总是会有用户过度肯定(总是给4或5评分)或过度否定(给所有1或2评分)。因此,我们需要对评级进行归一化,以解决用户和商品的偏见。这可以通过采用均值归一化来完成。资料来源:归一化评级

2.Model Training

在对数据进行预处理之后,我们需要开始模型构建过程。Matrix Factorisation是协作过滤中的一种常用技术,尽管还有其他方法,例如Neighbourhood methods。涉及的步骤如下:将用户项矩阵分解为2个潜在因子矩阵-用户因子矩阵和项目因子矩阵(user-factor matrix and item-factor matrix)。

用户评级是人类生成的电影的特征。这些功能是我们认为很重要的直接可观察的东西。但是,还有一些特征不能直接观察到,但在评级预测中也很重要。这些隐藏特征集称为“ 潜在特征”。The user ratings are features of the movies that are generated by humans. These features are directly observable things that we assume are important. However, there are also a certain set of features which are not directly observable but are also important in rating predictions. These set of hidden features are called Latent features.潜在因子方法的简化图示

潜在功能可以认为是用户与项目之间交互作用的基础。本质上,我们不明确知道每个潜在特征代表什么,但是可以假定一个特征可能代表用户喜欢喜剧电影,而另一个潜在特征可以代表用户喜欢动画电影等等。

Predict missing ratings from the inner product of these two latent matrices.

此处的潜在因子由K表示。此重构的矩阵填充了原始用户项目矩阵中的空单元,因此现在已知未知等级。

但是我们如何实现上面显示的矩阵分解?好吧,事实证明,使用以下一种方法可以通过多种方法来实现:交替最小二乘法

随机梯度下降(SGD)

奇异值分解(SVD)

3.超参数优化

在调整参数之前,我们需要选择一个评估指标。推荐人的一种流行评估指标是“ 精确度为K”,它会 查看前k个推荐,并计算出这些推荐中与用户实际相关的比例。

因此,我们的目标是找到在K或要优化的任何其他评估指标上提供最佳精度的参数。找到参数后,我们可以重新训练模型以获得预测的打分,并可以使用这些结果生成建议。

4.后处理

然后,我们可以对所有预测的打分进行排序,并为用户提供排名前N位的建议。我们还希望排除或过滤掉用户之前已经进行过交互的项目。对于电影,没有必要推荐用户先前看过或不喜欢的电影。

5.评估

我们之前已经介绍过了,但是在这里让我们更详细地讨论。评估任何推荐系统的最佳方法是在野外对其进行测试。诸如A / B测试之类的技术是最好的,因为它可以从真实用户那里获得实际的反馈。但是,如果不可能,那么我们必须求助于一些离线评估。

在传统的机器学习中,我们将原始数据集拆分为一个训练集和一个验证集。但是,这对于推荐器模型不起作用,因为如果我们在单独的用户群体上训练所有数据并在另一个用户群体上进行验证,则该模型将不起作用。因此,对于推荐,我们实际上是在矩阵中随机掩盖了一些已知的评分。然后,我们通过机器学习预测这些掩盖的评分,然后将预测的评分与实际评分进行比较。

早些时候,我们谈到了精度作为评估指标。以下是一些可以使用的其他方法。

Python库

有许多专用于推荐目的而创建的Python库。以下是最受欢迎的:scikit building and analyzing recommender systems.

结论

在本文中,我们以缩小选择范围的方式讨论了推荐算法的应用领域,为什么要推荐,推荐遇到的问题,推荐的重要性。我们还介绍了设计和构建推荐系统管道的过程。实际上,Python通过为此目的提供对许多专用库的访问来使此过程更简单。尝试使用一个构建自己的个性化推荐引擎。

应用实战相关:好好先生:动手从爬虫到设计音乐推荐系统(1)|数据处理部分​zhuanlan.zhihu.com好好先生:动手从爬虫到设计音乐推荐系统(2)|模型选择与训练预测​zhuanlan.zhihu.com

参考文献:https://towardsdatascience.com/recommendation-systems-in-the-real-world-51e3948772f3​towardsdatascience.com

下一期:embedding 推荐系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值