AI

混同行列とは?TP・FP・FN・TNの見方と適合率・再現率・F値を実装目線で解説

インフラ構築AWSGCPAdureにおける主な内容

混同行列とは、分類モデルが出した予測を実際の正解と照らし合わせ、当たり外れの内訳を4つのマスに整理した表です。予測が正解とどこで一致し、どこでずれたのかが一目で分かるため、分類モデルの実力を測る出発点になる。単なる正解率だけでは見えない「どんな間違え方をしているか」を突き止められる点に価値があります。本記事では、混同行列の4マス(TP・FP・FN・TN)の読み方から、そこで導く正解率・適合率・再現率・F値の計算式と使い分け、scikit-learnでの求め方、そして業務要件に応じてどの指標を主役に置くかまでを、実装の現場で判断できる粒度で整理します。

目次

まとめ:混同行列は分類の当たり外れを4マスで分けて評価の土台をつくる

混同行列は「予測が正か負か」と「実際が正か負か」の組み合わせで、分類結果を4つのマスに振り分けます。正しく正と当てたTP、誤って正と判定したFP、取りこぼしたFN、正しく負と当てたTNの4つです。この内訳がそろって初めて、正解率・適合率・再現率・F値といった指標を計算できる。

先に結論を置きます。分類モデルの評価は正解率ひとつでは足りません。特に正例と負例の数が偏った不均衡データでは、正解率が高く見えても肝心の少数側をまったく当てられていないことが起こる。だからこそ混同行列で誤りの内訳まで分解し、業務が避けたい間違い(見逃しか、誤検知か)に合わせて主役の指標を選ぶ必要があります。以降で4マスの読み方、各指標の式と意味、Pythonでの算出、指標選びの判断基準を順に示します。

混同行列の4マス(TP・FP・FN・TN)が表す予測と正解の関係

まず混同行列そのものの構造を押さえます。二値分類を例に、行と列が何を指すのか、4つのマスがどんな予測結果に対応するのかを整理する。ここを取り違えると、後段の指標もすべてずれます。

混同行列のTP・FP・FN・TNが表す4通りの予測と正解の組み合わせ

二値分類では、モデルの予測(陽性か陰性か)と実際の正解(陽性か陰性か)の組み合わせが4通りに分かれます。陽性を正しく陽性と当てたのがTP(真陽性)、実際は陰性なのに陽性と誤ったのがFP(偽陽性)、実際は陽性なのに陰性と取りこぼしたのがFN(偽陰性)、陰性を正しく陰性と当てたのがTN(真陰性)です。頭のT/Fは予測が当たったか外れたか、後ろのP/Nはモデルが陽性と陰性のどちらを予測したかを表す、と読むと迷いません。

予測:陽性 予測:陰性
実際:陽性 TP(真陽性) FN(偽陰性・見逃し)
実際:陰性 FP(偽陽性・誤検知) TN(真陰性)

混同行列を読むときの行と列の約束と陽性クラスの決め方を押さえる

混同行列は縦軸に実際のクラス、横軸に予測のクラスを置く並べ方が一般的です。ただしライブラリや教材によって軸が入れ替わることがあるため、どちらが実際でどちらが予測かは毎回確認する。もうひとつ大切なのが、どちらを陽性(Positive)に決めるかです。病気の検査なら「病気あり」、不良品検査なら「不良」を陽性に置くのが自然で、この設定しだいでFNとFPの意味が入れ替わります。陽性の取り方を決めてから指標を読むのが、解釈のぶれを防ぐ勘所になります。

3クラス以上の多クラス分類に混同行列を広げるときのマスの見方

3クラス以上の多クラス分類でも、混同行列は自然に拡張できます。行が実際のクラス、列が予測のクラスで、対角線上のマスが正解、対角線から外れたマスが取り違えの件数です。どのクラスをどのクラスと間違えやすいかが対角以外のマスに現れるため、モデルの弱点を突き止めやすい。多クラスでは陽性・陰性という二分法が使えないので、各クラスを順番に陽性とみなして二値の指標を計算し、平均を取る進め方が用いられます。

