推薦系統之位置敏感的評價指標--MAP和NDCG

MAP和NDCG這兩種指標是位置敏感的評價指標,總體來說可以理解爲:正確推薦的item在列表中越靠前,其貢獻的推薦效果越大,反之,正確推薦的item在列表中越靠後,貢獻的推薦效果越小。MAP和NDCG主要的區別在於,MAP考慮的時二元相關性(1和0),NDCG可以有多種相關性的比較,相關性可以按照程度有多種取值,類似於分類與迴歸的關係。

MAP一般應用的場景是:要麼相關要麼不相關,即推薦的貢獻要麼是0(推薦的東西用戶不喜歡),要麼爲1(推薦的東西用戶喜歡)。對於評分推薦系統,例如電影推薦系統,我們主要知道的是用戶對電影的評分,喜歡還是不喜歡沒那麼明確地表示出來,這個時候使用NDCG這一指標是比較合適的。

1、前提說明

我們這裏討論的是評價指標,所以是作用在訓練集或測試集上的,這裏以測試集的結果爲例。比如:文中說到“推薦n個item“就是指對測試集進行測試時,推薦n個item,說到”用戶喜歡此item或者用戶對item的評分“就是指測試集中顯示的用戶對item喜歡與否或者評分。

2、recall

在topN推薦中,我們爲用戶推薦N個item,如何來評價此推薦的效果呢?比較常用的是Recall(或者hitratio)也就是計算我們正確推薦的item數量佔用戶總的瀏覽的或喜歡的item數量的比重。舉個新聞推薦的例子,假設我們爲某個用戶推薦了10條新聞,假設其中有5條新聞是用戶喜歡的,用戶點擊新聞進行了閱讀,但實際上,用戶這一時間段共閱讀了20條新聞,所以recall=520=0.25recall=\frac{5}{20}=0.25

我們再來考慮一種情況:用戶點擊的這5條新聞排在推薦列表的前5還是後5表示的推薦效果是不一樣的,很明顯,排前面比排在後面好,但是使用recall卻無法體現位置差異帶來的推薦效果差異

3、MAP

MAP(Mean Average Precision)平均精度均值,可以說是位置敏感的recall。說到MAP首先要說AP(Average Precision),在推薦系統中,計算所有用戶的AP,然後對AP相加取平均就是MAP。
AP計算過程如下:
假設爲用戶u1u_1推薦了5條新聞,用戶喜歡(點擊了)的新聞分別位列第1、3、5位,則標識如下:[1,0,1,0,1],其中0代表用戶不喜歡此條新聞,1代表用戶喜歡此條新聞。實際上用戶不僅點擊了推薦給他的新聞,也閱讀了其他一些新聞,總共的點擊量爲20,那麼APu1=(1/1+2/3+3/5)/20=0.113AP_{u_1}=(1/1+2/3+3/5)/20=0.113。其中1、3、5代表推薦正確的新聞所在的位置,2=1+1,3=1+1+1,是累計到當前位置總共推薦正確的新聞數目,20是用戶閱讀的新聞總數。可以參考如下代碼理解:

