1. 程式人生 > >推薦系統實踐——第1章 好的推薦系統

推薦系統實踐——第1章 好的推薦系統

文章目錄

1. 什麼是推薦系統

1.1 推薦系統任務

推薦系統的任務就是聯絡使用者和資訊,一方面幫助使用者發現對自己有價值的資訊,另一方面讓資訊能夠展現在對它感興趣的使用者面前,從而實現資訊消費者和資訊生產者的雙贏(如圖1-1所示)。(本書後面將資訊統稱為“物品”,即可以供使用者消費的東西。)

在這裡插入圖片描述

圖1-1 推薦系統的基本任務是聯絡使用者和物品,解決資訊過載的問題

推薦系統通過發掘使用者的行為,找到使用者的個性化需求,從而將長尾商品準確地推薦給需要它的使用者,幫助使用者發現那些他們感興趣但很難發現的商品。

1.2 推薦系統方式

  1. 社會化推薦 (social recommendation)
  2. 基於內容的推薦 (content_based filtering)
  3. 基於協同過濾 (collaborative filtering)

1.3 什麼是推薦系統

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

2. 個性化推薦系統的應用

在網際網路的各類網站中都可以看到推薦系統的應用,而個性化推薦系統在這些網站中的主要作用是通過分析大量使用者行為日誌,給不同使用者提供不同的個性化頁面展示,來提高網站的點選率和轉化率

儘管不同的網站使用不同的推薦系統技術,但總地來說,幾乎所有的推薦系統應用都是由前臺的展示頁面後臺的日誌系統以及推薦算法系統3部分構成的。

  1. 電子商務

    以Amazon為例,亞馬遜的推薦系統深入到了其各類產品中,其中最主要的應用有個性化商品推薦列表相關商品的推薦列表

    其中個性化商品推薦列表採用了一種基於物品的推薦演算法(item-based method)以及基於好友的個性化推薦演算法

  2. 電影和視訊網站

    以Netflix和YouTube為例,兩者主要採用基於物品的推薦演算法(2012年資料)

  3. 個性化音樂網路電臺

    Pandora採用基於內容的推薦演算法,對歌曲進行特徵標註,依據特徵推薦相似歌曲;

    Last.fm採用基於使用者的推薦演算法,給使用者推薦和她有相似聽歌愛好的其他使用者喜歡的歌曲。

  4. 社交網路

  5. 個性化閱讀

  6. 基於位置的服務

  7. 個性化郵件

  8. 個性化廣告

    個性化廣告投放目前已經成為了一門獨立的學科——計算廣告學——但該學科和推薦系統在很多基礎理論和方法上是相通的,比如它們的目的都是聯絡使用者和物品,只是在個性化廣告中,物品就是廣告。

    個性化廣告投放和狹義個性化推薦的區別是,個性化推薦著重於幫助使用者找到可能令他們感興趣的物品,而廣告推薦著重於幫助廣告找到可能對它們感興趣的使用者,即一個是以使用者為核心,而另一個以廣告為核心。目前的個性化廣告投放技術主要分為3種。

    • 上下文廣告 通過分析使用者正在瀏覽的網頁內容,投放和網頁內容相關的廣告。代表系統是谷歌的Adsense。
    • 搜尋廣告 通過分析使用者在當前會話中的搜尋記錄,判斷使用者的搜尋目的,投放和使用者目的相關的廣告。
    • 個性化展示廣告 我們經常在很多網站看到大量展示廣告(就是那些大的橫幅圖片),它們是根據使用者的興趣,對不同使用者投放不同的展示廣告。雅虎是這方面研究的代表。

個性化推薦成功應用必備條件

第一是存在資訊過載,因為如果使用者可以很容易地從所有物品中找到喜歡的物品,就不需要個性化推薦了。

第二是使用者大部分時候沒有特別明確的需求,因為使用者如果有明確的需求,可以直接通過搜尋引擎找到感興趣的物品。

3. 推薦系統評測

一個完整的推薦系統一般存在3個參與方(如圖1-22所示):使用者物品提供者提供推薦系統的網站

在這裡插入圖片描述
圖1-22 推薦系統的參與者

預測準確度是推薦系統領域的重要指標(沒有之一)。

這個指標的好處是,它可以比較容易地通過離線方式計算出來,從而方便研究人員快速評價和選擇不同的推薦演算法。但是,很多研究表明,準確的預測並不代表好的推薦。

好的推薦系統不僅僅能夠準確預測使用者的行為,而且能夠擴充套件使用者的視野,幫助使用者發現那些他們可能會感興趣,但卻不那麼容易發現的東西。同時,推薦系統還要能夠幫助商家將那些被埋沒在長尾中的好商品介紹給可能會對它們感興趣的使用者

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

3.1 推薦系統實驗方法

