推荐系统的评价指标及其Python实现
文章目录
- 摘要
- 一、用户满意度
- 二、预测准确度
- 1、流程
- 2、评分推荐
- 3、topN推荐
- 4、评分推荐和topN推荐比较
- 三、覆盖率
- 1、定义
- 2、信息熵:![在这里插入图片描述](https://img-blog.csdnimg.cn/20200331095842285.png)
- 3、基尼系数(Gini Index)
- 四、其余常用指标
- 1、多样性
- 2、新颖性
- 3、惊喜度
- 4、信任度
- 5、实时性
- 6、健壮性/鲁棒性
摘要
在上一篇博客中介绍了精确率、召回率、F1 值、ROC、AUC等分类模型评价指标含义与作用详解,在这一篇博客则是就推荐系统中常用的几种评价指标进行分析。
一、用户满意度
用户满意度没有办法离线计算,只能通过用户调查或者在线实验获得。
在在线系统中,用户满意度主要通过一些对用户行为的统计得到。比如在电子商务网站中,用户如果购买了推荐的商品,就表示他们在一定程度上满意。因此,我们可以利用购买率度量用户的满意度。此外,有些网站会通过设计一些用户反馈界面收集用户满意度。更一般的情况下,我们可以用点击率、用户停留时间和转化率等指标度量用户的满意度。
二、预测准确度
1、流程
在计算该指标时需要有一个离线的数据集,该数据集包含用户的历史行为记录。然后,将该数据集通过时间分成训练集和测试集。最后,通过在训练集上建立用户的行为和兴趣模型预测用户在测试集上的行为,并计算预测行为和测试集上实际行为的重合度作为预测准确度。
2、评分推荐
很多提供推荐服务的网站都有一个让用户给物品打分的功能。那么,如果知道了用户对物品的历史评分,就可以从中习得用户的兴趣模型,并预测该用户在将来看到一个他没有评过分的物品时,会给这个物品评多少分。预测用户对物品评分的行为称为评分预测。
def RMSE(records):return math.sqrt(sum([(rui - pui)*(rui - pui) for u,i,rui,pui in records]) \/ float(len(records)))
def MAE(records):return sum([abs(rui-pui) for u,i,rui,pui in records]) \/ float(len(records))
关于RMSE和MAE这两个指标的优缺点, Netflix认为RMSE加大了对预测不准的用户物品评分的惩罚(平方项的惩罚),因而对系统的评测更加苛刻。研究表明,如果评分系统是基于整数建立的(即用户给的评分都是整数),那么对预测结果取整会降低MAE的误差。
3、topN推荐
网站在提供推荐服务时,一般是给用户一个个性化的推荐列表,这种推荐叫做TopN推荐。TopN推荐的预测准确率一般通过准确率(precision)/召回率(recall)度量。
令R(u)是根据用户在训练集上的行为给用户作出的推荐列表,而T(u)是用户在测试集上的行为列表。那么,推荐结果的召回率定义为:
推荐结果的准确率定义为:
def PrecisionRecall(test,N):hit = 0n_recall = 0n_precision =0for user,items in test.items():rank = Recommend(user,N)hit += len(rank & items)n_recall += len(items)n_precision += Nreturn [hit / n_recall, hit / n_precision]
4、评分推荐和topN推荐比较
Greg Linden指出电影推荐的目的是找到用户最有可能感兴趣的电影,而不是预测用户看了电影后会给电影什么样的评分。因此,TopN推荐更符合实际的应用需求。
而另一种情形,一些电影解说人员可能更希望找到高评分的电影进行电影解说,那就需要评分推荐。
三、覆盖率
1、定义
覆盖率(coverage)描述了一个推荐系统对物品长尾的发掘能力。
覆盖率有不同的定义方法,最简单的定义为推荐系统能够推荐出来的物品占总物品集合的比例。假设系统的用户集合为U,推荐系统给每个用户推荐一个长度为N的物品列表R(u)。那么推荐系统的覆盖率可以通过下面的公式计算:
从上面的定义可以看到,覆盖率是一个内容提供商会关心的指标。以图书推荐为例,出版社可能会很关心他们的书有没有被推荐给用户。覆盖率为100%的推荐系统可以将每个物品都推荐给至少一个用户。
但是上面的定义过于粗略。在信息论和经济学中有两个著名的指标可以用来定义覆盖率。
即信息熵和基尼系数。
2、信息熵:![](/assets/blank.gif)
3、基尼系数(Gini Index)
def GiniIndex(p):j = 1n = len(p)G = 0for item,weight in sorted(p.items(),key = itemgetter(1)):G += (2 * j - n - 1) * weightreturn G / float(n - 1)
社会学领域有一个著名的马太效应,即所谓强者更强,弱者更弱的效应。如果一个系统会增大热门物品和非热门物品的流行度差距,让热门的物品更加热门,不热门的物品更加不热门,那么这个系统就有马太效应。
那么,推荐系统是否有马太效应呢?推荐系统的初衷是希望消除马太效应,使得各种物品都能被展示给对它们感兴趣的某一类人群。但是,很多研究表明现在主流的推荐算法(比如协同过滤算法)是具有马太效应的。评测推荐系统是否具有马太效应的简单办法就是使用基尼系数。 如果G1是从初始用户行为中计算出的物品流行度的基尼系数,G2是从推荐列表中计算出的物品流行度的基尼系数,那么如果G2 > G1,就说明推荐算法具有马太效应。
四、其余常用指标
1、多样性
为了满足用户广泛的兴趣,推荐列表需要能够覆盖用户不同的兴趣领域,即推荐结果需要具有多样性。
2、新颖性
新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。在一个网站中实现新颖性的最简单办法是,把那些用户之前在网站中对其有过行为的物品从推荐列表中过滤掉。
O’scar Celma在博士论文“Music Recommendation and Discovery in the Long Tail”中研究了新颖度的评测。评测新颖度的最简单方法是利用推荐结果的平均流行度,因为越不热门的物品越可能让用户觉得新颖。因此,如果推荐结果中物品的平均热门程度较低,那么推荐结果就可能有比较高的新颖性。
用推荐结果的平均流行度度量新颖性比较粗略,因为不同用户不知道的东西是不同的。因此,要准确地统计新颖性需要做用户调查。
3、惊喜度
惊喜度(serendipity)是最近这几年推荐系统领域最热门的话题。
惊喜度与新颖性的区别:
如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听说过这个推荐结果。
4、信任度
对于基于机器学习的自动推荐系统,存在信任度(trust)的问题,如果用户信任推荐系统,那就会增加用户和推荐系统的交互。特别是在电子商务推荐系统中,让用户对推荐结果产生信任是非常重要的。同样的推荐结果,以让用户信任的方式推荐给用户就更能让用户产生购买欲,而以类似广告形式的方法推荐给用户就可能很难让用户产生购买的意愿。
度量推荐系统的信任度:
度量推荐系统的信任度只能通过问卷调查的方式,询问用户是否信任推荐系统的推荐结果。
提高推荐系统的信任度方法:
首先需要增加推荐系统的透明度(transparency),而增加推荐系统透明度的主要办法是提供推荐解释。只有让用户了解推荐系统的运行机制,让用户认同推荐系统的运行机制,才会提高用户对推荐系统的信任度。
其次是考虑用户的社交网络信息,利用用户的好友信息给用户做推荐,并且用好友进行推荐解释。这是因为用户对他们的好友一般都比较信任,因此如果推荐的商品是好友购买过的,那么他们对推荐结果就会相对比较信任。
5、实时性
推荐系统的实时性包括两个方面:
首先,推荐系统需要实时地更新推荐列表来满足用户新的行为变化。 很多推荐系统都会在离线状态每天计算一次用户推荐列表,然后于在线期间将推荐列表展示给用户。这种设计显然是无法满足实时性的。与用户行为相应的实时性,可以通过推荐列表的变化速率来评测。如果推荐列表在用户有行为后变化不大,或者没有变化,说明推荐系统的实时性不高。
实时性的第二个方面是推荐系统需要能够将新加入系统的物品推荐给用户。 这主要考验了推荐系统处理物品冷启动的能力。
6、健壮性/鲁棒性
任何一个能带来利益的算法系统都会被人攻击,这方面最典型的例子就是搜索引擎。搜索引擎的作弊和反作弊斗争异常激烈,这是因为如果能让自己的商品成为热门搜索词的第一个搜索果,会带来极大的商业利益。推荐系统目前也遇到了同样的作弊问题,而健壮性(即robust, 鲁棒性)指标衡量了一个推荐系统抗击作弊的能力。
算法健壮性的评测:
算法健壮性的评测主要利用模拟攻击。首先,给定一个数据集和一个算法,可以用这个算法给这个数据集中的用户生成推荐列表。然后,用常用的攻击方法向数据集中注入噪声数据,然后利用算法在注入噪声后的数据集上再次给用户生成推荐列表。最后,通过比较攻击前后推荐列表的相似度评测算法的健壮性。如果攻击后的推荐列表相对于攻击前没有发生大的变化,就说明算法比较健壮。
在实际系统中,提高系统的健壮性,除了选择健壮性高的算法,还有以下方法。
设计推荐系统时尽量使用代价比较高的用户行为。比如,如果有用户购买行为和用户浏览行为,那么主要应该使用用户购买行为,因为购买需要付费,所以攻击购买行为的代价远远大于攻击浏览行为。
在使用数据前,进行攻击检测,从而对数据进行清理。
参考:
https://blog.csdn.net/Dby_freedom/article/details/82251398(主要参考依据)
https://blog.csdn.net/qq_32023541/article/details/79716927
推荐系统的评价指标及其Python实现相关推荐
- python评价指标_详解分类评价指标和回归评价指标以及Python代码实现
这篇文章介绍的内容是详解分类评价指标和回归评价指标以及Python代码实现,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下. 1.概念 性能度量(评价)指标,主分为两大类: 1)分类评价 ...
- 推荐系统的评价指标总结
评价一个推荐系统的好坏的重要性不用多少.本文的总结非常的全面,相信读者通过阅读本文以及本文参考的文献可以对推荐系统的评价指标有比较全面的掌握. 对推荐系统的研究一个重要的环节是如何评价一个推荐算法的好 ...
- 【2023年第十一届泰迪杯数据挖掘挑战赛】C题:泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一
相关链接 [2023年第十一届泰迪杯数据挖掘挑战赛]C题泰迪内推平台招聘与求职双向推荐系统构建 建模及python代码详解 问题一 [2023年第十一届泰迪杯数据挖掘挑战赛]C题泰迪内推平台招聘与求职 ...
- python旅游推荐系统_如何用Python搭建一个简单的推荐系统?
推荐系统的相关知识我们已在前文中提到,在这篇文章中,我们会介绍如何用Python来搭建一个简单的推荐系统. 本文使用的数据集是MovieLens数据集,该数据集由明尼苏达大学的Grouplens研究小 ...
- 推荐系统常用评价指标和代码实现
评价指标 Recall 名称: 召回率(真阳性率) 意义:在推荐系统中,我们只关心正确推荐的有多少,也就是用户真实喜欢的,并不会关心推荐错的,所以我们用召回率,而不是准确率: 理解这个前提:混淆矩阵 ...
- 推荐系统的评价指标笔记(NDCG、MAP、AUC、HR、MRR)
NDCG Normalized Discounted Cummulative Gain 累积增益CG,CG表示每个推荐结果相关性的分数的累加, C G k = ∑ i = 1 k r ( i ) CG ...
- python评价指标_[Python人工智能] 六.神经网络的评价指标、特征标准化和特征选择...
从本系列文章开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前五篇文章讲解了神经网络基础概念.Theano库的安装过程及基础用法.theano实现回归神经网络.theano实现 ...
- python 图像清晰度_图像清晰度评价指标(Python)
最近在毕业设计中涉及了有关增强图像清晰度的实验,需要一些指标来进行实验结果的评估.刚好网上有个总结的非常好的博客(见参考文献[1]),但没有实现方法.因此,我将在我的博客中用Python实现. 评估方 ...
- python 个性化推荐系统_如何在 Python 中使用 LightFM 构建可扩展的个性化推荐系统?...
在我国,电商非常发达.今年双 11 的成交额仅仅过了 12 小时就达到了惊人的 1491.6 亿元!电商在我国的火爆程度由此可见一斑.不知你们有没有发现,在网店浏览商品时,它们好像能读懂你的内心,推荐 ...
最新文章
- 【教程】Python数据可视化技巧
- mount and fstab的使用(整理)
- python对数据进行分类_在Python中对一系列数据进行分类的最佳方法
- 时间模块(import time)
- OLE 操作Excel 祥解
- mysql php sdk_PHP连接MySQL数据库
- 锐捷交换机配置保存到计算机,锐捷交换机配置命令总结中篇
- Linux wine系列——Ubuntu20.04安装wine教程 [2021.3]
- 任正非:人感知到自己的渺小,行为才开始伟大
- VC++实现内存映射文件(附源码)
- 使用亚马逊云快速托管静态网站
- java 随机手机验证码_Java随机生成手机短信验证码的方法
- 白话电视:被移动设备抢走的光环,靠什么夺回来?
- C++学习:后面有“::”的名称一定是类名或命名空间名
- 三线npn型接近开关与三菱plc输入端子接线方法
- 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海)G Fibonacci
- trufflle init 出现 unbox fail的情况
- fckeditor的皮肤系列:皮肤更换
- IOC在墨者革离中的理解
- 认识黑客常用的入侵方法
热门文章
- FPGA开发流程synthesis和implementatin的作用
- meteor入门自学
- N1变砖有救N1 eMMC 镜像,理论用于TTL救砖 ,使用ddbr恢复官改系统救砖方法
- Duchefa丨D5124 MD5A 培养基中英文说明书
- U盘安装ubuntu22.04 Linux系统分区
- 深度学习网络和特征图可视化的工具介绍
- 使用myeclipse打开警示牌文件出现“Failed to create the part's controls错误
- OpenChatPaper | 你值得拥有的论文阅读小助手!~(粉丝投稿)
- 计算机保研陶瓷老师记录(1)
- 五步移相法matlab程序_ZVZCS移相全桥变换器的设计与MATLAB仿真