Совместная фильтрация: неперсонализированное сходство элементов от элемента
Я пытаюсь вычислить сходство между предметами по аналогии с тем, что 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.