利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客
Posted IronmanJay
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客相关的知识,希望对你有一定的参考价值。
系列文章目录
- 初识推荐系统——基于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以上是关于利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客的主要内容,如果未能解决你的问题,请参考以下文章