1. 协同过滤概述:推荐系统简介、协同过滤核心思想、基于用户与基于物品的对比、冷启动问题初探
1.1 推荐系统到底在解决什么问题?
先聊聊推荐系统。说白了,它要解决的就是一个核心矛盾:信息过载。
你想想看,用户每天面对海量的商品、视频、文章,根本看不过来。推荐系统的作用,就是帮用户做「选择题」——把最可能感兴趣的东西,主动推到面前。
我个人习惯把推荐系统比作一个「聪明的导购」。它不需要你开口问,就能猜到你想要什么。我在项目中遇到过不少业务方,一开始总想着让用户自己搜、自己选。结果呢?用户流失率居高不下。后来上了推荐系统,转化率直接翻了一倍。
推荐系统的核心目标其实就三个:
- 帮用户发现价值:找到用户自己都没意识到的好东西
- 提升业务指标:点击率、转化率、留存率,总得占一样
- 降低用户决策成本:别让用户翻十页才找到想要的
一句话总结:推荐系统 = 在正确的时间,把正确的内容,推给正确的人。
1.2 协同过滤的核心思想
协同过滤(Collaborative Filtering)是推荐系统里最经典、最基础的方法。它的思想其实特别朴素:物以类聚,人以群分。
怎么理解呢?我给你举个例子。
假设你和小明都喜欢看《三体》和《银河帝国》。现在小明又看了一本《沙丘》,而且给了高分。那系统就会觉得:你和小明口味相似,所以《沙丘》很可能也适合你。
这就是协同过滤的底层逻辑——利用群体的智慧来做推荐。它不需要知道物品的内容是什么,也不需要理解用户的兴趣标签。它只依赖一个东西:用户-物品的交互行为。
我记得刚入行时,总觉得协同过滤太「笨」了,连物品是什么都不管。后来在电商项目里才发现,正是这种「不管内容」的特性,让它能处理各种类型的物品——书、电影、衣服、零食,统统可以。
我的经验:协同过滤最适合的场景是「用户行为数据丰富」的地方。如果用户交互数据稀疏,效果会大打折扣。这个后面会细说。
1.3 基于用户的协同过滤 vs 基于物品的协同过滤
协同过滤有两个主流分支:User-based CF 和 Item-based CF。很多人刚学的时候容易搞混,我帮你理清楚。
1.3.1 基于用户的协同过滤(User-based CF)
核心思路:找到和你相似的用户,把他们喜欢的东西推荐给你。
流程大概是这样的:
- 计算用户之间的相似度(比如用余弦相似度、皮尔逊相关系数)
- 找到与目标用户最相似的 K 个用户(称为「最近邻」)
- 把这些邻居喜欢的、但目标用户没见过的物品,按得分排序推荐
举个例子:
用户A:看过《黑客帝国》《盗梦空间》《星际穿越》
用户B:看过《黑客帝国》《盗梦空间》《降临》
用户C:看过《星际穿越》《降临》《银翼杀手》
目标用户A的邻居是用户B(相似度高)
用户B看过《降临》且评分高 → 推荐给用户A
我在项目中遇到过一个问题:User-based CF 在用户量很大的时候,计算相似度的成本非常高。你想想看,几千万用户两两算相似度,那计算量是 O(n²) 级别的。嗯,这里要注意,不适合用户规模太大的场景。
1.3.2 基于物品的协同过滤(Item-based CF)
核心思路:找到和你喜欢的物品相似的物品,推荐给你。
流程:
- 计算物品之间的相似度(基于用户对物品的评分行为)
- 找到目标用户已交互物品的相似物品
- 把这些相似物品推荐给用户
注意这里的「相似」不是内容上的相似,而是行为上的相似。比如,买《三体》的人也经常买《银河帝国》,那这两本书就算「行为相似」。
关键区别: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.4.2 物品冷启动的常见解法
- 基于内容的方法:利用物品的属性(标题、分类、标签)做相似度计算
- 强制曝光:把新物品插入到推荐列表的某些位置,收集用户反馈
- 利用关联规则:比如「买A的人也可能买B」,新物品如果和A同品类,可以尝试关联
我的建议:冷启动没有银弹。我一般会组合使用多种策略,比如「热门推荐 + 少量探索 + 注册信息粗筛」。等用户行为积累到一定量(比如 10 次点击),再切换到协同过滤。
1.4.3 冷启动的评估指标
怎么判断冷启动策略好不好?我常用这几个指标:
- 覆盖率:新物品/新用户被推荐的占比
- 探索效率:多少新物品在曝光后获得了正向反馈
- 冷启动转化率:新用户首次推荐后的点击/购买率
一句话总结冷启动:先用规则和内容撑住场面,等数据够了再上协同过滤。别一上来就追求「完美个性化」,先让用户「有的看」。
1.5 本章小结
这一章我们聊了:
- 推荐系统解决的是信息过载问题
- 协同过滤的核心是利用群体行为做推荐
- User-based CF 和 Item-based CF 各有优劣,选型要看数据规模
- 冷启动是协同过滤的短板,需要组合策略来弥补
下一章,我会带你手撸一个 User-based CF 的代码实现。到时候你会看到,这些理论到底是怎么落地的。
嗯,先消化这些吧。有问题随时交流。