レコメンド指標の整理: Recall@k・MRR・MAP・nDCG

公開:2020/11/13
更新:2020/11/15
1 min読了の目安(約1700字TECH技術記事

各クエリに対しそれぞれ上位 kk 個の予測を出すようなシステムを評価する指標をまとめます。

Recall@k

各クエリに対して、上位 kk 個の予測に含まれる正解数が、総正解数のうちどの程度の割合含まれているかを計算します。そして最後にクエリ全体で平均を取ります。

MRR (Mean Reciprocal Rank)

各クエリ ii の予測を上から見たときに最初に正解が出てきた時の順位rankirank_i とします。それに対して、以下のような式を計算します。

MRR=1Qi=1Q1ranki MRR = \dfrac{1}{|Q|} \sum_{i=1}^{|Q|} \dfrac{1}{rank_i}

なお、予測に正解が一つも含まれない場合は 1ranki=0\dfrac{1}{rank_i} = 0 とします。

MAP (Mean Average Precision)

まず、Average Precision について説明します。これは yjy_j を、ii 番目のクエリの予測について、上から jj 番目の予測が正解であれば 11、そうでなければ 00 の変数として、次のように書けます。

APi=1GTPj=1kP@jyj AP_i = \dfrac{1}{GTP} \sum_{j=1}^k P@j \cdot y_j

なお、P@jP@j は上から jj 番目までの予測における Precision の値、GTPGTP は総正解数です。


例えば以下の例で考えてみましょう。クエリの総正解数は5個とします。これに対して、上位10個の予測は以下の通りになりました。

1位 2位 3位 4位 5位 6位 7位 8位 9位 10位
正解 正解 正解 正解

このとき Average Precision は

(11+23+36+49)15 \bigg(\dfrac{1}{1} + \dfrac{2}{3} + \dfrac{3}{6} + \dfrac{4}{9} \bigg) \cdot \dfrac{1}{5}

となります。


この Average Precision を各クエリ ii に対して計算し、最後にその平均

MAP=1Qi=1QAPi MAP = \dfrac{1}{|Q|} \sum_{i=1}^{|Q|} AP_i

を計算します。

nDCG (normalized Discounted Cumulative Gain)

nDCG は各予測アイテムのオススメ度をそのままスコアに使う指標です。色々な流儀があるようなので、より詳しくは Wikipedia の記事 をご覧ください。

上から jj 番目の予測が、実際にはオススメ度 reljrel_j であった場合、DCG は以下のように計算できます。

DCG=j=1k2relj1log2(j+1) DCG = \sum_{j=1}^k \dfrac{2^{rel_j} - 1}{\log_2 (j + 1)}

なお扱っているデータにオススメ度という概念がなく「正解」「不正解」しか無い場合は、単に正解のオススメ度を relj=1rel_j =1, 不正解のオススメ度を relj=0rel_j=0 と考えて計算すればよいです。この場合、各分子の値は、正解は 2relj1=12^{rel_j} - 1 = 1, 不正解は 2relj1=02^{rel_j} - 1 = 0 になります。

nDCG は、計算された DCG を、考えうる限り最も理想的な DCG で割って正規化します。「考えうる限り最も理想的な DCG」とはすなわち、オススメ度の最も高いものから順に予測できている場合の DCG です。