推荐系统-利用用户行为数据

用户的行为数据介绍:

用户的行为主要分为两种-显性反馈行为 和 隐性反馈行为 ,显性反馈行为主要包括 评分 和喜欢/不喜欢 ,youtube最早是使用是使用五分评价系统的,但是只有用户很不满意和特别满意的情况下才会评分,因此又把它变成了二级评分系统。 隐式反馈行为就是页面的浏览行为。

用户的行为分析:

用户的数据分布大都满足一种长尾分布,就是 每个单词出现的频率和他在热门排行榜的排名成反比。反映在网络行为上就是越是新用户越倾向于选择热门的产品越是老用户越是倾向于冷门产品 。

基于用户的行为的推荐算法就是协同过滤算法,包括 基于邻域的算法 , 隐语义模型 基于图的随机游走算法 ,而基于邻域的算法包括 基于用户的,和基于物品的

我们在评测算法的时候往往使用 准确率 召回率 覆盖率(最终的推荐列表中包含多大比例的物品,如果所有物品都至少被推荐给了一个用户,那么覆盖率就是100%)流行度(流行度越高推荐物品的新颖度越小)

基于邻域的算法:

基于用户的协同过滤

(1) 找到和目标用户兴趣相似的用户集合、

(2) 找到这个集合中用户喜欢的 且目标用户没见过的推荐给目标用户

计算公式(jaccard):

余弦相似度:

其中N(u)是u用户感兴趣的物品们;

但是这样就会导致我们计算大量的为空时候,我们还需要计算分母,导致计算资源的浪费。

所以我们建立物品到用户的倒排表,可以扫描每个物品栏对应的所有用户,每两对用户对应的C[u][v]加1,C为我们的用户和用户的关系矩阵

改进:两个user对热门的物品的行为相似并不能说明两个人的兴趣的相似性,只有对冷门的物品采用相同的态度才能证明两个人的兴趣相似,因此我们给每个物品加上一个权重既 流行度的倒数 越是冷门的物品的权重越大,N(i)为喜欢第i个物品的人

基于物品的协同过滤:

基于物品的协同过滤是目前用处最多的算法,比如amazon youtube,他可以利用用户的历史行为给推荐系统的结果提供解释。

(1)计算物品之间的相似度

(2)根据物品的相似度和用户的历史行为给用户生成推荐列表

相似度:和上述方法类似为了避免过多的浪费计算资源,我们先建立用户-物品的倒排表。我们就可以得到一个物品-物品之间的关系表。同样为了避免那些很活跃的用户对关系表的干扰(他们可能会让所有关系表的位置都加1)因此对他们的贡献加以限制

比较:usercf常常用于新闻的推荐,itemcf常常用于购物网站视频的推荐

usercf的推荐结果看重与反映和用户兴趣相似的小群体的热点,更社会化。比较粗粒度,所以特别适合想新闻这种没有细粒度的个性存在的领域,并且新闻的更新非常快就是item比较多,维护一张user-user的关系表比维护一张item-item的表更加easy,热门性和实效性才是个性化新闻推荐的热点

而itemcf算法更加重视细粒度的个性,维系用户的历史兴趣,帮助用户发现和他领域相关的物品,所以图书,电子商务,电影网站更加倾向于itemcf,这样需要维系一张item-item的表格,物品相似度比较稳定,新用户只要对一个物品产生行为,就可以推荐给他相关的物品。

隐语义模型(lfm):

之前的方法是使用统计的方法,隐语义模型主要是用优化的手段,首先找到用户的兴趣分类,然后从分类中挑选他喜欢的物品,lfm通过以下方式计算用户u对物品i的兴趣

p度量了用户u对隐分类k的关系,q度量了i物品和隐分类k的关系,由于是要机器学习的,所以我们可以随机采样得到负样本,既用户没有产生交互的数据,最终优化的式子为:

采用最简单的梯度下降法来解,K为我们的训练集。

lfm模型是不能因为用户行为的实时变化来调整结果的,为了解决这一问题我们将r增加一部分,

此处 x是u用户的历史兴趣,根据用户的历史获得,y就是该物品的内容属性。这样在新闻刚刚出现的时候就可以确定新闻的该向谁推荐

比较lfm与基于邻域的推荐:

