1. 程式人生 > >[推薦系統讀書筆記]好的推薦系統

[推薦系統讀書筆記]好的推薦系統

什麼是推薦系統

information overload資訊過載時代: 資訊爆炸。

在這個時代,無論是資訊消費者還是資訊生產者都遇到了很大的挑戰:作為資訊消費者,如何從大量資訊中找到自己感興趣的資訊是一件非常困難的事情;作為資訊生產者,如何讓自己生產的資訊脫穎而出,受到廣大使用者的關注,也是一件非常困難的事情。推薦系統就是解決這一矛盾的重要工具。

長尾理論long tail: 傳統的80/20原則(80%的銷售額來自於20%的熱門品牌)在網際網路的加入下會受到挑戰。網際網路條件下,由於貨架成本極端低廉,電子商務網站往往能出售比傳統零售店更多的商品。雖然這些商品絕大多數都不熱門,但與傳統零售業相比,這些不熱門的商品數量極其龐大,因此這些長尾商品的總銷售額將是一個不可小覷的數字,也許會超過熱門商品(即主流商品)帶來的銷售額。

推薦系統就是自動聯絡使用者和物品的一種工具,它能夠在資訊過載的環境中幫助使用者發現令他們感興趣的資訊,也能將資訊推送給對它們感興趣的使用者

個性化推薦系統的應用

  1. 電子商務
  2. 電影和視訊網站
  3. 個性化音樂網路電臺:豆瓣、網易雲音樂私人電臺
  4. 社交網路
  5. 個性化閱讀
  6. 基於位置的服務
  7. 個性化郵件
  8. 個性化廣告

推薦系統評測

一個完整的推薦系統一般存在3個參與方:使用者、物品提供者和提供推薦系統的網站。

為了全面評測推薦系統對三方利益的影響,提出了不同的指標,包括準確度、覆蓋度、新穎度、驚喜度、信任度、透明度等。這些指標中,有些可以離線計算,有些只有在線才能計算,有些只能通過使用者問卷獲得。

推薦系統實驗方法

在推薦系統中主要有3種評測推薦效果的試驗方法:離線實驗、線上實驗和使用者調查。

1.離線實驗

離線實驗的方法一般由如下幾個步驟構成:

  • 通過日誌系統獲得使用者行為資料,並按照一定格式生成一個標準的資料集;
  • 將資料集按照一定的規則分成訓練集和測試集;
  • 在訓練集上訓練使用者興趣模型,在測試集上進行預測;
  • 通過事先定義的離線指標評測演算法在測試集上的預測結果。

推薦系統的離線實驗都是在資料集上完成的,不需要一個實際的系統來供它實驗,只要由一個從實際系統日誌中提取的資料集即可。
好處:不需要真實使用者參與,可以直接快速地計算出來,從而方便、快速地測試大量不同的演算法。
缺點:

無法獲得很多商業上關注的指標,如點選率、轉換率等,而找到和商業指標非常相關的離線指標也是很困難的事情。
離線實驗的優缺點
|優點|缺點|
|:--:|:--:|
|不需要有對實際系統的控制權|無法計算商業上關心的指標|
|不需要使用者參與實驗|離線實驗的指標和商業指標存在差距|
|速度快,可以測試大量演算法||

機器學習上的評測指標大部分都是離線指標,只需要訓練模型和資料集即可計算。

2.使用者調查

如果要準確評測一個演算法,需要相對比較真實的環境。最好的方法就是講演算法直接上線測試,但在對演算法會不會降低使用者滿意度不大有把握的情況下,上線測試具有較高的風險,所以在上線測試前一般需要做一次稱為使用者調查的測試。

使用者調查需要有一些真實使用者,讓他們在需要測試的推薦系統上完成一些任務。在他們完成任務時,需要觀察和記錄他們的行為,並讓他們回答一些問題。最後,需要通過分析他們的行為和答案瞭解測試系統的效能。[最常見的是問卷調查]

