主要介绍推荐系统用户行为数据、实验设计,是接下来算法实验的基础。

用户行为

用户行为数据

用户行为分为 显性 和 隐性 两种。

  • 显性反馈行为(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.用户画像概述 用户画像就是给到用户打标签 用户画像 用户角色 用户属性 用户画像和用户角色较为接近,而用户属性使用户的画像中的子集 用户画像阶段 1.用户画像基 ...

  2. 推荐系统用户行为分析

    摘自推荐系统相关书籍 用户行为分析 很多关于互联网数据的研究发现,互联网上的很多数据分布都满足一种称为Power Law的分 布,这个分布在互联网领域也称长尾分布. 为了说明用户行为的长尾分布,我们选 ...

  3. 推荐系统——用户画像

    写在最开始,本人不是专业做推荐系统的,本文只是整理最近培训的所见所得.学生生涯的时候略微了解些推荐系统的皮毛,工作后暂时还没做这方面的工作,但之后的工作规划会涉及到相关领域知识,另加上本人对算法类培训 ...

  4. 深度学习 - 39. EGES 与推荐系统用户冷启动

    目录 一.引言 二.EGES 算法演进 1.淘宝推荐系统简介 2.BGE.GES.EGES 简介 2.1 用户行为序列构建 2.2 BGE / Base Graph Embedding 2.3 GES ...

  5. 推荐系统 用户画像 标签聚类 个性化搜索

    最近在做短视频推荐,和别的部门配合着做,我们部门做用户画像这一部分.回头看看,我们部门以前做的用户画像只能称之为"所谓的用户画像".如果一个人不懂用户画像还好指挥来指挥去真的让人无 ...

  6. 你的画像是怎么来的?推荐系统是如何找到相似用户的?

    前言 在构建推荐系统的过程中,冷启动是我们要面临的一个很现实的问题,而除了加特征,加样本,加图谱,加规则,还有其他方法吗? 以下是我为大家准备的几个精品专栏,喜欢的小伙伴可自行订阅,你的支持就是我不断 ...

  7. 当推荐系统遇上用户画像:你的画像是怎么来的?

    在构建推荐系统的过程中,冷启动是我们要面临的一个很现实的问题,而除了加特征,加样本,加图谱,加规则,还有其他方法吗? 推荐系统用户画像,是解决冷启动和兴趣探索问题一种有效地方法,但item上的标签要通 ...

  8. 推荐系统实践-利用用户标签数据(4)

    4.1 UGC标签系统的代表应用 标签应用一般分为两种,一种是作者或者专家来给物品打标签,另外一种是让普通用户打标签即UGC(User Generated Content),当用户给物品打标签时,一方 ...

  9. 基于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 ...

最新文章

  1. html网页在指定位置嵌入表格,网页制作中表格的主要作用 网页制作中插入表格怎么调整位置...
  2. 计算机系统的搭建步骤,电脑搭建Node.js开发环境的操作教程[多图]
  3. JSPDF运用实例(解决图片跨域问题)
  4. AngularJs2与AMD加载器(dojo requirejs)集成
  5. 《Adobe Flash CS5中文版经典教程》——1.3 使用“库”面板
  6. 紫光物联linux登录账号,紫光展锐打造操作系统生态,赋能万物互联智能时代
  7. 刚一下雪,中国就美哭了全世界!
  8. 7-深入练习Dockerfile
  9. .net邮件发送帮助类
  10. 论文写作——latex三线表tabular*文本居中与正文两端对齐、标题加黑
  11. 拼多多商家使用拼多多上传图片尺寸软件教程
  12. windows server 2016 安装openssh
  13. 给学妹写C程——中国海洋大学C语言程序设计课作业(一)
  14. 怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏
  15. 开源WordPress博客主题二次元风-LoliMeow主题
  16. ac9560不支持承载_WiFi打游戏总卡?英特尔AC9560无线网卡了解一下
  17. 输入名字显示其电话号码
  18. ipv6 socket python网络编程
  19. 三、Web漏洞-文件操作
  20. svn更新代码提示“系统找不到指定路径”

热门文章

  1. CentOS 6.5 安装与配置LAMP
  2. OpenCV在VS2005下的配置
  3. 驱动开发 - WDK 调试及 SVN 环境搭建[转]
  4. MSSQL SERVER 2005 数学函数
  5. 感知器python代码
  6. Golang 入门笔记(二)上
  7. Tensorflow:interactivesession和session的区别。
  8. 推荐CUDA程序优化的15个策略
  9. 论文翻译:ImageNet Classification with Deep Convolutional nerual network
  10. 【Matlab】矩阵中选取任意子矩阵