基于用户行为分析的推荐算法是个性化推荐系统的重要算法,一般将这种类型的算法称为协同过滤算法。协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。
用户行为数据简介
用户行为数据在网站上最简单的存在形式就是日志。网站在运行过程中都产生大量原始日志raw log,并将其存储在文件系统中。很多互联网业务会把多种原始日志按照用户行为汇总成会话日志session log,其中每个会话表示一次用户行为和对应的服务。会话日志通常存储在分布式数据仓库中,如支持离线分析的Hadoop Hive和支持在线分析的Google Dremel。
用户行为在个性化推荐系统中一般分两种—显性反馈行为(explicit feedback)和隐性反馈行为(implicit feedback):
- 显性反馈行为: 包括用户明确表示对物品喜好的行为。不同网站收集显性反馈行为的主要方式是评分和喜欢/不喜欢。
- 隐性反馈行为: 指那些不能明确反应用户喜好的行为。最具代表性的隐性反馈行为就是页面浏览行为。用户浏览一个物品的页面并不代表用户一定喜欢这个页面展示的物品,比如可能因为这个页面链接显示在首页,用户更容易点击它而已。相比显性反馈,隐性反馈虽然不明确,但数据量更大。
显性反馈数据和隐性反馈数据的比较.
显性反馈数据 | 隐性反馈行为 | |
---|---|---|
用户兴趣 | 明确 | 不明确 |
数量 | 较少 | 庞大 |
存储 | 数据库 | 分布式文件系统 |
实时读取 | 实时 | 有延迟 |
正负反馈 | 都有 | 只有正反馈 |
按照反馈的方向分,可以分为正反馈和负反馈。正反馈指用户的行为倾向于指用户喜欢该物品,负反馈指用户的行为倾向于指用户不喜欢该物品。在显性反馈中,很容易区分一个用户行为是正反馈还是负反馈,而在隐性反馈行为中,就相对比较难以确定。
一般来说,不同的数据集包含不同的行为,目前比较有代表性的数据集有下面几个:
- 无上下文信息的隐性反馈数据集: 每一条行为记录仅仅包含用户ID和物品ID。
- 无上下文信息的显性反馈数据集: 每一条记录包含用户ID、物品ID和用户对物品的评分;
- 有上下文信息的隐性反馈数据集: 每一条记录包含用户ID、物品ID和用户对物品产生行为的时间戳;
- 有上下文信息的显性反馈数据集: 每一条记录包含用户ID、物品ID和用户对物品的评分和评分行为发生的时间戳。
用户行为分析
在利用用户行为数据设计推荐算法之前,研究人员首先需要对用户行为数据进行分析,了解数据中蕴含的一般规律,才能对算法的设计起到指导作用[相当与ML中数据探索]。
用户活跃度和物品流行度的分布
[物品的流行度指对物品产生过行为的用户总数]
很多互联网数据的研究发现,互联网上的很多数据分布都满足一种称为Power Law的分布,这个分布在互联网领域也称为长尾分布。
f ( x ) = α x k f(x) = \alpha x^k f(x)=αxk
很多研究人员发现,用户行为数据也蕴含这种长尾分布的规律。
物品流行度和用户活跃度都近似于长尾分布。
用户活跃度和物品流行度的关系
仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法。协同过滤算法分为基于邻域的方法(neighborhood-based)、隐语义模型(latent factor model)、基于图的随机游走算法(random walk on graph)等。在这些方法中,最著名的、在业界得到最广泛应用的算法是基于邻域的方法,而基于邻域的方法主要包含下面两种算法:
- 基于用户的协同过滤算法: 给用户推荐和他兴趣相似的其他用户喜欢的物品;
- 基于物品的协同过滤算法: 给用户推荐和他之前喜欢的物品相似的物品。
基于邻域的算法
基于邻域的算法分为两类:一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法。
基于用户的协同过滤算法
基于用户的协同过滤算法是推荐系统中最古老的算法。
1.基础算法
基于用户的协同过滤算法主要包括两个步骤:
- 找到和目标用户兴趣相似的用户集合;
- 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
步骤一的关键在于计算两个用户的兴趣相似度。协同过滤算法主要利用行为的相似度计算兴趣的相似度。给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v)为用户v曾经有过正反馈的物品集合。可以通过Jaccard公式简单计算u和v的兴趣相似度:
余弦相似度计算:
2.基于相似度计算的改进
原来的相似度计算公式,如余弦相似度计算方法太过于粗糙。如果两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。John S. Breese在论文中提出如下公式,根据用户行为计算用户的兴趣相似度:
其中,N(i)表示物品i的流行度。公式惩罚了用户u和v共同兴趣列表中热门物品对他们相似度的影响。
基于用户的协同过滤算法的缺点:首先,随着网站的用户数目越来越大,计算用户兴趣相似度矩阵越来越困难,其运算时间复杂度和空间复杂度的增长和用户的增长近似于平方关系;其次,基于用户的协同过滤很难对推荐结果做出解释。
基于物品的系统过滤算法
基于物品的协同过滤item-based collaborative filtering算法是目前业界应用最多的算法。
1.基础算法
基于物品的协同过滤算法(简称ItemCF)给用户与推荐那些和他们之前喜欢的物品相似的物品。ItemCF算法并不利用物品的内容属性计算物品之间的相似度,主要通过分析用户的行为记录就是那物品之间的相似度。该算法认为,物品A和物品B具有很大的相似性是因为喜欢物品A的用户大都也喜欢物品B。
基于物品的协同过滤算法主要分为两步:
- 计算物品之间的相似度;
- 根据物品的相似度和用户的历史行为给用户生成推荐列表。
购买了该商品的用户也经常经常购买的其他商品,从这句话的定义出发,给出定义物品相似度的计算公式:
其中,分母|N(i)|是喜欢物品i的用户数,分子是同事喜欢物品i和物品j的用户数。
但是,上述公式存在一个问题,如果物品j很热门,很多人都喜欢,那么Wij就会很大,接近于1.因此,该公式会造成任务物品都会和热门的物品有很大的相似度,对致力于挖掘长尾信息的推荐系统来说不是一个好的特性。为了避免推荐出热门的物品,使用下面的公式: