推薦系統評價:什麼是好的推薦系統?
推薦系統評價:什麼是好的推薦系統?
1.1 什麼是推薦系統
推薦系統的定義:
我們已經進入了一個信息過載
的時代:
- 信息消費者從大量信息中找到自己感興趣的信息很困難
- 信息生產者讓自己生產的信息從大量信息中脫穎而出也很困難
推薦系統就是解決這一矛盾的重要工具。
信息過載的解決:
- 推薦系統
- 在用戶沒有明確目的時幫助用戶發現他們感興趣的新內容
- 從item角度出發,推薦系統可以更好的發掘item的長尾
- 搜索引擎
- 滿足用戶有明確目的時的主動查找需求
搜索引擎和推薦系統有着互補的關係。
推薦系統的基本任務:
聯繫用戶和item,解決信息過載的問題。
推薦算法的本質:
通過一定的方式將用戶和item聯繫起來
- 好友關係
- 用戶歷史興趣記錄
- 用戶註冊信息
- …
1.2 個性化推薦系統的應用
主要的應用場景有:
- 電商網站
- 流媒體電影/視頻網站
- 流媒體音樂
- 社交網絡
- 個性化閱讀
- 基於位置的服務
- 個性化郵件
- 個性化廣告
- …
音樂推薦的特點
- item空間大
- item種類豐富
- item重用率高
- 消費每首歌的經濟代價小
- 消費每首歌的時間代價小
- 一個用戶可以對應很多歌item
- 存在很多播放列表資源
- 高度社會化
- 上下文相關
- 推薦次序對效果有影響
- 不需要用戶全神貫注聽
兩種推薦方式對比 :
- item-based 推薦
- 給用戶推薦和用戶喜歡的item相似的item
- 基於好友的推薦
- 給用戶推薦他們的好友喜歡的item
1.3 推薦系統評測
推薦系統的參與者
- 用戶
- item提供方
- item展示方
一個好的推薦系統應該是對推薦系統的三個參與者都有益的。
從用戶角度,好的推薦系統不僅能夠準確預測用戶的行爲,而且能夠拓展用戶的視野,幫助用戶發現那些用戶感興趣卻不太容易發現的東西。
1.3.1 推薦系統實驗方法
- 通過
離線實驗
證明新方法在離線指標上優於在線算法 - 通過
用戶調查
確定新方法用戶滿意度不低於在線算法 - 通過
在線ABtest
確定新方法在線上指標優於在線算法
1.3.2 評價指標
1.3.2.1 用戶滿意度
- 點擊率
- 停留時長
- 轉化率
1.3.2.2 預測精準度
評分預測
對於測試集中的一個用戶u和物品i, 令是用戶u對物品i的實際評分,而是推薦算法給出的預測評分,則有:
- RMSE 均方根誤差: $ RMSE = \sqrt{{\frac {\sum_{u,i\in T} (r_{ui} - \hat{r}_{ui})^2} {|T|} }} $
- RMSE加大了對預測不準的用戶物品評分的懲罰(平方項的懲罰),因而對系統的評測更加苛刻。
- MAE 平均絕對誤差: $ MAE = {\frac {\sum_{u,i\in T} |r_{ui} - \hat{r}_{ui}| } {|T|} } $
- 如果評分系統是基於整數建立的,那麼對預測結果取整會降低MAE的誤差。
RMSE和MAE的實現:
令records[i] = [u, i, rui, pui]
, 其中,rui
是用戶u
對物品i
的實際評分,pui
是算法預測出來的用戶u
對物品i
的評分,則python實現如下:
def RMSE(records):
return math.sqrt(sum([(rui - pui) ** 2 for _, _, rui, pui in records]) / (len(records)))
def MAE(records):
return sum([abs(rui - pui) for _, _, rui, pui in records]) / len(records)
TopN推薦
- 準確率
- 召回率
爲了全面評測TopN推薦的準確率和召回率,一般會選取不同的推薦列表長度N,計算出一組準確率/召回率,然後畫出準確率高/召回率曲線(p/r curve)。
推薦系統的目的是找到用戶最有可能感興趣的item,而不是預測用戶給item什麼樣的評分。因此,TopN推薦更符合實際應用需求。
1.3.2.3 覆蓋率
覆蓋率(coverage)描述一個推薦系統對item長尾的發掘能力。
從定義角度來說覆蓋率是一個item提供商會關心的指標。
假設系統的用戶集合爲U,物品集合爲I,推薦系統給每個用戶推薦一個長度爲N的物品列表R(u),那麼覆蓋率的定義爲:$ Coverage = \frac {|U_{u\in U} R(u)|} {|I|}$
按照上述定義,當覆蓋率接近100%時,系統可以有無數不同的流行度分佈,爲了更細緻的描述推薦系統發掘長尾的能力,需要將流行度分佈加入覆蓋度指標。
在信息論和經濟學中有兩個著名的指標: 信息熵
和基尼係數
。
信息熵
令p(i)爲物品i的流行度除以所有物品的流行度之和,則有信息熵的定義如下:
基尼係數(Gini Index)
令爲物品i按流行度升序排列後的低j個物品的流行度,則有基尼係數的定義:
推薦系統中的馬太效應
社會學領域有一個著名的馬太效應,即所謂強者更強、弱者更弱的效應。
一般來說,熱門排行榜系統具有馬太效應,搜索引擎的PageRank也具有馬太效應。
如果一個推薦系統會增大熱門物品和非熱門物品之間的流行度差距,則這個系統具有馬太效應。而推薦系統的初衷是消除馬太效應,使得各種物品都能展示給對他們感興趣的某一類人羣。但是,很多研究表明,現在主流的推薦算法(比如協同過濾)是具有馬太效應的。
評測一個推薦系統是否具有馬太效應最簡單的方法是使用基尼係數:
- 記G1爲從初始用戶行爲中統計出的物品流行度基尼係數
- 記G2爲從推薦列表中計算出的物品流行度的基尼係數
若 則說明推薦算法具有馬太效應。
1.3.2.4 多樣性
用戶的興趣是廣泛的,爲了滿足用戶廣泛的興趣,推薦列表需要能夠覆蓋用戶不同的興趣領域。
多樣性描述了推薦列表中物品兩兩之間的不相似性。因此,多樣性和相似性有對應關係。假設 定義了物品i和j之間的相似度,那麼用戶u的推薦列表R(u)的多樣性定義如下:
推薦系統的整體多樣性可以定義爲所有用戶推薦列表多樣性的平均值:
1.3.2.5 新穎性(novelty)
新穎性的推薦是指給用戶推薦那些他們不曾聽說過的物品。
- 在一個系統中實現新穎性的最簡單的方法就是,將用戶對其有過行爲的物品從推薦列表中過濾掉。
- 評測新穎度最簡單的放啊是利用推薦結果的平均流行度,流行度越低可能就越新穎。
但是上述兩個方法都比較粗糙,比如針對第一個,用戶可能在其他平臺和系統推薦的物品有過行爲;第二個則未考慮不同用戶的瞭解範圍不同,物品對A用戶是新穎的,但對B用戶可能就是非新穎的。
1.3.2.6 驚喜度(serendipity)
不同於新穎性,驚喜度是指:
推薦的結果和用戶歷史上喜歡的物品不相似,單用戶卻覺得滿意的推薦。
要想定義驚喜度,就得先定義相似性,其次需要定義用戶的滿意度。
提高驚喜度需要實現兩點:
- 提高推薦結果的用戶滿意度
- 降低推薦結果和用戶歷史興趣的相似度
1.3.2.7 信任度
如果用戶信任推薦系統,則可能會和推薦系統有更多的交互。特別是在電商等系統中,信任非常重要。
提高推薦系統信任度的主要有兩種方法:
- 增加推薦系統的透明度,增加更多推薦解釋
- 利用用戶的社交網絡,利用用戶好友的信息來做推薦和推薦解釋
1.3.2.8 實時性
在很多網站中,物品具有時效性,比如新聞、微博,所以需要在物品還在有意義的時效內時將其推薦給用戶。
推薦系統的實時性包含兩個方面:
- 實時地更新推薦列表來滿足用戶的行爲變化
- 能夠將新加入系統的物品推薦給用戶
第一個方面舉例,用戶新買了一個iPhone,此時推薦系統應該更新信息,將iPhone配件推薦給用戶。而第二個方面主要考驗了推薦系統的冷啓動能力。
1.3.2.9 健壯性
任何一個能帶來利益的算法系統都會被人攻擊,推薦系統會面臨刷熱門等注入式攻擊。
我們應該這樣提高系統的健壯性:
- 選擇健壯性高的算法
- 使用代價比較高的用戶行爲來訓練模型
- 在使用數據前,進行攻擊檢測,清除垃圾數據
1.3.2.10 商業目標
很多時候,公司評價一個推薦系統更加註重商業目標是否達成,推薦系統的業務每家公司都會有,但是每家的目標都不同。
因此,評測一個推薦系統時除了要考慮上述技術指標外,還要考慮產品提出的商業目標。
1.3.3 評測維度
如果能夠在推薦系統評測報告中加入細分的不同維度下系統評測指標,就能幫我們更全面的瞭解推薦系統的性能。
- 用戶維度
- 人口統計學信息、活躍度、是否新用戶
- 物品維度
- 物品的屬性信息、流行度、平均分、是否新物品
- 時間維度
- 季節、工作日或週末或節假日、白天或夜晚