在本系列文章中,我将与你分享掌握推荐系统的经验,以及从基本模型到推荐系统相关的高级模型的实现。

推荐系统之路_人工智能

个性化客户体验推荐系统

我会简要介绍你在构建这样一个系统时将遇到的与推荐系统相关的挑战,以及我为克服这些挑战所做的工作。

最后,我将向你介绍一些想法、不成功的尝试,以及我用来跟踪模型性能的验证框架,还有我构建的其他机器学习模型,希望能得到成功的方式。

但首先,…

什么是推荐系统?

推荐系统可以说是大数据最常见的应用,通过为你的网站推荐内容,来提高个人的用户体验。

推荐系统是信息过滤系统和人工智能的一部分,目的是预测人们对过多选择的偏好。

我们在哪里会使用推荐系统?

最常见的使用领域是产品推荐过滤,并通过客户的偏好进行学习,以便将这些知识应用到其他人身上。

背后的故事

大约一年前,我所在的电子邮件营销和自动化公司把我分配到一个全新的项目。

这个项目的概念是创建一个数据驱动的推荐引擎,可以适用于每个电子商务商店。这个通用系统必须从他们自己的客户产品交互(我们已经有了)中生成个性化的产品推荐。

这方面的挑战是,它必须是“完全动态的”,并能够适应各种模式,即季节性的购买模式(例如在圣诞节、光明节、复活节等送礼期间),但也要收入最大化。

理解推荐引擎

每次我得到一个新项目,我做的第一件事就是试着去了解基本知识,什么时候用,用来干什么,系统的结构,多样性,以及它可能具有的可扩展性 。

推荐系统之路_人工智能_02

 

有不同类型的推荐系统(RecSys),你选择什么取决于你想遵循什么样的策略来接近你的客户。

在过去,世界从来没有被数据驱动过。但现在,大多数大型电子商务网站都依赖数据驱动的决策系统来扩大销售。

个性化的产品推荐是人工智能给电子商务的礼物,因为它们可以帮助你提高点击率(CTR)和销售率。

就像我说的,有5种不同类型的人工智能推荐系统:

  • 基于内容的引擎根据其属性(即每个产品的特征)识别相似的产品。
  • 我们用每个产品的属性来表示每个产品(例如,一个手机的属性是屏幕大小、价格、相机、软件等),并试图找到最相似的。
  • 通过这种方式,我们向那些对特定特征的手机感兴趣的人推荐类似的“手机”。
  • 协同过滤引擎识别相似客户的偏好,基于具有相似行为的人共享相似兴趣这个想法。
  • 在这些系统中,我们用每一个客户的互动来代表每一个客户,通过这种方式,我们预测他们对每一个产品感兴趣的概率,也就是说,客户实际喜欢我们推荐给他们的产品的可能性。
  • 这样,我们可以向新客户推荐和他最相似的人喜欢的产品。
  • 混合系统是基于内容和协同过滤系统的结合。
  • 用两种模型分别产品进行打分,并分别给与权重。最终的推荐结果将由这两个分数的线性组合得出。
  • 关联规则或市场篮子分析引擎与前面的引擎略有不同。
  • 拥有一个大的交互数据集,我们可以为经常一起购买的商品找到模式并作为一个序列,例如,如果有人在他的购物车中添加了咖啡,但没有添加糖,我们推荐添加糖。
  • 重复购买引擎预测客户购买特定产品的具体时间或近似时间。
  • 该算法使用产品持续时间、购买历史和日期统计数据来预测未来的日期。
  • 例如,如果有人每月购买一次隐形眼镜,我们建议他们每30天购买一次同样的产品,以防他们忘记购买。这样,我们鼓励他们继续与我们的商店购物。

协同过滤

为了刷新你的记忆,这种类型的推荐引擎试图通过使用用户的产品交互(购买、产品视图和添加到购物车产品)来识别具有类似兴趣的用户。

推荐系统之路_人工智能_03

 

