Database design “如何存储”;购买此产品的客户也购买了;

Database design “如何存储”;购买此产品的客户也购买了;,database-design,amazon,recommendation-engine,Database Design,Amazon,Recommendation Engine,我正在构建一个类似于亚马逊的“购买此产品的客户也购买了此产品”的功能。我有大约6年的订单来挖掘这些数据,并且显然会继续使用新订单的数据进行更新 我想到了几个问题: 如何存储这些关系?我正在考虑一个包含productA、productB和count(或rank)的简单表。这是否足够 我不认为旧数据和新数据一样重要。如何对更新的数据进行优先级排序 编辑:这个网站只销售一种产品,所以几乎所有东西都是相关的,不需要过滤。我也希望尽可能地简化这个过程——数据已经存在于我的数据库中,我正在寻找计算和存储它的

我正在构建一个类似于亚马逊的“购买此产品的客户也购买了此产品”的功能。我有大约6年的订单来挖掘这些数据,并且显然会继续使用新订单的数据进行更新

我想到了几个问题:

  • 如何存储这些关系?我正在考虑一个包含productA、productB和count(或rank)的简单表。这是否足够
  • 我不认为旧数据和新数据一样重要。如何对更新的数据进行优先级排序
  • 编辑:这个网站只销售一种产品,所以几乎所有东西都是相关的,不需要过滤。我也希望尽可能地简化这个过程——数据已经存在于我的数据库中,我正在寻找计算和存储它的最简单方法。

    查看

    味觉是一种灵活、快速的感觉 面向对象的协同过滤引擎 JAVA引擎接受用户的请求 项目偏好(“口味”)和 返回的估计首选项 其他项目。例如,一个站点 销售书籍或CD,可轻松使用 品味,从过去开始 购买数据,用于向客户发送CD 可能有兴趣听

    谷歌也有一个预测api,可以根据您的用例进行定制。检查他们的

    “我如何存储这些关系?我在考虑一个包含productA、productB和count(或rank)的简单表。这足够了吗?”

    这是不够的,真的。最好是使用对象的语义

    因此,获取与对象关联的数据(比如一本书:它是一本书,由xxx编写,写作风格,书的种类……),并查看与其他数据的关系,这些数据将你带到另一个对象(比如,这类书与这类相关联,或者这类艺术家与这类艺术家相关联,或者两者兼而有之,等等……)。这真是一项非常艰苦的工作

    之后,你可以选择做自己的事,但它可能没有你想要的那么重要


    我真的认为您应该看看已经存在的东西(例如在sourceforge或github上)

    就我个人而言,我不会存储这些数据。我将创建一个视图,动态选择要建议的产品

    一个简单的实现可能是:

  • 选择同时购买相同产品的代表人数(例如1000人)
  • 根据这些用户,他们购买的前N名产品是什么
  • 向用户推荐这些产品
  • 你可以通过删去第二步来简化它,这样你就可以展示其他已经购买的产品,而不管它们的受欢迎程度如何

    正如Simon Marc所建议的那样,您可以通过按标准筛选产品,使其更为复杂

    对于较旧的数据,可能项目可以具有“按日期使用”或“冗余”标志,这意味着它们将从选择中筛选出来。

    您可以将其用于您的任务。它将以以下格式存储关系:

    CREATE TABLE `itemassoc` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `tenantId` int(11) NOT NULL DEFAULT '0',
      `itemFromId` int(11) NOT NULL DEFAULT '0',
      `itemFromTypeId` int(11) unsigned NOT NULL DEFAULT '0',
      `assocTypeId` int(11) unsigned NOT NULL DEFAULT '0',
      `assocValue` double NOT NULL DEFAULT '0',
      `itemToId` int(11) NOT NULL DEFAULT '0',
      `itemToTypeId` int(11) unsigned NOT NULL DEFAULT '0',
      `sourceTypeId` int(11) NOT NULL DEFAULT '0',
      `sourceInfo` varchar(250) DEFAULT '0',
      `viewTypeId` int(11) unsigned NOT NULL DEFAULT '0',
      `active` tinyint(1) NOT NULL DEFAULT '1',
      `changeDate` datetime NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `unique_itemassoc` (`tenantId`,`itemFromId`,`itemFromTypeId`,`itemToId`,`itemToTypeId`,`assocTypeId`,`sourceTypeId`),
      KEY `idFrom_assoc` (`itemFromId`,`itemFromTypeId`,`assocTypeId`,`tenantId`),
      KEY `recommender` (`itemFromId`,`itemFromTypeId`,`itemToTypeId`,`assocTypeId`,`tenantId`,`active`)
    ) ENGINE=InnoDB AUTO_INCREMENT=38480 DEFAULT CHARSET=latin1 COMMENT='Table containing item associations'
    
    基本上

  • 项目a
  • ASSOCTYPE(例如:一起购买)
  • 项目B
  • ASSOC值(建议的强度)

  • 可以导入您的“购买操作”并计算其中的规则

    为什么这还不够?这个网站只卖一种商品,所以我不需要太多的东西,除了它们是一起买的。嗯,我不知道你的网站只卖一种商品。通常情况下,你不会试图知道什么样的人买什么样的产品,而是什么样的人买什么样的产品。