推荐系统--用户行为和实验设计
主要介绍推荐系统用户行为数据、实验设计,是接下来算法实验的基础。
用户行为
用户行为数据
用户行为分为 显性 和 隐性 两种。
- 显性反馈行为(explicit feedback)
用户评分、喜欢/不喜欢 - 隐性反馈行为(implicit feedback)
页面浏览行为、消费行为
两者比较
如何表示用户:
- user id
产生行为的用户 - item id
产生行为的对象 - behavior type
行为的种类(如购买还是浏览) - context
产生行为的上下文,包括时间和地点 - behavior weight
行为的权重(用户评分、观看时长等) - behavior content
行为的内容(评论文本、标签等)
数据集的一般分类:
- 无上下文信息的隐性反馈数据集
包含 user id, item id
如 Book-Crossing - 无上下文信息的显性反馈数据集
包含 user id, item id, 物品评分 - 有上下文信息的隐性反馈数据集
包含 user id, item id, 用户对物品产生行为的 timestamp
如 Lastfm - 有上下文信息的显性反馈数据集
包含 user id, item id, 物品评分, 用户对物品产生行为的 timestamp
如 Netflix Prize
用户行为分析
物品流行度 和 用户活跃度 都近似于 长尾分布。下图表示用户活跃度和物品流行度的关系(MovieLens 数据集)。
一般认为,新用户倾向于浏览热门物品,因为对网站不熟悉,只能点击首页的热门物品,而老用户会逐渐开始浏览冷门物品。
仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法,有很多种方法,这里介绍 基于邻域的方法(neighborhood-based), 隐语义模型(latent factor model), 基于图的随机游走算法(random walk on graph),这其中,最有名、在业界得到最广泛应用的算法是基于邻域的方法。接下来的博客会一一讨论这些算法。
实验设计
数据集
采用 GroupLens 提供的 MovieLens 数据集,选中等大小的数据集,包含 6000 多用户对 4000 多部电影的 100 万条评分。
实验目的
研究隐反馈数据集中的 Top N 推荐问题,因此忽略数据集中的评分记录。预测的是用户会不会对某部电影评分,而不是预测用户在准备对某部电影评分对前提下会给电影评多少分。
实验过程
离线实验。
- 将用户行为数据集均匀的随机分成 M 份(这里取 8)
挑一份作为测试集,剩下 M-1 份作为训练集 - 在训练集上建立用户兴趣模型,在测试集上评测,统计评测指标
- M 次实验,每次使用不同的测试集
M 次试验的评测指标取平均值
防止过拟合
如果数据集够大,模型够简单,为了快速通过离线实验初步选择算法,也可以只进行一次实验
1
2
3
4
5
6
7
8
9
10
|
def SplitData(data, M, k, seed):
test = []
train = []
random.seed(seed)
for user, item in data:
if random.randint(0,M) == k:
test.append([user,item])
else:
train.append([user,item])
return train, test
|
评测指标
- 准确率
- 召回率
- 覆盖率
- 新颖度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
def Precision(train, test, N):
hit = 0
all = 0
for user in train.keys():
tu = test[user]
rank = GetRecommendation(user, N)
for item, pui in rank:
if item in tu:
hit += 1
all += N
return hit / (all * 1.0)
def Recall(train, test, N):
hit = 0
all = 0
for user in train.keys():
tu = test[user]
rank = GetRecommendation(user, N)
for item, pui in rank:
if item in tu:
hit += 1
all += len(tu)
return hit / (all * 1.0)
def Coverage(train, test, N):
recommend_items = set()
all_items = set()
for user in train.keys():
for item in train[user].keys():
all_items.add(item)
rank = GetRecommendation(user, N)
for item, pui in rank:
recommend_items.add(item)
return len(recommend_items) / (len(all_items) * 1.0)
def Popularity(train, test, N):
item_popularity = dict()
for user, items in train.items():
for item in items.keys():
if item not in item_popularity:
item_popularity[item] = 0
item_popularity[item] += 1
ret = 0
n=0
for user in train.keys():
rank = GetRecommendation(user, N)
for item, pui in rank:
ret += math.log(1 + item_popularity[item])
n += 1
ret /= n * 1.0
return ret
|
该实验设计用于接下来 基于邻域的方法(neighborhood-based), 隐语义模型(latent factor model), 基于图的随机游走算法(random walk on graph) 的博客中。
原文地址: http://www.shuang0420.com/2017/02/08/%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F--%E7%94%A8%E6%88%B7%E8%A1%8C%E4%B8%BA%E5%92%8C%E5%AE%9E%E9%AA%8C%E8%AE%BE%E8%AE%A1/
推荐系统--用户行为和实验设计相关推荐
- 推荐系统-用户标签预测算法基础实践-决策树(一)
推荐系统-用户标签预测算法基础实践 1.用户画像概述 用户画像就是给到用户打标签 用户画像 用户角色 用户属性 用户画像和用户角色较为接近,而用户属性使用户的画像中的子集 用户画像阶段 1.用户画像基 ...
- 推荐系统用户行为分析
摘自推荐系统相关书籍 用户行为分析 很多关于互联网数据的研究发现,互联网上的很多数据分布都满足一种称为Power Law的分 布,这个分布在互联网领域也称长尾分布. 为了说明用户行为的长尾分布,我们选 ...
- 推荐系统——用户画像
写在最开始,本人不是专业做推荐系统的,本文只是整理最近培训的所见所得.学生生涯的时候略微了解些推荐系统的皮毛,工作后暂时还没做这方面的工作,但之后的工作规划会涉及到相关领域知识,另加上本人对算法类培训 ...
- 深度学习 - 39. EGES 与推荐系统用户冷启动
目录 一.引言 二.EGES 算法演进 1.淘宝推荐系统简介 2.BGE.GES.EGES 简介 2.1 用户行为序列构建 2.2 BGE / Base Graph Embedding 2.3 GES ...
- 推荐系统 用户画像 标签聚类 个性化搜索
最近在做短视频推荐,和别的部门配合着做,我们部门做用户画像这一部分.回头看看,我们部门以前做的用户画像只能称之为"所谓的用户画像".如果一个人不懂用户画像还好指挥来指挥去真的让人无 ...
- 你的画像是怎么来的?推荐系统是如何找到相似用户的?
前言 在构建推荐系统的过程中,冷启动是我们要面临的一个很现实的问题,而除了加特征,加样本,加图谱,加规则,还有其他方法吗? 以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是我不断 ...
- 当推荐系统遇上用户画像:你的画像是怎么来的?
在构建推荐系统的过程中,冷启动是我们要面临的一个很现实的问题,而除了加特征,加样本,加图谱,加规则,还有其他方法吗? 推荐系统用户画像,是解决冷启动和兴趣探索问题一种有效地方法,但item上的标签要通 ...
- 推荐系统实践-利用用户标签数据(4)
4.1 UGC标签系统的代表应用 标签应用一般分为两种,一种是作者或者专家来给物品打标签,另外一种是让普通用户打标签即UGC(User Generated Content),当用户给物品打标签时,一方 ...
- 基于Hadoop的用户购买行为的商品推荐系统
目录 一 绪论 1 1.1 编写目的 1 1.2 背景及意义 1 1.3 开发及运行环境 2 二 需求分析 3 2.1 系统概述 3 2.3 系统功能需求 4 2.3.1 收集原始数据 4 2.3.2 ...
最新文章
- html网页在指定位置嵌入表格,网页制作中表格的主要作用 网页制作中插入表格怎么调整位置...
- 计算机系统的搭建步骤,电脑搭建Node.js开发环境的操作教程[多图]
- JSPDF运用实例(解决图片跨域问题)
- AngularJs2与AMD加载器(dojo requirejs)集成
- 《Adobe Flash CS5中文版经典教程》——1.3 使用“库”面板
- 紫光物联linux登录账号,紫光展锐打造操作系统生态,赋能万物互联智能时代
- 刚一下雪,中国就美哭了全世界!
- 7-深入练习Dockerfile
- .net邮件发送帮助类
- 论文写作——latex三线表tabular*文本居中与正文两端对齐、标题加黑
- 拼多多商家使用拼多多上传图片尺寸软件教程
- windows server 2016 安装openssh
- 给学妹写C程——中国海洋大学C语言程序设计课作业(一)
- 怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏
- 开源WordPress博客主题二次元风-LoliMeow主题
- ac9560不支持承载_WiFi打游戏总卡?英特尔AC9560无线网卡了解一下
- 输入名字显示其电话号码
- ipv6 socket python网络编程
- 三、Web漏洞-文件操作
- svn更新代码提示“系统找不到指定路径”