1 基于相似性的推荐流程
用户偏好如何收集
用户偏好如何整合
大多数情况我们提取的用户行为都多于一种,如何组合这些不同的用户行为,基本上有以下两种方式:
不同的行为分组
一般可以分为“查看”和“购买”等等,然后基于不同的行为,计算不同的用户 / 物品相似度。
加权操作
根据不同行为反映用户喜好的程度将它们进行加权,得到用户对于物品的总体喜好。一般来说,显式的用户反馈比隐式的权值大,但比较稀疏,毕竟进行显示反馈的用户是少数;同时相对于“查看”,“购买”行为反映用户喜好的程度更大,比如:“关注”,“加入购物车”,“下订单后取消”,“付款”反应用户的喜好度不同。但这也因应用而异。
2 相似度如何计算
收集了用户行为数据,经过一定的预处理和归一化,得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是 [0,1] 或者 [-1, 1] 的浮点数值
在用户–物品偏好的二维矩阵中,我们可以将一个用户对所有物品的偏好作为一个矢量来计算用户之间的相似度,或者将所有用户对某个物品的偏好作为一个矢量来计算物品之间的相似度
相似度和距离在定义上是相反的概念
常用到的相似度计算
都为0 S为不相关数
3 协同过滤(Collaborating Filtering)
协同过滤是利用集体智慧的一个典型方法。
协同(Collaborating)是群体行为,过滤(filtering)则是针对个人的行为。
协同过滤基于如下基本假设:如果一个人A在一个问题上和另一个人B持相同观点,那么对于另外一个问题,比起
随机选择的一个路人甲,A更有可能同B持相同观点。
生活中如果你想去看电影,一般会问问周围的朋友,看看最近有什么好看的电影推荐,我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。
协同过滤推荐算法是诞生最早,并且较为著名的推荐算法,具体又可分为两类:
Item-based CF:
• 通过用户对不同item的评分来评测item之间的相似性,基于item之间的相似性做出推荐
• 物以类聚
User-based CF:
• 通过不同用户对item的评分来评测用户之间的相似性,基于用户之间的相似性做出推荐
• 人以群分
关联规则 vs 协同过滤
关联规则:
• 回答问题:某消费者购买商品A,那么他还可能买什么商品?
• 特征:直接的推荐,从整体的数据中挖掘潜在关联,与单个人的偏好无关
协同过滤:
• 回答问题:与A客户相似的客户群是谁?将客户群中的物品推荐给A(A没有的物品);与A物品相似的物品群是什么?
对某用户,若其已经购买或收藏A,则推荐该用户与A相似的物品群
• 特征:间接推荐,即先找到相似的人(user based)或物(item based),然后再根据品味相似的人的偏好进行推荐
• 协同过滤= 协同(集体智慧的部分)+过滤(针对具体某个人又做了一次个性化)
4 基于用户(User-based)的协同过滤算法
基于用户的协同过滤,通过不同用户对物品的评分来评测用户之间的相似性,基于用户之间的相似性做出推荐
简单概括:给用户推荐和他兴趣相似的其他用户喜欢的物品
基于用户(User-based)的协同过滤算法—应用
如图1,矩阵是用户对商品的一个评级列表,横轴是商品(书本),纵轴是用户,对应的值是用户对商品的评级,最高5分,最低1分,评级越高说明用户对该商品越喜爱,空则代表用户没有对商品进行评级。
基于用户的协同过滤的基本思想很简单,基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。
计算上,就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到相似邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户对没有涉及的物品的偏好,计算得到一个排序的物品列表作为推荐。
图给出了一个例子,对于用户A,根据用户的历史偏好,这里只计算得到一个邻居用户C,然后将用户C喜欢的物品D推荐给用户A。
5 基于物品(Item-based)的协同过滤算法
基于item的协同过滤,通过用户对不同item的评分来评测item之间的相似性,基于item之间的相似性做出推荐。
简单概括:给用户推荐和他之前喜欢的物品相似的物品。
基于物品的原理和基于用户类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品进行推荐
从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐
上图给出了一个例子,对于物品A,根据所有用户的历史偏好,喜欢物品A 的用户都喜欢物品C,得出物品A和物品C 比较相似,而用户C喜欢物品A,那么可以推断出用户C可能也喜欢物品C
User-based CF vs Item-based CF
对于电子商务和电影音乐的推荐网站,考虑到用户数量一般大大超过商品数量,此时基于物品的协同过滤推荐计算复杂度相对较低,是应用比较广泛的推荐算法
对于如新闻推荐等物品增长很快,实时性较高的场合,更适合采用基于用户的协同过滤
对于比如微博这样的社交网站,一方面考虑到内容的数量和更新速度,基于用户的协同过滤是一个更不错的选择,再加上社会网络信息,可以增加用户对推荐解释的信服程度
6 案例:基于物品的协同过滤
案例背景
该网站为互联网用户提供个性化电影推荐服务
数据:
网站提供所有电影信息
网站收集用户行为数据,包括浏览、评分和评论等各种行为数据
目标
网站帮助用户找到还没有看过并符合他兴趣的电影列表
数据样本
测试数据集: • 每行3个字段,依次是用户ID,电 影ID,用户对电影的评分(0-5分,每0.5分为一个评分点)
实现步骤
- 建立物品的同现矩阵
- 建立用户对物品的评分矩阵
- 矩阵计算推荐结果
步骤1:建立物品的同现矩阵
步骤2:建立用户对物品的评分矩阵
步骤3:矩阵计算推荐结果
*同现矩阵评分矩阵=推荐结果
协同(集体行动)+过滤(针对个人偏好)=个性化推荐**
7 协同过滤的优缺点
• 优点
• 能够过滤难以进行机器自动内容分析的信息,如艺术品,音乐等。
• 共享其他人的经验,避免了内容分析的不完全和不精确
• 有推荐新信息的能力。可以发现内容上完全不相似的信息,可以发现用户潜在的但自己尚未发现的兴趣偏好。
• 缺点
• 冷启动问题
• 数据稀疏问题
• 热门物品的干扰,两个不同领域的最热门物品之间具有较高的相似度
8 案例:协同过滤
电影打分推荐 比较基于用户/物品的协同过滤方案
基于内容的推荐
根据商品自身属性或用户定义标签进行推荐
基于内容的推荐
基于内容的推荐-基于标签
• 根据标签推荐物品的基本思想就是找到用户常用的一些标签,然后找到具有这些标签的热门物品,将其推荐给用户
• 需要注意的问题:
• 一个是要保证新颖性和多样性,可以用TF-IDF方法来降低热门物品的权重
• 另一个则是需要清除某些同义重复标签和没有意义的标签
基于内容推荐方法的优缺点
• 优点
• 不需要用户行为数据,没有冷启动和稀疏数据的问题。
• 能为具有特殊兴趣爱好的用户进行推荐。
• 能推荐新的或不是很流行的项目,没有新项目问题。
• 通过推荐项目的内容特征,可以给出推荐理由。
• 有比较成熟的分类学习模型可以应用。
• 缺点
• 要求能从内容中提取出有意义的特征
• 要求内容具备结构性
• 要求用户的兴趣偏好能够通过特征表达
9 混合推荐方法
加权型混合推荐
• 将来自不同推荐算法生成的候选结果及结果的分数,进一步进行组合(Ensemble)加权,生成最终的推荐
排序结果
• 分级型混合推荐
• 根据不同的推荐场景,将不同的推荐算法按照效果优劣进行层次性划分。在对应的推荐场景下,优先采用
高可信度的推荐算法生成的结果
• 交叉混合推荐
• 将不同推荐算法的生成结果,按照一定的配比组合在一起,打包后集中呈现给用户,保证最终推荐结果的
多样性
10 案例:微博推荐系统的设计
关键问题-冷启动
如何给新用户做个性化推荐
• 根据其注册信息进行粗粒度的推荐,如年龄,性别,爱好等
• 在新用户注册后为其提供一些内容,让他们反馈对这些内容的兴趣,再根据这些数据来进行推荐
• 如何将新物品推荐给用户
• 在推荐列表中随机给用户展示新物品,为新物品积累曝光机会和行为数据
• 通过语义分析对物品抽取关键词并赋予权重,这种内容特征类似一个向量,通过向量之间的余弦相似度便
可得出物品之间的相似度,从而进行推荐
• 新网站在数据稀少的情况下如何做个性化推荐
• 基于人工的力量,比如人工编辑热门榜单,人工分类标注
• 依托第三方数据,比如关联社交网络账号,导入联系人信息,抓取社交内容
关键问题-时间因素
对于新闻资讯类推荐,时间权重很重要。可以通过对每一个推荐物品加入时间衰减因子,对于越久之前的物品,赋予越小的权重
• 对于Item CF,在找相似物品时着重考虑用户最近喜欢的物品• 对于User CF,如果两个用户同时喜欢了相同的物品,那么可以给予这两个用户更高的相似度,而在推荐物品时,也可着重推荐口味相近的用户最近喜欢的物品
• 在相似度计算时基于时间对用户行为赋予一定权重,时间间隔越久权重越低,经过这种改进的算法往往能得到用户更满意的结果
关键问题-数据稀疏性
考虑到现在互联网用户和商品的规模,数据非常稀疏,直接应用协同过滤效果并不太好
• 这个问题本质上是无法完全克服的,只能一定程度上缓解
• 数据是否产生关联比用户的偏好更重要
• 实践表明,稀疏数据情况下给同一个商品分别打负分(低评价)和打正分的两个用户要看做正相关的而非负相关的
• 基于相似性可以传播的假设,通过扩散的算法,从原来的一阶关联(两个用户有多少相似打分或者共同购买的商品)到二阶甚至更高阶的关联,这种方法计算量比较大
• 基于单品的数据可能非常稀疏,如果把这些商品信息粗粒化,在品类的水平上数据就会变得稠密。如果能够计算品类之间的相似性,就可以帮助进行基于品类的推荐
11 基于矩阵分解(SVD)的推荐算法
• 奇异值分解(SVD)的定义:
• 任何一个MxN的矩阵A,如果它的行数M大于或等于它的列数N,那么它就可以被转换成以下三个矩阵的乘积:一个MxR的正交矩阵U, 一个RxR的对角矩阵(奇异值矩阵), 和一个RxN正交矩阵V的转置矩阵
• 对于由M个产品和N个用户组成的评分矩阵MxN,我们就可以把这个矩阵分解为 MxR 的矩阵U, RxR 的奇异值矩阵和 RxN 的矩阵V • 取S矩阵的前几个奇异值就可以接近原来的MxN的矩阵,而不必取完整的S