【推荐算法】如何利用用户行为数据为其做推荐?

以下内容为《推荐系统实践》个人学习笔记,包含书籍内容概括、自己的解读。
文章内容仅供参考,有兴趣可自行购买阅读原文。

1. 如何分类用户行为,及用数据表示用户行为?

1.1 如何对用户行为分类?

按照是否能反馈分为:
显性反馈行为(explicitfeedback):包括用户明确表示对物品喜好的行为;
隐性反馈行为(implicit feedback):不能明确反应用户喜好的行为。最具代表性的隐性反馈行为就是页面浏览行为。用户浏览一个物品的页面并不代表用户一定喜欢这个页面展示的物品,比如可能因为这个页面链接显示在首页,用户更容易点击它而已。

按照行为反馈方向分类为:
正反馈:指用户的行为倾向于指用户喜欢该物品;
负反馈:指用户的行为倾向于指用户不喜欢该物品;

在显性反馈中,很容易区分一个用户行为是正反馈还是负反馈,而在隐性反馈行为中,就相对比较难以确定。


1.2 如何设计表示用户行为的数据?

用户行为数据可由6部分组成:1. 用户;2. 行为;3. 行为的种类;4. 产生行为的上下文;5. 行为的内容;6. 行为的权重
在这里插入图片描述

不同的数据集包含不同的行为,按照有无上下文信息+显性/隐性反馈分类,可分为如下4类:

- 无上下文信息的隐性反馈数据集:每一条行为记录仅仅包含用户ID和物品ID。
- 无上下文信息的显性反馈数据集:每一条记录包含用户ID、物品ID和用户对物品的评分。
- 有上下文信息的隐性反馈数据集:每一条记录包含用户ID、物品ID和用户对物品产生行为的时间戳。
- 有上下文信息的显性反馈数据集:每一条记录包含用户ID、物品ID、用户对物品的评分和评分行为发生的时间戳。

2. 如何分析用户活跃度与物品流行度?

2.1 用户活跃度和物品流行度分布情况是怎么样的?两者有什么关系?

f u ( k ) f_u(k) fu(k)为对k个物品产生过行为的用户数,令 f i ( k ) f_i (k) fi(k)为被k个用户产生过行为的物品数。那么, f u ( k ) f_u(k) fu(k) f i ( k ) f_i (k) fi(k)都满足长尾分布。长尾分布公式如下:

f ( x ) = α x k f(x)=\alpha x^{k} f(x)=αxk
即,同时对越多物品产生过行为的用户数越少;同时被越多用户“使用过”的物品越少。

研究结论表示:用户活跃度和物品流行度的关系:用户越活跃,越倾向于浏览冷门的物品。


2.2 协同过滤算法简介

仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法。学术界对协同过滤算法进行了深入研究,提出了很多方法,比如基于邻域的方法(neighborhood-based)、隐语义模型(latent factor model)、基于图的随机游走算法(random walk on graph)等。在这些方法中,最著名的、在业界得到最广泛应用的算法是基于邻域的方法,而基于邻域的方法主要包含下面两种算法。

  • 基于用户的协同过滤算法:给用户推荐和他兴趣相似的其他用户喜欢的物品。
  • 基于物品的协同过滤算法:给用户推荐和他之前喜欢的物品相似的物品。

3. 如何设计推荐算法实验,及设计算法评测?

3.1 如何设计推荐算法实验?

首先,将用户行为数据集按照均匀分布随机分成M份(本章取M=8),挑选一份作为测试集,将剩下的M-1份作为训练集。
然后,在训练集上建立用户兴趣模型,并在测试集上对用户行为进行预测,统计出相应的评测指标。为了保证评测指标并不是过拟合的结果,需要进行M次实验,并且每次都使用不同的测试集。
最后,将M次实验测出的评测指标的平均值作为最终的评测指标。


3.2 如何设计推荐算法的评测指标?

对用户u推荐N个物品,记为R(u),令用户u在测试集上喜欢的物品集合为T(u)。

评测指标1:召回率
描述用户喜欢的物品中,被推荐的物品的比例。比如用户u喜欢20个物品,我们推荐了10个,其中有5个在用户u喜欢的物品列表中,那么用户u的召回率=1/4。公式如下:

r e c a l l = ∑ u R ( u ) ∩ T ( u ) ∑ u T ( u ) recall=\frac{ \displaystyle\sum_u{R(u)\cap T(u)} }{ \displaystyle\sum_uT(u) } recall=uT(u)uR(u)T(u)

评测指标2:准确率
描述用户被推荐的物品中,实际喜欢的物品的比例。在上面的例子中,准确率=1/2;公式如下:

