最近看了項亮大大的《推薦系統實踐》一書,想借此入門推薦系統。書中有很多關於推薦系統的基礎性介紹,內容由淺入深,相當平易近人。這系列博客將主要針對書中的算法部分進行梳理,並附自己實現的代碼鏈接,以備日後查閱。
這個系列分爲如下幾個部分:
《推薦系統實踐》算法純享(附代碼鏈接)(一)—— 評價指標篇
《推薦系統實踐》算法純享(附代碼鏈接)(二)—— 協同過濾篇
《推薦系統實踐》算法純享(附代碼鏈接)(三)—— 冷啓動篇
《推薦系統實踐》算法純享(附代碼鏈接)(四)—— UGC推薦篇
《推薦系統實踐》算法純享(附代碼鏈接)(五)—— 藉助上下文信息推薦篇
《推薦系統實踐》算法純享(附代碼鏈接)(六)—— 藉助社交網絡推薦篇
《推薦系統實踐》算法純享(附代碼鏈接)(七)—— 評分預測篇
完整代碼鏈接:https://github.com/Magic-Bubble/RecommendSystemPractice
下面將開始本系列的第一部分——評價指標篇。
文章目錄
1 評價指標
評測指標可用於評價推薦系統各方面的性能。這些指標有些可以定量計算,有些只能定性描述,有些可以通過離線實驗計算,有些需要通過用戶調查獲得,還有些只能在線評測。
1.1 用戶滿意度
用戶作爲推薦系統的重要參與者,其滿意度是評測推薦系統的最重要指標。但是,用戶滿意度沒有辦法離線計算,只能通過用戶調查或者在線實驗獲得。
在在線系統中,用戶滿意度主要通過一些對用戶行爲的統計得到。比如在電子商務網站中,用戶如果購買了推薦的商品,就表示他們在一定程度上滿意。因此,我們可以利用購買率度量用戶的滿意度。此外,有些網站會通過設計一些用戶反饋界面收集用戶滿意度。
1.2 預測準確度
預測準確度度量一個推薦系統或者推薦算法預測用戶行爲的能力。這個指標是最重要的推薦系統離線評測指標。
在計算該指標時需要有一個離線的數據集,該數據集包含用戶的歷史行爲記錄。然後,將該數據集通過時間分成訓練集和測試集。最後,通過在訓練集上建立用戶的行爲和興趣模型預測用戶在測試集上的行爲,並計算預測行爲和測試集上實際行爲的重合度作爲預測準確度。
主要包含兩種評測方向:
- 評分預測
很多提供推薦服務的網站都有一個讓用戶給物品打分的功能。那麼,如果知道了用戶對物品的歷史評分,就可以從中習得用戶的興趣模型,並預測該用戶在將來看到一個他沒有評過分的物品時,會給這個物品評多少分。預測用戶對物品評分的行爲稱爲評分預測。
評分預測的預測準確度一般通過均方根誤差(RMSE)和平均絕對誤差(MAE)計算。對於測試集中的一個用戶u和物品i,令是用戶u對物品i的實際評分,而是推薦算法給出的預測評分,那麼RMSE的定義爲:
MAE採用絕對值計算預測誤差,它的定義爲:
- TopN推薦
網站在提供推薦服務時,一般是給用戶一個個性化的推薦列表,這種推薦叫做TopN推薦。TopN推薦的預測準確率一般通過準確率(precision)/召回率(recall)度量。
令是根據用戶在訓練集上的行爲給用戶作出的推薦列表,而是用戶在測試集上的行爲列表。那麼,推薦結果的召回率定義爲:
推薦結果的準確率定義爲:
1.3 覆蓋率
覆蓋率(coverage)描述一個推薦系統對物品長尾的發掘能力。覆蓋率有不同的定義方法,最簡單的定義爲推薦系統能夠推薦出來的物品佔總物品集合的比例。假設系統的用戶集合爲U,推薦系統給每個用戶推薦一個長度爲N的物品列表。那麼推薦系統的覆蓋率可以通過下面的公式計算:
這種定義比較粗糙,如果所有的物品都出現在推薦列表中,且出現的次數差不多,那麼推薦系統發掘長尾的能力纔會很好。在信息論和經濟學中有兩個著名的指標可以用來定義覆蓋率。第一個是信息熵:
這裏的是物品i的流行度除以所有物品流行度之和。
第二個是基尼係數:
這裏,是按照物品流行度從小到大排序的物品列表中第j個物品。
用圖來說明基尼係數的計算原理爲:
1.4 多樣性
儘管用戶的興趣在較長的時間跨度中是一樣的,但具體到用戶訪問推薦系統的某一刻,其興趣往往是單一的,那麼如果推薦列表只能覆蓋用戶的一個興趣點,而這個興趣點不是用戶這個時刻的興趣點,推薦列表就不會讓用戶滿意。反之,如果推薦列表比較多樣,覆蓋了用戶絕大
多數的興趣點,那麼就會增加用戶找到感興趣物品的概率。因此給用戶的推薦列表也需要滿足用戶廣泛的興趣,即具有多樣性。
多樣性描述了推薦列表中物品兩兩之間的不相似性。因此,多樣性和相似性是對應的。假設定義了物品i和j之間的相似度,那麼用戶u的推薦列表的多樣性定義如下:
而推薦系統的整體多樣性可以定義爲所有用戶推薦列表多樣性的平均值:
1.5 新穎性
新穎的推薦是指給用戶推薦那些他們以前沒有聽說過的物品。
一個簡單辦法就是把那些用戶之前在網站中對其有過行爲的物品從推薦列表中過濾掉。
對於它的評測可以用推薦結果的平均流行度,因爲越不熱門的物品越可能讓用戶覺得新穎。因此,如果推薦結果中物品的平均熱門程度較低,那麼推薦結果就可能有比較高的新穎性。
1.6 驚喜度
注意與新穎度的區別。
如果推薦結果和用戶的歷史興趣不相似,但卻讓用戶覺得滿意,那麼就可以說推薦結果的驚喜度很高,而推薦的新穎性僅僅取決於用戶是否聽說過這個推薦結果。
1.7 信任度
對於基於機器學習的自動推薦系統,存在信任度(trust)的問題,如果用戶信任推薦系統,那就會增加用戶和推薦系統的交互。
度量推薦系統的信任度只能通過問卷調查的方式,詢問用戶是否信任推薦系統的推薦結果。
提高推薦系統的信任度主要有兩種方法。首先需要增加推薦系統的透明度(transparency),如提供推薦解釋等;其次是考慮用戶的社交網絡信息,利用用戶的好友信息給用戶做推薦,並且用好友進行推薦解釋。
1.8 實時性
在很多網站中,因爲物品(新聞、微博等)具有很強的時效性,所以需要在物品還具有時效性時就將它們推薦給用戶。實時性包括兩個方面。首先,推薦系統需要實時地更新推薦列表來滿足用戶新的行爲變化;其次是推薦系統需要能夠將新加入系統的物品推薦給用戶。
1.9 健壯性
任何一個能帶來利益的算法系統都會被人攻擊,而健壯性(即robust,魯棒性)指標衡量了一個推薦系統抗擊作弊的能力。
算法健壯性的評測主要利用模擬攻擊。首先,給定一個數據集和一個算法,可以用這個算法給這個數據集中的用戶生成推薦列表。然後,用常用的攻擊方法向數據集中注入噪聲數據,然後利用算法在注入噪聲後的數據集上再次給用戶生成推薦列表。最後,通過比較攻擊前後推薦列表的相似度評測算法的健壯性。如果攻擊後的推薦列表相對於攻擊前沒有發生大的變化,就說明算法比較健壯。
提升健壯性的方法有:
- 設計推薦系統時儘量使用代價比較高的用戶行爲。
- 在使用數據前,進行攻擊檢測,從而對數據進行清理。
1.10 商業目標
很多時候,網站評測推薦系統更加註重網站的商業目標是否達成,而商業目標和網站的盈利模式是息息相關的。一般來說,最本質的商業目標就是平均一個用戶給公司帶來的盈利。不過這種指標不是很難計算,只是計算一次需要比較大的代價。因此,很多公司會根據自己的盈利模式設計不同的商業目標。
不同的網站具有不同的商業目標。比如電子商務網站的目標可能是銷售額,基於展示廣告盈利的網站其商業目標可能是廣告展示總數,基於點擊廣告盈利的網站其商業目標可能是廣告點擊總數。因此,設計推薦系統時需要考慮最終的商業目標,而網站使用推薦系統的目的除了滿足用戶發現內容的需求,也需要利用推薦系統加快實現商業上的指標。
1.11 總結
前面提到了很多指標,其中有些指標可以離線計算,有些只能在線獲得。但是,離線指標很多,在線指標也很多,那麼如何優化離線指標來提高在線指標是推薦系統研究的重要問題。下面是對於這些指標的總結:
對於可以離線優化的指標,書中作者的看法是應該在給定覆蓋率、多樣性、新穎性等限制條件下,儘量優化預測準確度。用一個數學公式表達,離線實驗的優化目標是:
最大化預測目標 使得:覆蓋率>A,多樣性>B,新穎性>C
1.12 評測維度
在評測系統中還需要考慮評測維度,比如一個推薦算法,雖然整體性能不好,但可能在某種情況下性能比較好,而增加評測維度的目的就是知道一個算法在什麼情況下性能最好。這樣可以爲融合不同推薦算法取得最好的整體性能帶來參考。
一般來說,評測維度分爲如下3種。
- 用戶維度 主要包括用戶的人口統計學信息、活躍度以及是不是新用戶等。
- 物品維度 包括物品的屬性信息、流行度、平均分以及是不是新加入的物品等。
- 時間維度 包括季節,是工作日還是週末,是白天還是晚上等。
如果能夠在推薦系統評測報告中包含不同維度下的系統評測指標,就能全面地瞭解推薦系統性能,找到一個看上去比較弱的算法的優勢,發現一個看上去比較強的算法的缺點。
評價指標篇到這裏就分享完了,後面將繼續分享第二部分——協同過濾篇。