"BOKU"のITな日常

還暦越えの文系システムエンジニアの”BOKU”は新しいことが大好きです。

分類問題の性能評価指標の見方を、Neural Network Consoleを題材にしてメモっておく。

Neural Network Consoleでは、モデルの分類性能の評価指標を、わかりやすい表にして見せてくれます。

なのに、機械学習の基礎をきちんと学んでいない文系人間には、その意味合いを理解できるだけの知識がありません。

もったいないので、その評価指標の見方なんぞを、整理してみようかなと思います。

f:id:arakan_no_boku:20190707151819j:plain

題材は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-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と判断して正解だった数と、Negativeと判断して間違った数の合計なので、結局「Positiveと判断されるべきすべての数」になります。

TP+FPはPositiveと判断して正解だった数と間違った数の合計なので、結局「分類でPositiveと判断された全体の数」になります。

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

 

各指標の意味について

 

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

  • Accuracy
  • Precision
  • ReCall
  • F-Measure

 

Accuracy

 

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

計算式は

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

です。

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

とても、わかりやすいです。

自分もそうですが、Pythonとかで自分で評価指標を計算しないといけない時とかは、これだけ計算する時も多いですし、ネットとかのサンプルとかでも、そうなっているものがあるくらい、代表的な指標です。

 

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

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

 

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

 

まあ・・各指標の計算の仕方とかはわかったけど、だから何なの?

別にAccuracy(正答率)だけでいいじゃないか!

これは、文系なら誰しも思うはずです。

自分もそうでしたから。

でも。

調べてみたら違いました。

例をあげて、説明してみます。

工場で「正常(出荷OK)」と欠陥(出荷NG)」を仕分る分類器を例にしてみます。

画像で判定して正常・欠陥を振り分けるなんて、いかにもありそうですし。

この時、各指標は以下のような意味を持つみたいです。

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

 

なお、Neural Network ConsoleのConfusion Matrixでは、欠陥(Negative)のPrecisionとRecallは表にないので、そこは計算する必要があります。

ここで一番重要なことは「PrecisionとRecallは相反的な関係になる」ことです。

具体的に例をあげてみます。

この例の場合で、「Accuracy」「正常判定のPrecision」「正常判定のRecall」は、十分に合格の数字なんだけど、「欠陥のRecall」の値が合格基準に達しなかった・・なんてことがあったと仮定します。

このケースで「欠陥のRecallの値が低い」ということは「欠陥品の見落としが多い」ことを意味します。

出荷判定で「欠陥品の見落としが多い」というのは、許容しづらい結果です。

だから、対策をしないといけません。

欠陥のRecallの値が低いということは「欠陥と判定する確度のしきい値が高いものだけを拾う方向に寄せすぎている」ということですから、対策としては「欠陥と判定する確度のしきい地を下げて、見落としを少なくする」ということになります。

ところが、そうすると欠陥と判定したものに対する正確度を示すPrecisionの値が下がるのは普通に考えてもわかります。

見事な「相反関係」がなりたってますね。

だから、ひとつの指標だけを見てチューニングすると、おかしくなるので、相反関係にある「Precision(欠陥)」と「Recall(欠陥)」のバランスを見て判定をする必要があって、そのために、2つの指標の平均(調和平均)である「F-Measure(F値)」を使う場合もあります・・と、まあ、こんな感じらしいです。

当然

各指標のどれを重視するか、どの程度の精度になったら合格とするかなどなど・・は、分類の対象や何に使うかによって変わってくるわけで、一律にこれならOKなんて決められません。

なかなか深いですねえ。

でも、こうやって評価指標の見方を知ると、同じ結果に対しても、知る前とは違った観点が見えてきて面白いなと思ったりするわけです。

とりあえず、今回はこんなところで。

ではでは。