基于邻域的方法是需要离线维护一张相关表,如果用户或者物品很多会暂居很大空间 O(N*N) 但是在lfm中假设有f个隐类 则空间为O(F(N+M)), 当用户一旦有新的动向的时候,itemcf就可以实时更新推荐给用户的列表,但是lfm则需要计算用户对所有物品的兴趣权重,然后进行排名的,因此比较适合物品数目较少的系统。

基于图的模型

可以利用随机游走的方法,得到用户对物体的排名,但是此方法时间复杂度很高,需要多次迭代才能收敛。

附:(svd分解在推荐系统的应用)

参考自:http://www.igvita.com/2007/01/15/svd-recommendation-system-in-ruby/

其实说参考也不准确,准确地说应该是半翻译半学习笔记。

仔细整理一遍,感觉还是收获很大的。

线性代数相关知识:

任意一个M*N的矩阵A(M行*N列M>N),可以被写成三个矩阵的乘积:

1. U:(M行M列的列正交矩阵)

2. S:(M*N的对角线矩阵,矩阵元素非负)

3. V:(N*N的正交矩阵的倒置)

即 A=U*S*V‘(注意矩阵V需要倒置)

直观地说:

假设我们有一个矩阵,该矩阵每一列代表一个user,每一行代表一个item。

如上图,ben,tom….代表user,season n代表item。

矩阵值代表评分(0代表未评分):

如 ben对season1评分为5,tom对season1 评分为5,tom对season2未评分。

机器学习和信息检索:

机器学习的一个最根本也是最有趣的特性是数据压缩概念的相关性。

如果我们能够从数据中抽取某些有意义的感念,则我们能用更少的比特位来表述这个数据。

从信息论的角度则是数据之间存在相关性,则有可压缩性。

SVD就是用来将一个大的矩阵以降低维数的方式进行有损地压缩。

降维:

下面我们将用一个具体的例子展示svd的具体过程。

首先是A矩阵。

A =

     5     5     0     5
     5     0     3     4
     3     4     0     3
     0     0     5     3
     5     4     4     5
     5     4     5     5

(代表上图的评分矩阵)

使用matlab调用svd函数:

[U,S,Vtranspose]=svd(A)

U =
   -0.4472   -0.5373   -0.0064   -0.5037   -0.3857   -0.3298
   -0.3586    0.2461    0.8622   -0.1458    0.0780    0.2002
   -0.2925   -0.4033   -0.2275   -0.1038    0.4360    0.7065
   -0.2078    0.6700   -0.3951   -0.5888    0.0260    0.0667
   -0.5099    0.0597   -0.1097    0.2869    0.5946   -0.5371
   -0.5316    0.1887   -0.1914    0.5341   -0.5485    0.2429

S =
   17.7139         0         0         0
         0    6.3917         0         0
         0         0    3.0980         0
         0         0         0    1.3290
         0         0         0         0
         0         0         0         0

Vtranspose =
   -0.5710   -0.2228    0.6749    0.4109
   -0.4275   -0.5172   -0.6929    0.2637
   -0.3846    0.8246   -0.2532    0.3286
   -0.5859    0.0532    0.0140   -0.8085

分解矩阵之后我们首先需要明白S的意义。

可以看到S很特别,是个对角线矩阵。

每个元素非负,而且依次减小,具体要讲明白元素值的意思大概和线性代数的特征向量,特征值有关。

但是可以大致理解如下:

在线性空间里,每个向量代表一个方向。

所以特征值是代表该矩阵向着该特征值对应的特征向量的方向的变化权重。

所以可以取S对角线上前k个元素。

当k=2时候即将S(6*4)降维成S(2*2)

同时U(6*6),Vtranspose(4*4)相应地变为 U(6*2),Vtranspose(4*2).

如下图(图片里的usv矩阵元素值和我自己matlab算出的usv矩阵元素值有些正负不一致,但是本质是相同的):

此时我们用降维后的U,S,V来相乘得到A2

A2=U(1:6,1:2)*S(1:2,1:2)*(V(1:4,1:2))‘ //matlab语句
A2 =

    5.2885    5.1627    0.2149    4.4591
    3.2768    1.9021    3.7400    3.8058
    3.5324    3.5479   -0.1332    2.8984
    1.1475   -0.6417    4.9472    2.3846
    5.0727    3.6640    3.7887    5.3130
    5.1086    3.4019    4.6166    5.5822

