推荐系统(二)协同过滤
协同过滤大纲
- 基于记忆的方法
- 基于用户的协同过滤(User-based CF)
- 基于项目的协同过滤(Item-based CF)
- 相似度的衡量方法(Similarity measures)
- 偏好反馈(Preference Feedback)
- 其他一些基于模型的方法
- 矩阵分解(Matrix Factorization)
- 分解机(Factorization machine)
- 其他基于模型的方法
- 协同过滤评估
协同过滤(Collaborative Filtering/CF)
最突出的推荐系统解决方法
- 可应用于众多领域,适用范围广
- 容易理解并且有大量算法存在
- 被大型电子商务网站应用
基本假设和理念
- 用户对目录项进行评分(隐式地或者显式地)。
- 如果一些用户在过去有相似的偏好,那他们在将来也会有相似的偏好。
- 用户的偏好相对于时间有稳定性和可持续性。
输入和输出
- 输入:给定的“用户-项目评分”矩阵
- 输出类型:
- 预测当前用户喜欢或不喜欢某个特定项目的程度,也就是用户的评分预测。
- 给出受推荐项目的Top-N列表,也就是项目排名。
基于用户的协同过滤(User-based CF)
案例分析
-
给出如下的用户评分表,预测Alice对Item5的评分。
-
基本假设:如果一些用户在过去有相似的偏好,那他们在将来也会有相似的偏好。
-
思路:找一群曾经有着和A相同偏好并且评估过项目i的用户,根据他们评分的平均情况预测A是否会喜欢项目i。
-
需要思考的关键性问题:
- 怎样衡量用户之间的相似度?
- 我们需要考虑多少个相似用户?
- 我们怎样根据用户评分生成一个预测?
用户相似度衡量
一种比较流行的衡量方法是皮尔逊相关系数(Pearson Correlation Coefficient/PCC)。
其中,和是待比较的两个用户,是用户对项目的评分,集合是用户和用户共同评分过的产品集,是用户对中所有项目的平均评分。用户相似度的取值范围是[-1,1]。
选择合适的相似用户
方法1:设置相似度阈值。只有高于阈值的相似用户才会被选择。
方法2:Top-N相似用户。
- 获取所有与用户u相似度不等于0的用户集合。
- 获取所有对预测项目给出过评分的用户集合。
- 在以上两个集合中获取j个与用户u相似度最高的用户的集合,用表示。
进行预测
一种常用的预测函数如下图。其中,表示预测的用户对项目的评分,是用户的平均评分。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LlzhFItF-1577431999513)(https://s2.ax1x.com/2019/12/25/lFXJl4.png)]
实现细节
- 如果找不到K个相似用户,就用尽可能多的用户。
- 一般把阈值设置为0。
- 如果预测值范围是[1,5]。则当时,用5替代;当时,用1替代。
结果评估
评估公式如下图所示,其中,是估计量,是实际值,可以理解成项目个数。
MAE和RMAE的值越小,表明性能越好。RMAE对分母开根,可以放大误差。
改进和提升
- 不是所有的相似用户的评分都具有相同的价值。
- 大家一致喜爱的项目评分的价值小于有争议的项目的评分价值。
- 解决方法:对评分方差比较大的项目设置更高的权重(基于奇点的相似度)。
- 案例放大。
- 对于相似度特别高的用户(例如非常接近于1),可以赋予更高的权重。
- 收缩因子。
- 平滑相似度衡量的值。如下图公式。MAE表示平均绝对误差,RMSE表示平均平方根误差。
- 平滑相似度衡量的值。如下图公式。MAE表示平均绝对误差,RMSE表示平均平方根误差。
基于项目的协同过滤(Item-based CF)
案例分析
-
给出如下的用户评分表,预测Alice对Item5的评分。
-
基本假设:用户在此前喜爱某种项目,之后也会喜爱与之相似的项目。(也即用户的偏好具有稳定性)
-
思路:找到和Item5相似的项目,根据用户Alic对它们的评分,预测对Item5的评分。
-
关键问题:
- 如何衡量两个项目之间的相似度?
- 如何根据项目相似度进行预测?
Cosine相似度
cosine相似度是基于两个评分向量的夹角进行计算的。两向量夹角公式如下:
我们将夹角公式改进为对项目相似程度进行量化的cosine相似度,并且把平均用户评分的影响因素考虑在内,用表示既评价过项目a又评价过项目b的用户的集合。
由于的值域在[-1,1]之间,所有cosine相似度的取值范围也是[-1,1]。
进行预测
-
一种常见的预测函数如下图。表示用户对项目的相似度预测值,是用户已经评价过的项目的集合。
-
需要注意的是,集合并不是越大越好,我们不需要把所有的相似项目都进行考虑,研究表明20~50个相似项目是合理的。(Herlocker et al.2002)
-
基于项目的CF本身并不能解决可扩展性的问题。例如,两向量的夹角是固定的,与向量长度的延展无关。
-
可以进行预处理,提前计算所有的成对项目的相似度(Amazon.com in 2003)。理由是:
- 项目相似度应当比用户相似度更具有稳定性。
- 起步阶段的相似项目相当少,因为只有用户曾经全都评价过的项目才被考虑。
复杂度分析
理论上,需要存储个成对项目,但实际上由于很多项目之间并无关联,所以不需要这么大的空间复杂度。另外,还有一些方式可以降低复杂度:
- 设置最小相似度阈值
- 降低相似项目的规模(可能会降低推荐的准确率)
总结
可解释性
基于用户的:读过这本书的人还读过······
基于项目的:你读过这10本书,你可能还喜欢读······
复杂性
基于用户的:用户数量远小于项目数量。
基于项目的:项目数量远小于用户数量。
性能
大体上,基于项目的CF优于基于用户的CF。因为项目是单纯的,而人是复杂的。
混合协同过滤(Hybird CF)
混合协同过滤是对User-based CF和Item-based CF 的线性结合。表示用户对项目的评分预测,是[0,1]之间的权衡参数。
偏好反馈
推荐系统挖掘用户的行为和表达,从显式反馈和隐式反馈两方面获取用户偏好。
显式反馈
- 如评分、评价、投票等行为。
- 对于显示反馈的研究,更多关注评价的粒度、评价的多重标准。
- 面临的挑战:用户不一定愿意评分、数据稀疏(data sparsity)、怎样激励用户给出更多的评分。
隐式反馈
- 最典型的方法是收集web应用的日志,如点击、购买、浏览、关注等行为。当一位用户买了一个物品,一般认为这是一个正反馈。
- 隐式反馈的优点在于可以持续进行并且不需要用户消耗额外的精力。
- 面临的挑战:无法确定用户行为是否被正确解读。
- 隐式反馈可以用于补充显示反馈。
稀疏反馈
主要是冷启动问题。
- 冷启动项目:如何推荐新的项目?
- 冷启动用户:给新用户推荐什么?
- 冷启动系统:如何引导一个新系统?
可能的解决方案:
- 强制性地要求用户评分。
- 给项目赋予默认评分,但不一定准确。
- 用一些附加信息去了解新用户,比如社会关系、领域知识等。
其他的基于模型的协同过滤
关联规则挖掘(association rule mining)
通常用于购物行为的分析,旨在探测一些规则,例如“啤酒和尿不湿之间的关联”。
关联规则挖掘算法就是要探测销售事物集合上从形式X到Y的映射关系,并且对关系的质量进行衡量。
概率方法(probabilistic methods)
- 基本思想:给出用户/项目评分矩阵,计算用户喜爱某个项目的可能性,根据可能性给出评分预测。(用于说明的简单版本)
- Bayes理论:假设每个评分之间是相互独立的,根据贝叶斯公式得到
- 简单版本的计算例题如下图
基于集群的方法(Cluster-based approach)
假设用户陷入一个小型的集群中,此时用户喜欢某个项目的可能性需要考虑如下方面:
- 用户陷入某个集群的可能性。
- 用户此前的评分情况以及该集群的对该项目评分。
SlopeOne算法(Lemire and Maclachlan 2005)
Slope One是基于不同物品之间的评分差的线性算法,优点在于简单高效。如下图所示:
RF-Rec算法(Gedikli et al. 2011)
RF-Rec在计算预测时考虑评分频率。如果用户经常给出某个分数,则新的评分也很可能是这个值。如下图所示:
CF评价
优点
- 易于理解
- 在某些领域内,工作效果比较好
- 无需知识/功能工程
缺点
- 需要用户社区
- 稀疏问题
- 没有和其他知识域相结合
- 结果缺乏可解释性
- 更趋向于推荐一些流行产品
CF的安全性
- 保护推荐系统的中立性
- 来自想要推销产品并可以创建假帐户的恶意用户
- 可能的解决方案:阻止创建帐户或检测和删除帐户
- 保护推荐系统的准确性
- 来自给出低质量,不一致评分的用户
- 可能的解决方案:类似于一般的降噪问题
- 保护用户数据(隐私)
- 来自其他用户和服务提供商
- 可能的解决方案:使用可信的计算基础架构,增加噪音,pool rating。