1. 协同过滤概述:推荐系统简介、协同过滤核心思想、基于用户与基于物品的对比、冷启动问题初探

1.1 推荐系统到底在解决什么问题?

先聊聊推荐系统。说白了,它要解决的就是一个核心矛盾:信息过载

你想想看,用户每天面对海量的商品、视频、文章,根本看不过来。推荐系统的作用,就是帮用户做「选择题」——把最可能感兴趣的东西,主动推到面前。

我个人习惯把推荐系统比作一个「聪明的导购」。它不需要你开口问,就能猜到你想要什么。我在项目中遇到过不少业务方,一开始总想着让用户自己搜、自己选。结果呢?用户流失率居高不下。后来上了推荐系统,转化率直接翻了一倍。

推荐系统的核心目标其实就三个:

  • 帮用户发现价值:找到用户自己都没意识到的好东西
  • 提升业务指标:点击率、转化率、留存率,总得占一样
  • 降低用户决策成本:别让用户翻十页才找到想要的

一句话总结:推荐系统 = 在正确的时间,把正确的内容,推给正确的人。

1.2 协同过滤的核心思想

协同过滤(Collaborative Filtering)是推荐系统里最经典、最基础的方法。它的思想其实特别朴素:物以类聚,人以群分

怎么理解呢?我给你举个例子。

假设你和小明都喜欢看《三体》和《银河帝国》。现在小明又看了一本《沙丘》,而且给了高分。那系统就会觉得:你和小明口味相似,所以《沙丘》很可能也适合你。

这就是协同过滤的底层逻辑——利用群体的智慧来做推荐。它不需要知道物品的内容是什么,也不需要理解用户的兴趣标签。它只依赖一个东西:用户-物品的交互行为

我记得刚入行时,总觉得协同过滤太「笨」了,连物品是什么都不管。后来在电商项目里才发现,正是这种「不管内容」的特性,让它能处理各种类型的物品——书、电影、衣服、零食,统统可以。

我的经验:协同过滤最适合的场景是「用户行为数据丰富」的地方。如果用户交互数据稀疏,效果会大打折扣。这个后面会细说。

1.3 基于用户的协同过滤 vs 基于物品的协同过滤

协同过滤有两个主流分支:User-based CFItem-based CF。很多人刚学的时候容易搞混,我帮你理清楚。

1.3.1 基于用户的协同过滤(User-based CF)

核心思路:找到和你相似的用户,把他们喜欢的东西推荐给你

流程大概是这样的:

  1. 计算用户之间的相似度(比如用余弦相似度、皮尔逊相关系数)
  2. 找到与目标用户最相似的 K 个用户(称为「最近邻」)
  3. 把这些邻居喜欢的、但目标用户没见过的物品,按得分排序推荐

举个例子:

用户A:看过《黑客帝国》《盗梦空间》《星际穿越》
用户B:看过《黑客帝国》《盗梦空间》《降临》
用户C:看过《星际穿越》《降临》《银翼杀手》

目标用户A的邻居是用户B(相似度高)
用户B看过《降临》且评分高 → 推荐给用户A

我在项目中遇到过一个问题:User-based CF 在用户量很大的时候,计算相似度的成本非常高。你想想看,几千万用户两两算相似度,那计算量是 O(n²) 级别的。嗯,这里要注意,不适合用户规模太大的场景

1.3.2 基于物品的协同过滤(Item-based CF)

核心思路:找到和你喜欢的物品相似的物品,推荐给你

流程:

  1. 计算物品之间的相似度(基于用户对物品的评分行为)
  2. 找到目标用户已交互物品的相似物品
  3. 把这些相似物品推荐给用户

注意这里的「相似」不是内容上的相似,而是行为上的相似。比如,买《三体》的人也经常买《银河帝国》,那这两本书就算「行为相似」。

关键区别:User-based CF 找「相似的人」,Item-based CF 找「相似的物」。

1.3.3 两者对比

对比维度 User-based CF Item-based CF
适用场景 用户数少、物品数多 物品数少、用户数多
实时性 较差(用户相似度需定期更新) 较好(物品相似度可离线计算)
可解释性 较弱(「因为和你相似的人喜欢」) 较强(「因为你喜欢A,所以推荐B」)
冷启动 新用户难处理 新物品难处理
计算复杂度 O(n²) 用户相似度 O(m²) 物品相似度

我个人习惯:在电商场景里,Item-based CF 用得更多。为什么?因为电商的物品数量相对稳定(比如几百万个SKU),但用户量可能上亿。算物品相似度比算用户相似度划算得多。

避坑指南:我曾经在一个视频推荐项目里硬上 User-based CF,结果用户相似度矩阵存了 500GB,每次更新要跑 8 小时。后来换成 Item-based CF,计算量直接降到原来的 1/10。选型一定要看数据规模。

1.4 冷启动问题初探

冷启动,说白了就是「新用户/新物品没有行为数据,怎么推荐?」

这是协同过滤的「阿喀琉斯之踵」。因为它完全依赖用户行为,一旦行为数据为零,算法就「巧妇难为无米之炊」了。

冷启动分三种情况:

  • 用户冷启动:新用户注册,没有任何历史行为
  • 物品冷启动:新商品上架,没有任何用户交互
  • 系统冷启动:整个推荐系统刚上线,没有任何数据

怎么解决?我分享几个常用的思路:

1.4.1 用户冷启动的常见解法

  1. 利用注册信息:性别、年龄、地域、兴趣标签。虽然粗糙,但总比没有强
  2. 热门推荐:新用户先看全站最热的内容。虽然不够个性化,但至少不会太差
  3. 探索策略:给新用户随机推荐一些物品,收集反馈后再做个性化
  4. 迁移学习:如果用户在其他平台有行为,可以尝试迁移(注意合规)

1.4.2 物品冷启动的常见解法

  1. 基于内容的方法:利用物品的属性(标题、分类、标签)做相似度计算
  2. 强制曝光:把新物品插入到推荐列表的某些位置,收集用户反馈
  3. 利用关联规则:比如「买A的人也可能买B」,新物品如果和A同品类,可以尝试关联

我的建议:冷启动没有银弹。我一般会组合使用多种策略,比如「热门推荐 + 少量探索 + 注册信息粗筛」。等用户行为积累到一定量(比如 10 次点击),再切换到协同过滤。

1.4.3 冷启动的评估指标

怎么判断冷启动策略好不好?我常用这几个指标:

  • 覆盖率:新物品/新用户被推荐的占比
  • 探索效率:多少新物品在曝光后获得了正向反馈
  • 冷启动转化率:新用户首次推荐后的点击/购买率

一句话总结冷启动:先用规则和内容撑住场面,等数据够了再上协同过滤。别一上来就追求「完美个性化」,先让用户「有的看」。

1.5 本章小结

这一章我们聊了:

  • 推荐系统解决的是信息过载问题
  • 协同过滤的核心是利用群体行为做推荐
  • User-based CF 和 Item-based CF 各有优劣,选型要看数据规模
  • 冷启动是协同过滤的短板,需要组合策略来弥补

下一章,我会带你手撸一个 User-based CF 的代码实现。到时候你会看到,这些理论到底是怎么落地的。

嗯,先消化这些吧。有问题随时交流。