Я пытаюсь вычислить сходство предметов с товарами по линиям Amazon's «Клиенты, которые просмотрели/приобрели X, также просмотрели/купили Y и Z». Все примеры и ссылки, которые я видел, относятся к сходству в вычислительных элементах для ранжированных элементов, для поиска подобия пользователя или пользователя, или для поиска рекомендуемых элементов на основе истории текущих пользователей. Я хотел бы начать с нецелевого подхода, прежде чем учитывать предпочтения текущих пользователей.Совместная фильтрация: неполитизированное сходство предметов с товаром
Глядя на Amazon.com recommendations white paper, они используют следующую логику для автономного детала-элемент подобия:
For each item in product catalog, I1
For each customer C who purchased I1
For each item I2 purchased by customer C
Record that a customer purchased I1 and I2
For each item I2
Compute the similarity between I1 and I2
Если я правильно понимаю, к тому времени мы находимся в «Compute similiarty между I1 и I2», I имеют список предметов (I2), купленных в сочетании с одним значением I1 (внешний контур).
Как выполняется этот расчет?
Другая идея заключается в том, что я переусердствую это и делаю ее более сложной, чем мне нужно. Достаточно ли сделать запрос top-n на счет I2, купленный в сочетании с I1?
Я также ценю предложения относительно того, является ли этот подход правильным. В моей базе данных продукта содержится около 150 тыс. Товаров в любое время. Поскольку основная часть материала для чтения, который я видел, показывает сходство с пользовательским элементом или даже сходство с пользователем, должен ли я искать этот маршрут вместо этого.
В прошлом я работал с алгоритмами схожести, но они всегда включали ранг или оценку. Я думаю, что единственным способом, который это сработает, было бы построение матрицы показателей потребительского продукта 0/1 для покупки/покупки. Учитывая историю покупок и размер элемента, это может стать очень большим.
Редактировать: хотя я назвал python как тег, я бы предпочел сохранить логику внутри db, предпочтительно используя Oracle PL/SQL.
У меня есть книга, но ее примеры все считают то, что это номинальное, в случае книг, фильмов и критики (по крайней мере, в главе о сходстве). Например, «Учитывая мои оценки, покажите мне другие [фильмы | критики], которые я бы хотел». Мои данные только что куплены, я могу получить не купленные, если придется. Я не возражаю против использования Байеса, но я не ищу вероятность того, что пользователь А приобретет X. Мне больше интересно показать, что покупатели А также купили Z. Отказ от ответственности - я, возможно, не понимаю этого, так как я думаю Я делаю с уважением желание элемента item-item vs user-item. –
@Neil, используйте покупку/покупку в качестве рейтингов 0 и 1 - не максимальную вычислительную эффективность, но концептуально показывает, как, если вы знаете, как бороться с рейтингами, тогда ** конечно ** вы знаете, как справиться w/просто покупки, как хорошо! И ему нужно использовать Байес (или приблизительно его), чтобы иметь какой-то смысл, иначе вы не сможете отрезать количество предметов, которые будут отображаться в «также приобретенном» списке, и вы получите в итоге миллионы предметов (= = совершенно бесполезно) с обширным каталогом и множеством пользователей, а также слишком большими номерами даже для очень скромного сайта электронной коммерции. –