1. 指标介绍
评测推荐系统的好坏有多种指标,包括:用户满意度、预测准确度、覆盖率、多样性、新颖性、惊喜度、实时性、健壮性等等。
1.1 用户满意度:
该指标主要通过问卷调查获得。
在线系统中用户满意度主要通过对用户行为的统计得到比如:购买率、满意不满意反馈按钮、点击率、用户停留时间、转换率等等反馈获得。
1.2 预测准确度
预测准确度是离线评测中最重要的指标。
在对用户进行评分预测时,主要通过计算均方根误差RMSE或平均绝对误差MAE获得。
在TopN推荐时,主要通过召回率和精确率获得。
- 召回率(Recall):召回率主要是针对样本而言,它表示样本中的正例有多少被正确预测了。召回率 = 推荐的正确信息条数 / 样本中喜欢的总信息条数。
- 精确率(Precision):精确率主要针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。精确率 = 推荐的正确信息条数 / 推荐的总信息条数
区别与准确率,准确率=(喜欢的推荐了+不喜欢的不推荐)/总样本
比如,总共100条信息,小明喜欢30条,推荐系统给他推荐20条,其中小明喜欢的有10条。
召回率:推荐列表中喜欢的10条/样本中总共喜欢的30条 = 0.3
精确率:推荐列表中喜欢的10条/推荐了20条 = 0.5
准确率:(推荐列表中喜欢的10条+没推荐列表中不喜欢的60条)/总信息数 = 0.7
1.3 覆盖率
描述推荐系统对物品长尾的挖掘能力。
最简单的定义为:推荐系统能够推荐出来的物品占总物品集合的比例。
也可以为:统计推荐列表中不同物品出现次数的分布。
如果所有物品都出现在推荐列表中,且出现的次数差不多,那么推荐系统挖掘长尾的能力就很好。
可以用信息熵和基尼系数来表示覆盖率。
1.4 多样性
推荐列表的多样性是指推荐的内容可以覆盖用户绝大多数的兴趣点,这样就会增加用户找到感兴趣物品的概率。
多样性描述了推荐列表中物品两两之间的不相似性。
1.5 新颖性
给用户推荐那些他们以前没有听说过的物品。
最简单的方法是利用推荐结果的平均流行度,因为越不热门的物品越有可能让用户觉得新颖。
但是要准确地统计新颖性需要做用户调查。
1.6 惊喜度
区别与新颖性,惊喜度表示如果推荐结果和用户历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听说过推荐结果。
目标还没有公认的惊喜度指标定义方式。
1.7 实时性
物品(新闻、微博)具有很强的实时性,所以需要在物品还具有实效性时将它们推荐给用户。
1.8 健壮性
健壮性用来衡量推荐系统抗击作弊的能力。
常见的作弊方法为行为注入攻击,例如模仿购物行为来刷单。
提高健壮性的方法:
- 选择健壮性高的算法
- 进行使用代价较高的用户行为。比如购买需要付费。
- 使用数据前,进行攻击检测,从而对数据进行清洗。
2.选择推荐系统的指标
首先我们使用ml-latest-small数据集,我们将数据集分为训练集和测试集。
我们选取精确率、召回率、覆盖率、新颖性来作为评测指标。
def precision(self, user_list):
"""
计算精确率, 推荐正确item集合 / 所有推荐item集合
:param user_list: user集合
:return:
"""
hit = 0
all_recom = 0
print('计算精确率:')
for user in tqdm(user_list)<