def get_AP(rec_list,read_news):
    hit=0
    sum_=0
    for i in range(len(rec_list)):
    	if rec_list[i] in read_news:
    	    hit+=1
    	    sum_+=(hit/(i+1))
    return sum_/len(read_news

假設共有n個用戶,則每個用戶的AP求出來後,求個平均就是MAP啦。
MAP=i=1nAPuinMAP=\frac{\sum_{i=1}^n {AP_{u_i}}}{n}

4、NDCG(Normalized Discounted Cumulative Gain)

Normalized Discounted cumulative gain 直接翻譯爲歸一化折損累計增益。

4.1 CG(Cumulative Gain)

說到NDCG首先要說到CG.,即累積增益。舉個栗子:爲用戶推薦5個電影[M1,M2,M3,M4,M5][M_1,M_2,M_3,M_4,M_5],用戶對這5個電影的評分爲:[5,3,1,2,4],
CG=imreli=5+3+1+2+4=15CG=\sum_{i}^mrel_i=5+3+1+2+4=15

relirel_i表示電影與用戶的相關性,在這裏就是用戶對電影的評分。

我們可以看出,CG並沒有考慮位置信息,推薦列表
[M1,M2,M3,M4,M5][M_1,M_2,M_3,M_4,M_5]和推薦列表

[M3,M2,M1,M4,M5][M_3,M_2,M_1,M_4,M_5]得到的評價結果是一樣的,但我們知道評分高的電影排在推薦列表的前面是比較好的。
所以就有了DCG(Discounted Cumulative Gain)

4.2 DCG(Discounted Cumulative Gain)

discount,即打折的意思,對於同一個電影,如果其在推薦列表中的位置越靠後,它對推薦的貢獻就越小。公式如下:

DCG=im2reli1log2(i+1)DCG=\sum_{i}^m\frac{2^{{rel}_i}-1}{log_2(i+1)}

式子乍一看上去有些複雜,我們可以參考一個例子:
當推薦列表爲[M1,M2,M3,M4,M5][5,3,1,2,4][M_1,M_2,M_3,M_4,M_5](對應評分[5,3,1,2,4])時:

DCG5=i=152reli1log2(i+1)DCG_5=\sum_{i=1}^5\frac{2^{{rel}_i}-1}{log_2(i+1)}

=251log2(2)+231log2(3)+211log2(4)+221log2(5)+241log2(6)=43.01=\frac{2^5-1}{log_2(2)}+\frac{2^3-1}{log_2(3)}+\frac{2^1-1} {log_2(4)}+\frac{2^2-1}{log_2(5)}+\frac{2^4-1}{log_2(6)}=43.01

當推薦列表爲[M3,M2,M1,M4,M5][1,3,5,2,4][M_3,M_2,M_1,M_4,M_5](對應評分爲[1,3,5,2,4])時,

DCG5=i=152reli1log2(i+1)DCG_5=\sum_{i=1}^5\frac{2^{{rel}_i}-1}{log_2(i+1)}

=211log2(2)+231log2(3)+251log2(4)+221log2(5)+241log2(6)=28.01=\frac{2^1-1}{log_2(2)}+\frac{2^3-1}{log_2(3)}+\frac{2^5-1} {log_2(4)}+\frac{2^2-1}{log_2(5)}+\frac{2^4-1}{log_2(6)}=28.01

很明顯,43.01>28.01,
[M1,M2,M3,M4,M5][M_1,M_2,M_3,M_4,M_5]優於 [M3,M2,M1,M4,M5][M_3,M_2,M_1,M_4,M_5]

而NDCG其實就是對DCG進行歸一化.

4.3 NDCG

NDCG=DCGidealDCGNDCG=\frac{DCG}{idealDCG},

idealDCG是理想狀態下的DCG,還以電影推薦爲
例,[M1,M2,M3,M4,M5][M_1,M_2,M_3,M_4,M_5] 對應的評分爲:[5,3,1,2,4],按照評分由大到小的順序,理想的推薦列表應該爲:[M1,M5,M2,M4,M3][M_1,M_5,M_2,M_4,M_3] ,對應評分[5,4,3,2,1]
理想狀態下的DCG爲:

idealDCG==i=152reli1log2(i+1)idealDCG==\sum_{i=1}^5\frac{2^{{rel}_i}-1}{log_2(i+1)}
=251log2(2)+241log2(3)+231log2(4)+221log2(5)+211log2(6)=45.64=\frac{2^5-1}{log_2(2)}+\frac{2^4-1}{log_2(3)}+\frac{2^3-1} {log_2(4)}+\frac{2^2-1}{log_2(5)}+\frac{2^1-1}{log_2(6)}=45.64

那麼,推薦列表[M1,M2,M3,M4,M5][M_1,M_2,M_3,M_4,M_5]的NDCG爲:
43.01/45.64=0.94
推薦列表[M3,M2,M1,M4,M5][M_3,M_2,M_1,M_4,M_5]的NDCG爲:
28.01/45.64=0.6

NDCG是介於[0,1]之間的值,值越大說明推薦的效果越好。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章