Logo
Section 1 / 4

推荐引擎与亚马逊简介

了解皮尔逊相关系数及其在 Python 中的实现方法。

导入

推荐引擎与亚马逊简介

了解皮尔逊相关系数及其在 Python 中的实现方法。

什么是亚马逊?

在 Amazon.com 网站上,有一个“用户还购买了”的功能,它会根据用户的近期购买记录或评分,推荐他们可能喜欢的其他产品。亚马逊允许用户对商品进行 1 到 5 星的评分(5 星为最高),并留下文字评论。

...
Amazon

这个功能对于书籍等产品非常有用。算法会推荐与你搜索或购买过的书籍相关的内容,从而提高你再次购买的可能性。这对用户有帮助,对卖家有利,也保障了亚马逊的利润。然而,对于像日用品这类通常不会被评分或评论的商品,该功能的效果就不那么显著了。但总体而言,这正是亚马逊成为行业巨头的重要原因之一。对于书籍类产品,其竞争对手(如 B&N、Apple 或 Kobo)往往只会推荐 4 到 5 星的书籍,这些推荐列表每月更新一次,通常只包含大型出版商支付高额费用才得以入选的图书。

...
Amazon’s recommendation system

亚马逊的推荐算法持续不断优化,基于多年积累的数据和用户使用经验构建而成。虽然我们无法完全复制其核心算法,但本课程将帮助我们理解该算法成功背后的原理。

其核心思想是:分析用户 1 的评分情况,寻找那些对相同商品给出相似评分的其他用户(用户 2)。以书籍为例,算法会检查用户 2 喜欢但用户 1 尚未购买的其他内容,并将其推荐给用户 1。同样地,也会将用户 1 评分为高分的书籍推荐给用户 2。

此外,算法还会根据用户的过往兴趣和评论进行个性化推荐。例如,如果用户 1 一直给动作片打 5 星,系统就会继续推荐其他 5 星动作片。但如果用户 1 同时喜欢动作片和科幻片呢?由于科幻片中常包含动作场景,算法会考虑这种关联性,进而推荐一些科幻片。一旦用户 1 对某部科幻片产生兴趣并点击观看,系统后续就更有可能继续推荐更多科幻类内容。

皮尔逊相关系数

皮尔逊相关系数用于衡量两个变量之间的关联程度,即一个变量增加时,另一个是否也随之增加。最直观的理解方式是通过图表展示。

...
An example of Pearson correlation

第一张图显示的是正相关关系,数据点呈上升趋势。第二张图是负相关关系,即一个变量上升时,另一个下降,两者呈反向变化。第三张图是随机数据,没有明显相关性,这种情况最为常见,因为并非所有事物之间都存在关联。

在 Python 中实现皮尔逊相关系数

NumPy 已经内置了 皮尔逊相关系数 的计算函数。我们只需传入不同的输入即可调用。NumPy 提供了两个版本的函数,一个较慢,一个较快。我们将仅使用更快的那个函数。以下是几个快速示例说明其用法。

我们将使用代码框中第 5 行提到的 np.corrcoef() 函数。

运行以下代码,观察其工作方式。

1import numpy as np 2 3a = [1, 2, 3, 4, 5] 4b = [1, 3, 9, 20, 22] 5print(np.corrcoef(a,b)[1][0])

np.corrcoef() 函数返回一个介于 -1 到 1 之间的数值。-1 表示强负相关,+1 表示强正相关,0 表示无相关性。该函数返回的是一个矩阵,我们取其中的 [1][0] 位置的值。这是因为该函数可用于比较多个数组,因此输出是一个相关性矩阵。在我们只处理两个数组的情况下,只需要读取其中一个值。

我们定义了两个数组 a 和 b。注意它们都包含递增的数值。当我们对它们调用 np.corrcoef() 时,得到的结果约为 0.97,表示高度相关。

现在我们尝试一组更随机的数据:

1import numpy as np 2 3a = [1, 2, 3, 4, 5] 4c = [2, 7, 9, 1, 0] 5print(np.corrcoef(a,c)[1][0])

这次得到的结果约为 -0.4,这符合预期,因为随机数据之间本就没有明显的相关性。

NumPy 和 Matplotlib 入门

寻找电影评分之间的相关性