スパムメールフィルタや画像フィルタなどを使って、OK/NGを判定する仕組みを作ろうとした時に、その精度を数値化する必要がある。 フィルタが有用かどうかを判断したり、改良するときの指標になるからだ。
正解率(不正解率)という指標
正解率とは、正しく判定出来た数を、全ての試行の数で割ったものである。 正解率99%のフィルタと聞くと有用に思えるが、単純に正解率だけを見て採用するのは危険な場合がある。
例えば、フィルタがスパム判定したメールを自動的に削除するメールシステムがあるとする。 2種類のフィルタ、AとBのどちらが適切か知るために1000件のメールを処理して正解率を算出した。
フィルタA 1000件処理した結果
- スパム判定したメールは100件
- スパム判定したメールのうち、10件はスパムではなかった
- スパムでないと判定したメールは、全て正しかった
フィルタAは間違えた10件を除いた990件が正解だったので、
正解率 = 990/1000 * 100 = 99%
フィルタB 1000件処理した結果
- スパム判定したメールは10件
- スパム判定したメールは全てスパムだった
- スパムでないと判定したメールの中に、スパムが80件存在した
フィルタBは間違えた80件を除いた920件が正解だったので、
正解率 = 920/1000 * 100 = 92%
今回のメールシステムでは誤った判定をするとメールが削除されてしまうので、正解率は低いがスパム判定を間違えないフィルタBを採用するだろう。
適合率と再現率という指標
前項でフィルタBを選んだ判断基準は、”適合率”と”再現率”という指標を使い数値で比較することができる。
適合率とは
判定結果の正しさで、スパムであると判定した中に正解がどの程度あるか。
再現率とは
判定結果の網羅性で、実際に存在したスパムをどの程度見つけることができるか。
実際に計算してみる
まず、フィルタでスパム判定した結果を4つのグループに分ける。
(※ハムはスパムの逆の意)
- スパムと判定して、スパムだったもの (True Positive)
- スパムと判定したが、ハムだったもの (False Positive)
- ハムと判定したが、スパムだったもの (False Negative)
- ハムと判定して、ハムだったもの (True Negative)
頭にTrueとついているものが判定として正解で、逆がFalseになる。
計算式
適合率 = TP / (TP+FP)
再現率 = TP / (TP+FN)
これを先ほどのフィルタでそれぞれで計算すると
フィルタA
- 適合率 = 90 / (90+10) = 90%
- 再現率 = 90 / (90+0) = 100%
フィルタB
- 適合率 = 10 / (10+0) = 100%
- 再現率 = 10 / (10+80) = 11.1%
つまり、先ほどは適合率(判定結果の正しさ)を見て、フィルタBを選択したといえる。
フィルタを改良する時に見る指標について
適合率と再現率をともに高めていくことが、よりよいフィルタにしていくことになるが、これら二つはトレードオフの関係になっている。
スパムメールフィルタの例では、間違える確率を下げるために条件をゆるくしていくと、ハムをスパムと間違えることは少なくなるが、実際のスパムをスパムとして判定出来る確率も下がっていくだろう。
目的に応じて、バランスを取りながら数値を見ていくことになるが、そのバランスを取る時にF値という指標を使うことがある。
F値 = 2 x 適合率 x 再現率 /(適合率+再現率)
それぞれの指標を見ながら、精度を高めていくことが重要である。
参考にしたサイト: