べくとりうむ.py Written by TicTak(※現在ブログ工事中のため、見づらい点があり申し訳ないです)

混同行列について「混乱」しないように解説します【Confusion Matrixを理解する】

AI×機械学習 python

こんにちは、ちくたっく(@tictak_py)です。

今回は、機械学習やデータサイエンスの分野で出てくる「混同行列」について解説していきます。混同行列はその名の通り、混乱しやすい論点なので、出来るだけわかりやすくシンプルに解説していきたいと思います。

こんな方に読んで欲しい記事です

  • 混同行列(Confusion Matrix)について理解したい方
  • データサイエンスやAIの勉強をしている方

2020年の2月にJDLAが主催するE資格を受験したのですが、その時にも機械学習範囲から「混同行列」が実際に出題されました。それだけメジャー論点とも言えるので、E資格の受験を目指しているがいれば以下記事も参考にしてみてください。

混同行列の概要

混同行列の目的

まずは、混同行列の目的を確認しておきます。
混同行列が使われる場面と言い換えてもいいですが、「モデルの性能評価」をする段階で使われます。

  • モデリングフェーズ:ビッグデータを使いモデルにデータを学習させていく段階
  • スコアリングフェーズ:構築したモデルの汎化性能を評価する段階

汎化性能というのは、未知のデータに対してどれだけ対応できるかを示す言葉です。

そして、解きたいタスクは「二値分類」です。
具体的な例はこの後紹介していきますが、二値分類タスクの場面で評価指標の一つとして用いられるのが「混同行列」と理解してもらえればOKです。

混同行列内の「4象限の意味」

では実際に混同行列の中身についてみていきます。
最終的には、下記表を自分で書けるくらいに理解しておくことをオススメします。
この表は、僕がE資格受験前にアウトプット兼ねてまとめた表なのですが、表内の用語を確認していきます。

混同行列のまとめ図

まず、そもそもとなる「表の見方」なのですが、予測クラスのPositiveとNegativeに着目してください。

これは、構築したモデルがPositiveを予想したか、Negativeを予想したかにわけられます。その後、予測したクラスが実際のクラスと一致しているかを確認するために、実際クラスを追加します。これによって、マトリックス内には4つの象限が存在することになります。

4つの各象限の意味をざっくりとまとめると下記になります。

①:左上の象限「True Positive / 真陽性」

モデルが「Positive」と予想して、実際に「Positive」だった場合

②:左下の象限「False Positive / 偽陽性」

モデルが「Positive」と予想したが、実際には「Negative」だった場合

③:右上の象限「False Negative / 偽陰性」

モデルが「Negative」と予想したが、実際には「Positive」だった場合

④:右下の象限「True Negative / 真陰性」

モデルが「Negative」と予想して、実際に「Negative」だった場合

左上と右下の部分は、モデルが正解だったことを意味します。
そのため、「真(True)」が付いているのです。

右上と左下の部分は、モデルが不正解だったことを意味します。
そのため、「偽(False)」が付いているのです。

この段階で「なるほど、わかった!」となった方は、イメージが付いていると思います。「まだ今一つしっくりこない」という方は、最後まで読んでもらった上で、もう一度上記部分を読んで理解出来るようにしてみてください。下記「噛み砕いて表現」でざっくりとした具体例をあげていますので、イメージがつくようになるはずです。

混同行列で使われる「4つの指標」

混同行列では「4象限」の理解を前提として、さらに「4つの指標」に展開されます。
(スクロールしなくていいように再掲します。)

その指標とは、「正解率(Accuracy)」「適合率(Precision)」「再現率(Recall)」「F値」の4つです。

混同行列のまとめ図【再掲】

各指標の求め方は上記図の通りなのですが、4指標の意味をざっくりまとめると下記になります。

  • ①正解率(Accuracy):予測クラス総数のうち正しく予想したクラスの割合
  • ②適合率(Precision):Positiveと予想したクラスのうち実際にPositiveだった割合
  • ③再現率(Recall):実際のPositiveクラスのうち正しくPositiveと予想出来た割合
  • ④F値(F-measure):適合率(PRE)と再現率(REC)の調和平均

ここまでが理解出来ていれば、「混同行列」の基本的な理解はOKと言えます。
次からは、具体例を用いてよりイメージしやすいように解説していきます。

混同行列を噛み砕いて表現

以上が「混同行列」の基本的な解説になります。
「どのような時に使われるのか」「マトリックス内の4象限の意味は何か」「そこから展開される4指標は何か」を理解出来れば、この論点は十分理解出来ていると思います。

ただ、しばらく時間が経つと忘れてしまうので、最後に具体例と僕の覚え方を紹介しておきます。噛み砕いた表現を用いて説明するので、その点ご理解ください。

具体例:日本メーカーから「不良品予測」を依頼された場合

  • サンプルは10,000個と仮定
  • 構築モデルは、サンプル10,000個のうち不良品は2個と予測した。
  • 実際には、サンプル10,000個のうち不良品は5個しかなかった。

日本の製造業は「欠陥ゼロ」を目指しているのが特徴なので、このような例はよくあります。ここでポイントとなるのが、「正解率」を使ってはいけないという点です。
なぜなら、この例だと正解率は99.97%となり、良いモデルと評価されてしまうためです。

不良品と予測した2個は正しいので、適合率は100%となってしまいます。
実際の不良品5個のうち正しく予想出来たのは2個なので、再現率は40%となりますね。

ここからわかるのは、一律に正解率を用いるのではなく目的に合わせた指標を選択することが大切ということです。

そして、適合率(PRE)と再現率(REC)については僕は下記のように解釈しています。

  • 適合率(PRE):築モデルの「ポンコツ率」
  • 再現率(REC):構築モデルの「インシデント回避率」

適合率は、Positiveと予想したうち、どの程度正しかったかを見る指標なので、この数値が低ければ低い程、モデルがポンコツと言えますよね。

不良品予測以外にも「医者の診断」がわかりやすい例でよく使うのですが、「100名に対して、風邪と診断(陽性判断)したにもかかわらず、実際風邪にかかってたのが10名だった」場合、適合率は10%となります。つまりモデル(医者)がポンコツということです。

再現率は、実際にPositiveクラスのうち、いくつ正しく予想出来てたかを見る指標なので、この数値が低ければ低い程、ヤバイ状況を起こしてしまいます。

不良品予測の例であれば、「不良品でないことを信じて製品化したのに、実際は不良品でクレームが入った」というインシデント(事故)に繋がりかねません。医者の例であれば、「病気でないと診断したのに、実際は病気にかかっていた」ことになり、これも場合によっては一大事に繋がりますよね。

以上は一例ではありますが、自分なりの理解を促進してくれる具体例を持っていると、いざという時にイメージがしやすくなるので、良ければ参考にしてみてください。

さいごに

今回は「混同行列」について解説してみました。
記事を書いている間も思いましたが、本当に混乱しそうな論点ですよね。。。

以下では混同行列の指標を使ったコードも紹介しているので、実際にpythonでコードを書いている方は参考にしてみてください。

今回紹介したデータ分析系のおすすめ書籍については以下でも紹介しています。

本記事が少しでもみなさんの理解の助けになれば幸いです。では今回はこのへんで。