推薦系統評價 NDCG方法概述

2021-08-02 13:24:55 字數 3029 閱讀 8868

摘要:哪一種模型更適合挖掘資訊,主要的決策因子是推薦質量,而推薦系統包括很多很棘手的問題,下面就由這篇文章帶給大家推薦系統評價。

【編者按】在資訊過剩的網際網路時代,推薦系統的地位隨著大資料的普及愈發重要。評估乙個推薦模型的質量面臨很多棘手的問題,我們常用的指標是直接的準確率、召回率,但準確率不一定具有很好的相關性。來自zygmunt z的這篇綜述文章,把推薦當作是乙個排名任務,提供了一種更注重相關性的視角來進行推薦系統的評估,頗具可讀性。

如果你挖掘的資訊較少,推薦的方法有很多。問題是,選擇哪乙個模型更合適。在這裡,主要的決策因子是推薦質量。你可以通過驗證來估計它,而推薦系統的驗證可能會很棘手。你需要考慮一些東西,包括任務的制定,可用的反饋形式和乙個優化指標。下面,我們來解決這些問題並呈現乙個例項。

我們把推薦當作是乙個排名任務,這表示我們主要感興趣的是乙個相對較少的項,我們認為這些項最相關並把它呈現給使用者。這就是眾所周知的top-k推薦。

把它和評級**做比較,如netflix的競賽。2023年,yehuda koren(此次比賽的乙個勝出者)指出,人們對使用rmse作為乙個指標並贊成使用rmse指標存有疑惑,我們應該使用乙個特定的排名指標。

然而,在我們有限的實驗中,我們發現rmse指標並不適用於排名。對我們而言,當調整使用者留存率時,用於rmse的矩陣分解優化表現的相當不錯,但當從所有的可用項選擇推薦時,卻徹底地失敗了。

換句話說,rmse指標不能辨別真實的內情,而且我們需要特定的排名指標。

兩個最受歡迎的排名指標是map和ndcg。我們在前段時間已經使用了平均精度均值(map)。ndcg表示歸一化折損累積增益。兩者之間的主要區別是,map認為是二元相關性(乙個項是感興趣的或者不感興趣的),而ndcg允許以實數形式進行相關性打分。這種關係類似分類和回歸的關係。

實際當中,很難直接地優化map或ndcg指標,因為他們是不連續的,所以不可微。幸運的是,排名學習中的排名指標和損失函式表明,用於排名學習的一對損失函式近似於這些指標。

ndcg這個名字可能有點嚇人,但其背後的思想卻很簡單。乙個推薦系統返回一些項並形成乙個列表,我們想要計算這個列表有多好。每一項都有乙個相關的評分值,通常這些評分值是乙個非負數。這就是gain(增益)。此外,對於這些沒有使用者反饋的項,我們通常設定其增益為0。

現在,我們把這些分數相加,也就是cumulative gain(累積增益)。我們更願意看那些位於列表前面的最相關的項,因此,在把這些分數相加之前,我們將每項除以乙個遞增的數(通常是該項位置的對數值),也就是折損值,並得到dcg。

在使用者與使用者之間,dcgs沒有直接的可比性,所以我們要對它們進行歸一化處理。最糟糕的情況是,當使用非負相關評分時dcg為0。為了得到最好的,我們把測試集中所有的條目置放在理想的次序下,採取的是前k項並計算它們的dcg。然後將原dcg除以理想狀態下的dcg並得到ndcg@k,它是乙個0到1之間的數。

你可能已經注意到,我們使用k表示推薦列表的長度。這個數由專業人員指定。你可以把它想像成是乙個使用者可能會注意到的多少個項的乙個估計值,如10或50這些比較常見的值。

這裡有一些計算ndcg的python**,非常簡單。

要注意到,我們實驗的測試集由訓練集以外的所有項組成,包括那些沒有使用者排名的項(與上面rmse討論中提到的一樣)。有時人們會對使用者留存率設定測試限制,所以推薦系統的任務是減少調整那些相對較少的項。在實際情景當中並不如此。

現在,它的要點是,還有另一種dcg表述。你還可以使用負相關分數。在這種情況下,你可以計算出更糟糕情況下dcg的歸一化(它將小於零),或者仍然使用零作為下限值,具體要視情況而定。

