推荐系统评测

好的推荐系统:三赢

    用户-找到自己感兴趣的东西
    商家-增加了销量
    网站-得到好的发聩,提升了推荐质量;提高了收入
 
推荐系统评测方法:
  优点 缺点
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
 
 
 
原文地址:https://www.cnblogs.com/porco/p/4408694.html