本文へ移動

G検定(ジェネラリスト検定)

こんどうぎょうれつ

混同行列

Confusion Matrix

混同行列は、分類モデルの予測と実際の正解を突き合わせ、陽性・陰性の組み合わせで4通りに分けて件数を数えた表です。行と列のどちらが予測でどちらが正解かは資料によって逆なので、表を読むときは向きを確かめる必要があります。

詳しい説明

予測と正解を突き合わせる表

2クラス分類では、モデルの出力を正解と見比べて評価します。たとえば迷惑メールを見分けるロジスティック回帰のモデルは、あるメールが迷惑メールである確率を0から1の値で出します。この確率を分類のしきい値(classification threshold)と比べ、しきい値を上回れば陽性クラス(調べたいクラス、ここでは迷惑メール)、下回れば陰性クラス(もう一方のクラス、ここでは迷惑メールでない)に振り分けます。

ただし、モデルが出した確率は現実そのもの(ground truth、正解)ではありません。予測と正解の組み合わせは4通りあり、それぞれの件数を並べた表が混同行列です。

4つのマスの中身

混同行列は次の4つの値からなります。

  • 真陽性(TP):実際に陽性で、陽性と予測したもの
  • 偽陽性(FP):実際は陰性なのに、陽性と予測したもの
  • 偽陰性(FN):実際は陽性なのに、陰性と予測したもの
  • 真陰性(TN):実際に陰性で、陰性と予測したもの

予測が当たったマス(TP・TN)と外れたマス(FP・FN)の件数が一目で分かり、これらの値から正解率・適合率・再現率といった評価指標を計算できます。

行と列の向きは資料によって逆になる

学習者がもっとも混乱しやすいのは、表の向きです。行と列のどちらが予測でどちらが正解かは、資料によって違います。

  • Google Machine Learning Crash Courseの説明では、行が予測、列が正解です。
  • scikit-learnのconfusion_matrixでは、C[i, j]は正解がクラスiで、クラスjと予測した件数です。つまり行が正解、列が予測で、Googleの説明とは逆です。2クラスの場合、C[0,0]が真陰性、C[0,1]が偽陽性、C[1,0]が偽陰性、C[1,1]が真陽性になります。

scikit-learn自身も、Wikipediaなどほかの資料では軸の取り方が違うことがあると注意書きをしています。どちらかの向きが正しいと決まっているわけではなく、表を読むときは、その都度、行と列の見出しを見て向きを確かめる必要があります。

行の合計と列の合計が表すもの

予測と正解の合計は、どちらも表の中で意味を持ちます。

  • 予測ごとの合計は、予測陽性の総数(TP + FP)と予測陰性の総数(FN + TN)です。予測が当たったかどうかは問いません。
  • 正解ごとの合計は、実際の陽性の総数(TP + FN)と実際の陰性の総数(FP + TN)です。モデルがどう分類したかは問いません。

Googleの向きでは前者が行の合計、後者が列の合計になりますが、scikit-learnの向きではこれが入れ替わります。

不均衡なデータを見分ける手がかり

実際の陽性の総数と実際の陰性の総数が大きく離れているデータセットは、不均衡(imbalanced)なデータセットと呼ばれます。何千枚もの雲の写真のうち、関心のある珍しい種類の雲が数枚しか写っていないようなデータがその例です。正解ごとの合計を見れば、データがどの程度偏っているかが分かります。

シラバスでの位置づけ

混同行列は、G検定シラバス2024(第1.4版)の中項目10 モデルの選択・評価のキーワードに含まれています。

試験で問われること

G検定

  • 混同行列は、2クラス分類の予測と正解の組み合わせを、真陽性(TP)・偽陽性(FP)・偽陰性(FN)・真陰性(TN)の4通りに分けて件数を数えた表である。
  • 行と列のどちらが予測でどちらが正解かは資料によって逆である。Google Machine Learning Crash Courseは行が予測・列が正解、scikit-learnは行が正解・列が予測なので、表を見るたびに向きを確かめる。
  • 予測ごとの合計は予測陽性(TP+FP)と予測陰性(FN+TN)の総数、正解ごとの合計は実際の陽性(TP+FN)と実際の陰性(FP+TN)の総数を表す。
  • 実際の陽性の総数と実際の陰性の総数が大きく離れているデータセットは、不均衡なデータセットと呼ばれる。
  • 混同行列の4つの値から、正解率・適合率・再現率といった評価指標を計算できる。

最終更新日: 2026/09/23