关键词:
系列文章目录
- 初识推荐系统——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一)
- 利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二)
- 项目主要效果展示——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(三)
- 项目体系架构设计——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(四)
- ……
项目资源下载
- 电影推荐系统网站项目源码Github地址(可Fork可Clone)
- 电影推荐系统网站项目源码Gitee地址(可Fork可Clone)
- 电影推荐系统网站项目源码压缩包下载(直接使用)
- 电影推荐系统网站项目源码所需全部工具合集打包下载(spark、kafka、flume、tomcat、azkaban、elasticsearch、zookeeper)
- 电影推荐系统网站项目源数据(可直接使用)
- 电影推荐系统网站项目个人原创论文
- 电影推荐系统网站项目前端代码
- 电影推荐系统网站项目前端css代码
文章目录
前言
今天将为大家带来系列博客的第二篇博文,也就是关于如何利用用户行为数据,以便于我们得到更好的推荐结果。今天的内容有些难度,并且文章内容比较多,希望大家沉下心来,因为这里的理论知识直接关系到后面的实践操作,我会一个字一个字的把这篇博文完成,估计一次写不完,所以时间可能需要长一些,我会尽自己最大的可能让内容看起来通俗易懂,下面就开始今天的学习吧!
一、用户行为数据简介
既然要做个性化推荐系统,首先我们需要先了解每个人,听其言、观其行,在网络世界我们称之为用户行为数据
- 有些用户不是太清楚自己喜欢什么
- 用户的兴趣不可能是一成不变的,会根据外部因素进行改变
我们需要通过不断采集用户在网络中的行为数据以及用户与网站的交互反馈数据,不断修正推荐系统对用户的定位,从而不断修正符合用户当前状态的的推荐结果
协同过滤是目前比较热门的推荐系统算法,协同:用户与用户之间、用户和网站之间等进行不断地互动,慢慢过滤掉自己不感兴趣的物品,从而满足自己的需求
用户行为数据在网站上最简单的存在形式就是日志。网站在运行过程中会产生大量的原始日志
R
A
W
L
O
G
RAW LOG
RAWLOG,将其存储在文件系统中,企业会将多种原始日志按照用户行为汇总成会话日志
S
E
S
S
I
O
N
L
O
G
SESSION LOG
SESSIONLOG,每一个会话日志表示用户的一种反馈。
用户反馈主要分为显性反馈行为和隐形反馈行为。显性反馈行为包括用户明确表示对物品喜好的行为。比如评分系统;隐形反馈行为是指那些不能够明确反应用户喜好的行为。比如用户浏览页面的行为日志,我们对表示用户喜欢的反馈叫正反馈,表示不喜欢的叫负反馈,下表为显性反馈数据和隐形反馈数据的比较:
显性反馈数据 | 隐形反馈数据 | |
---|---|---|
用户兴趣 | 明确 | 不明确 |
数量 | 较少 | 庞大 |
存储 | 数据库 | 分布式文件系统 |
实时读取 | 实时 | 有延迟 |
正负反馈 | 都有 | 只有正反馈 |
下表为各代表网站中显性反馈数据和隐形反馈的例子:
显性反馈 | 隐形反馈 | |
---|---|---|
视频网站 | 用户对视频的评分 | 用户观看视频的日志、浏览视频页面的日志 |
电子商务网站 | 用户对商品的评分 | 购买日志、浏览日志 |
门户网站 | 用户对新闻的评分 | 浏览新闻的日志 |
音乐网站 | 用户对音乐/歌手/专辑的评分 | 听歌的日志 |
那么用户的行为表示成什么呢?一些比较中立的字段(用户行为的统一表示)如下:
表示 | 用户行为 | |
---|---|---|
① | user id | 产生行为的用户的唯一标识 |
② | item id | 产生行为的对象的唯一标识 |
③ | behavior type | 行为的种类(比如是购买还是浏览) |
④ | context | 产生行为的上下文,包括时间和地点等 |
⑤ | behavior weight | 行为的权重(如果是观看视频的行为,那么这个权重可以是观看时长;如果是打分行为,这个权重可以是分数) |
⑥ | behavior content | 行为的内容(如果是评论行为,那么就是评论的文本,如果是打标签的行为,就是标签) |
当然,可以根据自己的实际情况去设计日志的表示形式
有代表性的数据集会是如下4种:
- 无上下文信息的隐性反馈数据集,每一条行为记录仅仅包含用户ID和物品ID
- 无上下文信息的显性反馈数据集,每一条记录包含用户ID、物品ID和用户对物品的评分
- 有上下文信息的隐性反馈数据集,每一条记录包含用户ID、物品ID和用户对物品产生行为的时间戳
- 有上下文信息的显性反馈数据集,每一条记录包含用户ID、物品ID和用户对物品的评分和评分发生的时间戳
二、用户行为分析
2.1 用户活跃度和物品流行度的分布
二八定律:19世纪末20世纪初意大利经济学家帕累托发明“二八定律”,认为在任何一组东西中,最重要的只占其中一小部分,约
20
%
20\%
20%,其余
80
%
80\%
80%的尽管是多数,却是次要的。很多商家企业认为
80
%
80\%
80%的公司利润来自
20
%
20\%
20%的重要客户,其余
20
%
20\%
20%的利润则来自
80
%
80\%
80%的普通客户,传统零售情愿把
80
%
80\%
80%的资源花在能创造出关键利润的
20
%
20\%
20%方面,从把
20
%
20\%
20%的资源花费在
80
%
80\%
80%的普通客户群里
长尾理论:流行的,被人熟知的东西都是所谓的“头”,而常常被人忽视的,不流行的,个性化就是所谓的“尾”,而在营销界对“尾巴”的挖掘,可以创造出惊人的利润和价值,“小利润大市场”。“虽然赚很少的钱,但是我们要赚很多人的钱”,这就是长尾理论在营销界的真正含义。用户活跃度和物品流行度都符合长尾理论,下图为物品流行度的长尾分布
上图展示了Delicious和CiteULike数据集中物品流行度的分布曲线。横坐标是物品的流行度
K
K
K,纵坐标是流行度为
K
K
K的物品的总数。这里,物品的流行度指物品产生过行为的用户总数。但是,这个又揭示了什么?
流行的物品总是少数,不流行的占绝大多数,如果能让不流行的物品流行起来,那么会创造很大利润,下图为用户活跃度的长尾分布
上图展示了Delicious和CiteULike数据集中用户活跃度的分布曲线。横坐标是用户的活跃度
K
K
K,纵坐标是活跃度为
K
K
K的用户总数。这里,用户的活跃度为用户产生过行为的物品总数。但是,这个又揭示了什么?
非常活跃的用户总是少数,大多数用户都是不活跃的,如果能把不活跃的用户都调用起来,那么会创造很大的利润。那么推荐引擎又是做什么的呢?通过个性化的推荐,将不流行的物品推送给不活跃的人,激活这两部分,要比将流行的物品推送给活跃的人的市场大很多,这就是互联网思维
2.2 用户活跃度和物品流行度的关系
一般来说,不活跃的用户要么是新用户,要么是只来过网站一两次的老用户。那么,不同活跃度的用户喜欢的物品的流行度是否有差别?一般认为,新用户倾向于浏览热门的物品,因为他们对网站还不熟悉,只能点击首页的热门物品,而老用户会逐渐开始浏览冷门的物品。下图展示了
M
o
v
i
e
L
e
n
s
MovieLens
MovieLens数据集中用户活跃度和物品流行度之间的关系,其中横坐标是用户活跃度,纵坐标是具有某个活跃度的所有用户评过分的物品的平均流行度。如图所示,图中曲线呈明显下降的趋势,这表明用户越活跃,越倾向于浏览冷门的物品。
基于用户行为数据设计的推荐算法一般称为协同过滤算法。学术界对于实现协同过滤有很多方法,比如基于领域的方法(
n
e
i
g
h
b
o
r
h
o
o
d
−
b
a
s
e
d
neighborhood-based
neighborhood−based)、隐语义模型(
l
a
t
e
n
t
f
a
c
t
o
r
m
o
d
e
l
latent factor model
latentfactormodel)、基于图的随机游走算法(
r
a
n
d
o
m
w
a
l
k
o
n
g
r
a
p
h
random walk on graph
randomwalkongraph)等。目前使用最广泛的是基于领域的方法,主要包括下面两个算法:
- 基于用户的协同过滤算法,这种算法给用户推荐和他兴趣相似的其他用户喜欢的物品
- 基于物品的协同过滤算法,这种算法给用户推荐和他之前喜欢的物品相似的物品
三、精确率和召回率
考虑一个二分问题,即将实例分成正类( p o s i t i v e positive positive)或负类( n e g a t i v e negative negative)。对于一个二分问题来说,会出现四种情况。如果一个实例是正类并且也被预测成正类,即为真正类( T r u e p o s i t i v e True \quad positive Truepositive),如果实例是负类被预测成正类,称之为假正类( F a l s e p o s i t i v e False \quad positive Falsepositive)。相应的,如果实例是负类被预测成负类,称之为真负类( T r u e n e g a t i v e True \quad negative Truenegative),正类被预测成负类则为假负类( F a l s e n e g a t i v e False \quad negative Falsenegative)
- T P TP TP:正确肯定的数目
- F N FN FN:漏报、没有正确找到匹配的数目
- F P FP FP:误报、给出的匹配是不正确的
- T N TN TN:正确拒绝的非匹配对数
列联表如下表所示,1代表正类,0代表负类:
预测1 | 预测0 | |
---|---|---|
实际1 | True Positive(TP) | False Negative(FN) |
实际0 | False Positive(FP) | True Negative(TN) |
精确率(正确率)和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。其中精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率;召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率
一般来说,
P
r
e
c
i
s
i
o
n
Precision
Precision就是检索出来的条目(比如:文档、网页等)有多少是准确的,
R
e
c
a
l
l
Recall
Recall就是所有准确的条目有多少被检索出来了,两者的定义分别如下:
- P r e c i s i o n Precision Precision = 提取出的正确信息条数 / 提取出的信息条数
-
R
e
c
a
l
l
Recall
Recall = 提取出的正确信息条数 / 样本中的信息条数
为了能够评价不同算法的优劣,在 P r e c i s i o n Precision Precision和 R e c a l l Recall Recall的基础上提出了 F 1 F1 F1值得概念,来对 P r e c i s i o n Precision Precision和 R e c a l l Recall Recall进行整体评价。 F 1 F1 F1的定义如下:
- F 1 F1 F1值 = 正确率 * 召回率 * 2 / (正确率 + 召回率)
不妨举这样一个例子:某池塘有1400条鲤鱼,300只虾,300只鳖。现在以捕鲤鱼为目的。撒一大网,逮着700条鲤鱼,200只虾,100只鳖。那么,这些指标分别如下:
- 正确率 = 700 / (700 + 200 + 100) = 70%
- 召回率 = 700 / 1400 = 50%
- F 1 F1 F1值 = 70% * 50% * 2 / (70% + 50%) = 58.3%
不妨看看如果把池子里所有的鲤鱼、虾和鳖都一网打尽,这些指标又有何变化:
- 正确率 = 1400 / (1400 + 300 + 300) = 70%
- 召回率 = 1400 / 1400 = 100%
- F 1 F1 F1值 = 70% * 100% * 2 / (70% + 100%) = 82.35%
由此可见,正确率是评估捕获的成果中目标成果所占的比例;召回率,顾名思义,就是从关注领域中,召回目标类别的比例;而
F
F
F值,则是综合这二者指标的评估指标,用于综合反应整体的指标
当然希望检索结果
P
r
e
c
i
s
i
o
n
Precision
Precision越高越好,同时
R
e
c
a
l
l
Recall
Recall也越高越好,但事实上这两者在某些情况下有矛盾的。比如在极端情况下,我们只搜索出了一个结果,且是准确的,那么
P
r
e
c
i
s
i
o
n
Precision
Precision就是
100
%
100\%
100%,但是
R
e
c
a
l
l
Recall
Recall就很低;而如果我们把所有结果都返回,那么比如
R
e
c
a
l
l
Recall
Recall是
100
%
100\%
100%,但是
P
r
e
c
i
s
i
o
n
Precision
Precision就会很低。因此在不同的场合需要自己判断希望
P
r
e
c
i
s
i
o
n
Precision
Precision比较高还是
R
e
c
a
l
l
Recall
Recall比较高。如果是做实验研究,可以绘制
P
r
e
c
i
s
i
o
n
−
R
e
c
a
l
l
Precision-Recall
Precision−Recall曲线来帮助分析
四、基于内容的推荐算法
基于内容的推荐算法,原理是用户喜欢和自己关注过的
I
t
e
m
Item
Item在内容上类似的
I
t
e
m
Item
Item,如比你看了哈利波特
Ⅰ
Ⅰ
Ⅰ,基于内容的推荐算法发现哈利波特
Ⅱ
−
Ⅶ
Ⅱ-Ⅶ
Ⅱ−Ⅶ,与你以前观看的在内容上面(共有很多关键词)有很大的关联性,就把后者推荐给你,本项目中采用
E
l
a
s
t
i
c
S
e
a
r
c
h
ElasticSearch
Elast基于物品的协同过滤
...掘导论》而给你推荐《机器学习》。不过,ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户... 查看详情 ...会写一些关于spark的推荐的东西,这里主要有4点,1基于用户协同过滤,2基于物品协同过滤,3基于模型的协同过滤,4基于关联规则的推荐(fp_gr 查看详情 ...品(此应用中指电影)的协同过滤(ItemtemCF)利用统计学的相关系数经常皮尔森(pearson)相关系数计算相关系数来实现千人千面的推荐系统。协同过滤算法协同过滤推荐算法是诞生最早,并且较为著名的推... 查看详情 个性化推荐根据用户兴趣和行为特点,向用户推荐所需的信息或商品,帮助用户在海量信息中快速发现真正所需的商品,提高用户黏性,促进信息点击和商品销售。推荐系统是基于海量数据挖掘分析的商业智能平台,推荐主... 查看详情 ML之CF:基于MovieLens电影评分数据集利用基于用户协同过滤算法(余弦相似度)实现对用户进行Top5电影推荐案例目录基于MovieLens电影评分数据集利用基于用户协同过滤算法(余弦相似度)实现对用户进行Top5电影推荐案例 #1、定义... 查看详情 仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法,方法有:隐语义模型基于图的随机游走算法基于邻域的方法:应用最广泛基于用户的协同过滤算法:给用户推荐和他兴趣相似的其他用户喜欢的物品基于物品的协同... 查看详情 ...著名的推荐算法。主要的功能是预测和推荐。算法通过对用户历史行为数据的挖掘发现用户的偏好,基于不同的偏好对用户进行群组划分并推荐品味相似的商品。协同过滤推荐算法分为两类,分别是基于用户的协同过滤算法(user-... 查看详情 ...划分:协同过滤算法:UserCF,ItemCF,ModelCF基于内容的推荐:用户内容属性和物品内容属性社会化过滤:基于用户的社会网络关系 2.案例:天池大数据竞赛 我们会开放如下数据类型:字段字段说明提取说明user_id用户标记... 查看详情 ...ava并发编程实战》。不过,基于物品的协同过滤算法并不利用物品的内容属性计算物品之间的相似度,二是通过分析用户的行为数据计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大... 查看详情 1、用户行为数据 用户行为数据在网站中最简单的存在形式就是日志,用户行为就是指用户在系统中进行的各种操作,比如用户在电商网站中进行的浏览、点击、搜索、购买、收藏等行为。我们可以通过分析这些数据来推测... 查看详情 协同过滤是一类基于用户行为数据的推荐方法,主要是利用已有用户群体过去的行为或意见来预测当前用户的偏好,进而为其产生推荐。能用于协同过滤的算法很多,大致可分为:基于最近邻推荐和基于模型的推荐。其中基于最... 查看详情 协同过滤推荐的主要思想:利用已有用户群过去的行为或意见预测当前用户最可能喜欢哪些东西或对哪些东西感兴趣。 纯粹的协同过滤方法的输入数据只有给定的用户—物品评分矩阵,输出数据一般有以下几种类型:表... 查看详情 ...内容的过滤、协同过滤。 基于内容的过滤: 比如用户A买了商品A,商品B与商品A相似(这个相似是基于商品内部的属性,比如“非常好的协同过滤入门文章”和“推荐系统:协同过滤collaborativefiltering”比较相似),那么就... 查看详情 协同过滤的实现1、收集用户偏好及标准化处理要从用户的行为和偏好中发现规律,并基于此给予推荐,如何收集用户的偏好信息成为系统推荐效果最基础的决定因素。用户有很多方式向系统提供自己的偏好信息,而且不同的应... 查看详情 一、背景某电商平台,有一批用户浏览、收藏、购买物品的日志数据。实现用户进入APP之后第一页显示商品的个性化推荐。ps:当前阶段,显示数据为随机选取。二、思考1、因为是某一品类的特殊电商平台,卖的商品几百种,但... 查看详情 ...是隐语义模型(LFM),求解方式是ALS。显性反馈行为包含用户明白表示对物品喜好的 查看详情 ...户或者最近邻;然后,对当前用户没见过的每个商品p,利用其近邻对p的评分计算预测值。潜在假设:(1)如果用户过去有相似的偏好,那么他们未来也会有相似的偏好(2)用户偏好不会随时间而变化如何确定相似用户集,推... 查看详情 ...断“调教”,才能让产品的推荐算法不断完善,才能符合用户的口味。 目前比较流行的个性化推荐算法有以下几种: 基于内容的推荐:根据内容本身的属性(特征向量)所作的推荐。 基于关联规则的推荐:“啤酒与尿... 查看详情 spark基于用户的协同过滤算法与坑点,提交job
java推荐系统-基于用户和物品协同过滤的电影推荐
个性化推荐系统原理介绍(基于内容过滤/协同过滤/关联规则/序列模式)
ml之cf:基于movielens电影评分数据集利用基于用户协同过滤算法(余弦相似度)实现对用户进行top5电影推荐案例(代码片段)
2前奏之基于用户的协同过滤算法:usercf
协同过滤推荐算法(代码片段)
协同过滤算法(天池竞赛试题)
基于物品的协同过滤算法itemcf算法实现(代码片段)
基于用户行为数据为用户推荐商品
共轭梯度法求解协同过滤中的als(代码片段)
推荐系统(蒋凡译)—第二章协同过滤推荐(代码片段)
spark机器学习速成宝典推荐引擎——协同过滤
协同过滤的实现步骤
基于物品协同过滤实现商品推荐系统(代码片段)
隐性反馈行为数据的协同过滤推荐算法
协同过滤推荐
个性化推荐是怎么做的?