我正在构建像亚马逊的“购买此商品的客户”这样的功能。我有大约6年的订单来挖掘这些数据,显然会继续更新新订单的数据。
想到几个问题:
编辑:这个网站只销售一种产品,所以几乎所有东西都是相关的,不需要过滤。我也希望尽可能简单 - 数据已经在我的数据库中,我正在寻找最简单的计算和存储方法。
答案 0 :(得分: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'
基本上是
easyrec可以导入您的“购买行动”并从中计算出规则。
答案 1 :(得分:0)
查看http://taste.sourceforge.net/
味道灵活,快速 协同过滤引擎 Java的。引擎带用户' 物品的喜好(“品味”)和 返回估计的偏好 其他项目。例如,一个网站 销售书籍或CD可以轻松使用 尝试从过去中弄清楚 购买数据,CD是客户 可能有兴趣听。
Google还有一个可以根据您的用例量身定制的预测API。检查他们的scenarios here
答案 2 :(得分:0)
“我如何存储这些关系?我正在考虑一个包含productA,productB和count(或rank)的简单表。这是否足够?”
这还不够,真的。最好是使用对象的语义
所以让数据与对象相关联(就像一本书:它是一本书,由xxx编写,写作风格,书籍......),并查看与其他数据的关系,这些数据将您带到另一个对象(就像这种书是这种类型的,或者这个艺术家对这个艺术家,或两者,等等...)。这真的很难做到。
您可以选择自己做,但可能没有您想要的那么多。
我真的认为你应该看看已经存在的东西(例如在sourceforge或github上)。
答案 3 :(得分:0)
我个人不会存储这些数据。我会创建一个动态选择要建议的产品的视图。
一个简单的实现可能是:
您可以通过删除第2步来简化它,以便您只显示已购买的其他产品,而不受欢迎程度。
正如Simon Marc所建议的那样,您可以通过按照标准过滤产品来使其更加复杂。
对于较旧的数据,也许项目可以按日期或冗余标记使用,这意味着它们会从选择中过滤掉。