p r e c i s i o n = ∑ u R ( u ) ∩ T ( u ) ∑ u R ( u ) precision=\frac{ \displaystyle\sum_u{R(u)\cap T(u)} }{ \displaystyle\sum_u{R(u)} } precision=uR(u)uR(u)T(u)

评测指标3:覆盖率
反映了推荐算法发掘长尾的能力,覆盖率越高,说明推荐算法越能够将长尾中的物品推荐给用户。最简单的覆盖率公式如下:

C o v e r a g e = ∣ U u ∈ U R ( u ) ∣ ∣ I ∣ Coverage=\frac{ |U_{u\in{U}}R(u)| }{ |I| } Coverage=IUuUR(u)

其中, ∣ U u ∈ U R ( u ) ∣ |U_{u\in{U}}R(u)| UuUR(u)表示被推荐物品的用户数, ∣ I ∣ |I| I表示所有物品的总数量。该覆盖率表示最终的推荐列表中包含多大比例的物品。如果所有的物品都被推荐给至少一个用户,那么覆盖率就是100%。(即,被推荐的物品数/物品总数量)

评测指标4:新颖度
这里用推荐列表中物品的平均流行度度量推荐结果的新颖度。如果推荐出的物品都很热门,说明推荐的新颖度较低,否则说明推荐结果比较新颖。(即,推荐视频中的热门视频数量)


4. 如何使用基于领域的算法做推荐?

4.1 基于用户的协同过滤算法

什么是基于用户的协同过滤算法?
在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。这种方法称为基于用户的协同过滤算法。


基于用户的协同过滤算法主要包括2个步骤:
(1) 找到和目标用户兴趣相似的用户集合;
(2) 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。

步骤(1)的关键就是计算两个用户的兴趣相似度,协同过滤算法主要利用行为的相似度计算兴趣的相似度。计算方法有:1)Jaccard公式;2)余弦相似度;3)排除法优化余弦相似度;

1) Jaccard公式
给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v)为用户v曾经有过正反馈的物品集合。那么,我们可以通过如下的Jaccard公式简单地计算u和v的兴趣相似度:即,共同正反馈物品数量/每个用户物品数量之和

w u v = ∣ N ( u ) ∩ N ( v ) ∣ ∣ N ( u ) ∪ N ( v ) ∣ w_{uv}=\frac{ |N(u)\cap N(v)| }{ |N(u)\cup N(v)| } wuv=N(u)N(v)N(u)N(v)

2)余弦相似度
或者通过余弦相似度计算:即,共同正反馈物品数量/每个用户物品数量之积开平方

w u v = ∣ N ( u ) ∩ N ( v ) ∣ ∣ N ( u ) ∣ ∣ N ( v ) ∣ w_{uv}=\frac{ |N(u)\cap N(v)| }{ \sqrt{|N(u)|| N(v)|} } wuv=N(u)∣∣N(v) N(u)N(v)

3)排除法优化余弦相似度

以上方法的时间复杂度是 O ( ∣ U ∣ ∗ ∣ U ∣ ) O(|U|*|U|) O(UU),当用户数很大时非常耗时。很多用户相互之间并没有对同样的物品产生过行为,即很多时候 O ( ∣ U ∣ ∗ ∣ U ∣ ) = 0 O(|U|*|U|)=0 O(UU)=0。如果换一个思路,我们可以首先计算出 ∣ N ( u ) ∩ N ( v ) ∣ ≠ 0 |N(u)\cap N(v)|\ne 0 N(u)N(v)=0的用户对(u,v),然后再对这种情况除以分母 ∣ N ( u ) ∣ ∣ N ( v ) ∣ \sqrt{|N(u)|| N(v)|} N(u)∣∣N(v)

排除法的具体步骤如下:建立物品到用户的倒排表,对于每个物品都保存对该物品产生过行为的用户列表。令稀疏矩阵 C [ u ] [ v ] = ∣ N ( u ) ∩ N ( v ) ∣ C[u][v]=|N(u)\cap N(v)| C[u][v]=N(u)N(v),然后计算 ∣ N ( u ) ∣ ∣ N ( v ) ∣ \sqrt{|N(u)|| N(v)|} N(u)∣∣N(v) ,再对两个矩阵进行相对位置元素的除法运算,就可以得到不同用户间的行为相似度的矩阵。


得到用户之间的兴趣相似度后,UserCF算法会给用户推荐和他兴趣最相似的K个用户喜欢的物品。这时,就要想办法衡量用户对物品的兴趣。

假设对于计算用户u对物品i兴趣,这里的兴趣,可以理解为,对该物品可能产生行为的行为度。公式如下:

p ( u , i ) = ∑ v ∈ S ( u , k ) ∩ N ( i ) w u v r v i p(u,i)=\sum_{v\in S(u,k)\cap N(i)}w_{uv}r_{vi}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值