推荐系统实战:ch2 利用用户行为数据

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在评分数据上有了很好的精度,也可以在隐含反馈上进行应用。

你可能感兴趣的:(推荐系统实战:ch2 利用用户行为数据)