http://www.tuicool.com/articles/nQzIZ3
byxiaoming· 2014 年 2 月 26 日
一、定義
-
UserCF:推薦那些和他有共同興趣愛好的用戶喜歡的物品
-
ItemCF:推薦那些和他之前喜歡的物品類似的物品
根據用戶推薦重點是反應和用戶興趣相似的小群體的熱點,根據物品推薦着重與用戶過去的歷史興趣,即:
- UserCF是某個群體內的物品熱門程度
- ItemCF是反應本人的興趣愛好,更加個性化
二、新聞類網站采用UserCF的原因:
- 用戶大都喜歡熱門新聞,特別細粒度的個性化可忽略不計
- 個性化新聞推薦更強調熱點,熱門程度和實效性是推薦的重點,個性化重要性則可降低
- ItemCF需要維護一張物品相關度的表,當物品量更新速度太快時,此表的維護在技術上有難度。新聞類網站對於新用戶可直接推薦熱門新聞即可
- 對於電商、音樂、圖書等網站而言,ItemCF的優勢更大:
- 用戶的興趣比較固定和持久;
- 不需要太過考慮流行度,只需要幫用戶發現他研究領域相關物品即可
- 技術角度考量
- UserCF需要維護一個用戶相似度矩陣
- ItemCF需要維護一個物品相似度矩陣
三、優缺點對比
項目 | UserCF | ItemCF |
性能 | 適用於用戶較少的場合,如果用戶過多,計算用戶相似度矩陣的代價交大 | 適用於物品數明顯小於用戶數的場合,如果物品很多,計算物品相似度矩陣的代價交大 |
領域 | 實效性要求高,用戶個性化興趣要求不高 | 長尾物品豐富,用戶個性化需求強烈 |
實時性 | 用戶有新行為,不一定需要推薦結果立即變化 | 用戶有新行為,一定會導致推薦結果的實時變化 |
冷啟動 | 在新用戶對少的物品產生行為后,不能立即對他進行個性化推薦,因為用戶相似度是離線計算的 新物品上線后一段時間,一旦有用戶對物品產生行為,就可以將新物品推薦給其他用戶 |
新用戶只要對一個物品產生行為,就能推薦相關物品給他,但無法在不離線更新物品相似度表的情況下將新物品推薦給用戶 |
推薦理由 | 很難提供 | 可以根據用戶歷史行為歸納推薦理由 |
UserCF和ItemCF是協同過濾中最為古老的兩種算法,早在20多年前就有學着提出來,由於簡單,很多網站都應用。以我現在的閱讀論文經驗來說,youtobe等各大網站應用的算法,概括點說就是在數據清洗階段不同,數據組織成矩陣存儲之后,差不多都是有user-based和item-based的影子。我忘了和誰聊天了,似乎是面試官還是朋友說,數據挖掘,推薦引擎什么的其實也就那樣,只不過外行的看起來很高深而已,做了才知道,弄來弄去不過如此。EMC一個博士在面試我的時候也提及了類似的觀點,我實現的觀點也覺得,只要把如果計算相似度的邏輯搞清楚了,其余剩下的沒什么難度。User- based認為一個人會喜歡和他有相同愛好的人喜歡的東西,即人以群分,我在豆瓣上關注的人都是我喜歡的人,他們喜歡的東西我也喜歡,而Item-based認為一個人會喜歡和他以前喜歡的東西相似的東西,我喜歡文藝片,豆瓣會給我推薦文藝片。這兩個假設都有其合理性。在網上看網友的博客指出,根據網友的測試,用UserCF和ItemCF做出的推薦列表中,只有50%是一樣的,還有50%完全不同。但是這兩個算法確有相似的精度。所以說,這兩個算法是很互補的。這句話在很多書中也見過,但是沒有做過測試檢驗。一下是網友的見解,粘貼過來:
我一直認為這兩個算法是推薦系統的根本,因為無論我們是用矩陣,還是用概率模型,我們都非常的依賴於前面說的兩種假設。如果用戶的行為不符合那兩種假設,推薦系統就沒必要存在了。因此我一直希望能夠找出這兩種算法的本質區別。他們有相似的精度,但是coverage相差很大,ItemCF coverage很大而UserCF很小。我還測試了很多其他指標,不過要從這些表象的指標差異找出這兩個算法的本質區別還是非常困難。不過上周我基本發現了這兩個算法推薦機理的本質區別。
我們做如下假設。每個用戶興趣愛好都是廣泛的,他們可能喜歡好幾個領域的東西。不過每個用戶肯定也有一個主要的領域,對這個領域會比其他領域更加關心。給定一個用戶,假設他喜歡3個領域A,B,C,同時A是他喜歡的主要領域。這個時候我們來看UserCF和ItemCF傾向於做出什么推薦。
結果如下,如果用UserCF, 它會將A,B,C三個領域中比較熱門的東西推薦給用戶【這個可以理解,算法會尋找同是喜歡這3個領域的用戶,然后將這3個領域中最相似的物品進行推薦】。而如果用ItemCF,它會基本上只推薦A領域的東西給用戶【A領域在用戶偏好中占大部分,對應item-item相似度占比率大,被推薦概率大】。因為UserCF只推薦熱門的,所以UserCF在推薦長尾上能力不足。而ItemCF只推薦A領域給用戶,這樣他有限的推薦列表中就可能包含了一定數量的不熱門item,所以ItemCF推薦長尾的能力比較強。不過ItemCF的推薦對某一個用戶而言,顯然多樣性不足。但是對整個系統而言,因為不同的用戶的主要興趣點不同,所以系統的coverage會很大。【終於明白了覆蓋率大的含義】
顯然上面的兩種推薦都有其合理性,但都不是最好的選擇,因此他們的精度也會有損失。最好的選擇是,如果我們給這個用戶推薦30個item,我們既不是每個領域挑選10個最熱門的給他,也不是推薦30個A領域的給他,而是比如推薦15個A領域的給他,剩下的15個從B,C中選擇。【這個在實際應用中就不是很容易做到了,如何將用戶興趣分類?使用圖論,連接矩陣將用戶興趣偏好識別?與其這樣,還不如先將數據進行社區聚類,將數據根據圖划分為幾個小團體,針對小團體做推薦,這樣就比如將只有上面提及的3中興趣愛好的人組成的社區里面進行推薦。至於算法,小團體里大家都差不多,對應偏好矩陣稠密度較高,2個算法差距應該不大吧,具體有待考究】
認識到這一點,可以給我們設計高精度的算法指明一個方向。就是當一個系統對個人推薦的多樣性不足時,我們增加個人推薦的多樣性可以提高精度。而當一個系統的整體多樣性不足(比如只推薦popular的),我們增加整體的多樣性同樣可以提高精度。