🦔

情報検索における適合率、再現率、F値

に公開

情報検索の精度向上をするために、ユーザーの情報要求、つまり検索クエリに対する結果を評価する必要があります。
その評価において使われる指標を少し整理しようと思います。

比較する集合の定義

  1. 検索クエリによって得られたドキュメント集合(Res と表現する)
  2. 関連があると想定していたドキュメント集合(Rel と表現する)

Rel については予め定めておく必要があります。

\bigcap は積集合、共通要素を表す記号です。

再現率(recall)

関連するドキュメントの中で検索結果に現れるドキュメントの割合です。

再現率 = \dfrac{Res \bigcap Rel}{ Rel }

情報要求に対する検索結果の網羅性を測定しています。
単純にすべてのドキュメント集合を結果として返せば再現率は100%になります。
ただし、ほとんどの検索決結果は無関係のドキュメントになってしまうでしょう。
なので、網羅性が高ければよいという訳ではないです。
文献検索や法律文書検索などで、取りこぼしがあると大きな問題がでるものは網羅率が高い必要があります。
一方で、「Go make slice」などの検索においては、公式ドキュメント以外に様々なブログ、SNSの記事などがヒットするとそれはそれでノイズで公式ドキュメントなどの少数に質の高いドキュメントが結果として出れば良い場合もあるかと思います。
再現率の重要性はサービスの性質に応じて検討が必要になると思います。

適合率(precision)

検索結果に現れるドキュメントの中で、関連するドキュメントの割合です。
適合率、再現率は分母が違うだけで分子は同じです。

適合率 = \dfrac{Res \bigcap Rel}{ Res }

再現率において、再現率が高いと非関連のものが多くなる可能性があるので、これを補うための評価指標となります。
この適合率は、逆数にすると、関連するドキュメントに合うまでどれくらいの のドキュメントを確認するかの期待値となっています。

F値

再現率と適合率を組み合わせた指標として、F値があります。
F_1 は一番簡単なF値で、再現率と適合率の調和平均となります。

F_1 = 2 \times \dfrac{適合率 \times 再現率}{適合率 + 再現率}

さらに、適合率、再現率のどちらかに重みを与えるようなF値もあります。

F_\beta = \dfrac{(\beta^{2}+1) \times 適合率 \times 再現率}{\beta^{2} \times 適合率 + 再現率}

\beta は任意の実数です。
F_0 は再現率となり、 F_\infty は適合率となります。

|\beta| < 1 は再現率に重きを置くことになり、|\beta| > 1 では適合率に重きを置くことになります。

Google spreadsheetで計算するには

spreadsheetで下記のように計算したいと思うので、その方法を紹介します。

ResRel にはそれぞれカンマ区切りで集合のデータをいれます。ここでは重複なしとしています。

まずは個数の求め方ですが、下記のような関数で計算します。

=COUNTA(UNIQUE(SPLIT(REGEXREPLACE(C4, "\s*,\s*", ","), ",")))

カンマ前後のスペースは取り除いていますが、a,b,,c, のような空が入っているものは除いていません。

Res \bigcap Rel の求め方は下記のような関数で計算します。

=LET(
  a, SPLIT(REGEXREPLACE(C4, "\s*,\s*", ","), ","),
  b, SPLIT(REGEXREPLACE(D4, "\s*,\s*", ","), ","),
  Aset, UNIQUE(FILTER(a, a<>"")),
  Bset, UNIQUE(FILTER(b, b<>"")),
  COUNTA(UNIQUE(FILTER(Aset, COUNTIF(Bset, Aset)>0)))
)

それぞれの個数と積集合の個数が求められれば、あとは計算するだけです!

参照

https://zenn.dev/spring_mt/articles/2947c05a723f1a

Discussion