Совместная фильтрация: неперсонализированное сходство элементов от элемента

Я пытаюсь вычислить сходство между предметами по аналогии с тем, что 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 для не купленной / купленной. Учитывая историю покупок и размер предмета, он может стать очень большим.

изменить: хотя я перечислил Python в качестве тега, я бы предпочел сохранить логику внутри БД, предпочтительно с использованием Oracle PL / SQL.

Ответы на вопрос(3)

Ваш ответ на вопрос