協同過濾推薦系統實作:UserCF 與 ItemCF 全面對比
摘要:協同過濾用行為相似性取代內容理解:UserCF 給用戶推「相似用戶喜歡的東西」,適合發掘多元內容與熱點場景;ItemCF 給用戶推「與互動過的物品相似的物品」,適合商品類目穩定的電商與連帶推薦。兩者共用共現統計作為實作底座,工程上以矩陣運算與週期更新為主,亦可與內容向量混合補短。
協同過濾(Collaborative Filtering,CF)是推薦系統歷史上最經典、至今仍最常用的演算法家族:不需要理解商品內容,只需記錄「誰買了什麼、誰看了什麼」,就能算出該給誰推什麼。它的兩個主要分支——基於用戶的 UserCF 與基於物品的 ItemCF——常被混為一談,但實際的資料需求、更新節奏與適用場景差異甚大。本文從原理講起,給出兩個分支的五維對比,再落到工程實作的關鍵點與混合方案,協助在真實業務中做對選型。
關鍵要點
- 協同過濾的核心假設:歷史行為相似的使用者,未來偏好也相似;行為共現的物品,彼此也相似。
- UserCF 推薦鏈路是「找相似的人 → 取他們的喜好」;ItemCF 是「看使用者互動過的物品 → 推相似物品」。
- UserCF 適合使用者興趣多元、內容時效性強的場景;ItemCF 適合物品關係穩定、需要可解釋性的電商場景。
- 五維對比看:資料側重、即時性、可解釋性、冷啟動表現與穩定性,兩個分支各有所長。
- 工程底座相同:使用者-物品互動矩陣 + 相似度矩陣 + 週期性離線更新,規模大時引入近似最近鄰(ANN)檢索。
- CF 對新使用者與新物品無能為力是結構性短板,與內容向量召回混合是常見的補短方案。
一、協同過濾的基本思想
協同過濾回答一個樸素的問題:不認識商品,能不能推薦?答案是可以——把「理解商品」換成「觀察行為」。如果使用者 A 與使用者 B 的歷史行為高度重疊,A 喜歡的 B 大概率也喜歡(這是 UserCF);如果購買商品 X 的使用者大多同時購買商品 Y,看過 X 的使用者就該看到 Y(這是 ItemCF)。
這個假設的強大之處在於零內容理解成本:不需要給商品打標籤、不需要語意模型,一張使用者-物品互動表就能起步。它的代價也來自這裡——演算法只知道「什麼和什麼一起被消費」,不知道為什麼,因此對全新的使用者與物品完全失明(冷啟動問題),對行為稀疏的長尾也力不從心。
理解了這一層,兩個分支的差異就好講了:它們其實是同一張互動矩陣的兩個觀察方向——按行(使用者相似)還是按欄(物品相似)。
二、UserCF:找相似的人
推薦鏈路:計算使用者之間的相似度 → 找出目標使用者最相似的 K 個使用者 → 把這 K 個使用者喜歡、而目標使用者尚未接觸的物品按權重排序推薦。
相似度怎麼算:兩個使用者的行為集合越重疊越相似,常用 Jaccard 或餘弦相似度;對熱門物品降權是必要的細節——兩個使用者都買過紙巾不能說明相似,都買過小眾專業設備才能說明。
適用場景:使用者興趣多元的內容平台(資訊、影片)——相似使用者帶來的是「你可能自己發現不了的」內容,天然有發掘性;以及熱點驅動、需要快速跟上群體興趣變化的場景。
短板:使用者量大的平台,使用者相似度矩陣的規模與運算代價隨使用者數成長;使用者興趣漂移快時,相似度矩陣的即時性是瓶頸。
三、ItemCF:找相似的物品
推薦鏈路:計算物品之間的相似度(基於「被同一批使用者共同消費」的共現)→ 對目標使用者互動過的每個物品,取其相似物品 → 彙總排序推薦。
相似度怎麼算:兩個物品被越多相同使用者共同消費,越相似;同樣要對熱門物品降權,否則所有物品都會和「人人買過的爆款」最相似。
適用場景:物品集合相對穩定、使用者數遠大於物品數的電商——物品相似度矩陣小且穩定,可以離線算好、線上秒查;以及需要可解釋性的場景:「因為你買過 X」是使用者一聽就懂、也方便營運審計的推薦理由。
短板:新品沒有共現資料,進不了候選;物品爆炸式增長(如 UGC 內容平台)時矩陣更新壓力大。
四、五維對比
| 維度 | UserCF | ItemCF |
|---|---|---|
| 資料側重 | 使用者-使用者相似,重使用者行為多樣性 | 物品-物品相似,重共現結構 |
| 即時性 | 使用者行為變化快,需較頻繁更新 | 物品關係穩定,離線更新即可 |
| 可解釋性 | 「和你相似的人也喜歡」較弱 | 「因為你買過 X」強,可審計 |
| 冷啟動 | 新使用者無行為即失效 | 新物品無共現即失效 |
| 穩定性 | 隨使用者興趣漂移波動 | 物品關係穩定則結果穩定 |
選型的快速判斷:內容時效性強、使用者興趣發散,偏 UserCF;商品類目穩定、重視可解釋與連帶邏輯,偏 ItemCF。多數電商的首選是 ItemCF——矩陣小、好維護、解釋自然,連帶推薦場景幾乎是它的主場。
五、工程實作要點
兩個分支的實作底座是同一套:互動矩陣 → 相似度矩陣 → 候選生成 → 排序輸出。工程上要抓四點。
共現統計的口徑。互動的權重分級(瀏覽 1 分、加購 3 分、購買 5 分)比全部等權好;時間衰減讓近期行為佔更大權重,避免一年前的行為和昨天等值。
相似度計算的降權與截斷。熱門物品降權(IUF 或對數平滑)是效果差異最大的一個細節;相似度矩陣按 Top-K 截斷儲存,避免全量矩陣膨脹。
更新頻率分級。ItemCF 的物品相似度可按日或週離線更新;UserCF 的使用者興趣若場景要求「追熱點」,需要近線運算補足即時性。Netflix 的推薦架構實踐把離線、近線與線上三種運算模式的結合視為核心挑戰——離線算力強但結果陳舊,線上即時但複雜度受限,兩者分工正是 CF 工程化的核心設計。
大規模檢索。物品或使用者規模到千萬級後,相似度檢索從「查表」變為「最近鄰搜尋」,需要引入近似最近鄰(ANN)結構。Meta 開源的 FAISS 提供大規模稠密向量的聚類與近似最近鄰檢索能力,同樣適用於把共現相似度轉為向量表示後的快速檢索。
六、與內容向量的混合
CF 的結構性短板——新使用者與新物品失明——恰好是內容向量召回的長項:物品的內容語意向量不依賴行為,上架即可被召回;使用者註冊時選擇的興趣標籤也能立即生效。
常見的混合方式是多路召回並行:CF 通道(行為協同訊號)+ 內容向量通道(語意相似)+ 熱門規則通道(兜底),各通道出候選後在排序層統一打分。Elasticsearch 的向量檢索能力支援把內容向量化後按相似度召回,工程上可以與共現召回並行部署。這種「CF 管協同、向量管內容、規則管兜底」的組合,是中小型團隊性價比最高的召回架構。
七、常見誤區
- 熱門不降權:相似度被爆款壟斷,所有使用者看到的推薦趨同,CF 退化成熱門榜。
- 互動等權:瀏覽與購買等權,訊號被雜訊稀釋,效果上限被資料口徑鎖死。
- 只建模型不建解釋:ItemCF 的可解釋性是天然資產,「因為你買過 X」直接展示,點擊率通常優於無解釋推薦。
- 拿 CF 做冷啟動:新使用者與新物品是 CF 的結構性盲區,硬做不如並行一條內容向量通道。
常見問題
問:UserCF 和 ItemCF 到底選哪個?
答:按業務形態判斷。內容平台(資訊、影片)使用者興趣發散、時效敏感,選 UserCF;電商商品關係穩定、需要可解釋與連帶邏輯,選 ItemCF。再疊加一個工程判據:使用者數遠大於物品數時 ItemCF 的矩陣更小更好維護,反過來才考慮 UserCF。
問:互動資料要累積多久才能上線協同過濾?
答:經驗門檻是核心使用者有足夠行為密度——多數業務在數週到兩個月的活躍資料後,可先跑 ItemCF 的簡化版(共現 Top-K)。起步階段可以先用購買與加購兩類高價值行為,瀏覽行為等資料量上來再分級加權,避免雜訊淹沒訊號。
問:熱門物品必須降權嗎?
答:必須。不做熱門降權時,任何物品的「最相似物品」幾乎都會被爆款佔據,推薦結果千篇一律,CF 的個人化優勢完全消失。常見做法是對共同消費計數按使用者活躍度或物品熱度做對數平滑或 IUF 加權,屬於實作細節中收益最大的一項。
問:ItemCF 的相似度矩陣多久更新一次?
答:按物品集合的穩定性定:商品類目穩定的電商按日到週更新即可,促銷季新品集中上架時可加密;內容型平台(影片、文章)更新更頻繁。工程上離線全量更新加近線增量更新相結合,兼顧穩定性與時效。
問:協同過濾的結果可以做 A/B 歸因嗎?
答:可以且應該。CF 上線後與規則基線(熱銷榜)分流對照,看推薦位點擊、加購與轉化增量;同時監控多樣性與長尾覆蓋指標,防止「指標好看但把流量集中到爆款」的退化。沒有對照的 CF 上線,收益經常被大盤波動淹沒而說不清。
問:CF 和內容向量是替代關係嗎?
答:不是,是互補。CF 捕捉行為協同訊號(「和你相似的人在買什麼」),向量捕捉內容語意(「這東西和你看過的像什麼」);CF 的新品盲區由向量補齊,向量的人氣盲區由 CF 與熱門規則兜底。多路召回並行、排序層統一打分,是兩者結合的標準形態。
關於通智雲
通智搜尋面向本文描述的推薦檢索場景,提供協同訊號與內容向量並行的多路召回能力,支援按場景配置排序目標與解釋文案。通智雲(TENGENCE)是 AI 時代的企業增長引擎,專注公域引流獲客與私域轉化成交;核心產品為通智 GEO(GEO + SEO 雙引擎)與通智搜尋。
相關閱讀
- 甚麼是推薦系統?召回、排序、重排三層架構解析
- 千人千面推薦的原理:從協同過濾到深度學習
- 推薦系統冷啟動怎麼做?4 類場景的解法清單
- 電商個性化推薦方案:8 個高 ROI 落地場景
- 搜推一體架構設計:搜索與推薦怎麼融合?四層架構與四階段落地
資料來源
- Wikipedia《Collaborative filtering》:協同過濾的定義、UserCF 與 ItemCF 分支及基本假設的概述。
- Netflix TechBlog《System Architectures for Personalization and Recommendation》:離線、近線與線上三層運算的分工,支撐相似度矩陣的分級更新設計。
- Elasticsearch《What is vector search?》:內容向量召回的原理說明,支撐 CF 與向量混合的多路召回方案。