我們可以把使用者(和項)分成兩組:訓練集的一組和非訓練集的一組。第一組的驗證分數對應於所謂的弱泛化,而第二組對應于強泛化。在弱泛化的情況下,每個使用者都在訓練集。我們採取一些評價用於訓練,剩下的評價用於測試。在評估強泛化時,使用者既可用在訓練中,也可用在測試中。

有些演算法在這種場景中會更合適,而有些演算法則會變得更糟糕。例如,人們可能會說矩陣分解模型不能為新使用者提供推薦。這是不正確的。例如,使用交替最小二乘(als)。該方法通過在調整項因子時保持使用者因子不變,並在調整使用者因子時保持項因子不變,從而擬合模型,依次迴圈直至收斂。在測試時,當我們從乙個新使用者輸入時,我們可以保持項因子不變來擬合使用者因子,然後進行推薦。

一般來說,當**率是使用者和項因子之間的點積時,我們可以採取項因子和解決系統的線性方程組來估計使用者因子。這相當於擬合乙個線性回歸模型。我們希望的比率(例項)數是大於因子的數,但即使不能如願,我們也要感謝正則化。

缺乏例項是乙個眾所周知的冷啟動問題:如果乙個新的訪問者沒有評分,那麼協同過濾對於推薦就沒用。只有在我們有一些反饋之後,我們才能使用它開始工作。

一般情況下,乙個推薦系統得到的資訊越多就會表現得越好,理想的情況下,當系統從給定使用者中得到更多評價的時候,推薦的質量就會提高。在評價乙個系統時,我們要考慮這個維度。為了完成這個,對於乙個給定的使用者,我們選擇乙個評價來訓練,剩下的用來測試,然後選擇兩個評價進行訓練,剩下的用來測試並依次下去,重複計算推薦和ndcg,直到達到某個特定數值或者測試集中沒有剩餘的評價為止。然後,我們繪製出如下結果圖。

x軸是訓練的評價數,y軸是使用者ndcg@50均值

當比較兩個推薦系統的結果時,繪圖將揭開它們的不同。要麼乙個比另乙個更好,要麼在曲線的某些點上相交。

該交叉點提供了使用兩個系統組合的一種可能性。最初我們採用的是第乙個系統,當獲得的反饋大於閾值時,我們切換到另乙個系統。在這裡,當給出少許評價數時藍色會表現的更好,但當評價數大約50個時就會收斂。當提供更多的評價時,綠色則佔據上風。

這個分數是在大約1000個使用者組成的測試集中計算得到的,這個樣本大小提供了可識別的模型,但是仍然有一些噪音,正如你從鋸齒線上看到的那樣。

事實上,我們需要的應該是乙個數字而不是乙個繪圖,我們可以在訓練中平均化等級數目之間的得分,我們稱這個數為l。由此產生的指標是mandcg:均值(使用者之間)平均(1到l之間)ndcg。

本文的**在github上可以獲得。要執行它,在你的推薦系統上需要提供的資料和外掛程式。

最後,我們誠邀您來探索如何在moviemood上使用更多的評價數來提公升推薦系統的質量。

evaluating recommender systems

關於譯者:劉翔宇,中通軟開發工程師,關注機器學習、神經網路、模式識別。

推薦系統 NDCG評價指標及其Python實現方法

ndcg defget dcg y pred,y true,k 注意y pred與y true必須是一一對應的,並且y pred越大越接近label 1 用相關性的說法就是,與label 1越相關 df pd.dataframe df df.sort values by y pred ascendi...

評價推薦系統指標

評價指標 名稱符號 偏好是否依賴於推薦列表長度備註準 確度 評分準確度 平均絕對誤差 mae 小否 適用於比較關注精確的 評分的系統 平均平方誤差 mse 小均方根誤差 rmse 小 標準平均絕對誤差 nmae 小 評分關聯 pearson關聯 pcc 大適用於不關注精確 評分的系統,其中ndmp適...

推薦系統概述

物品 關注物品集的屬性和特徵 使用者 關注使用者基本屬性,年齡,性別等 事務 使用者的行為記錄,分為顯示行為和隱式行為 推薦系統的分類 基於內容 content based 為使用者推薦與過去興趣相似的物品,物品的相似性是基於被比較物品的特徵來計算的 協同過濾 cf collaborative fi...