⚖️

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

2020/11/13に公開

各クエリに対しそれぞれ上位 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