混同行列から導く評価指標(正解率・適合率・再現率・F値)の計算式

4マスがそろえば、そこから複数の評価指標を計算できます。それぞれが混同行列のどのマスを使い、何を測っているのかを式とあわせて押さえる。分類器そのものの仕組みはニューラルネットワークの仕組みを解説した記事で確認すると、評価対象のモデル像がつかめます。

正解率(Accuracy)と不均衡データで正解率が当てにならない理由

正解率は、全体のうち予測が当たった割合で、式は (TP + TN) ÷ (TP + FP + FN + TN) です。直感的で分かりやすい反面、正例と負例の数が大きく偏ったデータでは実力を見誤らせる。たとえば陽性が全体の1%しかないデータで、モデルが全件を陰性と答えても正解率は99%に達します。しかし陽性はひとつも当てられていない。この落とし穴があるため、不均衡データでは正解率だけを見るのではなく、次の適合率と再現率で誤りの内訳まで踏み込みます。

適合率(Precision)と再現率(Recall)が測るものとトレードオフ

適合率は「陽性と予測したもののうち、実際に陽性だった割合」で、式は TP ÷ (TP + FP) です。誤検知(FP)の少なさを表す。再現率は「実際に陽性だったもののうち、陽性と当てられた割合」で、式は TP ÷ (TP + FN) で、見逃し(FN)の少なさを表します。この2つは一般にトレードオフの関係にある。陽性と判定する基準をゆるめれば取りこぼしは減って再現率が上がる一方、誤検知が増えて適合率は下がる。基準を厳しくすれば逆になります。どちらを優先するかは、後述のとおり業務が避けたい間違いで決まる。

F値(F1スコア)が適合率と再現率を調和平均で束ねる意味と使い所

F値(F1スコア)は、適合率と再現率の調和平均で、式は 2 × (適合率 × 再現率) ÷ (適合率 + 再現率) です。単純な算術平均ではなく調和平均を使うのは、片方だけが極端に高くても値が伸びないようにするためで、両者がそろって高いときにF値も高くなる。適合率と再現率のどちらも捨てたくない、バランスよく見たいという場面で主役の指標になります。次の表に4指標の式と着目点をまとめます。

指標 計算式 着目する誤り 向く場面
正解率 (TP+TN)÷全体 全体の当たり外れ 正例と負例が均衡
適合率 TP÷(TP+FP) 誤検知(FP) 誤検知を避けたい
再現率 TP÷(TP+FN) 見逃し(FN) 見逃しを避けたい
F値 2PR÷(P+R) 両者のバランス 適合率と再現率を両立

混同行列をPython(scikit-learn)で作り評価指標を計算する手順

ここからは実装です。scikit-learnを使えば、混同行列も各指標も数行で求まります。回帰モデルを決定係数などで測る進め方は回帰分析の評価を扱った記事にゆずり、本記事は分類の評価に絞ります。

scikit-learnのconfusion_matrixで混同行列を出す最小コード

実際の正解ラベルと予測ラベルの2つの配列があれば、from sklearn.metrics import confusion_matrix のうえで confusion_matrix(y_true, y_pred) と書くだけで4マスの行列が返ります。さらに classification_report(y_true, y_pred) を呼べば、クラスごとの適合率・再現率・F値が一覧で得られる。まず行列で誤りの内訳を眺め、次にレポートで指標を数値化する、という二段構えが実務での基本の流れです。表示された行列は、どの軸が実際でどの軸が予測かを必ず確認してから読みます。

予測の閾値を動かして適合率と再現率のバランスを調整する考え方

多くの分類モデルは、陽性である確からしさをスコアとして出し、既定では0.5を境に陽性・陰性を分けます。この閾値を動かすと混同行列の中身が変わり、適合率と再現率のバランスも変わる。閾値を下げれば陽性判定が増えて再現率寄り、上げれば適合率寄りになります。scikit-learnの precision_recall_curve で閾値ごとの両指標を並べれば、業務が許容できる誤検知と見逃しの水準から閾値を決められる。既定の0.5をそのまま使うのではなく、目的に合わせて選ぶのが実装の勘所です。

