最近在写一些关于推荐系统的介绍。找了很多案例和资料,但总觉得不够具体和深入,没有什么可以作为基础和科普的,所以决定自己写一个。文章尝试。定义:推荐系统是信息过滤系统的一个子类,旨在预测用户对产品或服务的“评级”或“偏好”。在过去的几年里,国内外的大公司都在推荐系统上投入了大量的资金。2009年,Netflix向开发团队悬赏100万美元,奖励其算法将公司推荐引擎的准确性提高了10%。有两种主要类型的推荐系统:个性化和非个性化。1.非个性化推荐非个性化推荐系统(如基于人气的推荐系统)向用户推荐最受欢迎的Item,例如前10名的电影、畅销书和最常购买的产品。什么是好的推荐?Personalized(relevanttothatuser)Diverse(includingdifferentuserinterests)一种向不会向用户推荐相同商品的人第二次推荐可用的商品II.个性化推荐个性化推荐系统更详细地分析用户数据、他们的购买、评级以及他们与其他用户的关系。这样,每个用户都将获得定制的推荐。目前最流行的个性化推荐系统类型是基于内容和协同过滤。1.基于内容的推荐系统使用项目或用户元数据来创建特定的推荐。观察用户的购买历史。例如,如果用户读过某个作者的书或购买过某个品牌的产品,则假设该客户更喜欢该作者或该品牌,该用户以后很可能会购买该品牌的同类产品.假设小红喜欢科幻小说,她最喜欢的作家是刘慈欣。如果她看刘慈欣的书,那么她推荐的书就是《疯狂的外星人》,也是刘慈欣写的科幻小说。协同过滤在实践中取得了比基于内容的方法更好的推荐结果。也许是因为结果的多样性不如协同过滤。基于内容的推荐的缺点:泡泡现象:如果用户阅读了一本关于某种政治意识形态的书,而与该意识形态相关的书籍被推荐给他,他将处于“他以前的兴趣泡沫”中。需要收集有关用户及其偏好的大量数据才能获得最佳推荐在实践中,20%的报价吸引了70-80%的用户注意力,而70-80%的报价吸引了20%的用户注意力。推荐的目的是介绍其他用户第一眼可能看不到的产品。在基于内容的方法中,这个目标在协同过滤中没有实现。2.协同过滤协同过滤的思路很简单:利用用户群体行为向其他用户推荐。因为推荐是基于其他用户的偏好,所以它们被称为协作。有两种类型的协同过滤:基于记忆的和基于模型的。2.1基于内存基于内存的技术可以应用于原始数据而无需预处理。它们易于实施,并且由此产生的建议通常也易于理解。每次都需要对所有推荐数据进行预测。有两种类型:基于用户和基于项目的协同过滤。基于用户:“与您相似的用户也喜欢……”根据与观察到的用户相似的用户的购买/喜欢向用户推荐产品。如果我们说用户是相似的,这意味着什么?比如小明和小红就喜欢科幻小说。有新的科幻书出来,小明就买那本书,因为小红也喜欢科幻书,那我们就可以把小明买的书推荐给小红。BasedonItem:"喜欢这个产品的用户也喜欢..."如果小明、小红、小花对科幻书《时间简史》和《时间机器》的评价很高,比如给5星,那么当小红购买《时间简史》这本书,然后《时间机器》这本书也推荐给他,因为系统根据用户评分将书识别为相似。如何计算User-User和Item-Item相似度?与使用关于用户或项目的元数据的基于内容的方法不同,基于协同过滤的方法观察和记忆用户行为,例如用户是否喜欢或某项目是否被某个用户喜欢或评价。例如,这个想法是向约翰尼推荐新的科幻小说。步骤:创建用户项目评分矩阵创建用户-用户相似度矩阵(示例如下)计算每两个用户之间的余弦相似度(备选方案:调整余弦相似度、Pearson相似度、Spearman秩相关)。这导致用户-用户矩阵。这个矩阵比初始的用户Item评分矩阵要小。Findsimilarusers在用户-用户矩阵中,观察与小明最相似的候选用户。当我们找到与小明最相似的用户时,我们会查看这些用户阅读过的书籍以及他们给出的评分。候选评分根据与Ming最相似的评分从最喜欢的书籍到最不喜欢的书籍对用户进行排名。结果被规范化(从0到1)候选人过滤正在检查Jim是否已经购买了这些书。那些书应该淘汰,因为他已经看过了。Item相似度的计算与User-User相似度的计算方式和步骤相同。基于用户和基于项目的方法的比较项目之间的相似性比用户之间的相似性更稳定,因为数学书始终是数学书,但是用户可以改变主意,例如他上周喜欢的东西下周可能不喜欢。另一个好处是产品比用户少。由此得出结论,具有相似点的Item-Item矩阵会比User-User矩阵小。如果新用户访问站点,在这种情况下存在基于用户的方法,那么基于项目的方法也是更好的方法。2.2基于模型这些模型是使用机器学习算法开发的。创建模型并基于它提供推荐候选,从而加快系统的工作速度。这种方法具有更好的可扩展性。这种方法通常使用降维,最著名的方案是矩阵分解。矩阵分解如果有用户的反馈,比如用户看了特定的电影或阅读了特定的书并给出了评分,可以用矩阵的形式表示,其中每一行代表一个特定的用户,每一列代表一个具体项目。由于用户几乎不可能对每个项目进行评分,因此该矩阵将有许多未填充的值,这称为稀疏性。矩阵分解方法用于找到一组潜在因素,并使用这些因素来确定用户偏好。可以通过分析用户行为来评估潜在信息,潜在因素也称为特征。为什么要分解它?评分矩阵是两个更小的矩阵的乘积:物品特征矩阵和用户特征矩阵。矩阵分解步骤:初始化随机用户和项目矩阵。Ratings矩阵是用用户乘以转置后的item矩阵得到的。矩阵分解的目标是最小化损失函数(预测矩阵和实际矩阵的评分差异必须最小)。每个评分都可以描述为用户矩阵中的行和项目矩阵中的列的点积。K是一组(u,i)对,r(u,i)是用户uItem项目i为了最小化损失函数,我们可以应用随机梯度下降(SGD)或交替最小二乘法(ALS)。当新评级可用时,这两种方法都可用于增量更新模型。SGD比ALS更快、更准确。3.混合推荐混合推荐代表不同推荐人的组合。通常,多个不同推荐器的组合将提供比单个算法更好的结果。事实上,大多数公司都使用混合推荐。4.推荐系统指标使用哪些指标取决于要解决的业务指标。如果我们认为我们做出了最好的推荐并且指标很好,但在实践中它远非理想,那么我们的推荐就是次优的。最重要的是用户对推荐系统有信心,并使用推荐系统的结果。如果我们向他推荐前10个产品,而只有2或3个与他相关,用户会认为推荐系统很糟糕。出于这个原因,想法不是总是推荐前10个项目,而是推荐超过某个阈值的项目。Metrics:Accuracy(MAE,RMSE)衡量topNrecommenders:Hitrate:首先在训练数据中找到用户历史中的所有Items;删除其中之一(交叉验证);使用所有Items作为推荐并找到Top10推荐;如果项目出现在前10个推荐中,则该项目成功。如果没有,那就不理想了。AverageReciprocalHitRatio(ARHR):我们建议用户拥有的排名靠前的项目要多于排名相近的项目。Cumulativehitratio:评分低于某个阈值的将被拒绝,例如评分低于4Ratinghitratio-计算每个项目的评分以确定哪个评分获得更多点击。将前N列表中每个评级的命中数相加,然后除以前N列表中每个评级的项目总数。在线A/B测试:A/B测试是在线评估推荐系统的最佳方式。推荐系统在实际使用中遇到的挑战1.冷启动问题:新用户出现,推荐什么?比如畅销前10的产品,促销前10的产品,都可以采访用户,了解他喜欢什么。2、当新用户出现时,新产品如何被用户认可?使用基于内容的属性向用户随机添加新产品,以推荐和推广新产品3.行为流失由于用户会随着时间改变行为,因此推荐系统应该进行一定量的随机化,以刷新推荐项目的前N??个列表4.注意不要以任何形式歧视用户5.避免推荐包含粗俗词语、宗教和政治话题或毒品的产品
