内容简介:小谈基于协同过滤的产品推荐算法
关于产品推荐,我们之前已经发表过好几篇关联规则的介绍啦,不过关联规则虽然简单好用,现在最火的却是各大电商使用(或声称使用)的基于协同过滤的推荐。所以,当你每天使用*东、*马逊的时候,有没有想过“协同过滤”到底是什么呢?
产品推荐算法是分析用户已有的行为信息,为其推荐可能感兴趣的产品,是精准营销的常用方法,被广泛应用于电商、新闻、电影、微博、超市以及金融产品等个性化产品推荐服务中,并取得了不同程度的成功。从原理上来讲,常用的推荐算法大致可以分为基于关联规则的推荐、基于协同过滤的推荐、基于内容的推荐以及混合推荐四大类。我们公众号之前曾经多次讨论过基于关联规则的推荐算法,今天就来介绍一下基于协同过滤的产品推荐算法。
协同过滤算法又可以主要分为基于用户的和基于产品的两种算法,我们会分别加以介绍。
1.问题描述
目前很多点评网站或者电商平台都允许用户有对产品进行评分,评分一般是五分制或者十分制,经过一段时间的数据积累,大量的用户ID会积累一定数量的评分数据,可以得到类似于下面的评分数据表:
上表的每一行表示一个用户,每一列代表一种产品,为了叙述方便,我们用c ij 表示用户i对产品j的评分。当然,实际项目中的用户数和产品数远远大于上表,数据的稀疏程度也有所差异。该表格是基于5分制的打分规则产生的,然而不是每个用户都对所有产品进行了评分因此,我们将有评分信息的表格都加上了底色。需要根据已有的评分对每个用户产生推荐产品,比如用户U7,没有购买过产品2、4、5、6、8(为了方便起见,这里假设没有评分就表示该用户没有购买过该产品),我们需要估计出该用户对这5种产品的评分,并根据估计的评分结果推荐产品。
另外一种情况,我们以商业银行为例,很多客户购买了银行不同类型、不同数量的理财产品,往往也需要建立客户的产品推荐模型,进行精准营销。但是这种情况得到的数据结构和上表有所不同,我们只知道每个客户是否购买过每种产品,不能得到客户对该种产品的评分,最后得到的是二分类的数据表,尽管所能提供的数据信息要少得多,但是推荐模型的建模思路基本是一样的。
协同过滤算法的实际上是基于相似性规则进行推荐的, 基于用户的协同过滤 就是将对与被推荐用户(即所谓的“Active user”)相似程度高的其他用户青睐的产品进行推荐,而 基于产品的协同过滤 算法则是在active user没有购买的产品列表中,找出与已购买产品相似程度高的产品对其进行推荐。因此,我们首先要介绍常用的衡量产品或者用户相似程度的的指标。
2.相似性衡量
常用的相似性衡量指标有三个,分别是Pearson相关系数、Cosine相关系数和Jaccard指数。我们可以将两个用户(或产品)的评分向量表示为u 1 =(c 11 , c 12 , ......, c 1k )和u 2 =(c 21 , c 22 , ......, c 2k ),这里的k表示这两个用户在k个产品上都进行了评分。相信大家对Pearson相关系数都是很熟悉的,这里不再赘述;Cosine相关系数其实就是夹角余弦:
Cosine相关系数是以u 1 和u 2 两个向量的夹角来表示他们的相似程度,夹角越小,Cosine相关系数也就越大。Jaccard指数是针对二分类的数据表计算相似度的,比如用户u 1 购买了A种产品,u 2 购买了B种产品,两个用户总共购买了 种产品,这其中有 种产品是双方都购买了的,Jaccard指数表示为: 显然,在确定的情况下,购买相同产品的种类越多,两人的相似度也就越高。基于用户或者产品的协同过滤算法基本都是利用上述三个指标来计算相似度,并进行产品推荐的,但是具体的做法有一些区别,下面分别介绍。
3.基于用户的协同过滤算法
将所有用户按照与与Active user的相似系数大小从高到低进行排序,可以取前*个,也可以取相关系数大于某个临界值的所有用户构成Active user的高相似用户集合,记为N(a),| N(a)|表示集合中的用户个数。根据N(a)中用户的评分信息,估计出Active user对未评分产品j的评分,估计公式为:
由于N(a)中的用户与Active user的相似性也有高低之别,不妨假设s ai 表示Active user与用户i之间的相似系数,也可以结合该相似系数计算出加权的评分估计值:
接下来就可以将估分最高的前*个产品推荐给Active user啦。
4.基于产品的协同过滤算法
基于产品的协同过滤算法首先需要计算出所有产品之间的两两相似度,如果产品个数为n,可以将产品之间的相似系数保存在n*n的矩阵中,为了节约储存空间和减少接下来的计算量,也可以只保留排在前k的相似系数。s ij 表示产品i和j之间的相似度,C(i)表示与产品i相似程度最高的前k个产品的集合,C(a)表示Active user所有已评分产品的集合,如果产品i是需要估计评分的产品,那么:
最后再将估分最高的前*个产品推荐给Active user,就完成了这个算法的应用过程。
5.小结
这两种推荐算法都采用了相同的相似度衡量方法,但是一般情况下,基于用户的协同过滤算法会涉及较大的计算量问题,因为用户的数量一般会远远大于产品的数量,这样产生的用户相似度矩阵也会很大,所以往往会利用反查的手段来减少计算量,将那些与Active user没有相同点评产品的用户先予以排除。
另外,在数据处理阶段,往往还会对每个用户的评分数据进行归一化处理,比如将每个用户的评分数据减去该用户所有产品评分的平均值,因为有些用户的评分总是偏高或者偏低,这样做就可以在一定程度上消除个人评分倾向性带来的偏差。
即可关注!也请随手推荐我们给你的小伙伴 ↓↓↓↓
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 推荐策略产品经理:什么是协同过滤推荐算法?
- 推荐系统产品与算法概述
- 让产品更智能:如何为你的产品选择适合的推荐算法
- HW12-第十讲:推荐系统设计与银行产品推荐
- [译] 代码详解:创建一个百分百懂你的产品推荐系统
- 推荐系统的产品设计
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
国际大学生程序设计竞赛例题解
郭嵩山 / 电子工业出版社 / 2007-7 / 32.00元
《国际大学生程序设计竞赛例题解3:图论、动态规划算法、综合题专集》以图论、动态规划算法、综合题的形式介绍了ACM国际大学生程序设计竞赛(ACM/ICPC)中所用到的典型算法,并结合例题,对如何灵活地运用这些算法进行比较详细分析和深入浅出的讲解。《国际大学生程序设计竞赛例题解3:图论、动态规划算法、综合题专集》以精讲多练为教学宗旨,并在每一个专题论述后用一章的篇幅选出一批有代表性的竞赛例题,对每道例......一起来看看 《国际大学生程序设计竞赛例题解》 这本书的介绍吧!