我正在设计一个应用程序,它包含基于用户交互(协同过滤)的推荐系统。在他的主页上向用户展示了一组 6 个要与之交互的项目。将有 50 到 300 个项目。可以执行以下操作:
- 点击一个项目(强烈的兴趣)
- 刷新一个项目(一些兴趣)
- 打开一个阅读更多对话框(一些兴趣)
- 不要做任何事情(没有兴趣)
这些数据被收集和存储。系统应该向用户推荐感兴趣的项目。我正在考虑将这些数据转化为评级系统。
选项 A)如果用户点击一个项目,这将被转换为 5 的隐含生命周期评级。将项目刷新为 4,依此类推。所以我的 user->item 矩阵看起来像这样:
item 1 | item 2 | item 3
john 5 4
jane 4
在这个例子中,john 点击了第 1 项并刷新了第 3 项。评级只能真正上升,即如果用户之前刷新过一个项目,我写一个 4,如果稍后单击该项目,则只更新为 5。
选项 B) 每次用户执行上述操作之一时,我都会为项目增加一个标量值,这意味着它可以无限增长。
item 1 | item 2 | item 3
john 55 1 30
jane 41 9
也许这是个问题,因为现在这些数字更难转化为从 1 到 10 的等级量表
选项 C)我分别计算每次交互
item 1 click | item 1 refresh | item 1 read
john 3 1
jane 1 1
这里的问题是“阅读”一个项目可能只完成一次。
与我选择的任何选项无关,我的想法是首先使用余弦相似度或皮尔逊相关性等方法找到相似的用户。然后从该列表中挑选前 10 到 30 名用户,并编制一份他们最喜欢的项目的顶级列表。然后,我将从该列表中推荐当前用户过去几乎没有互动过的项目。
这是可行的吗?我担心找到相似的用户会消除为当前用户找到有趣(新)项目的机会。