推薦系統從入門到繼續入門(一)

1. 推薦系統是什么?

推薦系統又叫個性化推薦系統,它會基于用戶行為數據或物品數據,通過一定的算法,為用戶推薦符合他需求的物品。

試想一下這樣的場景,我們有一個電商網站,有數千萬種商品。有一天,進來了三個客人,A是電子產品發燒友,B是化妝品愛好者,C超級愛買書。他們想買一些符合自己喜好的商品,但是看到密密麻麻的分類列表,大腦有點轉不過來。我們呢,想最快的把商品推到他們眼前,最好能讓他們第一眼就看到自己最喜歡的商品,但是我們不知道他們喜歡什么,全都推給他們顯得太熱情了,只挑一部分又有可能選不到他們喜 歡的東西。

唉,怎么辦。

還好我們有推薦系統。

推薦系統是一種工具,它可以基于用戶的歷史行為數據或物品數據,通過一定的算法,為用戶推薦符合需求的物品。

它主要解決兩個問題,一個是信息過載,一個是用戶需求的多樣性(一般來說,只有同時滿足這兩個條件時,才會使用推薦系統,不然可能適得其反。)

2. 如何評價一個推薦系統好不好?

一個完整的推薦系統一般包含三個參與方:用戶、內容提供方、網站。例如用戶希望看到自己喜歡的內容,內容提供方希望將內容全面的推送到用戶側
,網站則需要平衡兩者關系,達到利益最大化。一個好的推薦系統應該能夠平衡三方的需求。

2.1 實驗

在介紹推薦系統的指標之前,先說一下可以獲得這些指標的方法。主要有三種:離線實驗,用戶調查,在線實驗。

2.1.1 離線實驗

離線實驗是本次介紹推薦系統中用到最多的驗證方式,簡單方便,綠色無污染。

步驟:

  1. 通過日志系統獲得用戶行為數據,按照一定的格式生成一個標準的數據集
  2. 將數據集按照一定的規則分成訓練集的和測試集
  3. 在訓練集上訓練用戶興趣模型,在測試集上進行預測
  4. 通過事先定義的離線指標評測算法在測試集上的預測結果

優點:

  • 不需要真實用戶的參與
  • 速度快,可以測試大量算法

缺點:

  • 無法計算商業關心的指標,例如點擊率、轉化率等
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 的主要有兩個步驟:

  1. 找出距離用戶最近的鄰居用戶
  2. 對鄰居用戶相似度和鄰居用戶感興趣的項目進行評價,輸出推薦列表

具體過程類似于這樣:

本地挺好的咋傳上來就這樣了呢

自己看還好好的……導到這里咋這樣了

其中的核心工作是定義用戶的相似度。主要有兩種方法:基于關聯的方法(correlation-based)和基于余弦距離的方法(cosine-based)。他們通過用戶對物品的歷史行為,例如評分、訪問、下單、收藏等等行為,判斷用戶之間的相似情況。具體的公式這里暫不展開,需要的同學應該也不會看這篇文章……網上有很多介紹。

結果
本地挺好的咋傳上來就這樣了呢

在書中對 MovieLens 數據集的試驗中,相比于完全隨機推薦和完全熱門排行,UserCF 在準確率與召回率上的提升都非常顯著。在覆蓋率上,UserCF 高于熱門排行,符合預期。但在流行度上,由于 UserCF 是在參考臨近用戶群中被喜歡的物品,而且物品越熱門,就會被更多人喜歡,從而更利于被算法推薦。

** 優化**

上文提到,越熱門的物品會越容易得到推薦,如果這種情況一直發生,會導致更多的連鎖反應,使熱門內容越來越熱門,持續優先出現在推薦結果中。同時,相對于熱門內容,用戶對冷門內容的喜好更容易反映他們的興趣相似性。所以,我們可以降低熱門內容的權重,或過濾熱門內容,提高推薦系統的性能。

** 3.1.2 基于物品的協同過濾(ItemCF)**

ItemCF 可能是目前業界應用最多的算法,無論是亞馬遜,還是 Netflix、Hulu、YouTube,其算法基礎都是 ItemCF。(書里說的)

ItemCF 的原理是,為用戶推薦那些和他之前喜歡的物品相似的物品。例如,算法可能會因為用戶買過《推薦系統實踐》而為用戶推薦《推薦系統》。需要注意的是,ItemCF 不是根據物品本身的內容來進行相似度匹配,而是通過用戶對物品的行為數據計算物品之間的相似度。算法認為,物品 A 與物品 B 相似的原因是喜歡物品 A 的用戶大多也喜歡物品 B。

ItemCF 主要也是兩個步驟:

  1. 找到距離物品最近的鄰居物品
  2. 對鄰居物品的相似度和用戶興趣進行評價,輸出推薦列表

圖和上面一樣:

ItemCF 和 UserCF 的方法很相似,其核心工作是定義物品的相似度,也是有兩種方法……(也是和上面一樣)

** 結果**

在書中對 MovieLens 數據集的實驗中,可以看出,盡管計算過程中沒有利用任何內容數據,具有同種屬性(例如同系列、同主角、同導演等)的電影仍然表現出較大的相似度。

** 優化**
  1. 就像 UserCF 一樣,過于活躍的用戶也會對物品的相似度判定造成影響,例如一個用戶標記了產品中80%的物品,那么由于這種行為,80%的物品就會產生兩兩之間的相似度,如果物品量足夠大,很有可能形成一個很大的稠密矩陣。所以,我們可以通過懲罰活躍用戶的方式來優化推薦結果。經驗證,這種優化能提高算法的覆蓋率,降低流行度。

  2. 歸一化。假設物品分為兩類,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)

由于每種推薦算法都存在各自的優缺點,如果能把他們的優點相融合,有可能得到優于每種單一算法的結果。其中研究最多的是內容推薦和協同過濾的融合。

融合方式大致可以分為三類:

  1. 分別使用每種算法,得出結果后對結果進行排序、挑選、融合;
  2. 使用一種主算法搭建框架,將其它算法融合進去,再進行推薦;
  3. 將幾種算法整合在一個框架內,在統一的模型下進行推薦。

個人感覺組合推薦效果會更好,但是沒有找到過多實例證明。待以后補充。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內容