什么是推荐系统的证据?

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书活动

目前, 星球 内第2个项目《仿小红书(微服务架构)》正在更新中。第1个项目:全栈前后端分离博客项目已经完结,演示地址:http://116.62.199.48/。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 276 小节,累计 43w+ 字,讲解图:1917 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1500+ 小伙伴加入,欢迎点击围观

证据是推荐系统的燃料,就像汽车的汽油一样。证据是系统收集的数据,可以用来了解用户喜欢什么,以及系统将来应该推荐什么。通常,当人们谈论推荐系统时,他们会将证据称为用户手动输入系统的评分。但如今大多数推荐系统更重视用户行为,而不是评级。

在 Ron Zacharski 的 A Programmer Guide to Data Mining 中, 有一个很好的例子说明了评级和证据之间的区别。他显示了一个叫吉姆的人的明确评级。吉姆说他是一名素食主义者,喜欢看法国电影,但在吉姆的口袋里有一张漫威 复仇者联盟 的租借收据和一张 12 包 Pabst Blue Ribbon 啤酒的租借收据。你应该用哪个来推荐东西?我们认为这是一个简单的选择。

没有什么可以替代好的证据。最好的推荐者与所提供的证据一样好。

Netflix 登陆页面上的所有内容都是个性化的,包括行标题及其内容,横幅除外,这是一个每个人都能看到的活动(通过询问另外两个 Netflix 订阅者进行了实证测试)。每个用户的行都不同;头条新闻的范围从“喜剧”和“剧情片”等熟悉的类别到“1980 年代富有想象力的时间旅行电影”等高度定制的片段。图 1 显示了我的个性化 Netflix 页面。在我的页面上,前几行包含最近添加的内容、建议和热门内容。

图 1:我个人的 Netflix 首页

第一个个性化的行标题是戏剧。这意味着在流派或排头条之间,他们认为戏剧是更符合我兴趣的一种。戏剧行包含 Netflix 认为我在戏剧类别中感兴趣的内容列表。图 2 说明了 Netflix 内容的哪一部分显示在我的电视剧列表中。

将鼠标悬停在行上,我可以让它横向滚动,显示戏剧类型的其他内容。如果我滚动过戏剧行的内容,这对我有什么影响?这可能意味着我正在写一篇文章,我正在尝试制作屏幕截图,但最有可能的是,它表明我喜欢戏剧,我想进一步调查该列表。

如果我看到一部看起来很有趣的电影,我可以将鼠标放在它上面,它会显示它的详细信息。此外,如果这些细节很有趣,我可能会点击进入电影页面,如果它仍然听起来不错,我会把它添加到“我的列表”或开始观看。

图 2:Netflix 剧集排

对于电子商务网站来说,看电影相当于买东西。但对于流媒体网站而言,这还不是终点。如果来访者开始观看电影,这是一个积极的事件,但如果他在三分钟后停止并且再也没有重新开始观看,则表明来访者不喜欢他所看到的。然而,如果他稍后或在某个特定时间段内再次重新开始观看这部电影,这实际上可能意味着他比第一次观看时更喜欢它。

电子商务网站的目的通常是让人们购买产品,即使客户实际购买的产品可能不是他想要的。这取决于站点与产品的从属关系。如果亚马逊卖给你一件不好的 T 恤,你会说这件 T 恤的品牌不好,然后回到亚马逊再买一件 T 恤。但是,如果您从 Gap 网站购买了一件质量不佳的 T 恤,那么您可能会转到其他网站。这与基于订阅的网站有点不同。丹麦电子书流媒体服务 Mofibo 提供建议作为灵感和发现,但有一个问题:读者在开始阅读之前知道它是什么类型的书对 Mofibo 很重要。因为 Mofibo 会在读者打开一本书时支付费用,不是按页数,而是每本书,这意味着 Mofibo 希望您尽可能多地阅读;他们想尽量减少你做这件事的书的数量。

Netflix 收集的证据

如果我们试着想象 Netflix 幕后发生的事情,并试着想象他们收集的数据,我们会发现目的往往不是表面上看起来的那样。

假设是星期六晚上在吉米家。 Jimmie 的用户 ID = 1234,在爆米花后,他打开 Netflix 并执行以下操作:

  1. 滚动 Drama(id: 2) 行。

  2. 将鼠标悬停在电影 (id: 41335) 上以获取详细信息。

  3. 点击了解更多电影详情(id:41335)

  4. 开始看电影 (id:41335)

在他看电影的同时,我们会试着想象 Netflix 服务器上刚刚发生的事情。

表 1 显示了可以从执行我们上述操作的用户那里收集的一些事件,以及对其含义的解释。此外,添加了一个包含事件名称的列,以将此表连接到下面描述的日志。

表 1:来自 Netflix 的证据示例

事件

意义

活动名称

滚动主题行

用户对主题感兴趣;这里是“戏剧”

流派视图

将鼠标放在电影上。

(请求内容概述)

用户对电影感兴趣(这是一部戏剧,因此也对此类别感兴趣)

细节

点击影片

(要求内容的详细信息)

用户对电影更感兴趣

更多细节

将电影添加到他的列表中

用户打算看电影

添加到列表

开始看电影

用户“购买”了电影

播放开始

如表所示,所有这些事件都是系统的证据,因为它们揭示了用户的兴趣。下表显示了执行以下步骤的用户可能如何记录证据:

表 2:Netflix 可能如何记录证据的示例。

用户身份

内容编号

事件

日期

1234

2个

流派视图

2015-06-07 20:01:00

1234

41335

细节

2015-06-07 20:02:21

1234

41335

更多细节

2015-06-07 20:02:30

1234

41335

播放开始

2015-06-07 20:03:01

可能会有一长串其他列,例如设备类型、位置、速度和天气,这些都可以用来更好地了解用户的上下文。实际上,我也敢说这种情况下的日志事件数量会更多,但让我们保持示例简单。事件类型列表可能也更长。

现在我们对证据是什么有了一个大致的了解,我们可以开始研究证据收集器的实现。证据收集器用于收集我们上面看到的数据。为了确保您不会认为这只适用于媒体流站点,让我们看一下另一种情况。

在之前的工作中,我有一个同事,他会把所有的休息时间都用来上网寻找园艺拖拉机。事实上,他可以花时间在任何你在花园里使用的汽油上。让我们想象这位前同事稍事休息,然后他打开了他最喜欢的(想象中的)现场电话,超级强大的园艺工具。

他会做以下事情:

  1. 选择园艺拖拉机类别

  2. 点击一个可以把树拔起来的绿色怪物

  3. 单击规格以查看它可以容纳多大的树

  4. 购买绿色怪物。

这些事件与其他事件相同,只是购买昂贵产品的重要性可能比开始看电影更重要,但我希望你能明白。