本番運用に入った後も混同行列を精度監視へ組み込むときのポイント

混同行列は学習時の評価だけでなく、本番運用に入ってからも役立ちます。運用中に集めた予測と実績を定期的に突き合わせ、混同行列と各指標を継続して観測すれば、データの傾向が変わって精度が落ちる兆候を早く捉えられる。こうした学習から運用までの一連の仕組みづくりはMLOpsの考え方を解説した記事で全体像を確認できます。指標が下がったら再学習や閾値の見直しに動く、という運用ルールを混同行列の観測とセットで設計しておきます。

混同行列でどの評価指標を主役に置くかを業務要件から決める基準

ここは独自の判断章です。混同行列から複数の指標が出せるからこそ、どれを主役に置くかを業務要件から条件付きで言い切ります。分類モデルの設計と評価指標の詰めをまとめて外部と分担するなら、機械学習モデル開発の受託のように、評価設計まで含めて進める選択肢もあります。

見逃しのコストが高い業務で再現率を主役に置くと判断できる基準

見逃し(FN)のコストが誤検知より高い業務では、再現率を主役に据えます。病気のスクリーニング、設備の異常検知、不正取引の検出などが当てはまる。見逃せば健康被害や損害に直結するため、多少の誤検知(FP)が増えても、まず取りこぼしを減らす方向に閾値を寄せます。ただし再現率を追い過ぎると誤検知が現場を疲弊させるため、適合率がどこまで下がるかを混同行列で確認しながら、許容できる下限を決めておくのが現実的な進め方です。

誤検知のコストが高い業務で適合率を主役に置くと判断できる基準

逆に、誤検知(FP)が業務の負担や信頼低下に直結する場面では、適合率を主役にします。顧客へ自動でアラートを送る、人手の確認工数が誤検知のたびに発生する、といった業務では、陽性と判定したものの確からしさを優先したい。この場合は閾値を上げて誤検知を抑え、その代わりに見逃しがどこまで増えるかを再現率で監視します。見逃しと誤検知のどちらのコストが高いかを業務側と数字で握ったうえで主役の指標を決め、F値はバランスの目安として併読する、という組み立てが実務では収まりがよいです。

混同行列と評価指標の計算と使い分けに関するよくある質問と回答

混同行列を評価に使う現場で挙がりやすい疑問を、5つに絞って答えます。

混同行列と正解率だけで分類モデルを評価してはいけませんか?

正例と負例の数が均衡しているなら正解率も目安になりますが、偏りがある不均衡データでは正解率が実力を過大に見せます。少数側をまったく当てられなくても正解率が高く出るためです。混同行列で誤りの内訳を分解し、適合率・再現率・F値まで確認するのが安全な進め方になります。

適合率と再現率はどちらを優先すればよいですか?

業務が避けたい間違いで決まります。見逃し(FN)のコストが高い異常検知や病気の検査では再現率を、誤検知(FP)の負担が大きい自動通知や確認工数の発生する業務では適合率を主役に置きます。両方を捨てたくないならF値をバランスの指標として併読するとよい。

F値はどんなときに使う指標ですか?

適合率と再現率のどちらも重視したいときに使います。F値は両者の調和平均なので、片方だけが高くても値が伸びず、両立できているときに高くなる。不均衡データで単一の指標に絞りたい場面や、複数モデルを1つの数値で比べたい場面で用いられます。

多クラス分類でも混同行列は使えますか?

使えます。行を実際のクラス、列を予測のクラスにした正方形の行列になり、対角線が正解、対角線から外れたマスが取り違えです。各クラスを順に陽性とみなして適合率・再現率を求め、平均を取ることでクラス全体の指標に集約します。

混同行列はPythonでどう作りますか?

scikit-learnの confusion_matrix(y_true, y_pred) に正解ラベルと予測ラベルを渡せば4マスの行列が返ります。あわせて classification_report を呼べば、クラスごとの適合率・再現率・F値が一覧で得られる。表示された軸がどちらが実際でどちらが予測かを確認してから読み取ります。

関連記事

資料請求

RELATED POSTS 関連記事