引言
该项目的目标是部分重建Amazon电子类产品的推荐系统。
现在是十二月!你是什么类型的购物者?双十二都购买了吗?你是把当天想购买的所有产品都保存起来,还是宁愿打开网站,查看带有巨大折扣的现场优惠呢?
尽管网店在过去十年中取得了令人难以置信的成功,显示出巨大的潜力和增长势头,但实体店和网店的基本区别之一却是消费者的冲动购买。
如果你主动向客户展示了一系列产品,他们更有可能购买他们原本没有计划购买的产品。冲动购买的现象受到网店配置的极大限制。同样的情况在实体店却不会发生。最大的实体零售连锁店让顾客走一条精确的路径,以确保他们在离开商店之前参观商店的每一条货架间的过道。
像Amazon这样的网店可以通过推荐系统重现冲动购买现象。推荐系统识别客户刚刚购买或观看的最相似或互补的产品。其目的是将网店通常缺乏的随机购买现象最大化。
在Amazon 上购买使我对机制非常感兴趣,我想重新创建(实际上是部分重新)他们推荐系统的结果。
根据博客“Recostream”,亚马逊产品推荐系统有三种依赖关系,其中一种是产品对产品的推荐。当用户实际上没有历史搜索记录时,该算法将产品聚类在一起,并根据项目的元数据将其推荐给同一用户。
数据
项目的第一步是收集数据。幸运的是,圣地亚哥加州大学的研究人员有一个可以让学生和组织外的个人使用数据进行研究和项目的存储库。可以通过以下链接(http://jmcauley.ucsd.edu/data/amazon/links.html)访问数据以及与推荐系统相关的许多有趣的数据集[2][3]。产品元数据上次更新于2014年;很多产品今天可能都没有了。
电子类元数据包含了498196条记录,共有8列:
-
asin—与每个产品关联的唯一ID
-
imUrl—与每个产品关联的图像URL链接
-
description—产品说明
-
categories —每个产品所属类别的python列表
-
title—产品的名称
-
price—产品的价格
-
salesRank—特定类别中每个产品的排名
-
related —与每个产品相关的客户查看和购买的产品
-
brand—产品的品牌。
你将注意到该文件是“松散”的JSON格式,其中每一行都是一个JSON,它包含了前面提到的所有列以作为其中一个字段。我们将在代码部署部分了解如何处理此问题。
EDA
让我们从快速探索性数据分析开始。在清理了其中一列中至少包含NaN值的所有记录后,我为电子类产品创建了可视化。
带异常值的价格箱形图——图像由作者提供
第一个图表是显示每个产品的最高、最低、第25百分位、第75百分位和平均价格的箱形图。例如,我们知道一个产品的最高价值是1000美元,而最低价值大约是1美元。160美元标记上方的线是由点组成的,每个点都标识一个异常值。在整个数据集中,异常值表示只发生一次的记录。因此,我们只知道一种定价在1000美元左右的产品。
平均价格似乎在25美元左右。需要注意的是,matplotlib以选项showfliers=False自动排除异常值,为了使框图看起来更清晰,我们可以将参数设置为false。
价格箱形图——图像由作者提供
结果是一个不带异常值的更清晰的箱形图。该图表还表明,绝大多数电子产品的价格在1美元至160美元之间。
产品数量排名前十的品牌——作者图片
该图表显示了在Amazon上销售的电子类产品中排名前十的品牌。其中包括惠普、索尼、戴尔和三星。
十大零售商价格箱形图
最后,我们可以看到前十名卖家的价格分布形式。索尼和三星提供的产品种类繁多,从几美元到500美元和600美元不等,因此,它们的平均价格高于大多数顶级竞争对手。有趣的是,SIB和SIB-CORP提供了更多的产品,但平均价格更实惠。
该图表还告诉我们,索尼提供的产品大约占数据集中价格最高产品的60%。
余弦相似性
一种通过产品的特性将产品聚集在一起的方案就是余弦相似性。我们需要彻底理解这个概念,才能构建我们的推荐系统。
余弦相似性度量两个数字序列的“接近”程度。它如何适用于我们的案例?令人惊讶的是,句子可以转换成数字,或者更好地转换成向量。
余弦相似度可以取-1和1之间的值,其中1表示两个向量在