"BOKU"のITな日常

62歳・文系システムエンジニアの”BOKU”は日々勉強を楽しんでます

ディープラーニングモデルの分類性能評価指標についてざっくり整理してみる/Neural Network Console

モデルの分類性能の評価指標をの見方を、整理してみようかなと思います。

題材には、「Neural Network Console」を使います。

f:id:arakan_no_boku:20190707151819j:plain

今回の目的

 

機械学習で「十分な精度で学習できているかどうか」を判定する指標には多くの種類があります。

詳しくは、こちらの網羅的にまとめてもらっているサイトでも見てもらうとして(笑)

www.procrasist.com

今回は、SONYの「Neural Network Console」の結果画面で使われている基本的な分類性能評価指標に絞って、ざっくり整理してみます。

 

Neural Network Consoleの結果画面

 

SONYの「Neural Network Console」で評価結果を確認できる「Confusion Matrix」はこんな感じです。

f:id:arakan_no_boku:20190707152840p:plain

こういう風に分類結果をまとめた表を、混同行列(Confusion Matrix)といいますす。

ここにでてくる指標は以下の4つです。

  • Accuracy
  • Precision
  • ReCall
  • F-Measure

これらが、今回のお題というわけです。

 

指標について整理する前提知識がありました

 

4つの指標の整理をするのに、前提となる知識があります。

  • 調和平均
  • TP・FP・FN・TN

です。

この言葉を使わないと説明が書きづらいので、上記を先に整理します。

 

調和平均

 

調和平均も「平均」です。

でも、一般的な平均(算術平均)とは違います。

算術平均は値そのものの合計値を個数等で割って求めますが、調和平均は2つの値の比で表す数値の平均をとって求めます。

toukeigaku-jouhou.info

上記のサイトから引用すると。f:id:arakan_no_boku:20191212184806p:plain

調べてみると。

時速の計算に使われる平均の求め方なので、意外とお馴染みだったりします。

これは、F-Measureという指標で使われます。

 

TP・FP・FN・TN

 

それぞれ以下の略です。

  • TP=True Positive
  • FP= False Positive
  • FN= False Negative
  • TP= True Negative

これはつまり。

  • Positive=これが正解だと予測した
  • Negative=これは不正解だと予測した

だと考えれば、

  • TP=Positiveだと予測して正解した
  • FP=Positiveだと予測したけど間違った
  • FN=Negativeだと予測したけど間違った
  • TN=Negativeだと予測して正解だった

 という状態を表します。

当然ですが。

分類の結果は必ず、この4つの状態のどれかとなります。

なので、例えば。

TP+FP+FN+TNは「評価対象全体の個数」になります。

TP+FNは、

  • Positiveと判断して正解だった数(TP)
  • Negativeと判断して間違った数(TF)

の合計なので、結局「Positiveと判断されるべきすべての数」になります。

TP+FPは、

  • Positiveと判断して正解だった数(TP)
  • 間違った数(FP)

の合計なので、「分類でPositiveと判断された全体の数」になります。

これらが、各指標の計算に使われます。

 

各指標の意味について

 

以下の4つの指標について、ざっくりとみていきます。

  • Accuracy
  • Precision
  • ReCall
  • F-Measure

 

Accuracy

 

日本語で言うと正答率です。

計算式は

(TP+TN)/(TP+FP+FN+TN)

です。

TP+TNは「正解した数全体」なので、「全体の中の正解だったものの比率」です。

簡単にすませるなら、これだけ計算する時も多いですし、ネットとかのサンプルとかでも、そうなっているものがあるくらい、代表的な指標です。

 

Precision

 

日本語では「適合率」です。

Positiveに対する適合率と、Negativeに対する適合率の2種類が定義可能で、それぞれの計算式は以下になります。

TP /(TP+FP)

または

TN  /  (TN+FN)

前者は「Positiveと判断した中での正解率」です。

後者は「Negativeと判断した中での正解率」です。

でも、Neural Network ConsoleのConfusion Matrixでは「Positive=正解と同じラベルだと判断して正解した数」に対する「適合率」のみが計算されてます。

実際の例で検算してみると

f:id:arakan_no_boku:20190708002954p:plain

Y' つまり、分類の予測結果の縦列で計算しているのがわかります。

Y'=0の例でいけば。

