推荐系统——利用用户行为数据

 

        用户的行为不是随机的,而是蕴含着很多模式。就好比如“啤酒与尿布”和“瑞雪兆丰年”两个数据挖掘的经典案例。用户行为数据中蕴涵着很多不是那么显而易见的规律,而个性化推荐算法的任务就是通过计算机去发现这 些规律,从而为产品的设计提供指导,提高用户体验。

        基于用户行为分析的推荐算法是个性化推荐系统的重要算法,学术界一般将这种类型的算法称为协同过滤算法。顾名思义,协同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。

 

摘自 《推荐系统实践》 项亮 著

 

什么是用户行为数据?

用户行为数据组建但的存在形式就是日志。比如,你在某个网站或者某个app的浏览页面点击了某个结果,服务器就会截获你的点击信息并且存储子在点击日志中。后台可以通过一个并行程序归并展示日志和点击日志。这些数据对个性化推荐系统都很重要,日志记录了用户各种行为,包括网页浏览,购买,评分,评论或者点赞什么的。这是一个很有用的数据集。

 

这里稍微解释一下提到的个性化推荐系统。基于用户行为一般可以分为两种,显性反馈行为和隐形反馈行为。

  • 显性反馈行为,用户明确表示对某物品的喜好的行为。YouTobe上的“喜欢/不喜欢”就是最典型的例子,微信的点赞也勉强算是显性行为。
  • 隐形反馈行为,同样的,就是用户没有明确表示对物品的喜好行为。购物页面浏览商品,比不代表整个页面的商品你都喜欢。

 

对用户行为分析

由上文我们知道,我们必须了解用户数据蕴含的模式,分析里面不怎么显而易见的规律,再利用用户行为数据设计推荐算法。

 

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

很多数据分布都满足一种PowerLaw的分布(长尾分布)

                                                                           推荐系统——利用用户行为数据

举个例子:如果将单词出现的频率按照由高到低排列,则每个单词出现的频率和它在热门排行榜中排名的常数次幂成反比。大家可以通过  https://github.com/PrimarySS/Word-Frequency-Statistics 词频统计的简单算法研究一下这个原理。

 

通过上面这个案例我们可以类比的把用户活跃度和物品流行度用长尾分布来分析。

                                                                         推荐系统——利用用户行为数据

                                                                         推荐系统——利用用户行为数据

令fu(k)为对k个物品产生过行为的用户数,令fi(k)为被k个用户产生过行为的物品数。那么,fu(k)和fi(k)都满足长尾分布。

 

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

总结来说基于用户行为数据的数据设计推荐算法一般为协同过滤算法,其中基于邻域方法,有以下两种:

  • 基于用户的协同过滤算法,推荐其他用户喜欢的而且与他兴趣相似的物品。
  1. 找到和目标用户兴趣相似的用户集合;
  2. 用户集合中用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
  • 基于物品的协同过滤算法,推荐用户之前喜欢的物品相似的物品。
  1. 计算物品之间的相似度;
  2. 根据物品的相似度和用户的历史行为给用户生成推荐列表。

 

实验设计和算法测评

在之前的博文《初识推荐系统》中 https://blog.csdn.net/qq_38931949/article/details/84036269 详细的说到推荐系统各种实验的设计方法。以下只用离线实验方法评测算法,省略其他实验评测算法。

 

协同过滤算法的离线实验设计

                                            推荐系统——利用用户行为数据

为了保证评测指标并不是过拟合的结果,需要进行M次实验,并且每次都使用不同的测试集。然后将M次实验测出的评测指标的平均值作为最终的评测指标。

 

评测指标

  • 召回率,有多少比例的用户—物品评分记录包含在最终的推荐列表中;
  • 准确率,最终的推荐列表中有多少比例是发生过的用户—物品评分记录;
  • 覆盖率,最终的推荐列表中包含多大比例的物品;
  • 新颖度,推荐列表中物品的平均流行度,也就是推荐物品的热门度。

 

隐含语义分析

仅仅基于用户和仅仅基于物品的算法都存在着以下五个问题,而隐含语义就很好的解决了者五个问题。

  • 编辑的意见不能代表各种用户对物品分类的看法;
  • 编辑很难控制分类的粒度;
  • 编辑很难计算出物品属于每个类的权重,给一个物品多个分类;
  • 编辑很难基于用户的共同兴趣计算出多维度的分类;
  • 编辑很难通过统计用户行为决定物品在某一个分类中的权重。