在推薦系統中,主要有3種評測推薦效果的實驗方法,即離線實驗(offline experiment)使用者調查(user study)線上實驗(online experiment)。下面將分別介紹這3種實驗方法的優缺點。

  1. 離線實驗
    離線實驗的方法一般由如下幾個步驟構成:
    (1) 通過日誌系統獲得使用者行為資料,並按照一定格式生成一個標準的資料集;
    (2) 將資料集按照一定的規則分成訓練集和測試集;
    (3) 在訓練集上訓練使用者興趣模型,在測試集上進行預測;
    (4) 通過事先定義的離線指標評測演算法在測試集上的預測結果。
優點 缺點
不需要有對實際系統的控制權 無法計算商業上關心的指標
不需要使用者參與實驗 離線實驗的指標和商業指標存在差距
速度快,可以測試大量演算法
  1. 使用者調查

    使用者調查原因:

    注意,離線實驗的指標和實際的商業指標存在差距,比如預測準確率和使用者滿意度之間就存在很大差別,高預測準確率不等於高使用者滿意度。因此,如果要準確評測一個演算法,需要相對比較真實的環境。最好的方法就是將演算法直接上線測試,但在對演算法會不會降低使用者滿意度不太有把握的情況下,上線測試具有較高的風險,所以在上線測試前一般需要做一次稱為使用者調查的測試。

    使用者調查方法:

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

    使用者調查優缺點:

    優點:可以獲得很多體現使用者主觀感受的指標,相對線上實驗風險很低,出現錯誤後很容易彌補;

    缺點:招募測試使用者代價較大,很難組織大規模的測試使用者,因此會使測試結果的統計意義不足;在很多時候設計雙盲實驗非常困難,而且使用者在測試環境下的行為和真實環境下的行為可能有所不同,因而在測試環境下收集的測試指標可能在真實環境下無法重現。

  2. 線上實驗

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

    AB測試方法:

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

    AB測試優缺點:

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

    其次,一個大型網站的AB測試系統的設計也是一項複雜的工程。 一個大型網站的架構分前端和後端,從前端展示給使用者的介面到最後端的演算法,中間往往經過了很多層,這些層往往由不同的團隊控制,而且都有可能做AB測試。如果為不同的層分別設計AB測試系統,那麼不同的AB測試之間往往會互相干擾。比如,當我們進行一個後臺推薦演算法的AB測試,同時網頁團隊在做推薦頁面的介面AB測試,最終的結果就是你不知道測試結果是自己演算法的改變,還是推薦介面的改變造成的。

    因此,切分流量是AB測試中的關鍵,不同的層以及控制這些層的團隊需要從一個統一的地方獲得自己AB測試的流量,而不同層之間的流量應該是正交的。

    AB測試系統流程:

    圖1-23是一個簡單的AB測試系統。

    • 使用者進入網站後,流量分配系統決定使用者是否需要被進行AB測試,如果需要的話,流量分配系統會給使用者打上在測試中屬於什麼分組的標籤。
    • 然後使用者瀏覽網頁,而使用者在瀏覽網頁時的行為都會被通過日誌系統發回後臺的日誌資料庫。 此時,如果使用者有測試分組的標籤,那麼該標籤也會被髮回後臺資料庫。
    • 在後臺,實驗人員的工作首先是配置流量分配系統,決定滿足什麼條件的使用者參加什麼樣的測試。其次,實驗人員需要統計日誌資料庫中的資料,通過評測系統生成不同分組使用者的實驗報告,並比較和評測實驗結果。

在這裡插入圖片描述
圖1-23 AB測試系統

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

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

3.2 評測指標

3.2.1 使用者滿意度

使用者滿意度沒有辦法離線計算,只能通過使用者調查或者線上實驗獲得。

在線上系統中,使用者滿意度主要通過一些對使用者行為的統計得到。比如在電子商務網站中,使用者如果購買了推薦的商品,就表示他們在一定程度上滿意。因此,我們可以利用購買率度量使用者的滿意度。此外,有些網站會通過設計一些使用者反饋介面收集使用者滿意度。更一般的情況下,我們可以用點選率、使用者停留時間和轉化率等指標度量使用者的滿意度。

3.2.2 預測準確度

