有偏见的二元(一元)推荐系统

数据挖掘 Python 推荐系统 二进制
2021-10-09 09:44:43

我想创建一个基于二进制点击数据的内容推荐系统,该系统还考虑了视图。

用户接触过哪些内容并因此有机会点击,目前受到基于规则的系统的影响,该系统并不总是记录在案。我确实有查看数据(如果用户在他们的屏幕上看到了内容,无论它是否被点击。),我想知道如何在传统的矩阵分解推荐系统中考虑到这一点,例如这个item-item 方法,或者如果还有其他更好的选择。

任何在 Python 中实现的建议都是奖励!

3个回答

最干净的解决方案的最简单答案可能是将您的二进制点击数据和视图数据组合到您可以优化的另一个模型特征中。这看起来像什么取决于您对端到端系统的了解。

例如,用户点击浏览量高的东西是“好”,还是用户点击浏览量低的东西更好?仅根据这个问题,您可能有非常不同的公式:

normalization_function((1/views) * mean(clicks))与也许normalization_function((view) * mean(clicks))

请务必检查您的矩阵分解实现的假设,但这个新功能可能只能与您的点击数据交换。

作为旁注,我不确切知道您正在实施什么,但点击和查看通常代表不同的东西 - 作为粗略的指导(点击=参与,查看=眼球),因此将它们结合起来可能意义不大。

项目-项目协同过滤可以应用于一元数据。该资源非常适合学习一元数据上的项目-项目协同过滤。

在你的情况下,你只有积极的一面:点击。从这里开始,您可以通过两种方式进行:

  1. 二元分类:对于二元分类,您需要定义“否定”。通常隐式反馈或一元数据没有真正的否定。所以,为了定义你的否定,你可以做几件事:

    • Negative Sampling:对于每个正例,您可以随机采样一个负例
    • 浏览且未点击为否定:如果向用户显示了内容并且用户选择不点击它,则视为否定。但是,它对您的基于规则的系统存在选择偏差,该系统已经存在。
  2. 学习排名

    学习基于排名的方法(例如BPR-MF)在一元数据上表现良好。这个为 BPR-MF 提供了很好的文档,并且仅适用于一元数据。

  3. 从多渠道反馈中学习

    如果您想从浏览量和点击量中学习,那么您会想到这项工作

我不会对视图数据进行建模。你说这是基于另一个基于规则的系统。如果您尝试对视图数据进行建模,您将学习基于规则的系统(而不是用户的偏好)。例如,如果两个用户都可能查看该项目,则只会告诉您有关现有系统的信息。

我建议只使用点击数据。假设用户查看并点击了一个项目,那么用户可能点击了哪些其他项目。

Python 有一个Implicit包,它为这种类型的数据实现了几种不同的流行推荐算法。