偏好匹配算法

数据挖掘 大数据 文本挖掘 推荐系统
2021-09-24 04:10:02

我正在处理这个附带项目,我需要为以下问题构建解决方案。

我有两组人(客户)。集团A打算购买和集团B打算出售确定的产品X产品具有一系列属性x_i,我的目标是通过匹配他们的喜好A来促进交易。主要思想是向对应的B每个成员指出谁的产品更适合他的需求,反之亦然。AB

问题的一些复杂方面:

  1. 属性列表不是有限的。买家可能对非常特殊的特性或某种设计感兴趣,这在人群中很少见,我无法预测。之前无法列出所有属性;

  2. 属性可能是连续的、二元的或不可量化的(例如:价格、功能、设计);

关于如何解决这个问题并以自动化方式解决它的任何建议?

如果可能的话,我也会感谢一些对其他类似问题的参考。


很棒的建议!我正在考虑解决问题的方式有很多相似之处。

映射属性的主要问题是产品描述的详细程度取决于每个买家。让我们以汽车为例。产品“汽车”有很多属性,从性能、机械结构、价格等。

假设我只想要一辆便宜的汽车或电动汽车。好的,这很容易映射,因为它们代表了该产品的主要功能。但是,例如,假设我想要一辆配备双离合变速器或氙气大灯的汽车。好吧,数据库中可能有许多具有此属性的汽车,但我不会要求卖家在有人在查看它们的信息之前为其产品填写此级别的详细信息。这样的程序将要求每个卖家填写一份复杂、非常详细的表格,试图在平台上出售他的汽车。就是行不通。

但是,我的挑战仍然是在搜索中尽可能详细地进行匹配,以进行良好的匹配。所以我的想法是绘制产品的主要方面,那些可能与每个人都相关的方面,以缩小潜在卖家的范围。

下一步将是“精细搜索”。为了避免创建过于详细的表格,我可以要求买家和卖家编写一份免费的规范文本。然后使用一些单词匹配算法来找到可能的匹配项。虽然我知道这不是问题的正确解决方案,因为卖家无法“猜测”买家需要什么。但可能会让我接近。

建议的加权标准很好。它让我可以量化卖家满足买家需求的程度。但是,缩放部分可能是一个问题,因为每个属性的重要性因客户端而异。我正在考虑使用某种模式识别,或者只是要求买家输入每个属性的重要性级别。

2个回答

我的第一个建议是借助合适的映射函数以某种方式将不可量化的属性映射到数量。否则,只需将它们排除在外。

其次,我认为您不需要假设属性列表不是有限的。一种标准且直观的方法是将每个属性表示为向量空间中的单个维度。每个产品都只是这个空间中的一个点。在这种情况下,如果您想动态添加更多属性,您只需将产品向量重新映射到新的特征空间(带有附加维度)。

通过这种表示,卖方是具有产品属性的特征空间中的一个点,而买方是具有偏好属性的同一特征空间中的一个点。然后的任务是找出与给定卖方点最相似的买方点。

如果您的数据集(即买家/卖家的数量)不是很大,您可以通过借助 kd 树实现的最近邻方法来解决此问题。

对于非常大的数据,您可以采用 IR 方法。通过将每个属性视为一个单独的术语并将术语权重设置为属性值来索引卖方集(即产品属性)。在这种情况下,查询是买方,它也在术语空间中编码为具有适当术语权重的查询向量。检索步骤将为您返回前 K 个最相似匹配的列表。

正如建议的那样,疯狂首先,如果我错了,请纠正我:

  • 每个独特的产品只有几个功能;
  • 没有最终的功能列表,客户可以向他们的产品添加新功能。

如果是这样,构建完整的产品特征表可能会耗费大量计算资源。最终数据表将非常稀疏。

第一步是缩小匹配的客户(产品)列表。让我们构建一个二分图,其中卖家是类型 1 节点,买家是类型 2 节点。每当他们引用类似的产品功能时,在任何卖家和买家之间创建一条边,如下图所示:

图形

使用上图,对于每个唯一卖家的产品,您可以只选择对匹配产品的功能感兴趣的买家(可以过滤至少一个常见功能、匹配全套功能或设置阈值级别)。但可以肯定的是,这还不够。下一步是比较特征值,如卖方和买方所述。有很多变体(例如,k-Nearest-Neighbors)。但是为什么不尝试使用现有图表来解决这个问题呢?让我们为边缘添加权重:

  • 对于连续特征(例如,价格):

    价格重量

  • 对于二进制和不可量化的特征 - 只是逻辑双条件:

    特征权重

这里的主要思想是将每个特征缩放到区间[0, 1]此外,我们可以使用特征系数来确定最重要的特征。例如,假设价格是某些稀有功能的可用性的两倍:

adj_w_1

adj_w_2

最后的步骤之一是简化图结构并将许多边减少为一条边,其权重等于先前计算的每个特征的权重之和。通过这种简化的结构,每对客户/产品可能只有一条边(没有平行边)。因此,要为确切的卖家找到最优惠的价格,您只需要选择具有最大加权边的连接买家。

未来的挑战:在第一步引入一种廉价的边缘加权方法:)