zoukankan      html  css  js  c++  java
  • 推荐系统评测

    好的推荐系统:三赢

        用户-找到自己感兴趣的东西
        商家-增加了销量
        网站-得到好的发聩,提升了推荐质量;提高了收入
     
    推荐系统评测方法:
      优点 缺点
    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
     
     
     
  • 相关阅读:
    北航算法作业三
    水库抽样
    python命名空间
    我说
    Fn键
    windows批处理运行java程序
    Java Sound初探
    java.io.IOException: mark/reset not supported
    三层交换机对链路层数据帧的处理
    北航数值分析作业三
  • 原文地址:https://www.cnblogs.com/porco/p/4408694.html
Copyright © 2011-2022 走看看