【推荐系统实战(二)】利用用户行为数据、推荐系统的冷启动问题
利用用户行为数据
基于用户行为分析的推荐算法是个性化推荐系统的重要算法,电子商务公司通过分析用户数据,找出诸如“购买A商品的用户都购买B商品”这种规律,学术界一般将这种类型的算法,称为协同过滤算法。顾名思义,协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。
用户行为数据简介
**用户行为数据在网站上最简单的存在形式就是日志。**网站在运行过程中都产生大量原始日志
(raw log),并将其存储在文件系统中。很多互联网业务会把多种原始日志按照用户行为汇总成会
话日志(session log),其中每个会话表示一次用户行为和对应的服务。比如,在搜索引擎和搜索
广告系统中,服务会为每次查询生成一个展示日志(impression log),其中记录了查询和返回结
果。如果用户点击了某个结果,这个点击信息会被服务器截获并存储在点击日志(click log)中。
一个并行程序会周期性地归并展示日志和点击日志,得到的会话日志中每个消息是一个用户提交
的查询、得到的结果以及点击。类似地,推荐系统和电子商务网站也会汇总原始日志生成描述用
户行为的会话日志。
用户行为在个性化推荐系统中一般分两种——显性反馈行为(explicit feedback)和隐性反馈
行为(implicit feedback)。显性反馈行为包括用户明确表示对物品喜好的行为。图2-2显示了不同
网站收集显性反馈的方式。可以看到,这里的主要方式就是评分和喜欢/不喜欢。很多网站都使
用了5分的评分系统来让用户直接表达对物品的喜好,但也有些网站使用简单的“喜欢”或者“不和显性反馈行为
相对应的是隐性反馈行为。隐性反馈行为指的是那些不能明确反应用户喜好的行为。最具代表性的隐性反馈行为就是页面浏览行为。用户浏览一个物品的页面并不代表用户一定喜欢这个页面展示的物品, 比如可能因为这个页面链接显示在首页,用户更容易点击它而已。相比显性反馈,隐性反馈虽然不明确,但数据量更大。在很多网站中,很多用户甚至只有隐性反馈数据,而没有显性反馈数据。
表2-3给出了一种表示方式,它将一个用户行为表示为6部分,即产生行为的用户和行为的对象、行为的种类、产生行为的上下文、行为的内容和权重。
一般来说,不同的数据集包含不同的行为,目前比较有代表性的数据集有下面几个
- 无上下文信息的隐性反馈数据集 每一条行为记录仅仅包含用户ID和物品ID。Book-Crossing①就是这种类型的数据集。
- 无上下文信息的显性反馈数据集 每一条记录包含用户ID、物品ID和用户对物品的评分。
- 有上下文信息的隐性反馈数据集 每一条记录包含用户ID、物品ID和用户对物品产生行为的时间戳。Lastfm数据集①就是这种类型的数据集。
- 有上下文信息的显性反馈数据集 每一条记录包含用户ID、物品ID、用户对物品的评分和评分行为发生的时间戳。Netflix Prize②提供的就是这种类型的数据集。
本章使用的数据集基本都是第一种数据集,即无上下文信息的隐性反馈数据集。
仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法。学术界对协同过滤算法进行了深入研究,提出了很多方法,比如基于邻域的方法(neighborhood-based)、隐语义模型(latent factor model)、基于图的随机游走算法(random walk on graph)等。在这些方法中,最著名的、在业界得到最广泛应用的算法是基于邻域的方法,而基于邻域的方法主要包含下
面两种算法。
基于用户的协同过滤算法 这种算法给用户推荐和他兴趣相似的其他用户喜欢的物品。
基于物品的协同过滤算法 这种算法给用户推荐和他之前喜欢的物品相似的物品。
下面几节将首先介绍上面两种算法,然后再简单介绍隐语义模型和基于图的模型
基于邻域的推荐算法
基于用户的协同过滤算法
那么,在一个在线个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。这种方法称为基于用户的协同过滤算法。
从上面的描述中可以看到,基于用户的协同过滤算法主要包括两个步骤。
(1) 找到和目标用户兴趣相似的用户集合。
(2) 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
步骤(1)的关键就是计算两个用户的兴趣相似度。这里,协同过滤算法主要利用行为的相似度计算兴趣的相似度。给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v)为用户v曾经有过正反馈的物品集合。那么,我们可以通过如下的Jaccard公式简单地计算u和v的兴趣相似度:
得到用户之间的兴趣相似度后,UserCF算法会给用户推荐和他兴趣最相似的K个用户喜欢的物品。如下的公式度量了UserCF算法中用户u对物品i的感兴趣程度:
基于物品的协同过滤算法
基于物品的协同过滤算法(简称ItemCF)给用户推荐那些和他们之前喜欢的物品相似的物品。
不过,ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。
该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。
基于物品的协同过滤算法主要分为两步。
(1) 计算物品之间的相似度。
(2) 根据物品的相似度和用户的历史行为给用户生成推荐列表。
图2-9上亚马逊显示相关物品推荐时的标题是“Customers Who Bought This Item Also Bought”
(购买了该商品的用户也经常购买的其他商品)。从这句话的定义出发,我们可以用下面的公式定
义物品的相似度:
这里,分母|N(i)|是喜欢物品i的用户数,而分子 Ni N j () ( ) 是同时喜欢物品i和物品j的用户
数。因此,上述公式可以理解为喜欢物品i的用户中有多少比例的用户也喜欢物品j。
上述公式虽然看起来很有道理,但是却存在一个问题。如果物品j很热门,很多人都喜欢,
那么Wij就会很大,接近1。因此,该公式会造成任何物品都会和