Я пытаюсь вычислить сходство между предметами по аналогии с тем, что Amazon "Клиенты, которые просмотрели / приобрели X, также просмотрели / приобрели Y и Z". Все примеры и ссылки, которые я видел, относятся либо к подобию вычислительных элементов для ранжированных элементов, либо к поиску сходства пользователя с пользователем, либо к поиску рекомендуемых элементов на основе истории текущих пользователей. Я хотел бы начать с нецелевого подхода, прежде чем учитывать предпочтения текущих пользователей.
Рассматривая рекомендации Amazon.com, в белой книге , они используют следующую логику для сходства автономных элементов:
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
Если я правильно понимаю, к тому времени, когда мы находимся в «Вычислить сходство между I1 и I2», у меня есть список предметов (I2), купленных вместе с одним значением I1 (внешний цикл).
Как выполняется этот расчет?
Другая идея состоит в том, что я переосмысливаю это и усложняю, чем мне нужно. Было бы достаточно сделать запрос top-n для подсчета I2, купленного вместе с I1?
Я также ценю предложения о том, является ли этот подход правильным. В моей базе данных товаров около 150 тыс. Товаров в любое время. Поскольку большая часть материалов для чтения, которые я видел, показывает сходство элементов пользователя или даже сходство пользователя и пользователя, стоит ли мне идти по этому пути.
В прошлом я работал с алгоритмами подобия, но они всегда включали ранг или оценку. Я думаю, что единственный способ, которым это сработало бы, - это построить матрицу продукта-клиента с оценкой 0/1 для не купленной / купленной. Учитывая историю покупок и размер предмета, он может стать очень большим.
edit: хотя я перечислил python как тег, я бы предпочел хранить логику внутри БД, предпочтительно используя Oracle PL / SQL.