使用者調查是推薦系統評測的一個重要工具,很多離線時沒有辦法評測的與使用者主觀感受有關的指標都可以通過使用者調查獲得。
使用者調查也有一些缺點。首先,使用者調查成本很高,需要使用者花大量時間完成一個個任務,並回答相關的問題。有些時候,還需要花錢僱用測試使用者。因此,大多數情況下很難進行大規模的使用者調查,而對於參加人數較少的使用者調查,得出的很多結論往往沒有統計意義。因此,我們在做使用者調查時,一方面要控制成本,另一方面又要保證結果的統計意義

使用者調查優點:
可以獲得很多體現使用者主觀感受的指標,相對線上實驗風險很低,出現錯誤後很容易彌補。
缺點是:
招募測試使用者代價較大,很難組織大規模的測試使用者,因此會使測試結果的統計意義不足。此外,在很多時候設計雙盲實驗非常困難,而且使用者在測試環境下的行為和真實環境下的行為可能有所不同,因而在測試環境下收集的測試指標可能在真實環境下無法重現。

3.線上實驗

在完成離線實驗和必要的使用者調查後,可以將推薦系統上線做AB測試,將它和舊的演算法進行比較。

AB測試是一種很常用的線上評測演算法的試驗方法。它通過一定的規則將使用者隨機分成幾組,並對不同組的使用者採用不同的演算法,然後通過統計不同組使用者的各種不同的評測指標比較不同演算法,比如可以統計不同組使用者的點選率,通過點選率比較不同演算法的效能。

AB測試就像是一種對比實驗

AB測試的優點是可以公平獲得不同演算法實際線上時的效能指標,包括商業上關注的指標。AB測試的缺點主要是週期比較長,必須進行長期的實驗才能得到可靠的結果。因此一般不會用AB測試測試所有的演算法,而只是用它測試那些在離線實驗和使用者調查中表現很好的演算法。其次,一個大型網站的AB測試系統的設計也是一項複雜的工程。

一般來說,一個新的推薦演算法最終上線,需要完成上面所說的3個實驗:

  • 首先,需要通過離線實驗證明它在很多離線指標上優於現有的演算法;
  • 然後,需要通過使用者調查確定它的使用者滿意度不低於現有的演算法;
  • 最後,通過線上的AB測試確定它在我們慣性的指標上優於現有的演算法。

評測指標

1.使用者滿意度

使用者作為推薦系統的重要參與者,其滿意度是評測推薦系統的最重要指標。但是使用者滿意度沒有辦法離線計算,只能通過使用者調查或者線上實驗獲得
使用者調查獲得使用者滿意度主要是通過調查問卷的形式。使用者對推薦系統的滿意度分為不同的層次。
在線上系統中,使用者滿意度主要通過一些對使用者行為的統計得到。比如在電子商務網站中,使用者如果購買了推薦的商品,就表示他們在一定成都上滿意。因此,可以利用購買率度量使用者的滿意度。
更一般的情況下,可以用點選率、使用者停留時間和轉化率等指標度量使用者的滿意度。

2.預測準確度

預測準確度度量一個推薦系統或者推薦演算法預測使用者行為的能力。這個指標是最重要的推薦系統離線評測指標。主要是因為該指標可以通過離線實驗計算。
在計算該指標時需要有一個離線的資料集,該資料集包含使用者的歷史行為記錄。然後,將該資料集通過時間分成訓練集和測試集。最後,通過在訓練集上建立使用者的行為和興趣模型預測使用者在測試集上的行為,並計算預測行為和測試集上實際行為的重合度作為預測準確度。

評分預測
預測使用者對物品評分的行為稱為評分預測:如果知道了使用者對物品的歷史評分,就可以從中習得使用者的興趣模型,並預測該使用者在將來看到一個他沒有評過分的物品時,會給這個物品評多少分。
評分預測的預測準確度一般通過均方誤差RMSE和平均絕對誤差MAE計算。

關於RMSE和MAE這兩個指標的優缺點,Netflix認為RMSE加大了對預測不準的使用者物品評分的懲罰(平方項的懲罰),因而對系統的評測更加苛刻。研究表明,如果評分系統是基於整數建立的(即使用者給的評分是整數),那麼對預測結果取整可能會降低MAE的誤差。

