推荐系统——利用用户行为数据(附代码与实验结果)

本文介绍了用户行为数据在推荐系统中的应用,重点关注显性和隐性反馈行为。通过分析用户活跃度和物品流行度的关系,阐述了协同过滤算法,包括基于用户和物品的两种方法,并提供了实验设计、评测指标及Python代码示例。通过对比,证实了改进的用户相似度计算方法能提高推荐效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


实现个性化推荐的最理想情况是用户能在注册的时候主动告诉我们他喜欢什么,但这种方法有3个缺点:首先,现在的自然语言理解技术很难理解用户用来描述兴趣的自然语言;其次,用户的兴趣是不断变化的,但用户不会不停地更新兴趣描述;最后,很多时候用户并不知道自己喜欢什么,或者很难用语言描述自己喜欢什么。因此,我们需要通过算法自动发掘用户行为数据,从用户的行为中推测出用户的兴趣,从而给用户推荐满足他们兴趣的物品。
基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界一般将这种类型的算法称为 协同过滤算法。顾名思义,协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。

用户行为数据简介

用户行为数据在网站上最简单的存在形式就是日志。网站在运行过程中都产生大量原始日志(raw log),并将其存储在文件系统中。很多互联网业务会把多种原始日志按照用户行为汇总成会话日志(session log),其中每个 会话表示一次用户行为和对应的服务。
用户行为在个性化推荐系统中一般分两种——显性反馈行为(explicit feedback)和隐性反馈行为(implicit feedback)。显性反馈行为包括用户明确表示对物品喜好的行为。 很多网站都使用了5分的评分系统来让用户直接表达对物品的喜好,但也有些网站使用简单的“喜欢”或者“不喜欢”按钮收集用户的兴趣。
与显性反馈行为相对应的是隐性反馈行为。隐性反馈行为指的是那些不能明确反应用户喜好的行为。最具代表性的隐性反馈行为就是页面浏览行为。用户浏览一个物品的页面并不代表用户一定喜欢这个页面展示的物品,比如可能因为这个页面链接显示在首页,用户更容易点击它而已。相比显性反馈,隐性反馈虽然不明确,但数据量更大。
在这里插入图片描述
按照反馈的明确性分,用户行为数据可以分为显性反馈和隐性反馈,但按照反馈的方向分,又可以分为正反馈和负反馈。正反馈指用户的行为倾向于指用户喜欢该物品,而负反馈指用户的行为倾向于指用户不喜欢该物品。在显性反馈中,很容易区分一个用户行为是正反馈还是负反馈,而在隐性反馈行为中,就相对比较难以确定。

用户行为分析

用户活跃度和物品流行度的分布

很多关于互联网数据的研究发现,互联网上的很多数据分布都满足一种称为Power Law的分布,这个分布在互联网领域也称长尾分布。 物品的流行度指对物品产生过行为的用户总数 ,用户的活跃度为用户产生过行为的物品总数。
在这里插入图片描述

用户活跃度和物品流行度的关系

不活跃的用户要么是新用户,要么是只来过网站一两次的老用户。那么,不同活跃度的用户喜欢的物品的流行度是否有差别? 用户越活跃,越倾向于浏览冷门的物品 。
在这里插入图片描述
仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法。学术界对协同过滤算法进行了深入研究,提出了很多方法,比如基于邻域的方法(neighborhood-based)、隐语义模型(latent factor model)、基于图的随机游走算法(random walk on graph)等。在这些方法中,最著名的、在业界得到最广泛应用的算法是基于邻域的方法,而基于邻域的方法主要包含下面两种算法。
基于用户的协同过滤算法:这种算法给用户推荐和他兴趣相似的其他用户喜欢的物品。
基于物品的协同过滤算法:这种算法给用户推荐和他之前喜欢的物品相似的物品。

实验设计和算法评测

数据集

MovieLens数据集,包含6000多用户对4000多部电影的100万条评分。该数据集是一个评分数据集,用户可以给电影评5个不同等级的分数(1~5分)。着重研究隐反馈数据集中的Top N推荐问题,因此忽略了数据集中的评分记录。也就是说,Top N推荐的任务是预测用户会不会对某部电影评分,而不是预测用户在准备对某部电影评分的前提下会给电影评多少分。

实验设计

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

评测指标

对用户 u u u推荐 N N N个物品(记为 R ( u R(u R(u)),令用户 u u u在测试集上喜欢的物品集合为 T ( u ) T(u) T(u),然后可以通过准确率/召回率/覆盖率评测推荐算法的精度:
R e c a l l = ∑ u ∣ R ( u ) ⋂ T ( u ) ∣ ∑ u ∣ T ( u ) ∣ Recall=\frac {\sum_{u}{\mid{R(u)\bigcap T(u)}\mid}}{\sum_{u}{\mid{T(u)}\mid}} Recall=uT(u)uR(u)T(u)
P r e c i s i o n = ∑ u ∣ R ( u ) ⋂ T ( u ) ∣ ∑ u ∣ R ( u ) ∣ Precision=\frac {\sum_{u}{\mid{R(u)\bigcap T(u)}\mid}}{\sum_{u}{\mid{R(u)}\mid}} Precision=uR(u)uR(u)T(u)
C o v e r a g e = ∣ ⋃ R ( u ) ∣ I Coverage=\frac {\mid \bigcup {R(u)\mid}}{I} Coverage=IR(u)

基于领域的算法

基于邻域的算法分为两大类,一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法 。

基于用户的协同过滤算法

基于用户的协同过滤算法主要包括两个步骤 :

  1. 找到和目标用户兴趣相似的用户集合;
  2. 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户;

协同过滤算法主要利用行为的相似度计算兴趣的相似度。给定用户 u u u和用户 v v v,令 N ( u ) N(u) N(u)表示用户 u u u曾经有过正反馈的物品集合,令 N ( v ) N(v) N(v)为用户 v v v曾经有过正反馈的物品集合。那么,我们可以通过如下的Jaccard公式简单地计算u和v的兴趣相似度:
w u v = ∣ N ( u ) ⋂ N ( v ) ∣ ∣ N ( u ) ⋃ N ( v ) ∣ w_{uv}=\frac{\mid{N(u)\bigcap{N(v)}}\mid}{\mid{N(u)\bigcup{N(v)}}\mid} wuv=N(u)N(v)N(u)N(v)
或则通过余弦相似度计算:
w u v = ∣ N ( u ) ⋂ N ( v ) ∣ ∣ N ( u ) ∣ ∣ N ( v ) ∣ w_{uv}=\frac{\mid{N(u)\bigcap{N(v)}}\mid}{\sqrt{\mid{N(u)\mid\mid{N(v)\mid}}}} wuv=N(u)N(v) N(u)N(v)

在这里插入图片描述
在这里插入图片描述
得到用户之间的兴趣相似度后,UserCF算法会给用户推荐和他兴趣最相似的 K K K个用户喜欢的物品。如下的公式度量了User CF算法中用户 u u u对物品 i i 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)\bigcap{N(i)}}}{w_{uv}r_{vi}} p(u,i)=vS(u,K)N(i)wuvrvi
其中, S ( u , K ) S(u, K) S(u,K

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值