はじめまして、イシです。
最近現場の業務で機械学習モデルの評価をする機会があったので、その際に使用した評価指標の中から代表的なものを4つ紹介していきます。
また、評価指標を紹介するにあたり具体的な場面を思い浮かべられたほうが良いと思うので「病気の発症をしているかどうか」を例に、混同行列を使って予測値と実測値を整理し説明していきます。
Part1:概要と数式
- 正解率
- 正解率とは、全体の数に対して正しく予測できたデータの数の割合のことです。
- 正解率=正しく予測できた数(TP+TN)/全体の数(TP+FP+FN+TN)
- 再現率
- 再現率とは実際に陽性だった数に対して正しく陽性と判定できた割合のことです。
- 再現率=陽性と判定できた数(TP)/実際に陽性だった数(TP+FN)
- 適合率
- 適合率とは陽性と予測した数に対して実際に陽性と判定できた割合のことです。
- 再現率=陽性と判定できた数(TP)/陽性と予測した数(TP+FP)
- F値
- F値とは再現率と適合率の調和平均のことです。
- F値=2*再現率*適合率/(再現率+適合率)
Part2:実際に各パターンで計算をしてみると…
まずはパターンAを見てみましょう。
正解率が0.9と良く予測できていると判断できてしまいそうですが、再現率、適合率、F値いずれも0.5であることから必ずしも良い予測モデルではないと考えられます。
なぜこのような現象が起きているかなのですが、実測値の比率に注目してみてください。
パターンAでは陽性と陰性の比率が1:9であることから、極論すべて陰性であると予測していたら正解率が0.9となってしまいます。
なのでモデルを評価するうえで実測値の比率にも目を向ける必要があります。
次にパターンB、Cを見てみましょう。
正解率は0.7と0.727、F値に関しては全く同じです。そして再現率と適合率が反対の値となっています。
基準は現場によってさまざまなので一概には言い切れませんが、正解率、F値ともに悪くない数値であるように見えます。
ここで再現率と適合率の特徴を踏まえてどちらの指標を見るべきかなのですが、
「陰性を陽性と誤判定する確率を減らしたいのであれば適合率」、
「陽性を見落とす確率を減らしたいのであれば再現率」
を見るのが妥当です。
なので予測したいもの、分析の目的によって見るべき指標も使い分けていく必要があります。
Part3:まとめ
Part2でもわかるように、ただ機械学習のモデルにデータを入れて予測するのではなく、実測値の比率であったり、何のための分析なのかなどはっきりさせたうえで機械学習を実装させなければなりません。
Pythonのライブラリで簡単に機械学習を実装することはできてしまいますが、本質的なところをしっかりと固めたうえでの機械学習の実装であるということは理解しておく必要があります。