0

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

想到几个问题:

  1. 我如何存储这些关系?我正在考虑一个包含 productA、productB 和计数(或排名)的简单表。这足够了吗?
  2. 我不认为旧数据与新数据一样重要。如何优先处理较新的数据?

编辑:这个网站只销售一种产品,所以几乎所有东西都是相关的,不需要过滤。我也希望尽可能简单——数据已经在我的数据库中,我正在寻找最简单的方法来计算和存储它。

4

4 回答 4

1

您可以使用easyrec来完成您的任务。它将以以下格式存储关系:

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'

这基本上是

  1. 意达
  2. ASSOCTYPE(例如:BOUGHT_TOGETHER)
  3. 项目
  4. ASSOC VALUE(推荐强度)

easyrec可以导入您的“购买操作”并从中计算出规则。

于 2011-10-12T12:34:36.027 回答
0

看看http://taste.sourceforge.net/

Taste 是一个灵活、快速的 Java 协同过滤引擎。该引擎获取用户对项目的偏好(“口味”)并返回对其他项目的估计偏好。例如,销售书籍或 CD 的网站可以轻松地使用 Taste 从过去的购买数据中找出客户可能有兴趣听的 CD。

谷歌还有一个可以为你的用例量身定制的预测 API。在这里查看他们的场景

于 2011-01-14T05:00:06.467 回答
0

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

一种简单的实现可能是:

  1. 选择一个代表人数的人也购买了相同的产品(EG 1000)
  2. 根据这些用户,他们购买的前 N ​​个产品是什么。
  3. 向用户推荐这些产品。

您可以通过删除第 2 步来简化它,这样您就可以只显示其他已购买的产品,而不管受欢迎程度如何。

正如 Simon Marc 所建议的,您可以通过按标准过滤您的产品来使其更加复杂。

至于较旧的数据,也许项目可以按日期或冗余标志使用,这意味着它们已从选择中过滤。

于 2011-01-16T19:59:20.630 回答
0

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

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

因此,获取与对象相关联的数据(例如一本书:事实上它是一本书,由 xxx 撰写,写作风格,书的种类......),并查看与其他数据的关系,从而将您带到另一个对象(例如这类书与此类相关,或此艺术家与此艺术家相关,或两者兼而有之……)。这确实是一项非常艰巨的工作。

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

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

于 2011-01-14T05:10:04.897 回答