第1章 好的推薦系統
1.1什麼是推薦系統
推薦系統的任務就是聯絡使用者和資訊,一方面幫助使用者發現對自己有價值的資訊,另一方面讓資訊能夠展現在對它感興趣的使用者面前,從而實現資訊消費者和資訊生產者的雙贏。
搜尋引擎與推薦系統的區別
搜尋引擎滿足了使用者有明確目的時的主動查詢需求,而推薦系統能夠在使用者沒有明確目的的時候幫助他們發現感興趣的新內容。
推薦系統不需要使用者提供明確的需求,而是通過分析使用者的歷史行為給使用者的興趣建模,從而主動給使用者推薦能夠滿足他們興趣和需求的資訊。推薦系統能夠很好的發掘物品的長尾,挑戰傳統的80/20原則(80%的銷售額來自20%的熱門品牌)。
結合實際場景,推薦系統如何工作
- 社會化推薦。向朋友諮詢,即讓好友給自己推薦物品。
- 基於內容的推薦。通過分析使用者曾經看過的電影找到使用者喜歡的演員和導演,然後給使用者推薦這些演員或者導演的其他電影。
- 基於協同過濾。找到和自己歷史興趣相似的一群使用者,推薦他們最近在看的電影。
綜上,推薦演算法的本質
是通過一定的方式將使用者和物品聯絡起來,而不同的推薦系統利用了不同的方式。
1.2個性化推薦系統的應用
個性化推薦系統在這些網站中的主要作用是通過分析大量使用者行為日誌,給不同使用者提供不同的個性化頁面展示,來提高網站的點選率和轉化率。
1.2.1電子商務
個性化推薦
- 基於物品的推薦,給使用者推薦那些和他們之前喜歡的物品相似的物品
- 基於好友的推薦,給使用者推薦他們的好友在亞馬遜上喜歡的物品
相關推薦(應用於打包銷售)
- 購買了這個商品的使用者也經常購買的其他商品
- 瀏覽過這個商品的使用者經常購買的其他商品
1.2.2電影和視訊網站
個性化推薦
基於物品的推薦演算法,即給使用者推薦和他們曾經喜歡額電影相似的電影。
1.2.3個性化音樂網路電臺
個性化推薦成功應用條件
- 存在資訊過載,因為如果使用者可以很容易地從所有物品中找到喜歡的物品,就不需要個性化推薦了。
- 使用者大部分時候沒有特別明確的需求,因為使用者如果有明確的需求,可以直接通過搜尋引擎找到感興趣的物品。
Pandora的演算法主要基於內容,其音樂家和研究人員親自聽了上萬首來自不同歌手的歌,然後對歌曲的不同特徵(比如旋律、節奏、編曲和歌詞等)進行標註,這些標註被稱為音樂的基因。然後根據專家基因計算歌曲的相似度,並給使用者推薦和他之前喜歡的音樂在基因上相似的其他歌曲。
Last.fm記錄了所有使用者的聽歌記錄以及使用者對歌曲的反饋,在這一基礎上計算出不同使用者在歌曲上的喜好相似度,從而給使用者推薦和他有想死聽歌洗好的其他使用者喜歡的歌曲。
音樂推薦的特點決定了音樂是一種非常適合用來推薦的物品
- 物品空間大
- 消費每首歌的代價很小
- 物品種類豐富
- 聽一首歌耗時很少
- 物品重用率很高
- 使用者充滿激情
- 上下文相關
- 次序很重要
- 很多播放列表資源
- 不需要使用者全神貫注
- 高度社會化
1.2.4社交網路
個性化推薦技術主要應用於
- 利用使用者的社交網路資訊對使用者進行個性化的物品推薦。Facebook開發了推薦API,該工具根據使用者好友喜歡的資訊,給使用者推薦他們好友喜歡的物品。
- 資訊流的會話推薦。使用者對好友的分享進行評論,每個分享和它的所有評論被稱為一個會話。
- 給使用者推薦好友。通過個性化推薦服務給使用者推薦好友。
1.2.5個性化閱讀
Google Reader允許使用者關注自己感興趣的人,然後看到所關注使用者分享的文章。
Zite收集使用者對文章的偏好資訊。
1.2.6基於位置的服務
基於位置給使用者推薦離他近的且他感興趣的服務,使用者就更有可能去消費。
1.2.7個性化郵件
- 垃圾郵件,通過垃圾郵件過濾器去除。
- 正常郵件,找到對使用者重要的郵件讓使用者優先瀏覽。
1)通過分析使用者閱讀郵件的歷史行為和習慣對新郵件進行重新排序,從而提高使用者的工作效率。
2)通過分析使用者對郵件的歷史行為,找到使用者感興趣的郵件,展示在一個專門的收件箱裡。使用者每天可以先瀏覽這個郵件的郵件,再瀏覽其他檔案。
1.2.8個性化廣告
個性化廣告和狹義個性化推薦的區別是,個性化推薦著重於幫助使用者找到可能令他們興趣的物品,而廣告推薦著重於幫助廣告找到可能對它們感興趣的使用者,即一個以使用者為核心,而另一個以廣告為核心。
- 上下文廣告。通過分析使用者正在瀏覽的網頁內容,投放和網頁內容相關的廣告。代表系統是谷歌的Adsense。
- 搜尋廣告。通過分析使用者在當前會話中的搜尋記錄,判斷使用者而搜尋目的,投放和使用者目的相關的廣告。
- 個性化展示廣告。我們經常在很多網站看到大量展示廣告(就是那些大的橫幅圖片),它們是根據使用者的興趣,對不同使用者投放不同的展示廣告。
1.3推薦系統評測
準確的並不代表好的推薦。好的推薦系統不僅僅能夠準確預測使用者的行為,而且能夠擴充套件使用者的視野,幫助使用者發現那些他們可能感興趣,但卻不那麼容易發現的東西。
1.3.1推薦系統實驗方法
1.離線實驗
離線實驗的方法一般由如下幾個步驟構成:
(1) 通過日誌系統獲得使用者行為資料,並按照一定格式生成一個標準的資料集;
(2) 將資料集按照一定的規則分成訓練集和測試集;
(3) 在訓練集上訓練使用者興趣模型,在測試集上進行預測;
(4) 通過事先定義的離線指標評測演算法在測試集上的預測結果。
優點:不需要真實使用者參與,可以直接快速地計算出來,從而方便、快速地測試大量不同的演算法。
缺點: 無法獲得很多商業上關注的指標,如點選率、轉化率等,而找到和商業指標非常相關的離線指標也是很困難的事情。
2.使用者調查
使用者調查需要有一些真實使用者,讓他們在需要測試的推薦系統上完成一些任務。在他們完成任務時,我們需要觀察和記錄他們的行為,並讓他們回答一些問題。最後,我們需要通過分析他們的行為和答案瞭解測試系統的效能。
優點:可以獲得很多體現使用者主觀感受的指標,相對線上實驗風險很低,出現錯誤後很容易彌補。
缺點:招募測試使用者代價較大,很難組織大規模的測試 使用者,因此會使測試結果的統計意義不足。
3. 線上實驗
AB測試是一種很常用的線上評測演算法的實驗方法。它通過一定的規則將使用者隨機分成幾組,讀者可以瀏覽一下網址http://www.abtests.com/,該網站給出了很多通過實際AB測試提高網站使用者 滿意度的例子,從中我們可以學習到如何進行合理的AB測試。
優點:可以公平獲得不同演算法實際線上時的效能指標,包括商業上關注的指標。
缺點主要是週期比較長,必須進行長期的實驗才能得到可靠的結果。
使用者進入網站後,流量分配系統決定使用者是否需要被進行AB測試,如果需要的話,流量分配系統會給使用者打上在測試中屬於什麼分組的標籤。然後用 戶瀏覽網頁,而使用者在瀏覽網頁時的行為都會被通過日誌系統發回後臺的日誌資料庫。此時,如 果使用者有測試分組的標籤,那麼該標籤也會被髮回後臺資料庫。在後臺,實驗人員的工作首先是 配置流量分配系統,決定滿足什麼條件的使用者參加什麼樣的測試。其次,實驗人員需要統計日誌資料庫中的資料,通過評測系統生成不同分組使用者的實驗報告,並比較和評測實驗結果。
一般來說,一個新的推薦演算法最終上線,需要完成上面所說的3個實驗。
- 首先,需要通過離線實驗證明它在很多離線指標上優於現有的演算法。
- 然後,需要通過使用者調查確定它的使用者滿意度不低於現有的演算法。
- 最後,通過線上的AB測試確定它在我們關心的指標上優於現有的演算法。
評測指標
1.使用者滿意度
使用者作為推薦系統的重要參與者,其滿意度是評測推薦系統的最重要指標。但是,使用者滿意
度沒有辦法離線計算,只能通過使用者調查或者線上實驗獲得。
- 使用者調查獲得使用者滿意度主要是通過調查問卷的形式。
- 在線上系統中,使用者滿意度主要通過一些對使用者行為的統計得到。
2.預測準確度
預測準確度度量一個推薦系統或者推薦演算法預測使用者行為的能力。
-
評分預測
很多提供推薦服務的網站都有一個讓使用者給物品打分的功能。那麼,如果他沒有評過分的物品時,會給這個物品評多少分。預測使用者對物品評分的行為稱為評分預測。
評分預測的預測準確度一般通過均方根誤差(RMSE)和平均絕對誤差(MAE)計算。對於測試集中的一個使用者u和物品i,令rui是使用者對物品i
的實際評分,而rˆui 是推薦演算法給出的預測評
分,那麼RMSE的定義為:
MAE採用絕對值計算預測誤差,它的定義為:
關於RMSE和MAE這兩個指標的優缺點, Netflix認為RMSE加大了對預測不準的使用者物品評
分的懲罰(平方項的懲罰),因而對系統的評測更加苛刻。研究表明,如果評分系統是基於整數
建立的(即使用者給的評分都是整數),那麼對預測結果取整會降低MAE的誤差1。
-
TopN推薦
網站在提供推薦服務時,一般是給使用者一個個性化的推薦列表,這種推薦叫做TopN推薦。
TopN推薦的預測準確率一般通過準確率(precision)/召回率(recall)度量。
令R(u)是根據使用者在訓練集上的行為給使用者作出的推薦列表,而T(u)是使用者在測試集上的行
為列表。那麼,推薦結果的召回率定義為:推薦結果的準確率定義為:
關於評分預測和TopN推薦的討論
評分預測一直是推薦系統研究的熱點,絕大多數推薦系統的研究都是基於使用者評分資料的評分預測。亞馬遜前科學家Greg Linden指出電影推薦的目的是找到使用者最有可能感興趣的電影,而不是預測用 戶看了電影后會給電影什麼樣的評分。
3. 覆蓋率
覆蓋率(coverage)描述一個推薦系統對物品長尾的發掘能力。覆蓋率有不同的定義方法,
最簡單的定義為推薦系統能夠推薦出來的物品佔總物品集合的比例。假設系統的使用者集合為
U,推薦系統給每個使用者推薦一個長度為N的物品列表R(u)。那麼推薦系統的覆蓋率可以通過下面的公式計算:
為了更細緻地描述推薦系統發掘長尾的能力,需要統計推薦列表中不同物品出現次數的分佈。如果所有的 物品都出現在推薦列表中,且出現的次數差不多,那麼推薦系統發掘長尾的能力就很好。因此, 可以通過研究物品在推薦列表中出現次數的分佈描述推薦系統挖掘長尾的能力。如果這個分佈比 較平,那麼說明推薦系統的覆蓋率較高,而如果這個分佈較陡峭,說明推薦系統的覆蓋率較低。
在資訊理論和經濟學中有兩個著名的指標可以用來定義覆蓋率。第一個是資訊熵:
這裡p(i)是物品i的流行度除以所有物品流行度之和。
第二個指標是基尼係數(Gini Index):
這裡,ij是按照物品流行度p()從小到大排序的物品列表中第j個物品。
推薦系統是否有馬太效應呢?推薦系統的初衷是希望消除馬太效應,使得各種物品都能被展示給對它們感興趣的某一類人群。但是,很多研究表明現在主流的推薦演算法(比如協同過濾演算法)是具有馬太效應的。評測推薦系統是否具有馬太效應的簡單辦法就是使用基尼係數。如果G1是從初始使用者行為中計算出的物品流行度的基尼係數,G2是從推薦列表中計算出的物品流行度的基尼係數,那麼如果G2 > G1,就說明推薦演算法具有馬太效應。
4. 多樣性
為了滿足使用者廣泛的興趣,推薦列表需要能夠覆蓋使用者不同的興 趣領域,即推薦結果需要具有多樣性。
多樣性描述了推薦列表中物品兩兩之間的不相似性。因此,多樣性和相似性是對應的。假設s(i, j) [0,1] 定義了物品i和j之間的相似度,那麼使用者u的推薦列表R(u)的多樣性定義如下:
而推薦系統的整體多樣性可以定義為所有使用者推薦列表多樣性的平均值:
從上面的定義可以看到,不同的物品相似度度量函式s(i, j)可以定義不同的多樣性。如果用內容相似度描述物品間的相似度,我們就可以得到內容多樣性函式,如果用協同過濾的相似度函式s(i, j)描述物品間的相似度,就可以得到協同過濾的多樣性函式。
5. 新穎性
新穎的推薦是指給使用者推薦那些他們以前沒有聽說過的物品。在一個網站中實現新穎性的最簡單辦法是,把那些使用者之前在網站中對其有過行為的物品從推薦列表中過濾掉。
評測新穎度的最簡單方法是利用推薦結果的平均流行度,因為越不熱門的物品越 可能讓使用者覺得新穎。但是,要準確地統計新穎性需要做使用者調查。
6. 驚喜度
如果推薦結果和使用者的歷史興趣不相似,但卻讓使用者覺 得滿意,那麼就可以說推薦結果的驚喜度很高,而推薦的新穎性僅僅取決於使用者是否聽說過這個 推薦結果。提高推薦驚喜度
需要提高推薦結果的使用者滿意度,同時降低推薦結果和使用者歷史興趣的相似度。
7. 信任度
對於基於機器學習的自動推薦系統,同樣存在信任度(trust)的問題,如果使用者信任推薦系 統,那就會增加使用者和推薦系統的互動。
提高推薦系統的信任度主要有兩種方法。首先需要增加推薦系統的透明度(transparency)1, 而增加推薦系統透明度的主要辦法是提供推薦解釋。只有讓使用者瞭解推薦系統的執行機制,讓用 戶認同推薦系統的執行機制,才會提高使用者對推薦系統的信任度。其次是考慮使用者的社交網路 資訊,利用使用者的好友資訊給使用者做推薦,並且用好友進行推薦解釋。這是因為使用者對他們的 好友一般都比較信任,因此如果推薦的商品是好友購買過的,那麼他們對推薦結果就會相對比較 3 信任。
8. 實時性
在很多網站中,因為物品(新聞、微博等)具有很強的時效性,所以需要在物品還具有時效 性時就將它們推薦給使用者。
推薦系統的實時性包括兩個方面。首先,推薦系統需要實時地更新推薦列表來滿足使用者新的 行為變化。比如,當一個使用者購買了iPhone,如果推薦系統能夠立即給他推薦相關配件,那麼肯 定比第二天再給使用者推薦相關配件更有價值。很多推薦系統都會在離線狀態每天計算一次使用者推 薦列表,然後於線上期間將推薦列表展示給使用者。這種設計顯然是無法滿足實時性的。與使用者行 為相應的實時性,可以通過推薦列表的變化速率來評測。如果推薦列表在使用者有行為後變化不大, 或者沒有變化,說明推薦系統的實時性不高。
實時性的第二個方面是推薦系統需要能夠將新加入系統的物品推薦給使用者。這主要考驗了推 薦系統處理物品冷啟動的能力。關於如何將新加入系統的物品推薦給使用者,本書將在後面的章節 進行討論,而對於新物品推薦能力,我們可以利用使用者推薦列表中有多大比例的物品是當天新加 的來評測。
9. 健壯性
作者總結了很多作弊方法, 其中最著名的就是行為注入攻擊(profile injection attack)。眾所周知,絕大部分推薦系統都是通 過分析使用者的行為實現推薦演算法的。比如,亞馬遜有一種推薦叫做“購買商品A的使用者也經常購 買的其他商品”。它的主要計算方法是統計購買商品A的使用者購買其他商品的次數。那麼,我們 可以很簡單地攻擊這個演算法,讓自己的商品在這個推薦列表中獲得比較高的排名,比如可以註冊 很多賬號,用這些賬號同時購買A和自己的商品。還有一種攻擊主要針對評分系統,比如豆瓣的 電影評分。這種攻擊很簡單,就是僱用一批人給自己的商品非常高的評分,而評分行為是推薦系 統依賴的重要使用者行為。
演算法健壯性的評測主要利用模擬攻擊。首先,給定一個資料集和一個演算法,可以用這個演算法 給這個資料集中的使用者生成推薦列表。然後,用常用的攻擊方法向資料集中注入噪聲資料,然後 利用演算法在注入噪聲後的資料集上再次給使用者生成推薦列表。最後,通過比較攻擊前後推薦列表 的相似度評測演算法的健壯性。如果攻擊後的推薦列表相對於攻擊前沒有發生大的變化,就說明算 法比較健壯。
在實際系統中,提高系統的健壯性,除了選擇健壯性高的演算法,還有以下方法。
- 設計推薦系統時儘量使用代價比較高的使用者行為。比如,如果有使用者購買行為和使用者瀏 覽行為,那麼主要應該使用使用者購買行為,因為購買需要付費,所以攻擊購買行為的代 價遠遠大於攻擊瀏覽行為。
- 在使用資料前,進行攻擊檢測,從而對資料進行清理。
10. 商業目標
不同的網站具有不同的商業目標。網站使用推薦系統的目的除了滿足用 戶發現內容的需求,也需要利用推薦系統加快實現商業上的指標。
11.總結
1.3.3 評測維度
一般來說,評測維度分為如下3種。
- 使用者維度。主要包括使用者的人口統計學資訊、活躍度以及是不是新使用者等。
- 物品維度 。包括物品的屬性資訊、流行度、平均分以及是不是新加入的物品等。
- 時間維度。包括季節,是工作日還是週末,是白天還是晚上等。
如果能夠在推薦系統評測報告中包含不同維度下的系統評測指標,就能幫我們全面地瞭解推 薦系統效能,找到一個看上去比較弱的演算法的優勢,發現一個看上去比較強的演算法的缺點。
相關文章
- 第 1 章 推薦系統的時代背景
- 【第一章】好的推薦系統
- 推薦系統
- 【推薦系統篇】--推薦系統之訓練模型模型
- 編輯推薦之《推薦系統》
- 市面上比較好的公有云管理系統推薦
- 好書推薦——JavaScript基礎教程(第8版)JavaScript
- 【推薦系統篇】--推薦系統之測試資料
- 《推薦系統學習》之推薦系統那點事
- Mahout的taste推薦系統引擎(影片推薦案例)AST
- 雲音樂推薦系統(二):推薦系統的核心演算法演算法
- 推薦系統概述
- 機器學習 — 推薦系統機器學習
- 學Python用什麼系統環境好?推薦Linux系統!PythonLinux
- 《推薦系統實踐》筆記 01 推薦系統簡介筆記
- 推薦系統論文之序列推薦:KERL
- 推薦系統: 相關推薦方法對比
- 推薦系統一——深入理解YouTube推薦系統演算法演算法
- 【推薦系統篇】--推薦系統介紹和基本架構流程架構
- 推薦系統應該如何保障推薦的多樣性?
- 《推薦系統》-DIN模型模型
- 《推薦系統》-PNN模型模型
- python 推薦系統Python
- 推薦系統雜談
- 推薦系統評估
- 推薦:看板系統Trello
- 圖靈推薦系統圖靈
- 推薦系統概念篇
- PredictionIO:開源的推薦系統
- 推薦系統的評估方法
- 序列推薦系統的前世今生
- 開源的.NET系統推薦
- 推薦系統的那點事
- 以亞馬遜為例,看怎樣才算要給好的推薦系統!亞馬遜
- 我的推薦系統學習之路
- 推薦免費好用的CRM系統?
- 如何構建推薦系統
- Spark推薦系統實踐Spark