推荐系统101:Recommender System 入门
推荐系统(Recommender System)是一种信息过滤系统, 是我们日常生活中最流行的算法之一。他们隐藏在Netflix、Spotify、Youtube这些流媒体平台给我们的每一条推送后面。他们也决定了网页和应用会向我们展示哪些广告,以及Google搜索结果的显示顺序。
如果你想了解更多数据分析相关内容,可以阅读以下这些文章:
推荐系统(Recommender Systems)各算法原理概述
如何在15分钟内构建属于自己的基于聚类的推荐系统?
2020入门数据科学的9大项目力荐
那到底什么是推荐系统呢?
推荐系统是一种将某些项目优先于其他项目的算法。其实就是基于特定标准的一种排序,目的是向用户显示最准确的项目。重点是,这些项目的涉及范围很广:从流媒体平台上的电影,到Google搜索结果,再到电子商务上的产品等等……
个性化与非个性化算法
谈到推荐系统,个性化是它最关键概念之一。我们可以把推荐系统分为两类:个性化算法和非个性化算法。个性化算法会考虑到用户和产品特征。例如,Spotify的每周推荐就是基于你最近所听的内容。比如,如果你最近一直在听Madonna的音乐,那它就很可能会向你推荐Cher的音乐了!
另一方面,我们也有非个性化的系统。我们并不总是了解用户的偏好,所以我们还需要在不了解用户偏好的情况下(例如,Spotify或Netflix平台中的新用户)构建推荐系统。甚至在某些情况下,我们并不想为每个人定制结果,比如Google的搜索结果。在非个性化算法中,用于优先排序的一个典型标准就是受欢迎程度(如果很多人都喜欢这个内容,那多半你也会喜欢)或年份(新闻越实时,它们就与现在人们关心的事越相关)。
尽管人们普遍认为个性化算法要优于非个性化算法,但需要明白的是,它们是用来针对不同问题的,并且每种算法都有各自的用途。如果我们能选到自己喜欢的电影是很好,但抛开个人偏好而优先考虑了重要性和可能性的Google的搜索结果,可能会更好。
所以接下来,我们会把注意力放在个性化算法上,因为在当今世界,它们正越来越受人们欢迎。
我们面临的实际问题
根据我的经验,人们了解个性化推荐系统的最佳方式通过一个预测问题来了解。我们的数据是用户对我们的产品给出评价。而我们的目标是找出空白部分的结果,就是我们认为用户会给到每个产品的评价。所以,只要我们计算出预测率,我们就会知道该向用户推荐什么内容(如果我们推断用户会给某个他还没看过的电影5星评价,那么这就是一个很好的推荐)。
问题背后的大矩阵(BIG Matrix)
我们可以将推荐问题背后的所有数据视为一个大矩阵。每一行是一个用户,每一列是一个产品。第i行和第j列上的值表示的是用户i给产品j的评分。(尽管我们通常认为评分还能存储其他信息,例如,用户i是否已经看过了j电影,或用户i听了多少遍j歌曲)。让我们来看一个示例:
在这个示例中,我们可以看到一些用户是如何在1到5的范围内对一些书进行评分的。空格表示该用户还未看过该书。基于“相似的用户会喜欢相似的书”这一假设,我们可以预测用户C不会喜欢《MacBeth》,因为用户D也不喜欢它。我们也可以从行为相反的用户中提取信息,比如,我们可以看到用户A和D好像有相反的喜好,所以我们可以推断用户A不会喜欢《Twilight》。
遇到实际问题时,矩阵的形状就变得非常重要。例如,Netflix拥有约1.39亿用户,根据国家/地区,有数千部电视连续剧/电影。所以这个矩阵会涉及到1390亿个元素。
矩阵的另一个特征是它很分散,有大量的空白格子。这既是一个问题(因为我们没有得到预想那么多的信息),也有一定好处(如果矩阵太密集,我们会难以提供任何推荐,因为这说明每个用户都看过了每一部电影,还进行了评分)。
我们可以发现,这个矩阵太大,所以内存没法完整储存它,所以我们需要找到一种无需将全部内容都加载到内存中而使用它的方法。
我们可以用矩阵因子分解(matrix factorization)来避免矩阵过大的问题。我不会详细地介绍技术细节,但通过数学,我们已经能证明可以把任何矩阵分解为两个矩阵的乘积(实际上是三个矩阵,但如果将其中两个相乘,则可以分解为两个矩阵)。
假设我们有一个大小为N × K的U矩阵(用户矩阵),和一个大小为M × K的W矩阵(产品矩阵),其中N为用户数,M为产品数。如果我们计算U x W´(W´是W的转置(transpose)),我们的内存就会崩溃,但是,为了给用户i推荐产品j计算出确切的推荐,我们可以计算:
通过这个方法,我们就无需把整个矩阵都放到内存中,我们只用加载W矩阵里的第i列和U矩阵的第j行这两个简单的向量,然后计算它们的乘积,就能得到用户j给产品i的预测评分。
感谢你的阅读!你还可以订阅我们的YouTube频道,观看大量数据科学相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/
原文作者:Arturo Sánchez Palacio
翻译作者:Lea
美工编辑:过儿
校对审稿:Jiawei Tong
原文链接:https://medium.com/@arturonigri/introduction-to-recommending-systems-395bc9d57d77