Mahout:为特定产品类别的用户推荐商品

时间:2013-08-26 21:02:01

标签: categories product mahout recommendation-engine mahout-recommender

我们现在拥有什么? - 我们正在使用Mahout的GenericItemBasedRecommender为使用TanimotoCoefficientSimilarity作为ItemSimilarity的用户获取推荐产品列表。

我们想从哪里开始? - 当我们不关心产品类别时,上述工作正常,但我们想知道的是产品类别特定的建议,即如果用户说一直在购买,浏览,喜欢等等,特别是在男士和小工具类别,我想在这个特定的类别中显示这个用户推荐说在[X]中推荐给你,在这种情况下X将被男士或小工具取代。我们正在考虑以下几个方案来实现这一目标,我们需要一些线索/意见/反馈等,以确保我们朝着正确的方向前进。选项:

  1. 首先,我们必须转移到非tanimoto版本来计算项目相似度,以便我们考虑用户购买,喜欢等,而不仅仅是查看/浏览数据。
  2. 确定特定用户的产品类别(这是我们需要指导的地方) - 我们的产品类别层次结构基本上是一棵树,我们需要知道树中我们将显示哪些前4个节点(具有最佳推荐)给用户。此外,如果我们说节点X是我们向用户显示的类别而节点Y是节点X的父节点,那么我们就不希望在类别Y中显示用户产品或任何父节点。实现这一目标的几种方式:

    • 对于每个用户,计算叶级节点的项目的相似性得分值的SUM,并递归计算父节点直到根。现在在每个节点处我们得到A = SUM的相似性得分& B =推荐的项目数,因此我们在每个节点上也有A / B =值(V)。现在我们从树中选择前4个V值并将其推荐给用户。这里面临的挑战是,如果我们在请求期间尝试在线计算,我们很难将此限制在整个请求的150毫秒以下。一个例子:

       Root Level   -     Category12 (A=11, B=4) (category1 + category2)
                                              |
                         _____________________|_________________________
                       /                                                \
                      /                                                  \ 
      Leaf Level - category1 (A=6, B=2)                          category2 (A=5, B=2)
      

      第1类推荐产品:第1项(得分= 2),第2项(得分= 4)
      第2类推荐产品:第3项(得分= 1),第4项(得分= 4)

    • 第二个选项:对于每个类别,根据用户的行为(喜欢,购买,观看等)创建用户群,然后找出用户所属的前4个类别。不确定我们是否可以使用Mahout中的群集来实现此目的,但我认为我们可以离线执行此操作。

  3. 请提供您的反馈/建议/线索/想法。

    提前致谢!

1 个答案:

答案 0 :(得分:0)

  1. 如果您想对数据中的多个事物进行建模,我建议使用SVD推荐器,而将ALSWR因子设置为隐式反馈。完成后,您可以在数据中使用user,item,preferencepreference值将是您的用户与该项目的关联程度。您可以使用这些数字,例如,购买的结果为20,视图只是2。我只是在这里抛出数字,我不知道哪种方法最适合您的数据,因为您也可以按比例对事物进行建模,如果购买的可能性比视图低30倍,那么购买应该是比观点强30倍。

  2. Mahout提供了一种通过IDRescorer影响推荐的方法。您可以在此处实现自己的逻辑,并决定如何影响建议。例如,IDRescorer会检查推荐候选项是否属于同一类别,如果属于同一类别,则将得分提高X.这里有一个示例(link)来自Mahout in Action Book(你肯定应该阅读的,显示一个rescorer。

  3. 希望这有帮助