你可以使用以下两种方法之一实现协同过滤,基于内存的或基于模型的。在这两种方法中,我们用客户的交互表示客户,就像用向量表示矩阵一样。

在基于内存的模型中,度量所有向量(客户)之间的距离,并推荐最相似的产品。

在模型方法中,即众所周知的矩阵分解模型中,我们识别数据中的潜在因素。

在统计学中,潜在因素并不是我们直接观察或测量的变量,而是一组在不丢失信息的情况下,在较低维度空间中解释(描述)其他变量及其关系的变量。

在我们的例子中,潜在因素为每个客户查找和解码模式,以便识别它们之间的相似性。

推荐系统模型#1(我的第一次)

我提出的第一个模型是标准矩阵分解模型

在这个特殊的例子中,我们用一个名为R的二维稀疏矩阵来表示客户的产品交互,稀疏矩阵是一种众所周知的高效计算和高效存储的方法来存储大量的数据在一起,并准备好处理。

矩阵的行表示你的客户,列表示像向量一样的产品,然后我们用值1填充customer-product interaction单元格。

可以想象,没有与客户交互的产品所在的单元格仍然是空的:

推荐系统之路_人工智能_04

 

推荐系统之路_推荐系统之路_05

 

下一步是将R矩阵分解为两个矩阵,一个用于客户(P),一个用于产品(Q)及其潜在因素。然后,我们使用lambda函数对两个矩阵进行调优,并通过原始R矩阵的值来度量错误率。当错误率下降到给定的阈值时,我们中断这个过程。

推荐系统之路_推荐系统之路_06

 

为了格式化R-hat矩阵,我们计算P和Q的点积。在线性代数中,点积是矩阵乘法的结果。

最后一步是推荐一组产品,按特定客户的最高购买概率排序。

推荐系统之路_人工智能_07

 

性能度量

为了监控模型的性能,我们必须对模型生成的推荐的质量进行度量。

在推荐系统中,我们使用Precision@k和Recall@k来度量引擎的性能,这两种引擎在信息检索场景中得到了广泛的应用。

Precision定义为与客户交互的推荐商品数量(:查看、添加到购物车等),除以推荐集k中的商品数量。

推荐系统之路_推荐系统之路_08

 

Recall是与客户交互的推荐集k中的推荐项数,除以与客户交互的总的项数,即使在推荐集之外也是如此。

推荐系统之路_推荐系统之路_09

 

此外,我们还为我们的系统使用了一个称为Accuracy分数的度量,以便测量总体性能。我们将Accuracy分数定义为与客户进行交互的推荐集的和(最少1个交互/集),除以客户推荐的总数。

推荐系统之路_人工智能_10

 

在所有模型中,我们对前5名(k=5)的推荐产品度量模型的性能。

推荐系统之路_推荐系统之路_11

 

优点和缺点
这个模型的缺点多于优点。

在实现方面的好处是,对于能够理解基本知识并在该领域有一些经验的人来说,模型和流程非常简单。此外,该模型的实现允许我们将所有信息放入一个单独的“训练过的”矩阵中,以便在生产中提供推荐。

现在,关于缺点。当把新商店加入推荐引擎时,考虑到矩阵的稀疏性,计算量和花费在它们上的时间呈指数增长。

因此,经过几十个站点之后,系统将消耗大量内存,并且将花费数天时间进行调优并正常工作。

在进行个性化产品推荐时,最重要的是数据,例如,大量的中小型商店没有足够的交互数据来产生他们自己的个性化推荐。

推荐系统之路_推荐系统之路_12

 

看到令人失望的结果,我决定改变我的课程,专注于如何处理和分发信息

因此,我可以帮助较小的、数据较弱的商店,并减小交互矩阵的大小。

在下一篇文章中,我将介绍如何自动合并产品信息和不同商店之间的交互。

英文原文:https://medium.com/moosend-engineering-data-science/the-road-to-recommender-systems-d6bb79bd169d