ch2 利用用户行为数据
为更好的对每个用户服务,需要深入挖掘用户的行为数据。用户的行为不是随机的,其中蕴含有模式和规律。推荐算法的任务就是在数据中寻找这些规律,提高用户体验。基于用户行为数据的推荐算法是推荐系统中重要的算法,又称为协同过滤算法。
2.1 用户行为数据简介
用户行为在推荐系统中一般分为两种:显性反馈数据和隐形反馈数据。显性反馈行为明确表示用户的洗好,比如直接让用户对物品进行评分和分类。隐式反馈行为指不明确用户喜好的行为,比如用户的页面浏览行为。
2.2 用户行为分析
- 用户活跃度和物品流行度的分布
- 用户活跃度和物品流行度的关系
- 新用户倾向于热门物品,老用户倾向于冷门物品。
给予用户行为数据设计的推荐算法一般称为协同过滤孙发,如基于领域的方法(Neighborhood-based)、隐语义模型(Latent factor model)、给予图的游走算法(Random walk on graph)。基于领域的方法是最常用算法,主要包含:
- 基于用户的协同过滤算法:给用户推荐相似用户喜欢的物品
- 给予物品的协同过滤算法:给用户推荐之间喜欢物品的相似物品
2.3 实验设计和算法评测
这里讨论的是 TopN 问题
2.3.1 数据集
选择MovieLens数据集。
2.3.2 实验设计
将数据集分为M份,在M-1部分进行训练,并在剩余部分进行预测。进行M次实验,求平均值。
2.3.3 评测指标
![](http://latex.codecogs.com/gif.latex?$$Recall=\frac{\sum_{u \in U}|R(u)\bigcap T(u)|}{\sum_{u \in U}|T(u)|}$$)
![](http://latex.codecogs.com/gif.latex?$$Precision=\frac{\sum_{u \in U}|R(u)\bigcap T(u)|}{\sum_{u \in U}|R(u)|}$$)
![](http://latex.codecogs.com/gif.latex?$$COverage=\frac{|U_{u \in U}R(u)|}{|I|}$$)
2.4 基于领域的方法
2.4.1 基于用户的协同过滤算法
基于用户的协同过滤算法是最古老的算法,也是最基础的算法。
1.基础算法
- 找到与目标用户相似的用户集合。
- 找到级和中用户喜欢的但没有听说的物品。
这里的关键在如何计算用户的相似度,协同过滤主要利用用户行为的相似度来计算。给定用户u和用户v,N(u)定义为用户u有过正反馈物品的集合。可用Jaccard计算u和v的相似度:
![](http://latex.codecogs.com/gif.latex?$$w_{uv} = \frac{|N(u)\bigcap N(v)|}{|N(u)\bigcup N(v)|}$$)
或使用余弦相似度计算:
![](http://latex.codecogs.com/gif.latex?$$w_{uv} = \frac{|N(u)\bigcap N(v)|}{\sqrt{|N(u) N(v)|}}$$)
得到用户相似度后,UserCF会给用户推荐与他最相似K个用户喜欢的物品。使用如下公式计算用户u对物品i的兴趣:
=\sum_{v\in S(u, K) \bigcap N(i)}w_{uv}r_{vi}$$)
其中S(u, K)为与用户u最相似的K个用户,N(i)是物品i有过行为的用户集合,$w_{uv}$为用户u和用户v之间的相似度。
2.用户相似度的改进
如果两个用户都买了热门商品,并不能表示他们之间很相似。该进的相似度如下:
![](http://latex.codecogs.com/gif.latex?$$w_{uv}=\frac{\sum_{i \in N(u) \bigcap N(v)}\frac{1}{log1+|N(i)|}}{\sqrt{|N(u)N(v)|}}$$)
2.4.2 基于物品的协同过滤算法
1.基础算法
给用户推荐和他们之间喜欢的物品相似的物品,但ItemCF并不计算物品内容属性的相似度,而是通过分析用户行为记录来计算物品之间的相似度。
- 计算物品之间的相似度
- 根据物品相似度得到推荐列表
物品相似度定义为:
![](http://latex.codecogs.com/gif.latex?$$w_{ij}=\frac{|N(i) \bigcap |N(j)|}{\sqrt{|N(i)|}}$$)
N(i)表示喜欢物品i的用户数,$N(i) \bigcap |N(j)$表示喜欢物品i和物品j的用户数。但是如果物品j非常热门,则公式会造成任何物品都会和热门物品有高的相似度,改进的公式如下:
![](http://latex.codecogs.com/gif.latex?$$w_{ij}=\frac{|N(i) \bigcap |N(j)|}{\sqrt{|N(i)N(j)|}}$$)
在物品协同过滤中,两个物品之间的相似度是因为它们被很多用户喜欢。如果每个用户兴趣都局限在某几个方面,因此如果某两个物品属于同一个用户列表,则两个物品属于有限的领域;如果两个物品同时属于很多用户的列表,则它们很可能属于同一个领域,有较高的相似度。
得到物品相似度后,使用如下公式计算用户u对物品i的兴趣:
=\sum_{v \in N(u) \bigcap S(j, k)}w_{ij}r_{ui}$$)
2.用户度对物品相似度的影响
即活跃用户对物品相似度的贡献小鱼不活跃用户:
![](http://latex.codecogs.com/gif.latex?$$w_{ij}=\frac{\sum{u \in N(i) \bigcap |N(j)}\frac{1}{log1+|N(u)|}}{\sqrt{|N(i)N(j)|}}$$)
3.物品相似度归一化
![](http://latex.codecogs.com/gif.latex?$$w'{ij}=\frac{w{ij}}{\max\limits_j w_{ij}}$$)
归一化的好处在于增加推荐的准确度,还提高推荐的覆盖率和多样性。
2.4.3 UserCF和ItemCF的比较
UserCF给用户推荐和他有共同爱好的物品,ItemCF给用户推荐和他之间喜欢物品相似的物品。UserCF推荐侧重于反应和用户兴趣相似的小群体的特点,而ItemCF推荐侧重于维系用户历史兴趣。
UserCF反应的是相似群体中物品热门,ItemCF反应的是自己的兴趣传承。
2.5 隐语义模型
2.5.1 基础算法
通过隐含特征联系用户兴趣和物品:对物品进行分类,在分类中挑选他可能喜欢的物品。从数据本身出发,自动找到物品分类,隐语义模型本质上是类似的。
LFM通过如下公式计算用户u对物品i的兴趣:
=r_{ui}=p^T_u q_i=\sum^F_{f=1}p_{u,k}q_{i,k}$$)
其中$p_{u,k}$衡量用户u的兴趣与第k个隐含类的关系;$q_{i,k}$度量了第k个隐含类与物品i之间的关系。
LFM在评分数据上有了很好的精度,也可以在隐含反馈上进行应用。