TopN推薦
網站在提供推薦服務時,一般是給使用者一個個性化的推薦列表,這種推薦叫TopN推薦。TopN推薦的預測準確率一般通過準確率precision/召回率recall度量。

def PrecisionRecall(test, N):
    hit = 0
    n_recall = 0
    n_precision = 0
    for user, items in test.items():
        rank = Recommend(user, N)
        hit += len(rank & items) #重合項
        n_recall += len(items) #資料集長度
        n_precision += N #預測長度
    return [hit / (1.0 * n_recall), hit / (1.0 * n_precision)]

有的時候,為了全面評測TopN推薦的準確率和召回率,一般會選擇不同的推薦列表長度N,計算出一組準確率/召回率,然後畫出準確率/召回率曲線。

3.覆蓋率:針對物品

覆蓋率描述一個推薦系統對物品長尾的發掘能力。覆蓋率有不同的定義方法,最簡單的定義為推薦系統能夠推薦出來的物品站總物品集合的比例。
覆蓋率是一個內容提供商會關心的指標。以圖書推薦為例,出版社可能會很關心他們的書有沒有被推薦給使用者。覆蓋率為100%的推薦系統可以將每個物品都推薦給至少一個使用者[從定義得到]。一個好的推薦系統不僅需要有比較高的使用者滿意度,也要有較高的覆蓋率。

覆蓋率為100%的系統可以有無數的物品流行度分佈。為了更細緻地描述推薦系統發掘長尾的能力,需要統計推薦列表中不同物品出現次數的分佈。如果所有物品都出現在推薦列表中,且出現的次數差不多,那麼推薦系統發掘長尾的能力就很好。
可以通過研究物品在推薦列表中出現次數的分佈描述推薦系統挖掘長尾的能力----如果這個分佈比較平,說明推薦系統的覆蓋率比較高;如果分佈較陡峭,說明推薦系統的覆蓋率較低。
在資訊理論和經濟學中有兩個著名的指標可以用來定義覆蓋率[都是越小越好,描述分佈的平均程度]。第一個是資訊熵:
\(H = -\sum_{i=1}^{n}p(i)logp(i)\)
這裡p(i)是物品i的流行度除以所有物品流行度之和。
第二個指標是基尼指數:
\(G = 1/(n-1) \sum_{j=1}^{n}(2j-n-1)p(i_j)\)
這裡,\(i_j\)是按照物品流行度p()從小到大排序的物品列表中第j個物品。

4.多樣性

為了滿足使用者廣泛的興趣,推薦列表需要能夠覆蓋使用者不同的興趣領域,即推薦結果需要具有多樣性。
多樣性描述了推薦列表中物品兩兩之間的不相似性多樣性和相似性是相對的
推薦系統的整體多樣性可以定義為所有使用者推薦列表多樣性的平均值。
不同的物品相似度度量函式s(i,j)可以定義不同的多樣性:如果用內容相似度描述物品間的相似度,可以得到內容多樣性函式;如果用協同過濾的相似度函式描述物品間相似度,得到協同過濾的多樣性函式。

5.新穎性

新穎的推薦是指給使用者推薦那些他們以前沒有聽說過的物品
在一個網站中實現新穎性的最簡單辦法是,把那些使用者之前在網站中對其有所行為的物品從推薦列表中過濾掉。比如在一個視訊網站中,新穎的推薦不應該給使用者推薦那些他們已經看過、打過分或者瀏覽過的視訊。

6.驚喜度

驚喜度和新穎性有什麼區別是首先需要弄清楚的問題。
可以舉一個例子說明這兩種指標的區別。假設一名使用者喜歡周星馳的電影,然後我們給他推薦了一部叫做《臨歧》的電影(該電影是 1983 年由劉德華、周星馳、梁朝偉合作演出的,很少有人知道這部有周星馳出演的電影),而該使用者不知道這部電影,那麼可以說這個推薦具有新穎性。但是,這個推薦並沒有驚喜度,因為該使用者一旦瞭解了這個電影的演員,就不會覺得特別奇怪。但如果我們給使用者推薦張藝謀導演的《紅高粱》,假設這名使用者沒有看過這部電影,那麼他看完這部電影后可能會覺得很奇怪,因為這部電影和他的興趣一點關係也沒有,但如果使用者看完電影后覺得這部電影很不錯,那麼就可以說這個推薦是讓使用者驚喜的。
如果推薦結果和使用者的歷史興趣不相似,但卻讓使用者覺得滿意,那麼就可以說推薦結果的驚喜度很高,而推薦的新穎性僅僅取決於使用者是否聽說過這個推薦結果。

