jnobuyukiのブログ

研究していて困ったことやその解決に関するメモ。同じように困ったあなたのために。twitter ID: @j_nobuyuki

機械学習の精度指標

昨今、いわゆる機械学習の技術は、学術研究だけでなく、様々な産業応用がなされています。ユーザーとしては、実際に使ってみて、それが便利であるか否かで利用を判断すれば良いと思います。一方で、こういった技術がどの程度、客観性があったり、信用できるものなのかを理解できれば、技術の利用がさらに進むのではないかと考えました。そこで今回は、機械学習の精度、つまりどの程度うまくデータを予想できているかの指標を3つ考えてみたいと思います。

想定する問題

機械学習は計算方法も、利用方法も様々です。その中で今回は2値分類という問題を考えます。2値分類というのは何かの情報を使って2つの状態や行動(例えば「はい」か「いいえ」か)を予想すると考えると良いでしょう。これが当てはまれば、なんでも良いわけですが、より具体的な問題として、ある商品を宣伝・販売しているウェブページにおいて「カートにいれる」のボタンを押すか押さないかを予想するとします。

予想と実際の行動を第1種の過誤と第2種の過誤で考える

機械学習で色々な情報を元に、ボタンを押すか押さないかを予想します*1。すると予想(押すか押さない)と正解(実際に押すか押さない)の関係は以下のような4つの場合のいずれかになります。

正解:押す 正解:押さない
予想:押す 予想通り 予想外れ
予想:押さない 予想外れ 予想通り

予想通りの場合と予想外れの場合がそれぞれ2つあります。ここで最初に予想したものによって、これらの呼び方を変えてみます。

正解:押す 正解:押さない
予想:押す TP FP
予想:押さない FN TN

TP: True Positive, TN: True Negative, FP: False Positive, FN: False Negative

ここで押さないのが基本状態で押すのが特筆すべき行動という認識で見てみると、これは統計的仮説検定の第1種の過誤、第2種の過誤とも似たような状況であることがわかります。第1種の過誤、つまり実際には押さないのに押すと誤って予想してしまった場合です。第2種の過誤は、実際に押すのに押さないと予想してしまう、つまり押すの見逃しにあたります*2

正解:押す 正解:押さない
予想:押す 正しく予想 第1種の過誤
予想:押さない 第2種の過誤 正しく予想

このように考えてみると、正解率と言っても以下の2種類のような正解率が計算できることになります。

機械学習の精度指標1:Precision

 Precision = \frac{TP}{(TP + FP)}

TP+FPというのは「押すと予測した場合」の合計数です。つまりPrecisionは、「押すと予測した中で本当に押すが正解だった場合の割合」を示しています。

機械学習の精度指標2:Recall

 Recall = \frac{TP} {(TP + FN)}

TP+FNでFNが直感的には少しわかりにくいのですが、TPとFNはどちらも「押すが正解」の場合です。つまりRecallは「押すが正解の場合」のうち、正しく「押す」と予測できた場合の割合を示しています。

ここまでで2つの精度指標はどちらも大事そうです。しかし、2つあるとどちらにより頼ったほうが良いのかなどの考えが頭をよぎります。どうせなら1つの指標でPrecisionとRecallどちらの要素も考慮できないだろうか?そんな指標が以下のF値です。

機械学習の精度指標3:F値

 F値 = \frac{2 * Recall * Precision}{Recall + Precision}

上記の式で分母と分子のそれぞれにRecallとPrecisionが出てきます。よって、F値は、RecallとPrecisionの両者を考慮していることがわかります。しかし、Recallや Precision自体が複数の指標から計算するものになっている上に、分母と分子の両方に RecallとPrecisionが出てきます。なので、Recallと Precisionの値がどのように変化するとF値が大きくなったり小さくなったりするのか直感的に理解しにくいです。そこで上記のF値の式を変換させてみようと思います*3

F値を求める式の変換

 F値 = \frac{2 * Recall * Precision}{Recall + Precision}

Recallと Precisionの定義式をここに代入してみます。

 \frac{2 * \frac{TP}{(TP + FN)} * \frac{TP}{(TP + FP)}}{\frac{TP}{(TP + FP)} + \frac{TP}{(TP + FN)}}

だいぶややこしいので、いったん、(TP + FP)をXとし、(TP + FN)をYとおいて式をもう一度眺めてみます。

 \frac{2 * \frac{TP}{Y} * \frac{TP}{X}}{\frac{TP}{X} + \frac{TP}{Y}}

分子は掛け算なので、分子の中にある分数の分子と分母をそれぞれかければ良いですね。分母は足し算なので2つの分数を通分して足してみます。

 \frac{\frac{2*TP*TP}{X*Y} }{\frac{TP*Y + TP * X}{X*Y}}

分子と分母それぞれX*Yで割っているので、ここは約分しちゃいます。

 \frac{2*TP*TP }{TP*Y + TP * X}

分母はTPでくくりましょう。

 \frac{2*TP*TP }{TP*(X + Y)}

TPで約分できますね。

 \frac{2*TP }{X + Y}

ここでXとYをもとに戻します。

 \frac{2*TP }{(TP + FP)+ (TP + FN)}

これでだいぶ整理できました。まず分子はTPつまり正しく押すと予想した場合の数を2倍しています。次に分母は、分子同様にTPの2倍に加えて、FPとFNがあります。つまり正しく押すと予想した場合の2倍の数に間違って押すと予想した場合の数と誤って押さないと予想した場合の数が足されています。こうして見てみるとF値は2種類の予想外れに対する正解率になっていると理解できますね。最初の式だとよくわかりませんでしたが、式を変形して見たら案外単純な指標であるとわかりました。

まとめ

今回は、機械学習の精度を表す3つの指標Precision、Recall、F値を考えました。実際の分析では、3つとも計算する必要がありそうですが、それぞれの意味をきちんと把握した上で結果をみると分析結果の理解をより楽しめそうです。

*1:典型的な機械学習の話題なら、どんな情報を元に予測するか、どんな計算方法で予想するかが重要なのですが、今回はそのようなポイントにかかわらず問題となる評価に注目しているので、大変雑な説明になっています。

*2:ここでは2種類の予想外れの理解に役立つと思っての説明で、統計学的に2つが等価であると言いたいわけではありません

*3:結論だけ見たい人は途中式を飛ばしてください