一,协同过滤是什么?
基本思想是:根据用户历史喜好,以及与给用户兴趣相近的用户的选择,来给用户推荐物品
(基于对用户历史行为数据的挖掘发现用户的喜好偏向,并预测用户可能喜好的产品进行推荐)
一般仅仅依靠用户的行为数据(评价,购买,下载等),不依赖于物品自身特征或者用户的附加信息(年龄,性别等)
二,协同过滤的分类
- 基于用户的协同过滤算法(UserCF):给用户推荐与他兴趣相似的其他用户喜欢的产品
- 基于物品的协同过滤算法(ItemCF):给用户推荐与他之前喜欢的物品相似的物品
三,基于用户协同过滤应用场景
3.1 UserCF 基本思想
当一个用户A需要个性化推荐时,可以找到与该用户兴趣相似的用户。将这些用户喜欢,而A没有听说过的产品推荐给用户A
3.2 基本实现方法
给用户推荐物品的过程可以形象化为:预测一个用户对商品进行打分的任务
表格中5个用户对5件物品的打分情况,可以理解为用户对物品的喜欢程度(打分情况是怎么得到的?是根据用户的行为进行统计得到的。比如用户购买了某个物品,直接量化成5分,用户收藏了某个物品,量化为4分,用户看某个物品很久量化为3分等)
基于上面的数据,来预测Alice 对物品5的打分,一共需要以下几个步骤
1)计算Alice与用户1,2,3,4 的相似度。衡量标准:皮尔逊相关系数
目的:找到与Alice 相似度最高的top_N的用户
取top n 的用户,n=2,则与Alice最相近的两个用户是用户1,与Alice 的相似度是0.85;用户2,与Alice的相似度是0.7
2)根据相似度用户计算Alice 对物品5的最终得分
用户1对物品5评分是3,用户2对物品5评分是5,则Alice对物品5的最终得分是
3)根据用户评分对用户进行推荐
Alice 对物品5的打分是4.87,根据Alice的打分,对物品排个序从大到小
物品1>物品5>物品3=物品4>物品2
此时,要给Alice 推荐2款产品的话,就可以推荐物品1和物品5给Alice
3.3 代码实现
1)建立数据表。采用字典存放数据。
2)计算用户相似性矩阵
3)计算前n个相似的用户,并计算最终得分
3.4 优缺点
UserCF存在两个重大问题:
1.数据稀疏性
大型电子商务推荐系统一般有非常多的物品,用户购买可能不到其中的1%,不同用户之间购买物品的重叠性较低,导致算法无法找到一个用户的邻居,即偏好相似的用户。因此user_CF 不使用那些正反馈获取比较困难的应用场景(如酒店预订,大件商品购买等低频应用)
2.算法扩展性
基于用户的协同过滤需要维护用户相似度矩阵以便快速找出topn相似的用户,该矩阵的存储开销非常大,存储空间随着用户数量的增加而增加,不适合用户数据量大的情况使用。
UserCF由于上面两个缺点,导致很多电商没办法采用这种算法,而是采用ItemCF算法实现最初的推荐系统。
四,基于物品协同过滤应用场景
4.1 UserCF 基本思想
预先根据所有用户的历史偏好数据计算物品之间的相似性,然后把与用户喜欢的物品相类似的物品推荐给用户。比如通过物品之间的相似性可以知道,物品a和物品c 非常相似,因为喜欢a的用户同时也喜欢c,而用户A喜欢a,所以把c推荐给用户A。ItemCF算法并不利用物品的内容属性计算物品之间的相似度,主要通过分析用户的行为记录计算物品之间的相似度。
4.2 基本实现方法
ItemCF基本实现方法分成两步:
计算物品之间的相似度
根据物品的相似度和用户的历史行为给用户生成推荐列表(购买了该商品的用户也经常购买的其他商品)
举例实现,仍然是上面UserCF使用的例子:
如果想知道Alice 对物品5打多少分,基于物品的协同过滤做法如下:
1)计算物品5与物品1,2,3,4之间的相似性(他们也是向量形式,每一列的值就是他们的向量表示,因为itemCF 认为物品a和物品c具有很大的相似度是因为喜欢物品a的用户大都喜欢物品c,所以就可以基于每个用户对物品的打分或者说喜欢程度来量化物品)
2)找到与物品5最相近的n个物品
3)根据Alice 对最相近的n个物品的打分去计算对物品5的打分情况
根据皮尔逊相关系数,找到与物品5最相近的2个物品是item1和item4(n=2),然后基于上面公式计算最终得分:
因此得到Alice 对物品5的打分是4.6
4.3 代码实现
1)定义数据集
2)计算物品相似性矩阵
3)得到与物品5相似的前n个物品,并且预测Alice 对物品5的打分
4.4 优缺点
UserCF存在两个问题:数据稀疏性和算法扩展性问题。ItemCF算法因为物品直接的相似性相对比较固定,所以可以预先在线下计算好不同物品之间的相似度,把结果存在表中(similarity_items ),当推荐时进行查表,计算用户可能的打分值,可以同时解决上面两个问题。在item-to-item论文中,作者给出结论:
1,itemCF算法的预测结果比UserCF算法的质量要高一点
2,由于ItemCF算法可以提前计算好物品的相似度,所以在线的预测性能要比UserCF算法的高
3,用物品的一个小部分子集也可以得到高质量的预测结果
五,应用场景和存在问题分析
5.1 应用场景
1)userCF
基于用户相似性进行的推荐,社交特性更强。适用于用户少,物品多,时效性较强的场合。比如新闻推荐场景。userCF还具有推荐新信息的能力,因为利用的是人与人之间的相似性,推出来的结果可能更有惊喜,可以发现用户潜在但自己尚未察觉的兴趣爱好。
2)itemCF
适用于兴趣变化较为稳定的应用,更接近于个性化的推荐,**适合物品少,用户多,用户兴趣固定持久,物品更新速度不是太快的场合。**比如推荐艺术品,音乐,电影。
5.2 问题分析以及对应的解决方法
协同过滤的特点:完全没有利用到物品本身或者用户自身的属性,仅仅利用了用户与物品的交互信息就可以实现推荐,是一个可解释性很强,非常直观的模型。但是其存在的共性问题如下:
1)较差的稀疏向量处理能力
**泛化能力弱,推荐系统头部效应明显,处理稀疏向量的能力弱。**比如下面例子:
这是一个ItemCF 问题。
A,B,C,D 是物品,看右边的物品相似性矩阵(也称共现矩阵),可以发现物品D与A,B,C的相似度比较大,所以很有可能将物品D 推荐给用过A,B,C 的用户。但是物品D与其他物品相似的原因是D是一件热门商品,系统无法找出A,B,C之间相似性的原因是其特征太稀疏,缺乏相似性计算的直接数据。
为了解决这个问题,同时增加模型泛化能力,2006年,矩阵分解技术(Matrix Factorization,MF)被提出,该方法在协同过滤共现矩阵的基础上,使用更加稠密的隐向量表示用户和物品。挖掘用户个物品的隐含兴趣和隐含特征,在一定程度上弥补协同过滤处理稀疏矩阵能力不足的问题。
2)无法利用更多信息
协同过滤的特点是:完全没有利用到物品本身或者用户自身的属性,仅仅利用了用户与物品的交互信息就可以实现推荐,比较简单高效,但这也是它的一个短板所在,由于无法有效的引入用户年龄,性别,商品描述,商品分类,当前时间,地点等一系列用户特征,物品特征和上下文特征,这就造成了有效信息的遗漏,不能充分利用其他的特征数据。
为了解决这个问题,在推荐模型中引用更多特征,推荐系统慢慢从以协同过滤为核心到了以逻辑回归模型为核心,提出了能够综合不同类型特征的机器学习模型
演化图时间线:
六,总结
本篇文章主要基于推荐系统比较经典的协同过滤算法进行展开。该算法比较古老,但是思想和原理却值得好好理解。该算法不依赖物品或者用户自身的属性,仅仅靠用户和物品之间的交互信息就可以完成推荐任务。后续的算法,是基于协同过滤算法存在缺陷的改进,推荐系统模型也由此发展开来。比如为了解决协同过滤算法泛化能力和稀疏能力弱的问题,提出了矩阵分解算法(MF);为了解决协同过滤算法无法利用其他用户属性特征,物品属性特征和上下文特征的问题,推荐系统中逐渐由以协同过滤为核心,转换为以LR为核心的能利用不同类型特征的机器学习模型,比如LR或者GBDT+LR。近几年深度学习模型,也都是在此基础上改进过来的。协同过滤算法,可以称得上是推荐系统模型发展的起源。
协同过滤算法比较常用的是基于邻域的方法。比如UserCF和ItemCF。UserCF的基本思想是:如果用户A喜欢a,用户B喜欢a,c,用户C喜欢a,b,c ,则认为用户A与用户B,用户C 相似,因为他们都喜欢a。而喜欢a的用户同时喜欢c,因此把c也推荐给用户A。该算法用最近邻居算法(nearest-neighbor)找出一个用户的邻居集合,该集合的用户和该用户有相似的喜好,算法根据邻居的偏好对该用户进行预测。ItemCF的基本思想是:如果用户A喜欢a,c,用户B喜欢a,c,用户C喜欢a,则认为,a和c 物品相似,因为用户C喜欢a,所以也可以把物品c推荐给用户C.
然后从一个例子出发,解释这两种算法,并通过编程进行实现。分析他们各自的优缺点和应用场景。UserCF适用于实时性强的任务,偏向于社交性推荐,容易给用户推荐新事物。而ItemCF比较适合推荐兴趣比较固定的产品,偏向于个性化推荐,推荐的都是类似的产品。
参考:
- 王喆 - 深度学习推荐系统
- AI上推荐 之 协同过滤