好的推荐系统:三赢
用户-找到自己感兴趣的东西
商家-增加了销量
网站-得到好的发聩,提升了推荐质量;提高了收入
推荐系统评测方法:
优点 | 缺点 | |
1.离线实验 | 只需要数据集, 不需要用户参与, 不需要实际系统; 速度快,可测试大量算法; |
无法计算商业上关心的指标, 如点击率、转化率等 |
2.调查问卷 | 可获得用户主管感受指标; 比在线实验风险小; |
成本高,参与用户少,统计意义不显著; 双盲实验设计困难 |
3.在线实验 (AB测试) |
可获得商业关心指标; | 周期长; |
指标:
用户满意度—可以通过调查问卷获得;或者通过点击率,用户停留时间,转化率等运营指标衡量;
预测准确率
——评分预测:均方误差较为严苛;如果评分是整数,对预测结果取整,会降低平均误差
均方误差:
平均误差:
——TopN推荐:准确率和召回率
为了全面评测准确率和召回率,会选取一组长度N,计算相应准确率和召回率,然后画出曲线
覆盖率
——能被推荐物品占总物品的比例:
——熵:其中p为商品i被推荐次数占总推荐次数的比例
——基尼系数:其中i_j是按p从小到大排序后的第j个物品
推荐系统应该需要排除马太效应(即越流行的东西越去推荐,导致它们更流行;而一些冷门的得不到推荐)
所以推荐算法在推荐物品时,p应该是越平均越好
如果G1是从初始用户行为中计算出的物品流行度的基尼系数,
G2是从推荐列表中计算出的物品流行度的基尼系数,
如果G2 > G1,就说明推荐算法具有马太效应
多样性——指推荐系统要能满足用户兴趣的多样性
s(i,j)~[0,1] 为推荐列表上两个物品i,j的相似度
新颖性—初略方法,将列表上平均流行度不高的物品推荐给用户
推荐给用户和他兴趣相符,但是他不知道的东西
惊喜度
推荐给用户和他兴趣不相符的,但是体验过后,用户觉得满意的
信任度—增加推荐系统透明度;提供解释,比如,好友购买的东西
实时性
健壮性
实现:
''' 分别计算了准确率、召回率、覆盖率、新颖性 ''' def estimate(self,test): ui_test=self.user_item(test) unions = 0 sumRec = 0 sumTes = 0 itemrec = set() sumPopularity = 0 for user in self.ui.keys(): rank=self.getRecommend(user); itemtest = set() if user in ui_test: itemtest = ui_test[user] sumRec += len(rank) sumTes += len(itemtest) for recItem in rank: sumPopularity += math.log(1+len(self.iu[recItem])) itemrec.add(recItem) if recItem in itemtest: unions += 1; return unions*1.0/sumRec,unions*1.0/sumTes,len(itemrec)*1.0/len(self.iu.keys()),sumPopularity*1.0/sumRec