我正在尝试按照亚马逊的“查看/购买 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 之间的相似性”时,我有一个与单个值 I1(外循环)一起购买的项目(I2)列表。
这个计算是如何进行的?
另一个想法是我想多了,这比我需要的更困难 - 对与 I1 一起购买的 I2 的计数进行前 n 个查询是否足够?
我也很欣赏有关这种方法是否正确的建议。我的产品数据库随时都有大约 150k 项。由于我看到的大部分阅读材料都显示了用户-项目相似性甚至用户-用户相似性,我是否应该转而走这条路。
我过去曾使用过相似度算法,但它们总是涉及排名或分数。我认为唯一可行的方法是建立一个客户-产品矩阵,对未购买/购买的产品评分为 0/1。考虑到购买历史和商品大小,这可能会变得非常大。
编辑:虽然我将python列为标签,但我更愿意将逻辑保留在数据库中,最好使用Oracle PL/SQL。