协同过滤
一、协同过滤简介
协同:利用群体行为来做决策。
过滤:从可行的推荐方案(标的物)中将用户喜欢的方案(标的物)找出来.
自然哲学思想:“群体的智慧”和“相似的物体具备相似的性质”
分类:基于用户的协同过滤和基于标的物的协同过滤。
二、协同过滤原理
核心思想: “物以类聚,人以群分”。
物理类聚:计算出每个标的物最相似的标的物列表,就可以为用户推荐用户喜欢的标的物相似的标的物 (基于物品(标的物)的协同过滤)
人以群分:将与该用户相似的用户喜欢过的标的物推荐给该用户(而该用户未曾操作过)。
协同过滤和核心是怎么计算标的物之间的相似度以及用户之间的相似度
隐式反馈:只要不是哟哦那个户直接评分的操作行为都算,包括浏览、点击、播放、收藏、评论、点赞、转发,很多隐式反馈是可以间接获得评分的,如果不简接获得评分,就用0、1表示是否操作过。
说一个非常朴素的思想:
列一个矩阵,矩阵中的值为用户对标的物的评分(或者隐式反馈,如点击、收藏等),如果用户有隐式反馈值为1,如果用户对某个标的物未产生行为,值为0。行向量:代表某个用户对所有标的物的评分向量,列向量:代表所有用户对某个标的物的评分向量。
真实的业务场景中,用户和标的物数量很庞大(用户百万、千万、亿级,标的物可能是十万、百万、千万级),但是每个用户只会操作有限个标的物,所以用户行为的矩阵是稀疏矩阵,正好方便进行相似度计算及为用户做推荐。
相似度的计算一般采用cosine余弦相似度算法来计算两个向量:
sim(v1,v2)= (v1 * v2)/|v1| * |v2|
计算完用户(行向量)或者标的物(列向量)之前的相似度,下面到了推荐的环节
1、基于用户的协同过滤
用户 1 对标的物 a 的喜好程度 sim(1,a) 用以下公式计算,U是与该用户最相似的用户集合(基于用户相似度找到与某用户最相似的K个用户), score(u(i),a)是用户u(i)对标的物a的喜好度(隐式反馈为1,对非隐式反馈,为用户对标的物的评分),sim(1,u(i))是用户u(i)与用户u的相似度
有了用户对每个标的物的评分,基于评分降序排列,用Top N算法推荐给用户,就是对所有物品进行运算后降序,取前N个物品推荐给用户。
2、基于标的物的协同过滤
用户 1 对标的物 a 的喜好程度 sim(1,a) 用以下公式计算,A是所有用户操作过的标的物的列表, score(u,a(i))是用户u对标的物a(i)的喜好度,sim(a(i),a)是标的物a(i)与a的相似度
基于评分降序排列,可以取topN推荐给用户
三、协同过滤算法的优缺点
1、 优点
1、 算法原理简单、思想朴素。
2、算法易于分布式实现、可以处理海量数据集。
3、算法整体效果很不错。
4、能够为用户推荐出多样性、新颖性的标的物。
5、协同过滤算法只需要用户的行为信息,不依赖用户及标的物的其他信息。
2、缺点
1、冷启动问题: 用户行为少,比如新上线的产品或者用户规模小的产品,很难发挥优势和价值。
对新入库的标的物,刚开始用户的操作是很少量的行为,这时相当于用户行为矩阵中该标的物对应的列基本都是零,所以无法进行计算,同时这个标的物不会出现在其他标的物的相似列表中,所以无法将该标的物推荐出去。
2、稀疏性问题: 现代的互联网产品,用户基数大,标的物数量多,一般用户只对很少量的标的物产生操作行为,所以行为矩阵十分的稀疏,太稀疏的行为矩阵计算出的标的物相似度往往不够精准,最后影响推荐结果的精准度。
四、协同过滤算法实际业务场景需要关注的问题
1、 是采用基于用户的协同过滤还是采用基于标的物的协同过滤
一般都会采用基于标的物的协同过滤,因为对于互联网产品来说,用户的增长相较于标的物的增长是较快的,但是新闻短视频类的应用标的物是增速巨大的,所以一般用基于标的物的协同过滤算法效果更稳定。
2、对时间加权
用户的兴趣是随着时间变化的,越久远的行为对用户当前的兴趣贡献越小,所以对于用户的行为矩阵,需要做时间加权处理,将用户的评分加一个时间惩罚因子,对久远的行为进行惩罚,可以采用指数衰减的方式 例:
n的值为标的物操作时间和基准时间相差的天数
3、用户对标的物的评分
真实场景,用户不一定给标的物评分,可能只有操作行为。这本来可以使用隐式反馈的方式来做协同过滤,但是效果很差。
虽然用户的反馈是隐式的,但操作行为是多样化的,比如浏览、点击、点赞、购买、收藏、分享、评论等等,可以根据这些行为的投入度(时间成本、资金成本、社交压力,投入成本越大给越高的分数)对这些行为人为打分,比如浏览1分,点赞2分,转发4分,这样就可以针对用户不同的行为生成差异化的评分。
对于音乐视频文章等,可以根据观看时长占总时长的比重进行打分,比如一个电影总时长为100分钟,如果用户看了60分钟就退出,可以给用户打6分。