はじめに
大学の講義内で、興味深い評価の紹介があったので(おそらく初歩的だが)備忘録として残しておこうと思う。概要
人工知能のモデルの評価方法には今まで正答率しか考えてこなかった。しかしそれでは、性能としては高いのかも知れないが、実際に使えるかどうかは微妙なところがあるようだ。例えば、昨今流行している新型コロナウイルスに罹患しているかしていないかを、ある識別器を用いてクラス分類するとしよう。識別された結果の内訳がこのような場合を考える。
\ | 罹患と予想 | 非罹患と予想 |
---|---|---|
罹患 | 5 | 7 |
非罹患 | 5 | 87 |
このような行列を混同行列と呼ぶ。
この記事内では、行列の値それぞれを以下のように定義することとする。
\ | 罹患と予想 | 非罹患と予想 |
---|---|---|
罹患 | TP (True Positive) | FN (False Negative) |
非罹患 | FP (False Positive) | TN (True Negative) |
まず正答率についてだが、式にするとこのようになる。
accuracy = \frac{TP + TN}{TP + FN + FP + TN}
これを実際の数値に当てはめてみると、
accuracy = \frac{5 + 87}{5 + 7 + 5 + 87}
となり、accuracyは以下のようになる(途中計算略)
accuracy \fallingdotseq 0.88
高いとは言えないがそれなりに分類できていると考える。以前の私であればそのままほっといたかも知れないが、今はそうではない。
次の評価基準として、精度(適合率)、再現度、F値について説明しよう。
Precision (精度、適合率)
最初に精度と聞いたときに、「解釈的には正答率と何が違うのだろうか」と考えた。日本語は難しい。 まずはじめにこの値を求める式をお見せしよう。precision = \frac{TP }{TP + FP }
まあこれだけ見ても何を意味しているのかはわからない。(自分も)
まず分母は、識別器がPositive、つまり今回の場合は、新型コロナウイルスに罹患していると判断したデータの総数だ。
そして分子は、陽性であると識別子が判断し、実際に陽性だったデータの総数ということになる。
つまりこの値は、陽性だと判断された中で、実際に陽性だった人の割合を示す値であることがわかる。
このことから、この値が上昇すると偽陽性が減ることになる。
次のRecallについては偽陽性の逆、そう偽陰性についてだ。
Recall(再現度)
こちらについても先に値の求め方を明記しておこう。recall = \frac{TP }{TP + FN }
分母については、実際にPositiveだったデータの総数が。
分子にはPositiveと判断され、実際にPositiveだったデータの総数が入る。
つまり、値は、実際に陽性の人の内識別器に正しく陽性だと判断された割合を示すことになる。
このことから、この値が上昇すると、偽陰性の割合が減ることになる。
つまり......?
今回の事例で言うと、新型コロナウイルスはとても感染力の強いウイルス(知らんけど)だと仮定すると、偽陽性だった場合は、本当は陽性じゃないけど陽性だと判断されるため、その本人しか不利益なことは起きない。(ホントはこれもダメ) しかし、偽陰性だった場合はその逆で、ホントは陽性なのに陰性だと判断され、さらに感染を広げる原因となってしまうため、これを減らすことが社会的には良いことだと私は思う。ここで何かを感じた方もいらっしゃると思うが、
PrecisionとRecallどっちもあげれば万事解決じゃね?
これが至極真っ当な意見である。しかしどうやら、人工知能はそんなに有能ではないらしく、PrecisionとRecallはトレードオフの関係にあるらしく、どちらも高い状態にすることは、不可能に近いそうだ。
人工知能は有能ではあるが、知らない人が使い道を誤ると、偽陰性のような危険な状態になってしまうことをお忘れなきよう...
終わりに
とても文章が長くなってしまったが、LaTeXを用いた計算式の書き方の学習にちょうどよかったと感じた。 とても初歩的な範囲であると思うので、これから人工知能を学習する人には新鮮な内容ではないかと考える。 熟練者の皆様。暖かい目で見守っていただけると幸いです。そろそろWebアプリケーション開発についての記事がかければいいなと思っています。 ありがとうございました。