推荐系统笔记

2015.06.15 | Comments

1、产生原因

  • 信息过载
  • 无明确需求

2、什么是推荐?

在信息过载又没有明确需求的情况下,找到用户感兴趣的东西。

《Mahout实战》上的定义是:推荐就是通过对喜好的这些模式进行预测,借以发现你尚未知晓,却合乎心意的新事物

3、推荐和搜索区别:

  • 相同点:快速发现有用信息的工具
  • 不同点:搜索引擎是用户找信息;推荐系统是信息找用户

为了解决信息过载的问题,代表性的解决方案是分类目录和搜索引擎。和搜索引擎一样,推荐系统也是一种帮助用户快速发现有用信息的工具。和搜索引擎不同的是,推荐系统不需要用户提供明确的需求,而是通过分析用户的历史行为给用户的兴趣建模,从而主动给用户推荐能够满足他们兴趣和需求的信息。

因此,从某种意义上说,推荐系统和搜索引擎对于用户来说是两个互补的工具。搜索引擎满足了用户有明确目的时的主动查找需求,而推荐系统能够在用户没有明确目的的时候帮助他们发现感兴趣的新内容。

从物品的角度出发,推荐系统可以更好地发掘物品的长尾。长尾商品往往代表了一小部分用户的个性化需求,发掘这类信息正是推荐系统的长项。

4、推荐系统定义

推荐系统广泛存在于各类网站中,作为一个应用为用户提供个性化推荐。它需要依赖用户的行为数据,因此一般都由后台日志系统、推荐算法系统和前台展示页面3部分构成。

5、推荐系统任务:

  • 发现有价值的信息
  • 增加曝光度

推荐系统的任务就是联系用户和信息,一方面帮助用户发现对自己 有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,从而实现信息消费者和信息生产者的双赢。

6、推荐系统的模块:

  • 获取用户偏好,计算用户模型,需求信息
  • 推荐对象模型,特征信息
  • 推荐算法
  • 推荐评估

7、推荐系统原理:

  • 基于社交网络推荐
  • 基于内容推荐:基于物品的属性进行推荐。
  • 热门推荐:推荐热门的商品
  • 协同过滤:仅仅通过了解用户与物品之间的关系进行推荐。

8、常见形式:

  • 猜你喜欢
  • 买了又买
  • 精品推荐
  • 关联互补

9、十大挑战

  • 数据稀疏:基于物品协同
  • 冷启动
  • 增量计算
  • 多样性与精确性的选择
  • 推荐系统的脆弱性
  • 用户行为的挖掘和利用
  • 推荐系统的评估
  • 用户界面及用户体验
  • 多维数据交叉利用
  • 社交网络推荐

10、用户建模流程:

用户–>获取用户信息–>建立用户模型–>模型的更新–>利用模型进行推荐–>提供推荐结果–>用户反馈–>更新模型

11、创建一个推荐引擎过程:

  • 1、创建输入。输入的数据是结构化的,包括用户、商品和喜好,或者还有时间戳,用于拆分数据
  • 2、创建推荐程序。选择推荐算法编写推荐程序。
  • 3、训练数据与评分。一般会将数据随机拆分为训练数据和测试数据,一般比例设置为8比2。
  • 4、评估结果。使用查全率查准率评估推荐程序,或者统计MAE、SMSE、UOC等
  • 5、输出结果。取Top K个结果。

输入的数据模型包括:用户、商品和偏好值,没有偏好值的关联成为布尔型偏好,这表示用户和物品的关联具备三种可能状态:喜好、不喜欢或无所谓。

12、推荐系统评测

主要有3种评测推荐效果的实验方法:

  • 离线实验:划分训练集和测试集,在训练集训练用户兴趣模型,在测试集预测
  • 优点:快速方便
  • 缺点:无法用真实的商业指标来衡量
  • 用户调查:用抽样的方法找部分用户试验效果
  • 优点:指标比较真实
  • 缺点:规模受限,统计意义不够
  • 在线实验:AB测试
  • 优点:指标真实
  • 缺点:测试时间长,设计复杂

实际中,这三种方法在推荐算法上线前都要完成。

