我有一个澄清 -
首先是定义——
基于用户:通过寻找相似用户来推荐项目。由于用户的动态特性,这通常更难扩展。
基于项目:计算项目之间的相似度并提出建议。项目通常不会发生太大变化,因此通常可以离线计算。
现在的问题是——在基于项目的 CF 中,项目之间的相似性是通过用户行为来跟踪的——因为用户行为正在发生变化,它不会影响项目之间的相似性吗?
我有一个澄清 -
首先是定义——
基于用户:通过寻找相似用户来推荐项目。由于用户的动态特性,这通常更难扩展。
基于项目:计算项目之间的相似度并提出建议。项目通常不会发生太大变化,因此通常可以离线计算。
现在的问题是——在基于项目的 CF 中,项目之间的相似性是通过用户行为来跟踪的——因为用户行为正在发生变化,它不会影响项目之间的相似性吗?
这取决于您使用什么数据来计算项目之间的相似性。
如果您使用来自用户与项目交互的数据(例如查看网页或购买项目),那么每次用户与项目交互时,它与其他项目之间的相似性都会发生变化。如果您是离线进行此计算,那么您的模型将不会考虑该更改,直到下一次更新数据集并重新计算您的建议。
但是,如果您使用项目元数据来计算相似度,那么用户行为不会产生任何影响。例如,如果您获取两个项目之间共享标签的数量,或者共享入站链接的数量等。
我一直使用用户浏览数据来构建内容推荐引擎,但当然可以通过多种不同的方式计算相似度。玩得开心!
您所要求的通常称为篮子分析。
我认为你应该通过同时使用它们来从你拥有的数据中获得最大价值:用户和项目。
您所说的“基于项目”的方法是指基于项目标签或类别的推荐。它不是完全意义上的推荐系统,因为它使用您的分类/标记。换句话说,您永远不会将尿布和啤酒归为一个类别,但这仍然是传说中的购买模式:)。
基于项目的数据通常用于篮子分析算法,例如频繁模式挖掘。简而言之:您搜索最常见的项目集(一起或连贯购买的项目)并根据它们提出建议。
基于用户的数据也不应该被忽视。聚类方法在这里有效:您可以找到一些对项目集(如上所示)的购买态度与平均水平不同的客户群体。
当然,正如@LaruiK 所说。
您已经注意到会改变“共同视图”数据的相似性度量的因素,这是一种将时间衰减函数集成到模型中的简单方法。