目前並沒有公認的驚喜度指標定義方式,只給出一種定性的度量方式。提高推薦驚喜度需要提高推薦結果的使用者滿意度,同時降低推薦結果和使用者歷史興趣的相似度。

7.信任度

如果使用者信任推薦系統,那就會增加使用者和推薦系統的互動。特別是在電子商務推薦系統中,讓使用者對推薦結果產生信任是非常重要的。同樣的推薦結果,以讓使用者信任的方式推薦給使用者就更能讓使用者產生購買慾,而以類似廣告形式的方法推薦給使用者就可能很難讓使用者產生購買的意願。

度量推薦系統的信任度只能通過問卷調查的方式,詢問使用者是否信任推薦系統的推薦結果。

提高推薦系統信任度主要有兩種方法。首先需要增加推薦系統的透明度,而增加推薦系統的透明度的主要辦法是提供推薦解釋。只有讓使用者瞭解推薦系統的執行機制,讓使用者認同推薦系統的執行機制,才會提高使用者對推薦系統的信任度。
其次是考慮使用者的社交網路資訊,利用使用者的好友資訊給使用者做推薦,並且用好友進行推薦解釋。

8.實時性

在很多網站中,物品(新聞、微博)具有很強的時效性,所以需要在物品還具有時效性時就推薦給使用者。

推薦系統的實時性包括兩個方面、首先,推薦系統需要實時地更新推薦列表來滿足使用者新的行為變化。實時性的第二個方面是推薦系統需要能夠將新加入系統的物品推薦給使用者。這主要考驗推薦系統處理物品冷啟動的能力。

9.健壯性

任何一個能帶來利用的算法系統都會被人攻擊,最典型的例子就是搜尋引擎。健壯性指標衡量一個推薦系統抗擊作弊的能力
推薦系統中最終名的作弊方法就是行為注入攻擊。比如豆瓣的電影評分,攻擊方法是僱傭水軍給電影非常高的評分,評分行為是推薦系統依賴的重要使用者行為。

演算法健壯性評測主要利用模擬攻擊。首先,給定一個數據集和一個演算法,可以用這個演算法給這個資料集中的使用者生成推薦列表。然後,用常用的攻擊方法向資料集中注入噪聲資料,然後利用演算法在注入噪聲後的資料集上再次給使用者生成推薦列表。最後,通過比較攻擊前後推薦列表的相似度評測演算法的健壯性。如果攻擊後的推薦列表相對於攻擊前沒有發生大的變化,就說明演算法比較健壯。

10.商業目標

很多時候,網站評測推薦系統更加註重網站的商業目標是否達成,而商業目標和網站的盈利模式是息息相關的。

不同的網站具有不同的商業目標。比如電子商務網站的目標可能是銷售額,基於點選廣告盈利的網站其商業目標可能是廣告點選總數。因此,設計推薦系統時需要考慮最終的商業目標,而網站使用推薦系統的目的除了滿足使用者發現內容的需求,也需要利用推薦系統加快實現商業上的指標

評測維度

增加評測維度的目的瞭解一個演算法在什麼情況下效能最好,可以為融合不同推薦演算法取得最好的整體效能帶來參考。

一般來說,評測維度分為3種:

  • 使用者維度: 主要包括使用者的人口統計學資訊、活躍度以及是不是新使用者等;
  • 物品維度: 包括物品的屬性資訊、流行度、平均分以及是不是新加入的物品等;
  • 時間維度: 包括季節,是工作日還是週末,是白天還是晚上。

如果能夠在推薦系統評測報告中包含不同維度下的系統評測指標,就能幫我們全面地瞭解推薦系統性能,找到比較弱的演算法的優勢,發現比較強的演算法的缺點。