1. 程式人生 > 實用技巧 >推薦系統中的評價指標

推薦系統中的評價指標

按照推薦任務的不同,最常用的推薦質量度量方法可以劃分為三類:
(1)對預測的評分進行評估,適用於評分預測任務。
(2)對預測的item集合進行評估,適用於Top-N推薦任務。
(3)按排名列表對推薦效果加權進行評估,既可以適用於評分預測任務也可以用於Top-N推薦任務。。

對使用者 \(u\) 推薦了N個物品 \(R(U)\),使用者在測試集上喜歡的物品集合為\(T(u)\)

  1. 準確率 Precision
    推薦給使用者的物品中,屬於測試集的比例:

\[P= \frac{R(u) \cap T(u)}{R(u)} \]

  1. 召回率 Recall
    測試集中有多少在使用者的推薦列表中。描述有多少比例的使用者-物品評分記錄包含在最終的推薦列表中

\[R = \frac{R(u) \cap T(u)}{T(u)} \]

  1. F1值
    P和R指標有時候會出現的矛盾的情況,這樣就需要綜合考慮他們。準確率和召回率的加權調和平均

\[F1 = \frac{2PR}{P+R} \]

  1. 排序分數 Ranking Score
    在評估推薦列表時引用排序指標很有用。推薦系統通常預測排名列表,然而使用者不太可能瀏覽所有的專案。因此,排序指標在測量實用性和排名資訊時可能很有趣。排序靠前的專案更重要。

\[R=\frac{1}{|E^{U}|}\sum_{ui\epsilon E^{U}}\frac{p_{ui}}{M-k_{u}} \]

其中,\(E^U\) 表示測試集中所有的邊的集合,如果\(u-i\)

在測試集中,則\(E_{ui} = 1\)\(p_{ui}\)表示商品\(i\)在使用者\(u\)的推薦列表中的位置,分母\(M-k_{u}\)表示使用者\(u\)的所有商品陣列中除了該使用者已經購買過的商品外的所有商品。
Rank Score 越小,說明測試集中的商品越靠前。

  1. 命中率 Hit ratio

\[HR@K=\frac{Number of Hits @K}{|GT|} \]

top-N推薦中流行的評價指標。
分母為所有的測試集合,分子表示每個使用者top-k推薦列表中屬於測試集合的個數的總和。
例如:三個使用者在測試集中的商品個數分別是10,12,8,模型得到的top-10推薦列表中,分別有6個,5個,4個在測試集中,那麼此時HR的值是
(6+5+4)/(10+12+8) = 0.5。

# 計算某個使用者的hit數
def hit(test_items,pred_items):
    count = 0 
    for item in pred_items:
        if item in test_items:
            count += 1
    return count

二、NDCG

在排序學習(Learning to rank)中,目標是構建一個排序模型用於對列表進行排序。排序學習的典型應用包括搜尋列表、推薦列表和廣告列表等等。
列表排序的目標是對多個條目進行排序,這就意味著它的目標值是有結構的。與單值迴歸和單值分類相比,結構化目標要求解決兩個被廣泛提起的概念:
列表評價指標
列表訓練演算法

列表評價指標
以關鍵詞搜尋返回文章列表為例,這裡先分析一下列表評價指標要解決什麼挑戰。

第一個挑戰就是定義文章與關鍵詞之間的相關度,這決定了一篇文章在列表中的位置,相關度越高排序就應該越靠前。
第二個挑戰是當列表中某些文章沒有排在正確的位置時候,如何給整個列表打分。舉個例子來說,假如對於某個關鍵詞,按照相關性的高低正確排序,文件1、2、3、4、5應該依次排在前5位。現在的挑戰就是,如何評估“2,1,3,4,5”和“1,2,5,4,3”這兩個列表的優劣呢?

舉個列子來說,對於某個請求關鍵詞,有200篇文章實際相關。某個排序演算法只認為100篇文章是相關的,而這100篇文章裡面,真正相關的文章只有80篇。按照以上定義:
準確率: \(\frac{80}{100}=0.8\)
召回率=\(\frac{80}{200}=0.4\)

6、折扣累計收益 DCG (Discounted Cumulative Gain)
主要思想是使用者喜歡的物品被排在推薦列表前面比後面會更大程度增加使用者體驗。
解決了準確率和召回率的兩個缺點:
1、所有文章只被分為相關和不相關兩檔,分類顯然太粗糙
2、沒有考慮位置因素

對於一個關鍵詞,所有的文件可以分為多個相關性級別,這裡以\(r_1,r_2…\)來表示。文章相關性對整個列表評價指標的貢獻隨著位置的增加而對數衰減,位置越靠後,衰減越嚴重。基於DCG評價指標,列表前k個文件的評價指標定義如下:

\[DCG@k=\sum_{i=1}^{K}\frac{2^{r_{i}}-1}{log_{2}(i+1)} \]

