基于 CCO(Correlated Cross-Occurrence) 的协同过滤本质上是一种 Item-Based CF 算法
基于 CCO 的协同过滤推荐
基于 CCO 的协同过滤推荐通过物品之间的共现情况来计算物品之间的关联度,它跟一般的协同过滤算法不同的地方在于一般的协同过滤只能针对单一行为,而CCO算法可以计算交叉行为下的协同关联。
例如:它不仅可以通过用户的浏览行为来告诉你 “浏览了内容A的人可能会浏览内容B” ,它还能结合用户的浏览行为和用户的广告点击行为来告诉你 “点击了广告A的人可能会浏览内容F”。
基于单一行为
整理后得到以下关系:
u1=> [ t1, t2, t3, t5 ]
u2=> [ t1, t3, t4, t5 ]
u3=> [ t2, t4 ]
构建 “用户关于浏览帖子” 的矩阵 V 以及对应的转置矩阵 V^T:
将 矩阵V^T 乘以 矩阵 V 即可得到浏览帖子的共现矩阵:
对数似然比(Log Likelihood Ratio)即LLR。我们根据两个事件的共现关系计算LLR值,用于衡量两个事件的关联度:
从 t1 行可知,t3、t5 与 t1 关联度最高所以认为浏览了 t3、t5 的用户可能对 t1 有兴趣 t1: [ t3, t5]
基于交叉行为
结合 用户浏览行为日志 整理得到以下关系:
u1=> [ t1, t2, t3, t5, a1, a2, a3, a4 ]
u2=> [ t1, t3, t4, t5, a1, a4 ]
u3=> [ t2, t4, a3, a4 ]
将矩阵 V^T 乘以 矩阵 C 可以得到 浏览帖子与广告点击 的共现矩阵,并转换为LLR矩阵:
注意:我们发现每个用户都有点击广告a4,但a4的LLR值却是0,也就是a4跟任何帖子都没有关联,这看上去很奇怪。但其实这是LLR的特点,LLR对于热门事件有很大的惩罚,简单来说它认为浏览t1和点击广告a4这两个事件共同发生的原因不是因为浏览t1和点击a4有关联,而仅仅只是因为点击a4本身是一个高频发生的事件。
从 t1 行可知,点击广告 a1 的用户很可能对 t1 有兴趣 t1: [ a1, ]
如果有一位用户浏览了t5, 并且也点击了广告a1, 那么我们可以推断他很可能对t1有浏览兴趣。