什么是好的推荐系统
推荐系统一般有两种:一种是预测用户评分,另外是给出TopN,但后者会更频繁更有用。因为预测分数并不能怎么样。“重点是他看了,而不是评价”。下面都以TopN为主。
衡量推荐系统有四个基本指标:
准确率:
召回率:
覆盖率:对长尾物品的挖掘能力,所有用户的推荐总列表,占所有商品的比例,可以看出,K越大,覆盖率一定越高
流行度:
更高级别的:
新颖度: 这会让人眼前一亮,但很难通过离线计算获得,通常都用用户问卷。
现在主流推荐算法都有马太效应:强者越强,弱者越弱,会造成基尼系数的进一步提升。
距离和基于图的算法
基于距离的算法
用户购买的物品,可以记做矩阵。就有了ItemCF和UserCF,即常用的协同过滤。简单说,购买了相似物品的用户越相似,被用户同时购买的商品更相似。
对大部分东西的热度曲线,都呈现长尾效应:指数曲线。占20%的物品占据了80%的流量。越是重度用户,越会关心那些冷门的信息。
UserCF的推荐更社会化, 反映了用户在小型团体中兴趣的程度;和自己相似的人喜欢的,自己也喜欢。 ItemCF的推荐更个性化,反映了用户自己的兴趣:一定会喜欢购买类似的商品。
算法看似简单,但都有共同的问题,比如物品和物品是不同的,新华字典的信息量肯定没有《机器学习》来得大;人和人也是不同的,一个书商购书行为,也和普通的文艺青年有所区别。因此,需要特别去调整频繁用户/物品的权重,避免污染整个数据集。
另外,如果物品特别多或更新频繁,就去更新用户矩阵。而若用户特别多,则可用物品矩阵。简而言之,没有最合适的方法,都需要根据具体业务场景来定义规则。
K值越大,需要考虑的用户和商品就越多,显然,对UserCF,可以提升覆盖率,但不一定能提升召回。对ItemCF, K越大会降低覆盖率(为什么?)。
选择一个合适的K很重要。ItemCF的好处是其可解释性。
基于隐语义的算法
简单说,如果用户之前喜欢科技类书籍,那么就可以给他打标签,科技,之后即可推荐科技类书籍。
但问题是:
不是所有的书籍都有准确的分类,比如数学or计算机
分类很难提供准确的粗细粒度
甚至不一定有合适的分类标签
这就是隐语义,可以通过类似聚类的方法,将Item做分类,但标签不一定是可解释的,也就是所谓的“隐”,即LFM。
LFM通过如下公式计算用户对某个商品的兴趣:
网友评论