摘要:因此我们需要通过算法自动发掘用户行为数据,从用户的行为中推测出用户的兴趣,从而给用户推荐满足他们兴趣的物品。在《推荐系统实践》中用Delicious和CiteULike数据集一个月的原始数据进行分析说明了用户行为的长尾分布。

前言

要了解一个人,最好的方法就是“听其言,观其行”,也就是可以通过一个人的行为和文字来看出这个人的兴趣和需求。

实现个性化推荐的最理想情况就是用户能够反馈最精准的用户兴趣和需求,然后我们利用这些来精准推荐回去。

但是这种方法有几个缺点:

1.用户一般反馈的是语句(自然语言),自然语言技术对精准提取用户兴趣(需求)标签还有些难度;

2.用户的兴趣是不断变化的,但用户不会不停地更新兴趣描述;

3.很多时候用户并不知道自己喜欢什么,或者很难用语言描述自己喜欢什么。

因此我们需要通过算法自动发掘用户行为数据,从用户的行为中推测出用户的兴趣,从而给用户推荐满足他们兴趣的物品。

一个简单的例子

基于用户行为数据的推荐系统很早就开始实现了,最常见的应该是各种各样的排行榜,虽然排行榜简单地利用的用户行为统计,但是它们在互联网中的热度很高。这也说明了用户的行为不是随机性的,而是蕴含着很多模式,能够表现出用户或群体本身的一些特质。

举个简单的例子,在电子商务网站中,我们每次购物时网站都会生成一个购物车,里面包括了我们一次购买的所有商品。购物车分析是很多电子商务网站,甚至传统零售业的核心数据分析任务,比如我们可以分析哪些商品会同时出现在购物车中。这里面最著名的例子就是啤酒和尿布的例子。

通过分析用户的购物车,找出诸如“购买A商品的用户都购买B商品”这种规律,然后为用户展示其他用户也浏览A商品后会购买的商品,这是我们之前谈论过的“关联规则”算法。

用户行为数据简介

用户行为数据在网站上最简单的存在形式就是日志。网站在运行过程中都产生大量原始日志(raw log),并将其存储在文件系统中。

很多互联网业务会把多种原始日志按照用户行为汇总成会话日志(session log),其中每个 会话表示一次用户行为和对应的服务。

比如,在搜索引擎和搜索广告系统中,服务会为每次查询生成一个展示日志(impression log),其中记录了查询和返回结果。如果用户点击了某个结果,这个点击信息会被服务器截获并存储在点击日志(click log)中。这些数据就是用户行为的原始数据,我们需要从这些行为中得到用户的兴趣和需求。

显性反馈和隐性反馈

用户行为在个性化推荐系统中一般分两种——显性反馈行为(explicit feedback)和隐性反馈行为(implicit feedback)。显性反馈行为意味着用户明确表示对物品喜好的行为。

上图的表现方式主要是评分和喜欢/不喜欢

隐性反馈行为指的是那些不能明确反应用户喜好的行为。最具代表性的隐性反馈行为就是页面浏览行为,用户浏览一个物品的页面并不代表用户一定喜欢这个页面展示的物品,比如可能因为这个页面链接显示在首页,用户更容易点击它而已。

相比显性反馈,隐性反馈虽然不明确,但数据量更大。在很多网站中,很多用户甚至只有隐性反馈数据,而没有显性反馈数据。下表从几个不同方面比较了显性反馈数据和隐性反馈数据。

按照反馈的明确性分,用户行为数据可以分为显性反馈和隐性反馈,但按照反馈的方向分, 又可以分为正反馈和负反馈。正反馈指用户的行为倾向于指用户喜欢该物品,而负反馈指用户的 行为倾向于指用户不喜欢该物品。在显性反馈中,很容易区分一个用户行为是正反馈还是负反馈,而在隐性反馈行为中,就相对比较难以确定。

下面是显隐性反馈数据的一些例子:

互联网中的用户行为有很多种,比如浏览网页、购买商品、评论、评分等。要用一个统一的方式表示所有这些行为是比较困难的。下表给出了一种表示方式,它将一个用户行为表示为6部分,即产生行为的用户和行为的对象、行为的种类、产生行为的上下文、行为的内容和权重。

用户行为分析

用户活跃度和物品流行度的分布

一般来说,互联网上的很多数据分布都满足长尾分布(Power Law)。

对应用户行为数据也蕴涵着这种规律,令f(k)u为为对k个物品产生过行为的用户数,令f(k)i为被k个用户产生过行为的物品数。那么,f(k)u和f(k)i都满足长尾分布。也就是说:

在《推荐系统实践》中用Delicious和CiteULike数据集一个月的原始数据进行分析说明了用户行为的长尾分布。图2-3展示了Delicious和CiteULike数据集中物品流行度的分布曲线。横坐标是物品的流行度K,纵坐标是流行度为K的物品的总数。这里,物品的流行度指对物品产生过行为的用户总数。图2-4展示Delicious和CiteULike数据集中用户活跃度的分布曲线。横坐标是用户的活跃度K,纵坐标是活跃度为K的用户总数。这里,用户的活跃度为用户产生过行为的物品总数。

这两幅图都是双对数曲线,而长尾分布在双对数曲线上应该呈直线。这两幅图中的曲线都呈近似直线的形状,从而证明不管是物品的流行度还是用户的活跃度,都近似于长尾分布,特别是物品流行度的双对数曲线,非常接近直线。

用户活跃度和物品流行度的关系

一般来说,不活跃的用户要么是新用户,要么是只来过网站一两次的老用户。那么,不同活跃度的用户喜欢的物品的流行度是否有差别?一般认为,新用户倾向于浏览热门的物品,因为他们对网站还不熟悉,只能点击首页的热门物品,而老用户会逐渐开始浏览冷门的物品。

图2-5展示了MovieLens数据集中用户活跃度和物品流行度之间的关系,其中横坐标是用户活跃度,纵坐标是具有某个活跃度的所有用户评过分的物品的平均流行度。如图2-5所示,图中曲线呈明显下降的趋势,这表明用户越活跃,越倾向于浏览冷门的物品,这很符合我们的一般常识。

用户行为分析算法

仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法。这里有很多方法,比如基于邻域的方法(neighborhood-based)、 隐语义模型(latent factor model)、 基于图的随机游走算法(random walk on graph)等。在这些方法中,最著名的、在业界得到最广泛应用的算法是基于邻域的方法,而基于邻域的方法主要包含下面两种算法。

基于用户的协同过滤算法(Users-CF):给用户推荐和他兴趣相似的其他用户喜欢的物品。

基于物品的协同过滤算法(Items-CF):给用户推荐和他之前喜欢的物品相似的物品。

以上两种算法都在之前文章有提及过,大家点击头条号翻阅之前文章参考讨论。

相关文章