算法工程师修仙之路:推荐系统实践(三)

第二章 利用用户行为数据

用户行为数据简介


  • 实现个性化推荐的最理想情况是用户能在注册的时候主动告诉我们他喜欢什么,但这种方法有三个缺点:

    • 首先,现在的自然语言理解技术很难理解用户用来描述兴趣的自然语言;
    • 其次,用户的兴趣是不断变化的,但用户不会不停地更新兴趣描述;
    • 最后,很多时候用户并不知道自己喜欢什么,或者很难用语言描述自己喜欢什么。因此,我们需要通过算法自动发掘用户行为数据,从用户的行为中推测出用户的兴趣,从而给用户推荐满足他们兴趣的物品。
  • 用户行为数据的分析是很多优秀产品设计的基础,个性化推荐算法通过对用户行为的深度分析,可以给用户带来更好的网站使用体验。

  • 用户行为数据中蕴涵着很多不是那么显而易见的规律,而个性化推荐算法的任务就是通过计算机去发现这些规律,从而为产品的设计提供指导,提高用户体验。

  • 电子商务公司通过分析用户的购物车,找出诸如“购买A商品的用户都购买B商品”这种规律,同时在用户浏览A商品时直接为其展示购买A商品的用户都购买的其他商品。

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

  • 用户行为数据在网站上最简单的存在形式就是日志。

    • 网站在运行过程中都产生大量原始日志(raw log),并将其存储在文件系统中。
    • 很多互联网业务会把多种原始日志按照用户行为汇总成会话日志(session log),其中每个会话表示一次用户行为和对应的服务。
    • 比如,在搜索引擎和搜索广告系统中,服务会为每次查询生成一个展示日志(impression log),其中记录了查询和返回结果。如果用户点击了某个结果,这个点击信息会被服务器截获并存储在点击日志(click log)中。
    • 一个并行程序会周期性地归并展示日志和点击日志,得到的会话日志中每个消息是一个用户提交的查询、得到的结果以及点击。
    • 类似地,推荐系统和电子商务网站也会汇总原始日志生成描述用户行为的会话日志。
      • 会话日志通常存储在分布式数据仓库中,如支持离线分析的 Hadoop Hive和支持在线分析的Google Dremel。
      • 这些日志记录了用户的各种行为,如在电子商务网站中这些行为主要包括网页浏览、购买、点击、评分和评论等。
  • 用户行为在个性化推荐系统中一般分两种:

    • 显性反馈行为(explicit feedback)
      • 显性反馈行为包括用户明确表示对物品喜好的行为。
      • 很多网站都使用了5分的评分系统来让用户直接表达对物品的喜好,但也有些网站使用简单的“喜欢”或者“不喜欢”按钮收集用户的兴趣。
    • 隐性反馈行为(implicit feedback)
      • 隐性反馈行为指的是那些不能明确反应用户喜好的行为。
      • 最具代表性的隐性反馈行为就是页面浏览行为。用户浏览一个物品的页面并不代表用户一定喜欢这个页面展示的物品,比如可能因为这个页面链接显示在首页,用户更容易点击它而已。
      • 相比显性反馈,隐性反馈虽然不明确,但数据量更大。在很多网站中,很多用户甚至只有隐性反馈数据,而没有显性反馈数据。
  • 按照反馈的明确性分,用户行为数据可以分为显性反馈和隐性反馈,但按照反馈的方向分,又可以分为正反馈和负反馈。正反馈指用户的行为倾向于指用户喜欢该物品,而负反馈指用户的行为倾向于指用户不喜欢该物品。在显性反馈中,很容易区分一个用户行为是正反馈还是负反馈,而在隐性反馈行为中,就相对比较难以确定。

  • 一般来说,不同的数据集包含不同的行为,目前比较有代表性的数据集有下面几个:

    • 无上下文信息的隐性反馈数据集
      • 每一条行为记录仅仅包含用户 ID 和物品 ID。
    • 无上下文信息的显性反馈数据集
      • 每一条记录包含用户 ID、物品 ID 和用户对物品的评分。
    • 有上下文信息的隐性反馈数据集
      • 每一条记录包含用户 ID、物品 ID 和用户对物品产生行为的时间戳。
    • 有上下文信息的显性反馈数据集
      • 每一条记录包含用户 ID、物品 ID、用户对物品的评分和评分行为发生的时间戳。

用户行为分析


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

  • 互联网上的很多数据分布都满足一种称为 Power Law 的分布,这个分布在互联网领域也称长尾分布: f ( x ) = α x k f(x)=\alpha x^k
    • 如果将单词出现的频率按照由高到低排列,则每个单词出现的频率和它在热门排行榜中排名的常数次幂成反比,这个现象表明,在英文中大部分词的词频其实很低,只有很少的词被经常使用。
    • f u ( k ) f_u(k) 为对 k k 个物品产生过行为的用户数,令 f i ( k ) f_i(k) 为被 k k 个用户产生过行为的物品数。那么, f u ( k ) f_u(k) f i ( k ) f_i(k) 都满足长尾分布:
      • f i ( k ) = α i k β i f_i(k)=\alpha_ik^{\beta_i}
      • f u ( k ) = α u k β u f_u(k)=\alpha_uk^{\beta_u}
    • 物品的流行度指对物品产生过行为的用户总数。用户的活跃度为用户产生过行为的物品总数。不管是物品的流行度还是用户的活跃度,都近似于长尾分布,特别是物品流行度的双对数曲线,非常接近直线。

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

  • 一般来说,不活跃的用户要么是新用户,要么是只来过网站一两次的老用户。

  • 一般认为,新用户倾向于浏览热门的物品,因为他们对网站还不熟悉,只能点击首页的热门物品,而老用户会逐渐开始浏览冷门的物品。

  • 仅仅基于用户行为数据设计的推荐算法一般称为协同过滤算法。

    • 学术界对协同过滤算法进行了深入研究,提出了很多方法,比如基于邻域的方法(neighborhood-based)、 隐语义模型(latent factor model)、基于图的随机游走算法(random walk on graph)等。
    • 在这些方法中,最著名的、在业界得到最广泛应用的算法是基于邻域的方法,而基于邻域的方法主要包含下面两种算法:
      • 基于用户的协同过滤算法
        • 这种算法给用户推荐和他兴趣相似的其他用户喜欢的物品。
      • 基于物品的协同过滤算法
        • 这种算法给用户推荐和他之前喜欢的物品相似的物品。

猜你喜欢

转载自blog.csdn.net/faker1895/article/details/86766673
今日推荐