You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于浏览量与评分的电影数据协同过滤实现(Python)

嘿,既然你已经搞懂了基于评分的内存式协同过滤,那把浏览量这个维度加进来其实没那么复杂,我给你几个实用的落地思路,都是业内常用的方法:

结合评分与浏览量矩阵的协同过滤推荐方案

1. 加权融合构建统一偏好矩阵(最直接的入门方法)

这是最快能上手的方式:把两个矩阵合并成一个综合了评分和浏览量的偏好矩阵,步骤很清晰:

  • 先做归一化处理:把评分缩到0-1区间(比如原评分是1-5,就用(评分-1)/4);浏览量因为可能有长尾(比如少数电影被刷爆浏览量),可以用对数转换ln(浏览量+1)再做Min-Max缩放,也压到0-1区间。
  • 然后给两个维度分配权重:比如你觉得评分更能反映真实喜好,就设评分权重w_r=0.7,浏览量权重w_v=0.3(权重和为1就行),要是拿不准,也可以用交叉验证或者AB测试调优。
  • 最终综合偏好矩阵的每个元素就是:P(u,i) = w_r * 归一化评分(u,i) + w_v * 归一化浏览量(u,i)
  • 接下来就完全可以用你熟悉的内存式协同过滤流程:算用户/物品相似度、生成推荐,和原来的逻辑一模一样,只是输入矩阵变了。

2. 扩展相似度计算逻辑(保留双维度细节)

如果你不想合并矩阵,想保留评分和浏览量各自的特性,那可以在计算相似度的时候同时纳入两个维度:

  • 比如用余弦相似度的话,原来只用到用户的评分向量,现在把每个用户的评分向量和归一化后的浏览量向量拼接成一个更长的向量,再算余弦相似度。比如用户u的向量变成[r_u1, r_u2, ..., r_un, v_u1, v_u2, ..., v_un],其中r_ui是评分,v_ui是处理后的浏览量。
  • 或者分开算相似度再加权:先算基于评分的用户相似度sim_r(u1,u2),再算基于浏览量的用户相似度sim_v(u1,u2),最后合并成sim(u1,u2) = w_r * sim_r + w_v * sim_v,权重还是按需调整。
  • 这种方法的好处是不会因为合并矩阵丢失原始维度的信息,适合想精细化控制两个维度影响力的场景。

3. 分层过滤:先粗筛再精排(适合大规模数据集)

如果你的用户和电影数量很大,内存式协同过滤计算量太高,那可以分两步走:

  • 第一步粗筛:用浏览量矩阵快速生成候选池。比如给每个用户推荐浏览量Top200的电影,或者基于浏览量的用户相似度找相似用户喜欢的电影,先圈出100-200个候选。
  • 第二步精排:在候选池里用评分矩阵做精准排序。比如计算用户对这些候选电影的预测评分,按分数从高到低输出Top-N推荐。
  • 这样既利用了浏览量的“广谱兴趣”特性快速缩小范围,又用评分的“精准偏好”提升推荐质量,还能大幅降低计算量。

4. 延伸到模型协同过滤(矩阵分解方向)

要是你想从内存式方法拓展到模型层面,矩阵分解是个不错的选择:

  • 可以把评分矩阵R和浏览量矩阵V作为联合输入,学习用户和物品的潜在因子。比如设计加权损失函数:Loss = w_r * ||R - U*V_r^T||² + w_v * ||V - U*V_v^T||² + 正则项,其中U是用户潜在因子矩阵,V_r和V_v分别对应评分和浏览量的物品潜在因子矩阵。
  • 也可以把浏览量作为辅助特征加入,比如给用户潜在因子加上“平均浏览量”,给物品潜在因子加上“总浏览量”,让模型学习到更全面的偏好信号。

小提醒

  • 浏览量要处理异常值:比如某个用户误点某部电影100次,这种极端值可以用截断(把超过95分位数的浏览量设为95分位数的值)或者对数转换来削弱影响。
  • 权重别拍脑袋定:最好做AB测试,给不同用户组分配不同的权重组合,看哪个组合的推荐点击率、留存率更高。

内容的提问来源于stack exchange,提问作者Shaili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:04:25