推荐系统实践 - 02利用用户行为数据
–未经授权,禁止转载–
第二章 利用用户行为数据
- 1 用户行为数据分析
- 2 基于邻域的算法
- 2.1 基于用户的协同过滤算法(UserCF)
- 2.2 基于物品的协同过滤算法(ItemCF)
- 2.3 UserCF和ItemCF对比
- 3 隐语义模型
- 4 基于图的模型
1 用户行为数据分析
用户行为数据最简单的存在形式就是日志。
用户行为在个性化推荐系统中一般分为显性反馈行为(explicit feedback)和隐性反馈行为(implicit feedback)
- 显性反馈行为:明确反映用户对物品喜好的行为,如评分
- 隐性反馈行为:不能明确反映用户喜好的行为,如页面浏览、购买等行为
- 显性、隐性反馈行为区别:显性反馈行为能明确反馈用户兴趣,但数据较少,存储在数据库中,能够实时读取,有正反馈和负反馈;隐性反馈行为不能明确反馈用户兴趣,但数据量庞大,存储在分布式文件系统中,有一定的延迟,只有正反馈。
用户行为的统一表示:用户、行为对象、行为分类(如购买or浏览)、产生行为的上下文(时间、地点等)、行为的权重(如观看时长、评分的分数等)、行为内容(评论文本、打的标签等)
用户行为数据中的一般规律:互联网上很多数据分布都满足长尾分布(Power Law分布)。如对xxx个物品产生过用户行为的用户数和被xxx个用户产生过行为的物品数都满足长尾分布。
f(x)=axkf(x)=ax^{k}f(x)=axk
用户活跃度和物品流行度关系:用户越活跃,越倾向于浏览冷门物品
仅仅基于用户行为数据设计的算法称谓协同过滤算法。协同算法包括基于邻域的方法(neighborhood-based)、隐语义模型(latent factor model)、基于图的随机游走算法(random walk on graph)等。
协同过滤算法(基于用户行为数据)存在的问题:两个不同领域的最热门物品之间往往具有较高的相似度。比如说,父辈喜欢看新闻联播,之后看晚八点档电视剧。那么黄金时期的电视剧和新闻联播相似度就会很高。
2 基于邻域的算法
基于邻域的算法主要包括基于用户的协同过滤算法(User Collaborative Filter, UserCF)和基于物品的协同过滤算法(item-based collaborative filtering, ItemCF)。
2.1 基于用户的协同过滤算法(UserCF)
基于用户的协同过滤算法:给用户推荐和他兴趣相似的用户喜欢的商品。
算法步骤:
1)找到和用户兴趣相似的用户集合。即计算两个用户的兴趣相似度。给定用户uuu和用户vvv,N(u)N(u)N(u)表示用户uuu曾经有过正反馈的物品集合,N(v)N(v)N(v)表示用户vvv曾经有过正反馈的物品集合。可以通过Jaccard公式、余弦相似度等方法计算兴趣相似度。
Jaccard公式:
Wuv=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)
余弦相似度:
Wuv=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)
如果按照穷举的思维计算所有用户两两间的相似度非常耗时,因为很多用户没有对同一个物品有过行为,即N(u)∩N(v)=0N(u)\cap{N(v)}=0N(u)∩N(v)=0。为改进方法,可以先计算出N(u)∩N(v)≠0N(u)\cap{N(v)}\neq{0}N(u)∩N(v)=0的用户,再进行计算。具体过程如下:
2)得到用户兴趣相似度之后,就可以给用户推荐和他兴趣最相似的K个用户喜欢的物品。
利用以下公式计算UserCF算法中用户u对物品i的感兴趣程度:
- u,vu,vu,v:用户
- iii:物品
- S(u,K)S(u, K)S(u,K):和用户uuu兴趣最接近的KKK个用户
- N(i)N(i)N(i):对物品iii有过行为的用户集合
- wuvw_{uv}wuv:用户uuu和vvv的兴趣相似度
- rvir_{vi}rvi:用户vvv对商品i的兴趣,单一行为的隐反馈rvi=1r_{vi}=1rvi=1
p(u,i)=∑v∈S(u,K)∩N(i)wuvrvip(u,i)=\sum{_{v\in{S(u,K)\cap{N(i)}}}w_{uv}r_{vi}}p(u,i)=∑v∈S(u,K)∩N(i)wuvrvi
如对用户A的推荐过程如下:
参数K的选择:
- 准确率和召回率:不和K呈线性关系。当K≈80K\approx{80}K≈80时,算法精度较好
- 流行度:K越大,流行度越大
- 覆盖率:K越大,覆盖率越小
余弦相似度的改进公式:
热门物品相似可能不代表用户兴趣,如大多数人都购买过《新华字典》。对冷门物品有过相同行为更能说明兴趣相似度。新公式惩罚了用户uuu和vvv共同列表中热门物品的相似度影响。N(i)N(i)N(i)为喜欢物品iii的用户数。
UserCF: Wuv=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)
UserCF-IIF(IIF(Inverse Item Frequence)即物品流行度对数的倒数): Wuv=∑i∈N(u)∩N(v)1log(1+N(i))N(u)N(v)W_{uv}=\frac{\sum{_{i\in{N(u)\cap{N(v)}}}\frac{1}{\log{(1+N(i))}}}}{\sqrt{N(u)N(v)}}Wuv=N(u)N(v)∑i∈N(u)∩N(v)log(1+N(i))1
2.2 基于物品的协同过滤算法(ItemCF)
基于物品的协同过滤算法:推荐和用户之前喜欢的物品相似的物品,如购买该商品的用户也经常购买的商品。
算法步骤:
1)计算物品之间相似度
ItemCF并不利用物品的内容属性计算物品相似度,通过分析用户的行为记录计算物品之间的相似度,N(i)N(i)N(i)为对物品i有过行为的用户。
Wij=N(i)∩N(j)N(i)W_{ij}=\frac{N(i)\cap{N(j)}}{N(i)}Wij=N(i)N(i)∩N(j)
相似度公式的改进公式:
如果物品j很热门,那么相似度就会约等于1。为了避免推荐热门商品,可以改进为
Wij=N(i)∩N(j)N(i)N(j)W_{ij}=\frac{N(i)\cap{N(j)}}{\sqrt{N(i)N(j)}}Wij=N(i)N(j)N(i)∩N(j)
过程如下:
2)根据物品相似度和用户历史行为给用户生成推荐列表
用户u对物品j的兴趣如下:
- N(u)N(u)N(u):用户uuu喜欢的物品集合
- S(j,K)S(j,K)S(j,K):和物品jjj最相似的KKK个物品
- wjiw_{ji}wji:物品jjj和iii的相似度
- ruir_{ui}rui:用户uuu对物品iii的兴趣
puj=∑i∈N(u)∩S(j,k)wjiruip_{uj}=\sum{_{i\in{N(u)\cap{S(j,k)}}}w_{ji}r_{ui}}puj=∑i∈N(u)∩S(j,k)wjirui
如对用户C的推荐过程如下:
参数K的选择:
- 准确率和召回率:不和K呈线性关系。当K≈10K\approx{10}K≈10时,算法精度较好
- 流行度、覆盖率:不和K呈线性关系。
物品相似度的改进公式:
用户行为相关可能不代表物品相似,如书店老板一次性购买了80%的书,但不意味着这80本书之间两两有关联。活跃度低的用户的行为更能说明物品相似度。新用户惩罚了用户活跃度。(在实际应用中,也可直接忽略特殊用户的兴趣列表)
ItemCF: Wij=N(i)∩N(j)N(i)W_{ij}=\frac{N(i)\cap{N(j)}}{N(i)} Wij=N(i)N(i)∩N(j)
ItemCF-IUF(IUF(Inverse User Frequence)即用户活跃度对数的倒数): Wij=∑u∈N(i)∩N(j)1log(1+N(u))N(i)W_{ij}=\frac{\sum{_{u\in{N(i)\cap{N(j)}}}}\frac{1}{\log{(1+N(u))}}}{N(i)} Wij=N(i)∑u∈N(i)∩N(j)log(1+N(u))1
将物品相似度矩阵最大值归一化:
可以提高推荐准确率, 同时可以提高推荐算法覆盖率。
(存疑:好像并没有改变结果)
2.3 UserCF和ItemCF对比
UserCF | ItemCF | |
---|---|---|
原理 | 给用户推荐和他兴趣相似的用户喜欢的商品 | 推荐和用户喜欢的物品相似的物品,如购买该商品的用户也经常购买的商品 |
性能 | 适合用户较少的场景。如果用户数过大,计算用户相似度矩阵代价很大 | 适合物品数明显小于用户数的场景,如果物品数过大(如网页),计算物品相似度矩阵代价很大 |
领域 | 时效性较强,适合用户个性化兴趣不明显的领域 | 长尾物品丰富,用户个性化需求强烈的领域 |
实时性 | 用户有新行为,推荐结果不一定立即变化 | 用户有新行为,推荐结果实时变化 |
冷启动 | 新用户对很少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度是每隔一段时间离线计算的 | 新用户对一个物品产生行为,就可以给他推荐和该物品相关的其他用户 |
新物品上线后,一旦有用户对物品产生行为,就可以将新物品推荐给和对它产生行为的用户兴趣相似的其他用户 | 不能在不离线更新物品相似度表的情况下将新物品推荐给用户 | |
推荐理由 | 很难对推荐结果做出解释 | 可以利用用户历史行为对推荐结果做出解释 |
3 隐语义模型
基础算法
隐语义模型(latent factor model,LFM)的核心思想是通过隐含特征联系用户兴趣和物品。
具体过程如下:给物品分类;确定用户对物品的感兴趣程度;选择属于用户感兴趣的物品推荐给用户。
传统的解决方案有诸多问题,但隐语义分析技术能够很好地解决(以图书推荐为例):
- 编辑的意见不能代表各种用户的意见。隐语义分析统计用户的行为,能够代表用户对物品分类的看法。
- 人工难以控制分类的粒度。隐语义分析可以设置分类个数,从而控制分类粒度。
- 人工难以给一个物品多个分类。隐语义分析能够计算出物品属于每个类的权重。
- 人工难以出多维度的分类。隐语义分析基于用户多维兴趣分类。
- 人工难以决定一个物品在某分类中的权重。隐语义分析可以计算物品在某分类中的权重。
LFM公式如下,表述为【用户对第kkk类物品的兴趣度*物品iii在第kkk类物品分类中的权重】通过训练集梯度下降获得最优的pu,kp_{u,k}pu,k(用户对第k类物品的兴趣度)和qi,kq_{i,k}qi,k(物品iii在第kkk类物品分类中的权重):
Preference=rui=PuTqi=∑k=1Kpu,kqi,kPreference=r_{ui}=P_{u}^{T}q_{i}=\sum{_{k=1}^{K}p_{u,k}q_{i,k}}Preference=rui=PuTqi=∑k=1Kpu,kqi,k
在使用中,隐反馈数据集无法提供负反馈数据,所以要生成负样本。可以使用以下方法(性能由低到高):
- 将用户没有过行为的物品作为负样本
- 从用户没有过行为的物品中采样一些物品作为负样本,采样时偏重采样不热门的物品
- 从用户没有过行为的物品中采样一些物品作为负样本
- 从用户没有过行为的物品中采样一些物品作为负样本,采样时保证每个用户的正负样本数量相当
对负样本采样原则:
- 每个用户的正负样本数目相近
- 选取热门但用户没有行为的物品作为负样本
LFM和基于邻域的方法的比较:
LFM | 基于邻域的方法 | |
---|---|---|
理论基础 | 是一种学习、优化方法 | 是一种基于统计的方法 |
空间复杂度 | 占据内存较小,需要4G左右内存 | 占据很大的内存,UserCF需要30G左右内存 |
时间复杂度 | 一般情况下LFM需要经过多次迭代,时间复杂度稍高于基于邻域的方法,但时间复杂度没有质的区别 | 时间复杂度稍低于LFM,但时间复杂度没有质的区别 |
实时性 | 物品多时无法实时预测,但是可以先用较为快速的算法生成物品候选列表,从而加快物品推荐过程。另外,LFM基于数据库的数据,不能主动实时推荐 | 可以实时预测 |
推荐解释 | LFM无法提供推荐解释 | ItemCF可以利用用户的历史行为提供解释 |
4 基于图的模型
令G(V,E)G(V, E)G(V,E)为用户物品二分图。其中,V=VU∪VIV=V_U\cup{}V_IV=VU∪VI由用户顶点集合VUV_UVU和物品顶点集合VIV_IVI组成。e(vu,vi)e(v_u, v_i)e(vu,vi)为边,vu∈VUv_u\in{}V_Uvu∈VU是用户对应的顶点,vi∈VIv_i\in{}V_Ivi∈VI是物品i对应的顶点。用户行为数据的二分图表示如下图所示:
基于图的推荐算法:给用户uuu推荐物品任务,即度量用户顶点vuv_uvu与vuv_uvu没有边直接相连的物品节点在图上的相关性。
度量两个顶点的相关性有三个方面:
- 两个顶点之间的路径条数,相对性高的两个顶点有多种路径
- 两个顶点之间的路径长度,相对性高的两个顶点路径长度较短
- 两个顶点之间的路径经过的顶点,相对性高的两个顶点路径不会经过出度比较大的顶点
如顶点A和c,顶点A和e的相关度:
A和c、e都没有直接相连的边,但是,A和c有一条长度为3的路径,A和e有两条长度为3的路径,所以顶点A和e的相关度高于顶点A和c:
对于顶点A和e,路径(A, d, D ,e)的出度(3, 2, 3, 2)比(A, b,C,e)的出度(3 ,2 ,2, 2)大,所以路径(A, b,C,e)对相关性的贡献低:
PersonalRank算法:
假设对uuu做个性化推荐,则从uuu对应的节点vuv_uvu开始在二分图上随机游走,游走到任意节点,按照概率α\alphaα决定继续游走还是停止游走重新开始。这样经过多次游走之后,每个物品节点被访问的概率就会收敛到一个数,最终推荐列表物品的权重就是物品节点的访问概率。总结公式如下:
PR(v)={α∑v′∈in(v)PR(v′)∣out(v′)∣v≠vu(1−α)+α∑v′∈in(v)PR(v′)∣out(v′)∣v=vuPR(v) = \left \{ \begin{aligned} & \alpha\sum_{v'\in{in(v)}}\frac{PR(v')}{|out(v')|}\quad{}v\neq{v_{u}} \\ &(1-\alpha)+ \alpha\sum_{v'\in{in(v)}}\frac{PR(v')}{|out(v')|}\quad{}v=v_{u} \end{aligned} \right. PR(v)=⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧αv′∈in(v)∑∣out(v′)∣PR(v′)v=vu(1−α)+αv′∈in(v)∑∣out(v′)∣PR(v′)v=vu
如对A进行推荐过程如下,令α=0.6\alpha=0.6α=0.6:
因为PR(d)>PR(b),所以推荐列表为{d, b}
推荐系统实践 - 01推荐系统综述
推荐系统实践 - 03利用用户注册信息
推荐系统实践 - 02利用用户行为数据相关推荐
- 推荐系统实践读书笔记-02利用用户行为数据
推荐系统实践读书笔记-02利用用户行为数据 为了让推荐结果符合用户口味,我们需要深入了解用户.如何才能了解一个人呢?<论语·公冶长>中说"听其言,观其行",也就是说可以 ...
- [推荐系统读书笔记]利用用户标签数据
推荐系统的目的是联系用户的兴趣和物品,这种联系需要以来不同的媒介.GroupLens在一篇文章中表示目前流行的推荐系统基本上通过3种方式联系童虎兴趣和物品. 第一种方式是利用用户喜欢过的物品,给用户推 ...
- 《推荐系统实践》样章:如何利用用户标签数据
<推荐系统实践>样章:如何利用用户标签数据 推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖于不同的媒介.GroupLens在文章1中认为目前流行的推荐系统基本上通过三种方式来联系用 ...
- 推荐系统实践读书笔记-04利用用户标签数据
推荐系统实践读书笔记-04利用用户标签数据 推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖不同的媒介.GroupLens在一篇文章中表示目前流行的推荐系统基本上通过3种方式联系用户兴趣和物品. ...
- 利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二)
系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...
- 推荐系统——利用用户行为数据
用户的行为不是随机的,而是蕴含着很多模式.就好比如"啤酒与尿布"和"瑞雪兆丰年"两个数据挖掘的经典案例.用户行为数据中蕴涵着很多不是那么显而易见 ...
- 机器学习-推荐系统-利用用户标签数据
在之前的博文中介绍了三种方法给用户推荐物品. 1)UserCF:给用户推荐和他们兴趣爱好相似的其他用户喜欢的物品. 2) ItemCF:给用户推荐与他喜欢过的物品相似的物品. 3) LFM:通过一些特 ...
- [推荐系统]利用用户行为数据
基于用户行为分析的推荐算法是个性化推荐系统的重要算法,一般将这种类型的算法称为协同过滤算法.协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而 ...
- 推荐算法(3):利用用户标签数据
推荐算法(1):协同过滤总结 推荐算法(2):基于内容的推荐 推荐算法(3):利用用户标签数据 推荐算法(4)利用上下文信息 推荐算法(5)利用社交网络数据 推荐算法(6) 实例 推荐算法(7)缺失的 ...
- 【读书笔记】推荐系统实践·第四章·利用用户标签数据
代码方面,主要实现了4.3和4.2.2的一个验证统计,4.4的代码本来准备写一下的,后来因为杂碎的统计工作太多就放弃了.代码和笔记的word版放在https://github.com/littleli ...
最新文章
- sprintf函数做什么用?
- ubuntu root用户没有声音(提示”正在等待声音系统响应”)
- 说好的幸福计算机弹奏,[转载]计算机基础知识题库(六)
- 隐马尔可夫模型(HMM)及Viterbi算法
- 班尼机器人怎么语音_每日一句中话西说巧学英语:“我们今天就到这儿吧。”英语怎么说?...
- BZOJ1878 [SDOI2009]HH的项链
- tcp多进程文件传输服务器,TCP/IP网络编程 Chap10. 多进程服务器端
- Office 2010如何打开MDI文件
- kubectl自动补全
- 安卓手机管理软件_留言帮忙找:手机清理软件合集 Android
- 前端项目中使用百度地图api,含实例
- Java入门概念回炉重造
- 海关外贸企业大数据风控平台
- 浅析疯狂动物城的制作流程
- SQL查询语句分步详解——多字段分组查询
- BTC-Relay与RootStock侧链技术对比
- VDA 6.3 2022 EN 黄皮书.最新版 汽车质量VDA6.3-2022过程审核
- 安装win10时Raid模式下无法识别固态硬盘的问题
- Khadas VIM3开发板固件烧写记录
- 【通知】《生成对抗网络GAN原理与实践》代码开源,勘误汇总!
热门文章
- pygame使用多种方法让背景和人物运动起来
- pcm5102a解码芯片音质评测_精品推荐:用家票选TOP 30款最佳便携式解码耳放(中)...
- WinForm CefSharp 笔记一(入门篇)
- 为啥春节抢红包总不是运气王?看完微信抢红包算法你就明白了
- 【工具推荐】SSH客户端工具推荐
- 日志易——中国版的splunk
- Ventoy+WePE 装机教程(装PVE+ESXI等,不用单独费一个U盘)
- 百度联合清华发布国内首个基于AI实践的产业智能化白皮书
- Java单例模式(饿汉式)
- 高通骁龙430系列-MSM8937 ( Cortex-A53架构)