正解(y)が0の時に0と予測して正解した数(TP)と、正解(y)が1の時に[0」と予測(つまりNegativeと判断)して正解した数(TN)が縦に並んでいると読めるので、以下で計算できます。

235 / (235 + 8)  = 0.9670781893004

 

ReCall 

 

日本語だと再現率です。

これもPositive・Negativeごとの計算ができますが、Neural Network ConsoleのConfusion Matrixでは、Positive分だけなので、そちらの計算式のみ。

TP / (TP + FN)

 Positiveと判定して正解したものと、Negativeと判断して間違ったものの中での、正解したものの比率です。

こちらの、今回のサンプルでみてみると。

f:id:arakan_no_boku:20190708094321p:plain

y’は判定結果です。

上段を例にすると、y=0が正解の場合に、y'=0と判断(つまりPositiveと判断)して正解だった数(TP=235)、Y'=1と判断(つまりNegativeと判断)して不正解だった数(FN=15)ですから。</p

235 / (235 + 15)  = 0.94

 となります。

 

F-Measure

 

日本語で言えば「F値」です。

F値は「Precision」と「Recall」の平均(調和平均)です。

計算式は以下です。

2 /  ((1 / Precision) + ( 1 / Recall))

今回の例にあてはめて検算してみます。

f:id:arakan_no_boku:20190708101320p:plain

Neural Network ConsoleのConfusion Matrixでは、1列目と1行目、2列目と2行目・・みたいに対応づけして計算しているようです。

前者は。

 2 / (( 1 / 0.9670) + ( 1/ 0.94)) = 0.9533088621

後者が

2 / (( 1 / 0.9416) + ( 1/ 0.968)) = 0.9546175115

とですから、その理解であってるみたいですね。

 

何で、こんな指標が必要なんだろうか?

 

ざっと各指標を説明しましたが、数学的な意味合いはわかったけど、それを見てどう判断すればいいのかがピンとこない・・。

たぶん、結構な割合の人がそう思っていると思います。

なので。

結果を判断する例をやってみます。

例えば・・。

工場で「正常(出荷OK)」と欠陥(出荷NG)」を判定するものとします。

そのためにモデルを作って学習させて、実際の製品のデータを使って、モデルが適切にできていることをテストしてみたというケースの場合には。

各指標は以下のような意味を持ちます。

Accuracy 正常か欠陥のいずれかを、どのくらい正しく判定できたか 
Precision(正常) 正常と判定したものが、どのくらい正確なのか?
Precision(欠陥) 欠陥と判定したものが、どのくらい正確なのか?
Recall(正常) 正常と判定すべきものを、どのくらい見逃さずに拾えているか?
Recall(欠陥) 欠陥と判定すべきものを、どのくらい見逃さずに拾えているか?

わかりやすいのは「Accuracy」です。

これが例えば99.9%です・・とか言われると、かなり良い精度だからOKじゃないかといいたくなります。

でも、それだけでは不十分です。

なぜかというと。

上記の表の「Accuracy」以外をを以下のように読み替えてみると

  • 正常または欠陥と判定したものが、どのくらい正確なのか?(Precision)
  • 正常または欠陥と判定すべきものを、どのくらい見逃さずに拾えたか?(ReCall)

になるからです。

欠陥商品を見逃さないのが、出荷判定で最も大切なことですから、ここでは、ReCallが一番重要な指標なので、たとえ全体の正答率が落ちたとしても、ReCallを完璧に近づけるようにチューニングしていくのが、正しい方針になります。

このように、何を目的とするかで、重要な指標は変わってきます。

だから、いろいろな指標があるわけですね。

 

どう対策をうてばいいのか

 

指標を改善するための対策の例も続けてやってみます。

前段の例の続きです。

欠陥のRecallの値が低い。

これは「欠陥と判定する確度のしきい値が高すぎる」ということです。

だから、「欠陥と判定する確度のしきい値を下げて、見落としを少なくする」方向にモデルをチューニングすることになります。

すると当然、「今まで欠陥と判定されなかったものが欠陥と判定される」ようになりますから、欠陥に対する正確度を示すPrecisionの値は下がる可能性があります。

このへんを調整しながら

  • その辺の折り合いをどうつけるのか?
  • 合格基準をどのあたりに設定するのがベストなのか?

という検討をします。

その時に参考にするのが、2つの指標の平均(調和平均)である「F-Measure(F値)」ということになります。

 

最後に補足です

 

上記で使った指標のうち、欠陥(Negative)のPrecisionとRecallの値は、Neural Network ConsoleのConfusion Matrixにはありません。

現状、手計算してやる必要があります。

以上、分類性能評価で基本的な指標を、SONYの「Neural Network Console」の「Confusion Matrix」を参考にして整理してみました。

今回はこんなところで。

ではでは。

※この記事は2019年7月9日の記事の一部を補正したリライトです。