DCG缺點:對於排序引擎而言,不同請求的結果列表長度往往不相同。當比較不同排序引擎的綜合排序效能時,不同長度請求之間的DCG指標的可比性不高。

7、歸一化折扣累計增益 NDCG
https://blog.csdn.net/qq_34333481/article/details/102623753
由於在使用者與使用者之間,DCGs沒有直接的可比性,所以我們要對它們進行歸一化處理。最糟糕的情況是,當使用非負相關評分時DCG為0。為了得到最好的,我們把測試集中所有的條目置放在理想的次序下,採取的是前K項並計算它們的DCG。然後將原DCG除以理想狀態下的DCG就可以得到NDCG,它是一個0到1之間的數。

\[IDCG@k=\sum_{i=1}^{|REL|}\frac{2^{r_{i}}-1}{log_{2}(i+1)} \]

\(|REL|\)代表按照相關性排序好的最多到位置k的結果列表。

\[NDCG@k=\frac{DCG@k}{IDCG@k} \]

8、均方誤差MAE
對打分資料集進行評估。表示所有測試集中的預測打分和實際打分的差異。

\[MAE=\frac{\sum_{(u,i)\epsilon E^{U}|y_{ui}-\hat{y}_{ui}}|}{|E^{U}|} \]

9、均方根誤差RMSE

\[RMSE=\sqrt{\frac{\sum_{(u,i)\epsilon E^{U}}(y_{ui}-\hat{y}_{ui})^{2}}{|E^{U}|}} \]

10、MAP
對於AP可以用這種方式理解: 假使當我們使用google搜尋某個關鍵詞,返回了10個結果。當然最好的情況是這10個結果都是我們想要的相關資訊。但是假如只有部分是相關的,比如5個,那麼這5個結果如果被顯示的比較靠前也是一個相對不錯的結果。但是如果這個5個相關資訊從第6個返回結果才開始出現,那麼這種情況便是比較差的。這便是AP所反映的指標,與recall的概念有些類似,不過是“順序敏感的recall”。

AP:平均準確率

\[\begin{equation*} AP_u = \frac{1}{|\mathcal{I}_u^{te}|}\sum_{i \in \mathcal{I}_u^{te}}\frac{\sum_{j \in \mathcal{I}_u^{te}}\delta \left(p_{uj} \prec p_{ui}\right) + 1}{p_{ui}} \end{equation*}\]

其中,\(p_{ui}\)表示推薦列表中物品\(i\)的排序位置。\(p_{uj} \prec p_{ui}\)表示物品\(j\)的排序位置在物品\(i\)的前面.

def AP(ranked_list, ground_truth):
    """Compute the average precision (AP) of a list of ranked items

    """
    hits = 0
    sum_precs = 0
    for n in range(len(ranked_list)):
        if ranked_list[n] in ground_truth:
            hits += 1
            sum_precs += hits / (n + 1.0)
    if hits > 0:
        return sum_precs / len(ground_truth)
    else:
        return 0

MAP即為所有使用者的AP的均值

\[MAP = \sum_{i=1}^N AP_i \]

三、非準確率指標

1、Hmming distance. 漢明距離。通訊原理中的漢明碼 https://blog.csdn.net/Yonggie/article/details/83186280

\[H=\frac{1}{N(N-1)}\sum_{(i,j)\epsilon N,i\neq j}(1-\frac{c(i,j)}{K}) \]

其中,\(c(i,j)\)表示使用者\(i,j\)前k個推薦結果中相同結果的個數,N表示所有使用者數。
漢明距離能夠有效衡量兩個使用者推薦列表的差異,該值越大越說明使用者之間的推薦結果越不相同,差異性越大。

2、Intrasimilarity 內部相關性
對於使用者u的推薦列表,如果物品與物品之間的相似度越大,說明推薦給使用者的商品比較單一,推薦演算法越發現不了新的物品;反之,如果該值越小,則推薦的物品越豐富,越有利於對使用者的興趣進行擴充套件。

\[I=\frac{1}{N}\sum_{u\epsilon U}(\frac{1}{K(K-1)\sum_{\alpha \neq \beta }s_{\alpha \beta }}) \]

其中,\(s_{\alpha \beta }\)表示物品\(\alpha \beta\)的相似度,常用餘弦相似度。

3、Popularity 流行度

\[N=\frac{1}{N}\sum_{\alpha \epsilon O_{R}^{u}}\frac{d_{\alpha }}{K} \]

其中,\(O_{R}^{u}\) 表示使用者u的前k個推薦物品列表,\(d_{\alpha }\)表示\(\alpha\) 被多少個使用者購買過,代表該物品的熱度。
流行度越大,說明推薦演算法傾向於推薦“熱度”越大、越流行的商品;反之,則越傾向於推薦比較冷門的物品,越能反映出使用者的興趣。