此时我们可以很直观地看出,A2和A很接近,这就是之前说的降维可以看成一种数据的有损压缩。

接下来我们开始分析该矩阵中数据的相关性。

我们将u的第一列当成x值,第二列当成y值。即u的每一行用一个二维向量表示,同理v的每一行也用一个二维向量表示。

如下图:

从图中可以看出:

Season5,Season6特别靠近。Ben和Fred也特别靠近。

同时我们仔细看一下A矩阵可以发现,A矩阵的第5行向量和第6行向量特别相似,Ben所在的列向量和Fred所在的列向量也特别相似。

所以从直观上我们发现U矩阵和V矩阵可以近似来代表A矩阵,换据话说就是将A矩阵压缩成U矩阵和V矩阵,至于压缩比例得看当时对S矩阵取前k个数的k值是多少。

到这里,我们已经完成了一半。

寻找相似用户:

依然用实例来说明:

我们假设,现在有个名字叫Bob的新用户,并且已知这个用户对season n的评分向量为:[5 5 0 0 0 5]。(此向量为列向量)

我们的任务是要对他做出个性化的推荐。

我们的思路首先是利用新用户的评分向量找出该用户的相似用户。

如上图(图中第二行式子有错误,Bob的转置应为行向量)。

对图中公式不做证明,只需要知道结论,结论是得到一个Bob的二维向量,即知道Bob的坐标。

将Bob坐标添加进原来的图中:

然后从图中找出和Bob最相似的用户。

注意,最相似并不是距离最近的用户,这里的相似用余弦相似度计算。(关于相似度还有很多种计算方法,各有优缺点)

即夹角与Bob最小的用户坐标。

可以计算出最相似的用户是ben。

接下来的推荐策略就完全取决于个人选择了。

这里介绍一个非常简单的推荐策略:

找出最相似的用户,即ben。

观察ben的评分向量为:【5 5 3 0 5 5】。

对比Bob的评分向量:【5 5 0 0 0 5】。

然后找出ben评分过而Bob未评分的item并排序,即【season 5:5,season 3:3】。

即推荐给Bob的item依次为 season5 和 season3。

最后还有一些关于整个推荐思路的可改进的地方:

1.

svd本身就是时间复杂度高的计算过程,如果数据量大的情况恐怕时间消耗无法忍受。 不过可以使用梯度下降等机器学习的相关方法来进行近似计算,以减少时间消耗。

2.

相似度计算方法的选择,有多种相似度计算方法,每种都有对应优缺点,对针对不同场景使用最适合的相似度计算方法。

3.

推荐策略:首先是相似用户可以多个,每个由相似度作为权重来共同影响推荐的item的评分。

时间: 2024-09-30 20:06:51

推荐系统-利用用户行为数据的相关文章

推荐系统之--- 利用用户行为数据

一.用户行为数据 一个用户行为表示为6部分,即产生行为的用户和行为的对象.行为的种类.产生行为的上下文.行为的内容和权重.用户行为的统一表示如下: user id 产生行为的用户的唯一标识item id 产生行为的对象的唯一标识behavior type 行为的种类(比如是购买还是浏览)context 产生行为的上下文,包括时间和地点等behavior weight 行为的权重(如果是观看视频的行为,那么这个权重可以是观看时长:如果是打分行为,这个权重可以是分数)behavior content

推荐系统实践(项亮)— 第4章 利用用户标签数据

标签应用:一种是让作者或专家给物品打标签:另一种是让普通用户给物品打标签(UGC).当一个用户对一个物品打上标签,这个标签一方面描述了用户的兴趣,另一方面则表示了物品的语义,从而将用户和物品联系了起来.标签,是一种重要的特征表现方式. 4.1 UGC标签系统的代表应用 标签系统的最大优势:发挥群体智力,获得对物品内容信息比较准确的关键词描述,而准确的内容信息是提升个性化推荐系统性能的重要资源. Delicious / CiteLike / 豆瓣 / Hulu 4.2 标签系统中的推荐问题 主要问

推荐系统实践(项亮)— 第2章 利用用户行为数据