預測準確度度量一個推薦系統或者推薦演算法預測使用者行為的能力。這個指標是最重要的推薦系統離線評測指標

  1. 預測準確率流程:

    在計算該指標時需要有一個離線的資料集,該資料集包含使用者的歷史行為記錄。然後,將該資料集通過時間分成訓練集和測試集。最後,通過在訓練集上建立使用者的行為和興趣模型預測使用者在測試集上的行為,並計算預測行為和測試集上實際行為的重合度作為預測準確度。

  2. 評分預測:

    很多提供推薦服務的網站都有一個讓使用者給物品打分的功能。那麼,如果知道了使用者對物品的歷史評分,就可以從中習得使用者的興趣模型,並預測該使用者在將來看到一個他沒有評過分的物品時,會給這個物品評多少分。預測使用者對物品評分的行為稱為評分預測

    評分預測的預測準確度一般通過均方根誤差(RMSE)和平均絕對誤差(MAE)計算。對於測試集中的一個使用者u和物品i,令 r u i r_{ui} 是使用者 u 對物品 i 的實際評分,而 r ^ u i \hat{r}_{ui} 是推薦演算法給出的預測評分,那麼RMSE的定義為:
    R M S E = u , i T ( r u i r ^ u i ) 2 T RMSE = \frac{\sqrt{\sum_{u,i \in T}{(r_{ui} - \hat{r}_{ui})^2}}}{|T|}
    MAE採用絕對值計算預測誤差,它的定義為:

M A E = u , i T r u i r ^ u i T MAE = \frac{\sum_{u,i \in T}{|r_{ui} - \hat{r}_{ui}|}}{|T|}

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

  1. TopN推薦:

    網站在提供推薦服務時,一般是給使用者一個個性化的推薦列表,這種推薦叫做TopN推薦。TopN推薦的預測準確率一般通過準確率(precision)/召回率(recall)度量。
    令R(u)是根據使用者在訓練集上的行為給使用者作出的推薦列表,而T(u)是使用者在測試集上的行為列表。那麼,推薦結果的召回率定義為:
    R e c a l l = u U R ( u ) T ( u ) u U T ( u ) Recall = \frac{\sum_{u\in U}|R(u) \cup T(u)|}{\sum_{u \in U} |T(u)|}

    推薦結果的準確率定義為:
    R e c a l l = u U R ( u ) T ( u ) u U R ( u ) Recall = \frac{\sum_{u\in U}|R(u) \cup T(u)|}{\sum_{u \in U} |R(u)|}
    有的時候,為了全面評測TopN推薦的準確率和召回率,一般會選取不同的推薦列表長度N,計算出一組準確率/召回率,然後畫出準確率/召回率曲線(precision/recall curve)。

  2. 關於評語預測和TopN推薦的討論:

    對此,亞馬遜前科學家Greg Linden指出電影推薦的目的是找到使用者最有可能感興趣的電影,而不是預測使用者看了電影后會給電影什麼樣的評分。因此,TopN推薦更符合實際的應用需求。也許有一部電影使用者看了之後會給很高的分數,但使用者看的可能性非常小。因此,預測使用者是否會看一部電影,應該比預測使用者看了電影后會給它什麼評分更加重要。因此,本書主要也是討論TopN推薦。

3.2.3 覆蓋率

覆蓋率(coverage)描述一個推薦系統對物品長尾的發掘能力。 覆蓋率有不同的定義方法,最簡單的定義為推薦系統能夠推薦出來的物品佔總物品集合的比例。假設系統的使用者集合為U,推薦系統給每個使用者推薦一個長度為N的物品列表R(u)。那麼推薦系統的覆蓋率可以通過下面的公式計算:

C o n v e r a g e = U u U R ( u ) I Converage = \frac{|U_{u \in U} R(u)|}{I}

從上面的定義可以看到,覆蓋率是一個內容提供商會關心的指標。以圖書推薦為例,出版社可能會很關心他們的書有沒有被推薦給使用者。覆蓋率為100%的推薦系統可以將每個物品都推薦給至少一個使用者。此外,從上面的定義也可以看到,熱門排行榜的推薦覆蓋率是很低的,它只會推薦那些熱門的物品,這些物品在總物品中佔的比例很小。一個好的推薦系統不僅需要有比較高的使用者滿意度,也要有較高的覆蓋率。

但是上面的定義過於粗略。覆蓋率為100%的系統可以有無數的物品流行度分佈。為了更細緻地描述推薦系統發掘長尾的能力,需要統計推薦列表中不同物品出現次數的分佈。如果所有的物品都出現在推薦列表中,且出現的次數差不多,那麼推薦系統發掘長尾的能力就很好。因此,可以通過研究物品在推薦列表中出現次數的分佈描述推薦系統挖掘長尾的能力。如果這個分佈比較平,那麼說明推薦系統的覆蓋率較高,而如果這個分佈較陡峭,說明推薦系統的覆蓋率較低。在資訊理論和經濟學中有兩個著名的指標可以用來定義覆蓋率。第一個是資訊熵
H = i = 1 n p ( i ) l o g   p ( i ) H = -\sum_{i=1}^{n}p(i)log\ p(i)
這裡p(i)是物品i的流行度除以所有物品流行度之和。
第二個指標是基尼係數(Gini Index)
G = 1 n 1 j = 1 n ( 2 j n 1 ) p ( i j ) G = \frac{1}{n-1}\sum_{j=1}^{n}(2j-n-1)p(i_j)
這裡, i j i_j