使用拓扑数据分析来实现强大的产品推荐的软件包。
项目描述
首选
介绍
曾经误点击广告,却一次又一次地收到类似的广告?或者,也许您的朋友要求您在您的在线杂货帐户上为他订购一些垃圾食品,而您通常只订购健康食品,而现在您却收到了不好的建议?产品推荐系统可能对异常订单过于敏感,我们可以将其视为系统用于查找用户偏好的数据中的噪声。这可能导致用户沮丧。
我的目标是开发一个对这些异常值更稳健的产品推荐系统。我的方法是基于拓扑数据分析。
repo 的作者是 Brian Willett (bmwillett1 at gmail)。
背景
产品推荐系统是一种算法,它为每个用户确定他们想要购买或与之交互的一组产品或服务。通常,这些依赖于用户和产品的大型数据集,例如,用户和产品之间过去交互的历史。解决此问题的一种常见方法是使用在此数据集上训练的机器学习算法。特别是,现代方法通常使用神经网络和深度学习技术来实现令人印象深刻的准确性。
当用户有一些超出其正常偏好的行为时,就会出现这些技术的潜在缺陷。然后可以引导推荐系统基于用户不期望的这种行为来推荐产品。这些异常值可以被解释为用户产品数据集中的“噪声”,并且希望推荐算法对这种噪声具有一定的鲁棒性。
已经开发了许多技术来提高机器学习算法在噪声数据上的性能。特别是,拓扑数据分析 (TDA) 使用数据模式的数学分析来提取对噪声等微小变化具有鲁棒性的数据特征。特别是,我们将对arXiv:1910.08103的 Mapper-Classifier 算法 (MCA) 感兴趣,它使用 TDA 的 Mapper 图的概念来提高图像分类的鲁棒性。我们将应用此算法来确定用户可能对哪些产品感兴趣。
在这个 repo 中,我们实现了一些带有和不带有 MCA 的模型,以评估推荐系统在存在噪声的情况下的性能。具体来说,我们将关注Instacart 数据集。我们的任务将是预测用户根据之前的订单重新订购哪些产品。
楷模
主要型号
我们首先创建以下组件,以模块化方式开发模型:
- 用户潜在模型:仅根据用户数据生成潜在向量。原则上,这个和其他潜在模型可以在下面的完整模型中定制和使用。这里我们使用基于协同过滤的自动编码器。
- 产品潜在模型:仅根据产品数据生成潜在向量。我们这里的主要潜在模型涉及将 word2vec 应用于订单序列,以对通常一起购买的产品进行分组,以及对产品名称中出现的单词进行 tf-idf 分析
- 特征模型:直接从订单数据中提取特征。在这里,我们提取特征,例如所有用户的总产品订单、购物车中的平均位置等。
从这些模型中,我们组装了两个主要模型:
-
模型 A:我们将上述三个模型的输出连接起来,并将结果输入到密集的神经网络中。在我们的例子中,网络有两层和一个输出,它为每个用户和产品对预测用户是否会在下一个订单中购买该产品
-
模型 B:与模型 A 类似,除了在连接模型之后,我们还将结果输入映射分类器算法以获得额外的拓扑特征。结果也被输入到密集的神经网络中。
基线模型:
作为比较的基线模型,我们考虑基于以下算法的简单模型:
- 随机模型(随机预测重新排序)
- 逻辑回归
- 随机森林
- LG升压
测试
我们在基本分类指标上测试模型,例如准确度、精度、召回率和 f1 分数。此外,归一化贴现累积收益 (NDCG) 是衡量实际产品在预测排名中出现多高的有用指标。
除了在原始数据集上执行这些指标外,我们还测试了鲁棒性或存在虚假产品时的性能,如下所示。我们通过随机更改用户先前订单历史中的一些产品并查看模型性能如何受到影响来执行对抗性测试。
结果
在这里,我们展示了一个图表,显示了两个主要模型和梯度提升 (LGboost) 基线模型在稳健性测试中的性能
我们看到拓扑编码模型(模型 B)的性能略好于非拓扑模型(模型 A)以及基线梯度提升模型(GB 模型),因为我们替换了稳健性测试中的项目。这些结果具有启发性,但需要进一步研究才能最终确定这种方法的有效性。
目录结构
有关模型的更多详细信息,请参见上文。
.
├── README.md - this readme file
├── requirements.txt - package requirements
├── lib
│ ├── data_class.py - definition of main dataset class
│ ├── mapper_class.py - mapper classifier implementation
│ ├── process_data.py - helper function to process data
│ └── tools.py - general helper functions
├── models
│ ├── base_model.py - base model class which others inherit
│ ├── baseline_models.py - baseline models for comparison
│ ├── feature_models.py - feature models
│ ├── latent_models.py - user and product latent models
│ └── main_models.py - main models
└── tests
├── mnist_tests.ipynb - some tests of mapper classifier on MNIST dataset
├── run_unit_tests.py - runs all unit tests
└── runtests.py - runs main accuracy and robustness tests
设置
- 在这个 repo 中运行测试:
git clone https://github.com/bmwillett/topological-recommendations
pip install -r requirements.txt
python tests/runtests.py
(包即将推出!)
要安装首选包:
- 在命令行中,运行:
pip install top-choice
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
top_choice -0.0.3.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 2f3667ee060a32748201866c0ded56b42caca352a029436a6c1c1cc92c2a758e |
|
| MD5 | 727d2328899dac55c3a59cf07ff1332f |
|
| 布莱克2-256 | 4e43d34daab95a96058393d64f527ef05e12f49241cd3e5e4ea6d9b32a7f10ad |
top_choice -0.0.3-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 61cf3f57f0527769ce6f4a96d919f33868fc97f9e37e070fcb1756fd00e2914f |
|
| MD5 | 7407a2e033ae806c582450af597aa263 |
|
| 布莱克2-256 | a3921bc220093a2a1dace1140c16764caae98777472aab77d113638f12a3eae3 |