推荐系统
一、推荐系统概念简介
推荐系统的本质是信息过滤,解决信息过载问题,将用户与物品联系起来。其实推荐系统很好的好处是发现长尾,大家可以看看长尾理论这本书~
与搜索引擎不同,不需要用户提供明确需求,而是通过分析用户的历史行为给用户的兴趣建模,从而主动给用户推荐能够满足给他们兴趣和需求信息。
个性化推荐系统需要依赖用户的行为数据,推荐系统应用都是由前台的展示页面、后台的日志系统以及推荐算法系统3 部分构成的。
推荐系统构成:一个完整的推荐系统由3个部分组成:收集用户信息的行为记录模块,分析用户喜好的模型分析模块和推荐算法模块。
推荐系统的实验方法:1.离线测试(主要是测试准确率,主要缺点是无法获得许多商业上关注的指标如点击率、转化率)。2.用户调查(高准确度不代表高满意度,所以需要用户调查,注意测试用户和真实用户分布尽量相同,缺点是招募测试用户代价较大)3.在线实验(在推荐系统上做AB测试,将它和旧的算法进行比较)。
评测指标:用户满意度、预测准确度(均方根误差)、覆盖率、多样性、新颖性、惊喜度、信任度
完善的推荐系统,是由很多算法组合而成,考虑用户维度、物品维度、时间维度等。
二、推荐系统算法简介
(1)推荐系统的数学定义:
设C为全体用户集合;设S为全体商品的集合;设u是评判把Si推荐Cj的好坏评判函数。推荐是对于c∈C,找到s∈S,使得u最大,即
通俗来说,推荐系统需要:
根据用户的:a)历史行为 b)社交网络 c)兴趣点 d)所处上下文(一天的情况)…去判断用户当前兴趣item。
推荐系统的评估:
准确度:1.打分系统
2.TOP N推荐
覆盖率:表示对物品长尾的发掘能力
H是用信息熵的方式来衡量,p(i)是某个商品被推荐出去的概率,比如这个商品被推荐给了100个人,只有10个人推荐成功了,概率就是10%。可能是某一个品类。当每个商品被推荐出去的概率都比较平均时,H会较高。
多样性:优秀的推荐系统能够保证推荐结果列表中物品的丰富性(两者之间的差异性)。第一个等式的分母实际上是,所以第一个值衡量的是某用户的推荐系统篮子的平均相似度情况;第二个值衡量的是计算一部分用户的相似度,然后求均值。
(2)推荐系统1:基于内容
基于用户喜欢的物品的属性或内容进行推荐。
需要分析内容,无需考虑用户与用户之间关联,只考虑user-item
通常使用在文本相关产品上进行推荐。
对于每个要推荐的内容,我们需要建立一份资料:比如词Ki在文件dj中的权重Wij(TF-IDF方法,一个词相对于这个文档的重要程度)
需要对用户也建立一份资料:比如用户看的那些新闻,词的权重,定义一个权重向量(Wci,…Wck),其中Wci表示第Ki个词对用户c的重要度。
然后再去评估两者权重向量的一个相似度,比如余弦距离公式
(3)推荐系统2:协同过滤
协同过滤是一种基于“近邻”的推荐算法(KNN, ANN)
根据用户在物品上的行为找到物品或者用户的“近邻”,比如你今天想去看电影,你不知道看什么,你就会去找和你关系比较近的小民、小红和宝宝问他们有什么好的推荐没有。
相似度/距离定义:两个向量相似度的评估,有以下几种方法,其中jaccard相似度适用于数据为0或者1的情况。两者都为1的个数/两者中至少有1个为1的个数。
a) 基于用户的协同过滤
基于用户有共同行为的物品,计算用户相似度。
找到近邻,对近邻在新物品的评价加权推荐。
计算用户的相似度;比如计算第5个用户与其他用户的相似度,与第1个用户算出相似度S1,与第2个用户算出相似度S2…一直到S11,选出最接近的二个人,比如S5,S6。所以第5个用户问号那个位置(第5个用户可能会对电影1的打分)的计算=(3*S3+5*S6)/(S3+S6)
b) 基于物品的协同过滤
对于有相同用户交互的物品,计算物品相似度。
找到物品近邻,进行推荐。
一个用户序列Ui,i=1…n,一个物品序列Pj,j=1…m,n*m得分矩阵v,每个元素V表示用户i对物品j的打分。计算物品i和物品j之间的相似度/距离。
假设用户Ux买过m3,m4物品,并给其打分4和8,我们可以计算m1与m3,m4之间的相似度,可以通过得分加权计算Rxi的推荐。
Eg:计算每一部电影与第一部电影的相似度(下面是用的皮尔森相似,对在计算相似度时缺失的数据不考虑),找到第三部和第六部相似度最像。
协同过滤优缺点:
基于用户行为,因此对推荐内容无需先验知识;只需要用户和商品关联矩阵即可,结构简单。在用户行为丰富的情况下效果好。缺点是需要大量显性或隐性用户行为,需要通过完全相同的商品关联,相似的不行;假定用户的兴趣完全取决于之前的行为,而和当前上下文环境无关;在数据稀疏的情况下受影响。可以考虑二度关联。
关于推荐系统的冷启动问题,所有推荐系统对于新用户都有这个问题,推荐非常热门的商品,收集一些信息,在用户注册的时候收集一些信息,在用户注册完之后,用一些互动游戏等确定喜欢与不喜欢。对于新物品,根据本身的属性,求与原来商品的相似度,item-based协同过滤可以推荐出去。
现在商家很多都用基于物品的协同过滤,因为用户实在太多了,而且很多人注册几个号。
(4)推荐系统3:隐语义模型
我们有用户评分矩阵,其中部分位置是空着的,我们希望尽量正确地填满未打分的项。我们需要找到隐含因子,可以对user和item进行关联。我们假定隐含因子的个数小于user和item数。假设因子为f1, f2, f3,由原来的打分矩阵转换为两个因子相关的矩阵相乘,当两者比较一致时,得分就会比较高,比如因子f3是年代,用户1喜欢看比较新的电影,取值为9,同时电影1也是年代比较新的电影,取值为6,两者相乘就会比较大。
相比之下,CF更加简单直接、可解释性更强,隐语义模型能更好地挖掘用户与物品隐藏关联。可以发掘之前可以没有发生过行为的这些用户和商品之间的关系。
为了更加准确,加入了偏置项,简单的理解就是wx+b,本身有些用户就是打分低,本身有些电影就是烂片,假设整个群体打分的均值,就形成了偏置项。个人的差异,群体的差异,电影的差异。
(5)推荐系统4:用户行为序列与word2vector
(6)推荐系统5:矩阵还原FM 因子制造机
三、推荐系统应用
开源的一些库,一般公司比较少用开源的,都是自己写,目前用的稍微多点的就是Mahout以及SPARK里面的ALS。
推荐书籍《推荐系统实战》