–未经授权,禁止转载–

第二章 利用用户行为数据

  • 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)​wuv​rvi​

如对用户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)​wji​rui​

如对用户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​=PuT​qi​=∑k=1K​pu,k​qi,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利用用户行为数据相关推荐

  1. 推荐系统实践读书笔记-02利用用户行为数据

    推荐系统实践读书笔记-02利用用户行为数据 为了让推荐结果符合用户口味,我们需要深入了解用户.如何才能了解一个人呢?<论语·公冶长>中说"听其言,观其行",也就是说可以 ...

  2. [推荐系统读书笔记]利用用户标签数据

    推荐系统的目的是联系用户的兴趣和物品,这种联系需要以来不同的媒介.GroupLens在一篇文章中表示目前流行的推荐系统基本上通过3种方式联系童虎兴趣和物品. 第一种方式是利用用户喜欢过的物品,给用户推 ...

  3. 《推荐系统实践》样章:如何利用用户标签数据

    <推荐系统实践>样章:如何利用用户标签数据 推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖于不同的媒介.GroupLens在文章1中认为目前流行的推荐系统基本上通过三种方式来联系用 ...

  4. 推荐系统实践读书笔记-04利用用户标签数据

    推荐系统实践读书笔记-04利用用户标签数据 推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖不同的媒介.GroupLens在一篇文章中表示目前流行的推荐系统基本上通过3种方式联系用户兴趣和物品. ...

  5. 利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二)

    系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...

  6. 推荐系统——利用用户行为数据

            用户的行为不是随机的,而是蕴含着很多模式.就好比如"啤酒与尿布"和"瑞雪兆丰年"两个数据挖掘的经典案例.用户行为数据中蕴涵着很多不是那么显而易见 ...

  7. 机器学习-推荐系统-利用用户标签数据

    在之前的博文中介绍了三种方法给用户推荐物品. 1)UserCF:给用户推荐和他们兴趣爱好相似的其他用户喜欢的物品. 2) ItemCF:给用户推荐与他喜欢过的物品相似的物品. 3) LFM:通过一些特 ...

  8. [推荐系统]利用用户行为数据

    基于用户行为分析的推荐算法是个性化推荐系统的重要算法,一般将这种类型的算法称为协同过滤算法.协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而 ...

  9. 推荐算法(3):利用用户标签数据

    推荐算法(1):协同过滤总结 推荐算法(2):基于内容的推荐 推荐算法(3):利用用户标签数据 推荐算法(4)利用上下文信息 推荐算法(5)利用社交网络数据 推荐算法(6) 实例 推荐算法(7)缺失的 ...

  10. 【读书笔记】推荐系统实践·第四章·利用用户标签数据

    代码方面,主要实现了4.3和4.2.2的一个验证统计,4.4的代码本来准备写一下的,后来因为杂碎的统计工作太多就放弃了.代码和笔记的word版放在https://github.com/littleli ...

最新文章

  1. sprintf函数做什么用?
  2. ubuntu root用户没有声音(提示”正在等待声音系统响应”)
  3. 说好的幸福计算机弹奏,[转载]计算机基础知识题库(六)
  4. 隐马尔可夫模型(HMM)及Viterbi算法
  5. 班尼机器人怎么语音_每日一句中话西说巧学英语:“我们今天就到这儿吧。”英语怎么说?...
  6. BZOJ1878 [SDOI2009]HH的项链
  7. tcp多进程文件传输服务器,TCP/IP网络编程 Chap10. 多进程服务器端
  8. Office 2010如何打开MDI文件
  9. kubectl自动补全
  10. 安卓手机管理软件_留言帮忙找:手机清理软件合集 Android
  11. 前端项目中使用百度地图api,含实例
  12. Java入门概念回炉重造
  13. 海关外贸企业大数据风控平台
  14. 浅析疯狂动物城的制作流程
  15. SQL查询语句分步详解——多字段分组查询
  16. BTC-Relay与RootStock侧链技术对比
  17. VDA 6.3 2022 EN 黄皮书.最新版 汽车质量VDA6.3-2022过程审核
  18. 安装win10时Raid模式下无法识别固态硬盘的问题
  19. Khadas VIM3开发板固件烧写记录
  20. 【通知】《生成对抗网络GAN原理与实践》代码开源,勘误汇总!

热门文章

  1. pygame使用多种方法让背景和人物运动起来
  2. pcm5102a解码芯片音质评测_精品推荐:用家票选TOP 30款最佳便携式解码耳放(中)...
  3. WinForm CefSharp 笔记一(入门篇)
  4. 为啥春节抢红包总不是运气王?看完微信抢红包算法你就明白了
  5. 【工具推荐】SSH客户端工具推荐
  6. 日志易——中国版的splunk
  7. Ventoy+WePE 装机教程(装PVE+ESXI等,不用单独费一个U盘)
  8. 百度联合清华发布国内首个基于AI实践的产业智能化白皮书
  9. Java单例模式(饿汉式)
  10. 高通骁龙430系列-MSM8937 ( Cortex-A53架构)