评测指标:

    1. 用户满意度。用户作为推荐系统的重要参与者,其满意度是评测推荐系统的最重要指标。但是,用户满意度没有办法离线计算,只能通过用户调查问卷或者在线实验获得。
    1. 预测准确度。预测准确度度量一个推荐系统或者推荐算法预测用户行为的能力。这个指标是最重要的推荐系统离线评测指标,可以通过离线实验计算。在计算该指标时需要有一个离线的数据集,该数据集包含用户的历史行为记录。然后,将该 数据集通过时间分成训练集和测试集。最后,通过在训练集上建立用户的行为和兴趣模型预测用户在测试集上的行为,并计算预测行为和测试集上实际行为的重合度作为预测准确度。预测用户对物品评分的行为称为评分预测。评分预测的预测准确度一般通过均方根误差(RMSE)和平均绝对误差(MAE)计算。TopN推荐的预测准确率一般通过准确率(precision)/召回率(recall)度量。
    1. 覆盖率。覆盖率(coverage)描述一个推荐系统对物品长尾的发掘能力。覆盖率有不同的定义方法,最简单的定义为推荐系统能够推荐出来的物品占总物品集合的比例。覆盖率是一个内容提供商会关心的指标。
    1. 多样性。为了满足用户广泛的兴趣,推荐列表需要能够覆盖用户不同的兴趣领域,即推荐结果需要具有多样性。
    1. 新颖性。新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。在一个网站中实现新颖性的最简单办法是,把那些用户之前在网站中对其有过行为的物品从推荐列表中过滤掉。评测新颖度的最简单方法是利用推荐结果的平均流行度,因为越不热门的物品越可能让用户觉得新颖。因此,如果推荐结果中物品的平均热门程度较低,那么推荐结果就可能有比较高的新颖性。
    1. 惊喜度。如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听说过这个推荐结果。
    1. 信任度。度量推荐系统的信任度只能通过问卷调查的方式,询问用户是否信任推荐系统的推荐结果。提高推荐系统的信任度主要有两种方法。首先需要增加推荐系统的透明度,而增加推荐系统透明度的主要办法是提供推荐解释。只有让用户了解推荐系统的运行机制,让用户认同推荐系统的运行机制,才会提高用户对推荐系统的信任度。其次是考虑用户的社交网络信息,利用用户的好友信息给用户做推荐,并且用好友进行推荐解释。这是因为用户对他们的好友一般都比较信任,因此如果推荐的商品是好友购买过的,那么他们对推荐结果就会相对比较信任。
    1. 实时性。推荐系统的实时性包括两个方面。首先,推荐系统需要实时地更新推荐列表来满足用户新的行为变化。实时性的第二个方面是推荐系统需要能够将新加入系统的物品推荐给用户。这主要考验了推荐系统处理物品冷启动的能力。
    1. 健壮性(反作弊)。算法健壮性的评测主要利用模拟攻击。首先,给定一个数据集和一个算法,可以用这个算法给这个数据集中的用户生成推荐列表。然后,用常用的攻击方法向数据集中注入噪声数据,然后利用算法在注入噪声后的数据集上再次给用户生成推荐列表。最后,通过比较攻击前后推荐列表的相似度评测算法的健壮性。如果攻击后的推荐列表相对于攻击前没有发生大的变化,就说明算法比较健壮。
  • 设计推荐系统时尽量使用代价比较高的用户行为。比如,如果有用户购买行为和用户浏览行为,那么主要应该使用用户购买行为,因为购买需要付费,所以攻击购买行为的代价远远大于攻击浏览行为。
  • 在使用数据前,进行攻击检测,从而对数据进行清理。

下图直观地描述了准确率和召回率的含义:

一般来说,评测维度分为如下3种。

  • 用户维度。主要包括用户的人口统计学信息、活跃度以及是不是新用户等。
  • 物品维度。包括物品的属性信息、流行度、平均分以及是不是新加入的物品等。
  • 时间维度。包括季节,是工作日还是周末,是白天还是晚上等。

如果能够在推荐系统评测报告中包含不同维度下的系统评测指标,就能帮我们全面地了解推荐系统性能,找到一个看上去比较弱的算法的优势,发现一个看上去比较强的算法的缺点。

13、协同过滤

协同过滤分为:基于用户的推荐和基于物品的推荐。

基于用户的推荐是找出于该用户邻近的用户,然后将这些用户最感兴趣的物品推荐给该用户。通常包括以下几个组件:

  • 数据模型
  • 用户间的相似性度量
  • 用户邻域的定义:N个最相似用户构成的邻域和基于阈值的邻域
  • 推荐引擎

相似性度量的说明,请参考 Mahout推荐引擎介绍

《Mahout实战》上提到基于用户的推荐,Mahout中最佳方案为:使用两个最近的邻域,欧式距离相似性度量。

基于物品的推荐,就是给目标用户推荐与他喜欢的物品相似度较高的物品。

14、冷启动问题

冷启动分几种:

  • 用户冷启动,即用户刚刚来,还没有对物品做出行为,比如你刚注册豆瓣电影,但没有标记过任何一部电影,所以豆瓣很难根据你的行为来做出推荐;
  • 物品冷启动,新的物品一进入网站,还没有用户给出过对它的行为,那么如何将新物品推荐给可能会对它感兴趣的用户;
  • 系统冷启动, 即新开发的网站如何让用户体验到个性化服务的问题。

解决冷启动的方法:

1、利用用户注册信息。我们注册一个网站的账号的时候很可能会填写性别、年龄、职业等人口统计学特征;还有的网站会让用户描述兴趣;以及用户可能通过其他网站比如新浪微博、腾讯账号来登录,这时就可以采用用户的社交数据。利用的人口统计学特征越多,对用户的兴趣描述就越准确。

2、要求用户在注册时对一些物品进行反馈,通过这些反馈来推测用户兴趣。使用决策树来选择待测试的物品。

对于一个物品i,用户们对i的行为可以分为3类(喜欢、不喜欢、无感觉),然后看这三类人的兴趣是不一致,如果这三类人兴趣都差不多,那么i的区分度可能就不那么高,也就是说如果喜欢i和不喜欢i的人是兴趣类似的,那么i就没啥区分度,不能够用来度量新用户的兴趣。这个算法会从区分度最高的物品开始,将用户分成3类,又在每类用户找找到区分度最高的物品继续询问,一层层下去直到最后的叶子节点。

3、利用物品的内容信息。通过向量空间模型来表示物品的内容,将其表示成一个关键词向量,计算权重,再通过计算相似度来计算物品的相似度。这里涉及到文本挖掘工作。

4、发挥专家的作用,即利用专家来对数据进行标注。这个对绝大多数情况并不现实。

UserCF对物品冷启动问题并不敏感,因为总有用户会访问到新物品,此时给那些相似的用户推荐这个物品,就会有越来越多的人来访问这个物品,形成良性循环。在ItemCF中,物品冷启动就是比较严重的问题了,物品冷启动必须频繁更新物品相似度表,时间复杂度高。


原创文章,转载请注明: 转载自JavaChen Blog,作者:JavaChen
本文链接地址:http://blog.javachen.com/2015/06/15/note-about-recommendation-system.html
本文基于署名2.5中国大陆许可协议发布,欢迎转载、演绎或用于商业目的,但是必须保留本文署名和文章链接。 如您有任何疑问或者授权方面的协商,请邮件联系我。