ひとことで言うと#
混同行列は、分類モデルの予測結果をTP・FP・FN・TNの4セルに整理し、そこから導出される適合率・再現率・F1スコアなどの指標でモデルの強みと弱みを多角的に評価するフレームワークです。
用語の定義#
押さえておきたい用語
- 真陽性(TP: True Positive):モデルが「陽性」と予測し、実際にも陽性だったケース。正しく検出できた件数
- 偽陽性(FP: False Positive):モデルが「陽性」と予測したが、実際は陰性だったケース。誤って検出した件数
- 適合率(Precision):陽性と予測したもののうち、実際に陽性だった割合。TP / (TP + FP) で算出する
- 再現率(Recall):実際の陽性のうち、モデルが正しく陽性と予測できた割合。TP / (TP + FN) で算出する
- F1スコア(F1 Score):適合率と再現率の調和平均。両指標のバランスを1つの数値で表す。2×Precision×Recall / (Precision + Recall)
- AUC-ROC:閾値を変化させたときのTPR(再現率)とFPR(偽陽性率)の関係を曲線にし、その面積で分類性能を総合評価する指標
全体像#
モデルで予測
テストデータに適用
→テストデータに適用
混同行列を作成
TP/FP/FN/TNを集計
→TP/FP/FN/TNを集計
指標を算出
Precision/Recall/F1
→Precision/Recall/F1
閾値を調整
ビジネス要件に合わせる
ビジネス要件に合わせる
こんな悩みに効く#
- モデルの「Accuracy 95%」という報告を受けたが、実は陽性クラスがほとんど検出できていなかった
- 不正検知モデルで誤検出(FP)が多すぎてオペレーションチームが疲弊している
- 適合率と再現率のどちらを優先すべきか、ビジネス文脈での判断基準がわからない
基本の使い方#
混同行列を作成する
テストデータに対するモデルの予測結果と正解ラベルを突き合わせ、TP・FP・FN・TNの4セルに件数を集計します。多クラス分類の場合はクラス数×クラス数の行列になりますが、各クラスを「1 vs その他」に分解して2値の視点でも見ます。
ビジネス要件から重視する指標を決める
「見逃しのコスト」が高い場面(がん検診、不正検知)は再現率を重視し、「誤検出のコスト」が高い場面(スパム判定、ローン審査)は適合率を重視します。どちらか一方に極端に寄せるのではなく、許容範囲を先に決めてから閾値を探します。
閾値を調整してトレードオフを最適化する
分類確率の閾値(デフォルト0.5)を変化させながら適合率・再現率の変化をプロットし(PR曲線)、ビジネス要件を満たす最適な閾値を選択します。AUC-ROCでモデルの総合的な分離性能も確認しておきます。
不均衡データへの対策を講じる
陽性クラスが全体の1%未満などの不均衡データでは、Accuracyは指標として機能しません。F1スコアやPR-AUCを主要指標に切り替え、必要に応じてオーバーサンプリング(SMOTE等)やコスト重みの調整を行います。
具体例#
クレジットカードの不正検知
カード会社が月間1,200万件の取引データに不正検知モデルを適用。不正取引は全体の0.08%(約9,600件)と極めて不均衡なデータだった。初期モデルはAccuracy 99.9% だったが、再現率はわずか34%で不正の3分の2を見逃していた。閾値を0.5から0.3に下げることで再現率を78%に引き上げ、適合率は62%から28%に下がったものの、FP件数は人手で確認可能な日次850件に収まった。見逃し損失額が月間約3,800万円から980万円に減少し、FP確認の追加人件費月200万円を差し引いても大幅な改善となった。
SaaS企業の解約予測
BtoB SaaS企業が、月次解約率4.2%の顧客ベース(契約社数3,200社)に対して解約予測モデルを構築。混同行列の分析で、適合率45%・再現率71%・F1スコア0.55という結果だった。「解約しそう」と予測した顧客にCSチームが電話フォローを行うオペレーションを設計したため、FPのコスト(不要な電話)は低く、FNのコスト(フォローなしでの解約)は高い。再現率重視で閾値を0.35に設定し、再現率を85%に改善。CSチームが月間約140社にフォローを実施し、解約率が**4.2%から2.9%**に低下した。
食品工場の外観検査自動化
菓子メーカーが製造ラインの最終工程に画像認識モデルを導入し、パッケージの印刷ズレや破損を検出。日産15万個の製品に対し、不良品率は約0.3%。初期モデルの適合率は92%(FPが少ない=不要な排出が少ない)だが再現率が58%で不良品の4割を見逃していた。学習データに不良品サンプルを追加し、コスト重み付き損失関数(不良見逃しのコスト=誤排出コストの5倍)で再学習。再現率を89%に改善しつつ適合率を78%に維持し、不良品の市場流出率が月間約620個から165個に削減された。
やりがちな失敗パターン#
| 失敗 | 原因 | 対策 |
|---|---|---|
| Accuracyだけで「高性能」と判断してしまう | 不均衡データでは多数クラスを全部正解するだけでAccuracyが高くなる | 不均衡データではF1スコア・PR-AUCを主指標にし、クラスごとの指標も確認する |
| 閾値0.5のまま運用してしまう | デフォルト値を変える発想がなかった | PR曲線で閾値と各指標の関係を確認し、ビジネス要件に合った閾値を選定する |
| 訓練データで評価してしまう | テストデータを分けずに評価し、過学習を見逃す | 必ず未知データ(テストセット)で混同行列を作成し、交差検証も併用する |
| 適合率と再現率の優先度を決めない | 「両方高いのがいい」とだけ言い、トレードオフの議論をしない | FPとFNのビジネスコストを定量化し、どちらの誤りがより深刻かを先に合意する |
まとめ#
混同行列はシンプルな4セルの表ですが、モデル評価の出発点として極めて強力です。重要なのは「Accuracyが高い=良いモデル」ではなく、ビジネス上どの誤りが重いかを先に定義し、それに合った指標と閾値を選ぶこと。不均衡データでは特に、適合率・再現率・F1スコアの3点セットで評価し、閾値調整とコスト重みの設定まで踏み込むのが実務では欠かせません。