Как хранить "Клиенты, которые купили это, также купили" - PullRequest
0 голосов
/ 14 января 2011

Я создаю такую ​​функциональность, как Amazon "Клиенты, которые купили это, также купили".У меня есть около 6 лет заказов на эти данные, и я, очевидно, продолжаю обновлять их данными о новых заказах.

Несколько вопросов приходят на ум:

  1. Как хранитьэти отношения?Я имею в виду простую таблицу с productA, productB и count (или rank).Достаточно ли этого?
  2. Я не думаю, что старые данные так же актуальны, как и новые.Как расставить приоритеты для новых данных?

Редактировать: Этот сайт продает только один тип продукта, так что практически все актуально, не нужно фильтровать.Я также хотел бы сохранить это как можно более простым - данные уже находятся в моей базе данных, я ищу самый простой способ для их вычисления и хранения.

Ответы [ 4 ]

1 голос
/ 12 октября 2011

Вы можете использовать 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. ITEMA
  2. ASSOCTYPE (например: BOUGHT_TOGETHER)
  3. ITEMB
  4. ASSOC VALUE (сила рекомендации)

easyrec может импортировать ваши "КУПИТЬ ДЕЙСТВИЯ" и вычислять из них правила.

0 голосов
/ 14 января 2011

«Как мне хранить эти отношения? Я имею в виду простую таблицу с productA, productB и count (или rank). Этого достаточно?»

Этого на самом деле недостаточно.Лучше всего использовать семантику объекта

Так что получите данные, связанные с объектом (как для книги: факт, что это книга, написанная ххх, стиль письма, вид книги ...)и увидеть отношение к другим данным, которые приводят вас к другому объекту (например, книги такого типа связаны с этим видом, или этот художник с этим художником, или с обоими, т. д.).Это действительно очень тяжелая работа.

После того, как вы можете сделать это самостоятельно, но это может быть не так актуально, как вы хотите.

Я действительно думаю, что вы должны увидеть, что уже существует (например, на sourceforge или github).

0 голосов
/ 16 января 2011

Лично я не буду хранить эти данные.Я хотел бы создать представление, которое динамически выбирает предлагаемые продукты.

Может быть одна простая реализация:

  1. Выберите репрезентативное количество людей, которые также купили тот же продукт (EG 1000)
  2. Исходя из этих пользователей, какие продукты N они все купили.
  3. Предложите эти продукты пользователю.

Вы можете упростить его, вырезавшаг 2, так что вы просто показываете другие продукты, которые были приобретены независимо от популярности.

В соответствии с предложением Саймона Марка вы можете сделать это более изощренным, отфильтровав свои продукты по их критериям.

Что касаетсястарые данные, возможно, элементы могут иметь флаг использования по дате или избыточности, что означает, что они отфильтрованы от выбора.

0 голосов
/ 14 января 2011

посмотрите на http://taste.sourceforge.net/

Taste - это гибкий, быстрый механизм совместной фильтрации для Java.Движок принимает пользовательские предпочтения к элементам («вкусы») и возвращает примерные предпочтения для других элементов.Например, сайт, который продает книги или компакт-диски, может легко использовать Taste, чтобы выяснить, исходя из данных прошлых покупок, какие компакт-диски клиент может заинтересовать прослушиванием.

У Google также есть прогнозируемый API,могут быть адаптированы для вашего использования.Проверьте их сценарии здесь

...