こんにちは、NDKCOM の濱﨑です。
本記事では、情報検索における検索性能を評価するための指標について紹介します。
私自身の理解の程度を書き記すため、ブログ記事とすることにしました。
情報検索 (Information Retrieval)
情報検索 (Information Retrieval) とは、 大量のデータから目的に合致したものを取り出すことを言います。 普段私たちが使用している Google 検索や Microsoft Bing はもちろん情報検索です。 Amazon では、過去の購入履歴などから人工知能が商品をお勧めしてくれますが、これも情報検索と言ってよいでしょう。 大量のデータ (Amazonで購入できるもの) から目的に合致したもの (次に買いそうなもの) を取り出しているからです。
情報検索を図にすると、以下のようなると思います。(大胆に単純化しています)
図の左側の大きい水色の丸が「大量のデータ」で、黄色い丸が「目的に合致したもの」です。 情報検索とは、点線の丸の領域を取り出すこと、です。 使用する検索アルゴリズムによって、点線の丸の、位置、大きさ、形などが変わってくるという感じです。
情報検索において、使用している検索アルゴリズムの性能がどの程度であるかを評価するには、なんらかの数値を計算する必要があります。 本記事は、この性能を評価する基本的な指標である、精度、再現率、および F値について紹介したいと思います。
なお、以降の文章では、「目的に合致したもの」を「正解」と呼ぶことにします。
精度 (Precision)
精度とは「"検索したもの" に占める "検索したものの中の正解" の割合」です。上の図の場合、点線の丸で半欠けの黄色の部分を割り算したものになります。検索したものの中にどれくらい正解があったか、を 0 以上 1 以下の数値で表したものです。精度は適合率と呼ぶこともあります。
検索性能を評価する指標として、精度は理にかなったものであると思います。 つまり、精度を用いた場合、取り出した部分(点線の丸)が正解(黄色い丸)に完全に一致する場合に 1 (=100%) になるからです。 検索して得られたものが全て正解である場合、検索アルゴリズムとしては完ぺき (100%) と言ってよいでしょう。
ところが、精度が 1 になるのは、上述の「取り出した部分(点線の丸)が正解(黄色い丸)に完全に一致する場合」以外でも起こり得ます。 つまり、検索したもの(点線の丸)が正解(黄色い丸)にすっぽり含まれてしまう場合です。
この場合も「検索したもの=検索したものの中の正解」とりますので、精度は 1 です。 ですが、点線の丸の外側にも黄色の部分がありますので、他にも存在する正解を取りこぼしていることになります。 正解が他にも存在するのに、それらを取り出せていない検索アルゴリズムは果たして良い検索アルゴリズムと言えるのでしょうか?
精度は理にかなった評価指標であると思われますが、 精度とは異なった観点、すなわち「正解を全て取り出せているかどうか」も検索性能を測る上では重要な要素となるでしょう。 これを評価するものが、次に説明する再現率になります。
再現率 (Recall)
再現率とは「"正解" に占める "検索したものの中の正解" の割合」です。 黄色い丸で半欠けの黄色い部分を割り算したものになります。 再現率は、検索によって正解をどの程度網羅できたか、を 0 以上 1 以下の数値で表したものです。 再現率は、精度と同様に、取り出した部分(点線の丸)が正解(黄色い丸)に完全に一致する場合に 1 (=100%) になります。
精度とは異なる観点の再現率ですが、再現率は再現率で問題があります。 その問題とは「検索したものの数を増やせば増やすほど再現率は大きくなる」ことです。 極端な例として、検索したものを増やしに増やして大量のデータ全て、すなわち、検索対象全てを検索結果とする場合を考えます (もちろん検索結果=検索対象全てなどという検索は馬鹿げています)。
検索結果を検索対象全てとする場合、その検索結果には必ず全ての正解が含まれています。 したがって、再現率は 1 (=100%) となります。 再現率は 1 ですが、検索結果を検索対象全てとする検索が良い検索であるとは到底思えません。
「検索したものの数を増やせば増やすほど再現率は大きくなる」という再現率の性質は、検索性能を評価するうえで問題となります。 つまり、再現率を大きくしたいのであれば、検索アルゴリズムによって取り出すものの数を単純に増やせばよい、ということになってしまうからです。
よって、再現率だけで検索性能を評価することもまたよろしくありません。 そこで、精度と再現率の両方を良い感じで考慮する評価指標を導入することになります。 このような評価指標が F値 です。
余談ですが、英語の recall には「回収する」という意味があります(不具合のある自動車を自動車会社が回収することをリコールといいます)。 再現率という日本語訳はいまいちピンと来ないので、 「検索で正解をどれだけ回収できたか」という意味で recall の日本語は「回収率」のほうがしっくりくる、と私は思います。
精度と再現率のトレードオフ
F値を説明する前に、精度と再現率のトレードオフについて説明します。
トレードオフとは、「両立できない関係」のことです。 片方を大きくするともう片方が小さくなる、すなわち、2 つのものを一緒に大きくしたり小さくしたりできない関係にあるとき、 その 2 つはトレードオフの関係にある、と言います。
再現率の説明の際に「検索したものの数を増やせば増やすほど再現率は大きくなる」という説明をしましたが、実際このことは数学的に示すことができます。 ここにその証明を書くことはしませんが、再現率の定義から結構簡単に示すことができます。
一方、精度については「検索したものの数を増やせば増やすほど精度は小さくなる」ということが数学的に示せます。 こちらは、精度の定義だけから証明することはできないようですが、ちょっとした仮定と平均値の定理を使うと示せます。
まとめると、精度と再現率については次のような性質があります:
- 精度 :検索したものの数を増やせば増やすほど小さくなる
- 再現率:検索したものの数を増やせば増やすほど大きくなる
このことを簡単に図にする以下のようになります。(※正確ではないです)
図からみて分かる通り、検索したものの数をコントロールすることで、精度と再現率を同時に大きくすることはできないのです。
これが、精度と再現率のトレードオフです。
F値 (F-score)
精度および再現率を単体で性能評価に使うのはあまりよろしくなさそうであることは、既に説明しました。 また、精度と再現率はトレードオフの関係があることも上に述べた通りです。
実は、トレードオフの関係にあるものを合わせて、いい感じに考慮する計算方法があります。それが「調和平均」です。 そして、精度と再現率の調和平均を取ったものが、F値になります。 調和平均は「逆数の平均の逆数」と定義されている量ですので、これを精度と再現率に当てはめると、
となります。ここで、p が精度、r が再現率です。
調和平均は、足し合わせるもの(今の場合は精度と再現率)の和が一定の値となる場合に、その「足し合わせるものの値が等しいと最大」になるような値です。 これが調和平均の「調和」の由来(のはず)です。
F値を検索性能の評価に使う場合の、極端な例として、精度と再現率に p+r=1 という関係がある場合を考えます。 p+r=1 はトレードオフの関係、つまり「片方を大きくするともう片方が小さくなる」ことを表す例の一つです。 この場合 F値は、
となり、グラフを書くと、
となります。 グラフは、ちょうど真ん中の p = 0.5 = 1/2 の時、つまり p = r = 1/2 の時に最大になり、真ん中から外れていくにつれて小さくなっています。 つまり、F値で検索性能を評価する場合、p と r が等しいときに最も性能が良いということになり、 p と r が等しい場合から外れると、性能が悪くなるとということになります。
F値による評価は、精度と再現率を合わせて考慮する場合に都合が良いです。 いくつかの検索アルゴリズムを比較してどれが良いかを評価する際に F値を用いることで、 精度および再現率に偏った検索アルゴリズムではなく精度と再現率がどちらも同じくらい良い、要するに、いい感じのものを「性能が良い」と評価できるからです。
以上、検索性能を評価する基本的な評価指標である、精度、再現率、およびF値について説明しました。 補足として、F値については、精度と比較して再現率を何倍重視するかを表す係数 を取り入れた というものがあります。 ただ の場合は、 をどうやって決めるのかという問題があるかと思います。 また、検索性能を評価する指標としてよく使用されるものに Average Precision というものがありますが、それはまたの機会にしたいと思います。