2.1 用户行为数据简介 用户行为数据可分为显性反馈行为和隐性反馈行为: 用户数据的统一表示: 2.2 用户行为分析 在设计推荐算法之前需要对用户行为数据进行分析,了解数据中蕴含的一般规律可以对算法的设计起到指导作用. 用户活跃度和物品流行度 均近似符合长尾分布:e.g. 物品流行度定义:对用户产生过行为的总数:e.g. 用户活跃度定义:对物品产生过行为的总数 活跃度和流行度的关系:一般新用户倾向于浏览热门的物品,因为他们对网站还不熟悉,只能点击首页的热门物品,而老用户会逐渐开始浏览冷门的物品(

推荐系统读书笔记(二)利用用户行为数据

2.1 用户行为数据简介 显性反馈行为:用户明确表示对物品喜好的行为.评分.喜欢.不喜欢. 隐性反馈行为:不能明确反应用户喜好的行为.比如页面浏览.   显性反馈数据 隐性反馈数据 用户兴趣 明确 不明确 数量 较少 庞大 存储 数据库 分布式文件系统  实时读取 实时 有延迟 正负反馈 都有 只有正反馈 正反馈:用户的行为倾向于指用户喜欢的物品. 负反馈:用户的行为货币于用户不喜欢的物品. 用户行为的统一表示: user_id 产生行为的用户的唯一标识 item_id 产生行为的对象的唯一标识

第2章 利用用户行为数据

本笔记为自己学习之用,对笔记内容感兴趣的读者还请购买正版书籍<推进系统实践>,尊重作者著作权益! 2.1 用户行为数据简介 2.2 用户行为分析 2.2.1 用户活跃度和物品流行度的分布 Power Law,长尾分布 2.2.2 用户活跃度和物品流行度的关系 基于用户行为数据设计的推荐算法一般称为协同过滤算法,比如: 1.基于邻域的方法(neighborhood-based) 2.隐语义模型(latent factor model) 3.基于图的随机游走算法(random walk on gr

干货:如何利用CRM系统数据做用户画像?

企业在使用CRM系统一段时间后,系统就会积累很大的用户数据,那这些数据有什么用呢?当然有,我们可以对数据进行分析,做用户画像,从而更了解我们的客户,帮助企业做决策. 今天智云通CRM系统小编跟大家一起聊聊如何利用CRM系统数据做用户画像. 一步步来.当我们谈到了解我们的客户(understand our member base),无论是用户类群(segmentation) 还是用户肖像(persona) ,其实说白了是对两类客户认知的判断: l 现存客户 (Existing Customer)

基于用户行为数据为用户推荐商品

1.用户行为数据 用户行为数据在网站中最简单的存在形式就是日志,用户行为就是指用户在系统中进行的各种操作,比如用户在电商网站中进行的浏览.点击.搜索.购买.收藏等行为.我们可以通过分析这些数据来推测用户喜爱哪种商品,从而为用户推荐他们更偏爱的商品. 2.用户行为分类 根据反馈的明确性来说,用户行为在个性化推荐系统中一般分两种:①显性反馈行为:明确表示用户对商品喜恶的行为,比如评价.收藏等:②隐性反馈行为:不能明确表示用户喜恶的行为,比如浏览页面等. 根据反馈的方向来说,用户行为数据可以分为:①正

用户画像数据建模方法

作者:百分点技术总监郭志金 摘自:百分点(ID: baifendian_com) 从1991年Tim Berners-Lee发明了万维网(World Wide Web)开始,到20年后2011年,互联网真正走向了一个新的里程碑,进入了“大数据时代”.经历了12.13两年热炒之后,人们逐渐冷静下来,更加聚焦于如何利用大数据挖掘潜在的商业价值,如何在企业中实实在在的应用大数据技术.伴随着大数据应用的讨论.创新,个性化技术成为了一个重要落地点.相比传统的线下会员管理.问卷调查.购物篮分析,大数据第一次

企业需教育业务用户重视数据安全问题

要保证数据安全需要做的大部分工作都是相对简单的,前提是我们要问自己六个关键的问题:“who, what,where, when, how, why” Who代表着不同的股东;What代表着哪些数据需要保护;Where表示存放数据的位置;When代表数据最敏感的时段,比如升级时;How代表需要做哪些事;最后Why代表数据价值与业务之间的联系.能够回答这六个问题,那么保证数据安全并提供更好的透明度这一目标就已经实现95%了. 在移动化时代,BYOD甚至被视为USB存储出现之后最大的IT安全隐患,但移