recall と precision の定義と意味

推薦アルゴリズムの評価に使われる recall と precision の定義や意味についてまとめました.

定義

まずは定義から確認です. とその前に, この記事を通して使っていく記号を導入しておきましょう.

  • \(X\): 正解ランキング. システムによっては順序が入っていない場合があります.
  • \(R\): アルゴリズムが出力した予測ランキング. 上から \(N\) 位までに制限したものは \(R_N\) と書くことにしましょう.

次に各指標の定義です.

recall

\[ \mathrm{recall}@N = \frac{|X \cap R_N|}{|X|} \]

取りうる値の範囲は次のようになります. \[ 0 \leq \mathrm{recall}@N \leq \min\left\{1, \frac{N}{|X|}\right\} \]

precision

\[ \mathrm{precision}@N = \frac{|X \cap R_N|}{|R_N|} = \frac{|X \cap R_N|}{N} \]

取りうる値の範囲は次のようになります.

\[ 0 \leq \mathrm{precision}@N \leq \min\left\{1, \frac{|X|}{N}\right\} \]

意味

定義は定義でいいわけですが, これらの指標の意味合いを理解しておく必要があります.

それぞれの指標値は何を表しているの?

recall も precision も分子は正解集合と予測ランキングの共通部分のサイズです. 異なるのは分母だけですね.

recall は分母が正解集合のサイズですから, 正解集合のうちいくつをランクインさせることができたか を表しています.

対して precision は分母が予測ランキングのサイズですから, 予測ランキング内にいくつ正解アイテムをランクインさせることができたか を表しています.

ただし定義にも書いたとおり, \(0\) から \(1\) までめいいっぱい取りうるわけではないため, 数字単体を見て「低い!」などとは評価できません.

2つの違いは何?

2つの指標の違いを体感するために, 具体的な数値を設定して計算してみます.

Googleの検索結果は1ページに10件表示されるので, \(N=10\) に固定します.

例1

\(|X| = 100\) とすると, それぞれの取りうる値の範囲と変動幅は以下のようになります.

  • \(0 \leq \mathrm{recall} \leq 0.1\), 変動幅は \(0.01\)
  • \(0 \leq \mathrm{precision} \leq 1\), 変動幅は \(0.1\)

例2

\(|X| = 5\) とすると, それぞれの取りうる値の範囲と変動幅は以下のようになります.

  • \(0 \leq \mathrm{recall} \leq 1\), 変動幅は \(0.2\)
  • \(0 \leq \mathrm{precision} \leq 0.5\), 変動幅は \(0.1\)

こんなふうに \(|X|\)\(N\) の大小関係によって取れる範囲が逆転します. また \(|X|\)\(N\) の値によって各指標値の変動幅も変わってきます. まー当たり前ですが.

指標値が向上することは何を意味するの?

アルゴリズムの改善によって指標値が向上した場合, 出力された予測ランキングにはどんな変化が現れたことになるのでしょうか.

まず \(|X|\) には変化がありません. アルゴリズムの改善に月日を費やしすぎてユーザーの趣味趣向が変わったということがなければの話ですが.

また, 改善の前後で \(N\) を変えるということもありません.

したがって指標値が向上したということは \(|X \cap R_N|\) が増加したということにほかなりません. 言葉で言えば, 予測ランキングにより多くの正解アイテムがランクインするようになった ということです.

つまり, recall が向上することと precision が増加することは同値なのです.

「そんなら両方ある意味あるんかいな〜」となりそうですが, これらが違いを生む場合があります.

それは複数のユーザーで平均値をとってアルゴリズムを評価しているときです.

先も述べたように, ユーザーごとに「recall が向上する \(\iff\) precision が向上する」自体は成り立ちます. しかしユーザーごとに \(|X|\) が異なれば, 各指標の変動幅も変わってきます.

例えば2人のユーザー A, B に対し, \(|X \cap R_N|\) の増加量が以下のようだったとしましょう. すると recall の平均値は増加しますが, precision の平均値は減少します.

ユーザー \(N\) \(|X|\) \(|X \cap R_N|\) の増加量 recall の増加量 precision の増加量
A 10 100 -2 -0.02 -0.2
B 10 20 1 0.05 0.1

このようにユーザー間の平均を考えた場合は各指標の増減は必ずしも一致しないのです.

ということは増減の組み合わせによって少しだけ細かく様子を汲み取ることができるわけですね. それをまとめたのが次の表です.

平均 recall 平均 precision 意味
ランキングが全体的に改善した傾向にある
\(|X|\)が小さい人のランキングは向上したが,
\(|X|\)が大きい人のランキングは悪化した傾向にある
\(|X|\)が大きい人のランキングは向上したが,
\(|X|\)が小さい人のランキングは悪化した傾向にある
ランキングが全体的に悪化した傾向にある

こんなふうに片方の指標だけでは得られなかった情報まで得ることができます.

まとめ

本記事では推薦システムの評価に使われる recall と precision について見てきました. 単に「大きい」や「増加した」ではなく, 何を意味するかまで考えるの大事ですね.