基于用户的协同过滤算法:
算法思想:
寻找与目标用户相似用户,然后将相似用户买过但目标用户没有买过的商品推荐给目标用户;
举个栗子:由于目标用户与其相似用户非常相似(比如大部分的考研学生都购买《肖秀荣八套卷》),现在我们的目标用户购买了大量的考研资料但还没有买《八套卷》,除了《八套卷》目标用户与考研学生相似度十分高,那么我们就可以认为目标用户也是考研学生,作为考研学生那么他肯定需要《八套卷》系统推荐《八套卷》给他,很大概率上他就会购买;
算法步骤:
- 定义用户属性矩阵
- 计算用户之间相似度
- 基于相似度阈值确定相似用户
- 根据相似用户购买行为给目标用户推荐
算法需要完成的任务:
计算用户相似度,找到相似邻居;
推断用户-项目矩阵中空格处的值(矩阵空格表示用户未购买过改商品或购买了该商品却没有评价),将相似用户评价不为空但目标用户评价为空的项目为目标用户推荐;
算法存在的问题:
- 冷启动:对于一个新用户来说,由于没有购买过任何商品,很难找到相似用户进行推荐;
- 稀疏数据:现实交易平台中,商品数量庞大而用户购买数量有限,且有效评价也十分有限,造成用户-项目矩阵非常稀疏;
目前的基本解决方案:
- 使用皮尔逊相似度系数计算相似度;
- 考虑共同打分物品的数目;
- 对打分进行归一化处理,减少误差;
- 设置相似度阈值,找出相似度在一定范围内的多个邻居进行综合推荐;
基于用户的协同过滤算法不普及的原因:
- 稀疏数据导致计算量过于庞大;
- 人的喜好和需求随着时间是一个不断变化的过程,基于用户的推荐不符合长期的推荐需求;
基于物品的协同过滤算法:
算法思想:
计算物品之间的相似度,如果用户买了物品A,物品A与物品B相似,那么基于物品的协同过滤算法就会将物品B推荐给该用户;
该方法很大程度上减少了计算量,基于物品的话还可以线下计算,线上推荐,极大的提升了计算性能;
举个栗子
还是考研的栗子,比如某考研同学购买了《肖秋荣八套卷》,《肖秀荣四套卷》与《八套卷》十分相似,那么该同学可能也想买《四套卷》,那么系统就会把《四套卷》推荐给该同学;
算法步骤:
- 建立用户项目矩阵;
- 计算用户评分平均值A;
- 计算物品之间相似度(皮尔逊相似度系数);
- 预测用户可能对推荐物品的评分(累加正相关部分的相似性系数乘以评分并平均得出预测值),评分如果大于A进行推荐,否则不推荐;
算法存在的问题:
基于物品的推荐也存在冷启动的问题;
纵观上述两种算法,都存在冷启动的问题;
用户冷启动解决方案:
- 引导用户表达属性,比如注册时引导用户标记喜欢的方向;
- 充分利用现有的开放数据平台;
- 推荐排行榜单,推荐大部分人喜欢的东西;
物品冷启动解决方案:
- 打标签,帮助分类;
- 主题模型分析;
- 文本分析,分析其可能属于或相关的类别;
基于用户的协同过滤算法 | 基于物品的协同过滤算法 | |
性能 | 适用于用户较少的情景下 | 适用于物品数量远小于用户数量的情景 |
领域 | 用户个性化需求较低时适用 | 适用于个性化推荐 |
实时性 | 当用户有了新行为,推荐系统不一定能实时反映更新 | 一旦用户有了新行为,系统可以及时更新推荐结果 |
冷启动 | 由于用户相似度是离线计算的,当新用户的进来之后系统的反映周期会很长; 新物品上线后,只要有一个用户对其产生行为,系统可以及时捕捉并更新; | 新用户只要对一个物品发生行为,系统就可以灵敏捕捉并更新推荐结果;新物品的领启动相似; 但是无法在不离线更新相似度的情况下进行推荐; |
推荐可信度 | 相似度高的用户不一定相似,所以可信度较低 | 根据用户历史推荐,可信度较高 |