各クエリに対しそれぞれ上位 k 個の予測を出すようなシステムを評価する指標をまとめます。
Recall@k
各クエリに対して、上位 k 個の予測に含まれる正解数が、総正解数のうちどの程度の割合含まれているかを計算します。そして最後にクエリ全体で平均を取ります。
MRR (Mean Reciprocal Rank)
各クエリ i の予測を上から見たときに最初に正解が出てきた時の順位を rank_i とします。それに対して、以下のような式を計算します。
MRR = \dfrac{1}{|Q|} \sum_{i=1}^{|Q|} \dfrac{1}{rank_i}
なお、予測に正解が一つも含まれない場合は \dfrac{1}{rank_i} = 0 とします。
MAP (Mean Average Precision)
まず、Average Precision について説明します。これは y_j を、i 番目のクエリの予測について、上から j 番目の予測が正解であれば 1、そうでなければ 0 の変数として、次のように書けます。
AP_i = \dfrac{1}{GTP} \sum_{j=1}^k P@j \cdot y_j
なお、P@j は上から j 番目までの予測における Precision の値、GTP は総正解数です。
例えば以下の例で考えてみましょう。クエリの総正解数は5個とします。これに対して、上位10個の予測は以下の通りになりました。
1位 |
2位 |
3位 |
4位 |
5位 |
6位 |
7位 |
8位 |
9位 |
10位 |
正解 |
|
正解 |
|
|
正解 |
|
|
正解 |
|
このとき Average Precision は
\bigg(\dfrac{1}{1} + \dfrac{2}{3} + \dfrac{3}{6} + \dfrac{4}{9} \bigg) \cdot \dfrac{1}{5}
となります。
この Average Precision を各クエリ i に対して計算し、最後にその平均
MAP = \dfrac{1}{|Q|} \sum_{i=1}^{|Q|} AP_i
を計算します。
nDCG (normalized Discounted Cumulative Gain)
nDCG は各予測アイテムのオススメ度をそのままスコアに使う指標です。色々な流儀があるようなので、より詳しくは Wikipedia の記事 をご覧ください。
上から j 番目の予測が、実際にはオススメ度 rel_j であった場合、DCG は以下のように計算できます。
DCG = \sum_{j=1}^k \dfrac{2^{rel_j} - 1}{\log_2 (j + 1)}
なお扱っているデータにオススメ度という概念がなく「正解」「不正解」しか無い場合は、単に正解のオススメ度を rel_j =1, 不正解のオススメ度を rel_j=0 と考えて計算すればよいです。この場合、各分子の値は、正解は 2^{rel_j} - 1 = 1, 不正解は 2^{rel_j} - 1 = 0 になります。
nDCG は、計算された DCG を、考えうる限り最も理想的な DCG で割って正規化します。「考えうる限り最も理想的な DCG」とはすなわち、オススメ度の最も高いものから順に予測できている場合の DCG です。
Discussion