1. 推薦系統是什么?
推薦系統又叫個性化推薦系統,它會基于用戶行為數據或物品數據,通過一定的算法,為用戶推薦符合他需求的物品。
試想一下這樣的場景,我們有一個電商網站,有數千萬種商品。有一天,進來了三個客人,A是電子產品發燒友,B是化妝品愛好者,C超級愛買書。他們想買一些符合自己喜好的商品,但是看到密密麻麻的分類列表,大腦有點轉不過來。我們呢,想最快的把商品推到他們眼前,最好能讓他們第一眼就看到自己最喜歡的商品,但是我們不知道他們喜歡什么,全都推給他們顯得太熱情了,只挑一部分又有可能選不到他們喜 歡的東西。
唉,怎么辦。
還好我們有推薦系統。
推薦系統是一種工具,它可以基于用戶的歷史行為數據或物品數據,通過一定的算法,為用戶推薦符合需求的物品。
它主要解決兩個問題,一個是信息過載,一個是用戶需求的多樣性。(一般來說,只有同時滿足這兩個條件時,才會使用推薦系統,不然可能適得其反。)
2. 如何評價一個推薦系統好不好?
一個完整的推薦系統一般包含三個參與方:用戶、內容提供方、網站。例如用戶希望看到自己喜歡的內容,內容提供方希望將內容全面的推送到用戶側
,網站則需要平衡兩者關系,達到利益最大化。一個好的推薦系統應該能夠平衡三方的需求。
2.1 實驗
在介紹推薦系統的指標之前,先說一下可以獲得這些指標的方法。主要有三種:離線實驗,用戶調查,在線實驗。
2.1.1 離線實驗
離線實驗是本次介紹推薦系統中用到最多的驗證方式,簡單方便,綠色無污染。
步驟:
- 通過日志系統獲得用戶行為數據,按照一定的格式生成一個標準的數據集
- 將數據集按照一定的規則分成訓練集的和測試集
- 在訓練集上訓練用戶興趣模型,在測試集上進行預測
- 通過事先定義的離線指標評測算法在測試集上的預測結果
優點:
- 不需要真實用戶的參與
- 速度快,可以測試大量算法
缺點:
- 無法計算商業關心的指標,例如點擊率、轉化率等
2.1.2 用戶調查
由于離線試驗的指標與商業指標存在差異,高準確率不等于高用戶滿意度。所以,想要準確的評測一個算法,需要相對比較真實的環境。最好的方法就是直接上線測試,而由于無法確定算法的影響,上線測試會有比較大的風險,這時,我們的用戶調查就派上用場了。
用戶調查是推薦系統評測的一個重要工具,很多離線試驗無法獲得的主觀感受指標都可以通過用戶調查獲得。
這個相信大家都不陌生,大致和產品的用戶調查差不多,盡量保證雙盲實驗,盡量使用多樣用戶群,并保證用戶屬性的平衡。
2.1.3 在線實驗
在線實驗就是大殺器了,它可以統計到最真實的用戶反饋和商業指標。在完成必要的離線試驗和用戶調查后,可以采用AB測試的方式比較新舊算法。
AB測試相信大家也不陌生,它是一種比較常用的在線評測方法,通過一定的規則將用戶分成幾組,對不同組的用戶采用不同的算法。詳細信息網上有大量介紹,這里先不提咯。
2.2 評測指標
接下來就是由這些驗證方法得出的評測指標:
2.2.1 用戶滿意度
用戶滿意度當然是推薦系統最重要的指標,用戶中心不用多說。但是,用戶滿意度無法離線計算,只能通過用戶調查或在線實驗得到。
2.2.2 預測準確度
這個是度量推薦系統預測用戶行為的能力,是最重要的離線評測方法。由于離線的推薦算法有不同的研究方向,因此他們的預測準確度指標也不盡相同。
2.2.2.1 評分預測
評分預測是指用戶會對一個物品產生怎樣的評分。例如在豆瓣電影中,用戶會給點擊打幾分。
2.2.2.2 TopN 推薦
TopN 推薦是指,用戶會不會對物品感興趣。例如在豆瓣電影中,用戶對電影標記了「想看」。
TopN 推薦有兩個重要指標:準確率和召回率。
-
準確率(Precision)
準確率是指,為用戶推薦且用戶感興趣的物品,在推薦結果列表中所占的比例。 -
召回率(Recall)
召回率是指,為用戶推薦且用戶感興趣的物品,在用戶感興趣的所有物品列表中所占得比例。
這兩個參數很重要,以后我們還會在看到的:D
**2.2.3 **覆蓋率(****coverage****)
覆蓋率描述推薦系統對長尾的發掘能力。覆蓋率沒有唯一的定義方法,一個簡單的定義是,推薦列表中的物品占總物品數的比例。
** 2.2.4 **多樣性
** 2.2.5 **新穎性
** 2.2.6 **驚喜度
** 2.2.7 **實時性
** 2.2.8 **健壯性
唉好晚了……這幾個指標稍后補充
3. 推薦系統的類別及原理
3.1 協同過濾推薦(collaborative filtering recommendation)
協同過濾可以說是推薦系統的鼻祖,是推薦系統中最成功的策略,它于20世紀90年代開始研究并促進了整個推薦系統研究的繁榮。
協同過濾算法分為兩大類,分別為基于用戶的協同過濾(UserCF)和基于物品的協同過濾(ItemCF)。
** 3.1.1 基于用戶的協同過濾(UserCF)**
初入職場,很多新人都會問前輩相似的問題,例如“我應該看一些什么資料”、“我應該朝那個方向發展”等。這個時候,前輩會給他們做一些推薦。這就是個性化推薦的一個栗子。在這個栗子中,新人之所以問前輩,是因為他們有社會關系,并信任彼此,但更重要的是,前輩有著相似的經驗,他們的發展是相似的。在個性化推薦系統中,當為用戶 A 進行推薦時,可以找到和用戶 A 興趣相似的用戶,把這些用戶喜歡的東西推薦給 A。這種方法就叫做 UserCF 。
UserCF 的主要有兩個步驟:
- 找出距離用戶最近的鄰居用戶
- 對鄰居用戶相似度和鄰居用戶感興趣的項目進行評價,輸出推薦列表
具體過程類似于這樣:
自己看還好好的……導到這里咋這樣了
其中的核心工作是定義用戶的相似度。主要有兩種方法:基于關聯的方法(correlation-based)和基于余弦距離的方法(cosine-based)。他們通過用戶對物品的歷史行為,例如評分、訪問、下單、收藏等等行為,判斷用戶之間的相似情況。具體的公式這里暫不展開,需要的同學應該也不會看這篇文章……網上有很多介紹。
結果
在書中對 MovieLens 數據集的試驗中,相比于完全隨機推薦和完全熱門排行,UserCF 在準確率與召回率上的提升都非常顯著。在覆蓋率上,UserCF 高于熱門排行,符合預期。但在流行度上,由于 UserCF 是在參考臨近用戶群中被喜歡的物品,而且物品越熱門,就會被更多人喜歡,從而更利于被算法推薦。
** 優化**
上文提到,越熱門的物品會越容易得到推薦,如果這種情況一直發生,會導致更多的連鎖反應,使熱門內容越來越熱門,持續優先出現在推薦結果中。同時,相對于熱門內容,用戶對冷門內容的喜好更容易反映他們的興趣相似性。所以,我們可以降低熱門內容的權重,或過濾熱門內容,提高推薦系統的性能。
** 3.1.2 基于物品的協同過濾(ItemCF)**
ItemCF 可能是目前業界應用最多的算法,無論是亞馬遜,還是 Netflix、Hulu、YouTube,其算法基礎都是 ItemCF。(書里說的)
ItemCF 的原理是,為用戶推薦那些和他之前喜歡的物品相似的物品。例如,算法可能會因為用戶買過《推薦系統實踐》而為用戶推薦《推薦系統》。需要注意的是,ItemCF 不是根據物品本身的內容來進行相似度匹配,而是通過用戶對物品的行為數據計算物品之間的相似度。算法認為,物品 A 與物品 B 相似的原因是喜歡物品 A 的用戶大多也喜歡物品 B。
ItemCF 主要也是兩個步驟:
- 找到距離物品最近的鄰居物品
- 對鄰居物品的相似度和用戶興趣進行評價,輸出推薦列表
圖和上面一樣:
ItemCF 和 UserCF 的方法很相似,其核心工作是定義物品的相似度,也是有兩種方法……(也是和上面一樣)
** 結果**
在書中對 MovieLens 數據集的實驗中,可以看出,盡管計算過程中沒有利用任何內容數據,具有同種屬性(例如同系列、同主角、同導演等)的電影仍然表現出較大的相似度。
** 優化**
就像 UserCF 一樣,過于活躍的用戶也會對物品的相似度判定造成影響,例如一個用戶標記了產品中80%的物品,那么由于這種行為,80%的物品就會產生兩兩之間的相似度,如果物品量足夠大,很有可能形成一個很大的稠密矩陣。所以,我們可以通過懲罰活躍用戶的方式來優化推薦結果。經驗證,這種優化能提高算法的覆蓋率,降低流行度。
歸一化。假設物品分為兩類,A 和 B,A 類的物品之間相似度為0.5,B 類物品之間的相似度為0.6,而 A 類物品和 B 類物品之間的相似度為0.2。在這種情況下,如果一個用戶喜歡了5個 A 類物品和5個 B 類物品,我們用 ItemCF 為其推薦,推薦的結果就會都是 B 類物品——因為 B 類物品的相似度較大。
但這個不合理啊。
歸一化之后,A 類物品與 B 類物品自身的相似度都變成1,那么推薦結果中 A 類物品和 B 類物品的量就會大致相等。經驗證,歸一化對推薦算法的準確率和覆蓋率都有有效提升。
3.1.3 UserCF 和 ItemCF 的比較
** 從原理上看:**
UserCF 以用戶為基礎,通過鄰居用戶來匹配物品,是一種興趣圈子內的推薦,注重于興趣圈內的熱點;ItemCF 以物品為基礎,通過鄰居物品匹配物品,注重于維系用戶的歷史興趣。也就是說,UserCF 更加社會化和熱門,ItemCF 更加個性化和封閉。
從技術上看:
UserCF 需要維護一個用戶相似度的矩陣,ItemCF 需要維護一個物品相似度矩陣。如果用戶很多,那么維護用戶相似度矩陣就需要很大的空間;如果物品很多,維護物品相似度矩陣也會花費較大代價。所以 UserCF 適合用戶量較少的產品,ItemCF 適合物品量較少的產品。
具體到指標時:
兩種算法的準確率和召回率相差不大,不過在覆蓋率上,UserCF 會明顯小于 ItemCF,原因是 UserCF 會推薦小群體中的熱門物品,而 ItemCF 會基于歷史興趣,推薦物品關聯的結果(有可能出現冷門內容)。這樣看來,雖然在整體上 ItemCF 的覆蓋率較高,但是對于用戶來說,物品的多樣性反而可能更低。
關于冷啟動:
如果新用戶對某些產品產生了行為,在 UserCF中,是不能立即更新推薦列表的,因為用戶相似度需要每隔一段時間離線計算;而在 ItemCF 中,用戶只要對一個物品產生行為,就可以為他推薦類似的物品,例如亞馬遜的「買過 XXX 的人也買」。
當物品上線一段時間后,在 UserCF 中,一旦用戶對新品產生行為,就可以將新品推薦給相似用戶;而在 ItemCF 中,沒有辦法在不離線更新物品相似度的情況下將物品推薦給用戶。
也就是說:
兩種算法都不完美,應該具體到每個產品去決定用哪種基礎算法。在常見的產品中,個人感覺 ItemCF 的應用比較多(如果它們用的是 CF 的話),例如淘寶的物品推薦、今日頭條的新聞推薦、百度的廣告、亞馬遜的商品推薦等;似乎豆瓣電影的豆瓣猜是用的 UserCF?不太確定。
3.2 基于內容的推薦(content-based recommendation)
基于內容的推薦是指根據用戶選擇的物品,推薦其他有類似屬性的物品。它不同于 ItemCF,通過物品的特征屬性來判定物品之間的相似度,再根據用戶歷史行為的特征分析,得到推薦結果。例如在進行電影的推薦時,分析用戶之前選擇的電影的共性,得到用戶的興趣特征,再與電影的特征作匹配。
此種推薦算法的關鍵工作有兩項,一是物品特征的描述,二是用戶模型的確定。
目前,對于物品特征描述,對文字的特征提取方法比較成熟,但對于多媒體的提取仍然不理想。幸好,我們還可以采用專家標記特征和用戶標記特征的方法。據說 Spotify 成立時,就采用了專家標記特征的方式,做基于內容的推薦,同時還可以解決冷啟動問題;豆瓣的物品標簽是用戶標記特征的一個例子,通過用戶標記的標簽,組織內容推薦。
3.3 基于知識的推薦(knowledge-based recommendation)
這部分還沒太看懂,個人認為基于知識的推薦就像一個有限狀態機,需要對每種場景定制推薦規則。以后完善。
3.4 組合推薦(hybrid recommendation)
由于每種推薦算法都存在各自的優缺點,如果能把他們的優點相融合,有可能得到優于每種單一算法的結果。其中研究最多的是內容推薦和協同過濾的融合。
融合方式大致可以分為三類:
- 分別使用每種算法,得出結果后對結果進行排序、挑選、融合;
- 使用一種主算法搭建框架,將其它算法融合進去,再進行推薦;
- 將幾種算法整合在一個框架內,在統一的模型下進行推薦。
個人感覺組合推薦效果會更好,但是沒有找到過多實例證明。待以后補充。