证据是推荐系统的燃料,就像汽车的汽油一样。证据是系统收集的数据,可以用来了解用户喜欢什么,以及系统将来应该推荐什么。通常,当人们谈论推荐系统时,他们会将证据称为用户手动输入系统的评分。但如今大多数推荐系统更重视用户行为,而不是评级。
在 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 并执行以下操作:
-
滚动 Drama(id: 2) 行。
-
将鼠标悬停在电影 (id: 41335) 上以获取详细信息。
-
点击了解更多电影详情(id:41335)
-
开始看电影 (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 |
可能会有一长串其他列,例如设备类型、位置、速度和天气,这些都可以用来更好地了解用户的上下文。实际上,我也敢说这种情况下的日志事件数量会更多,但让我们保持示例简单。事件类型列表可能也更长。
现在我们对证据是什么有了一个大致的了解,我们可以开始研究证据收集器的实现。证据收集器用于收集我们上面看到的数据。为了确保您不会认为这只适用于媒体流站点,让我们看一下另一种情况。
在之前的工作中,我有一个同事,他会把所有的休息时间都用来上网寻找园艺拖拉机。事实上,他可以花时间在任何你在花园里使用的汽油上。让我们想象这位前同事稍事休息,然后他打开了他最喜欢的(想象中的)现场电话,超级强大的园艺工具。
他会做以下事情:
-
选择园艺拖拉机类别
-
点击一个可以把树拔起来的绿色怪物
-
单击规格以查看它可以容纳多大的树
-
购买绿色怪物。
这些事件与其他事件相同,只是购买昂贵产品的重要性可能比开始看电影更重要,但我希望你能明白。