【分類④】混同行列・精度・再現率・F1スコアの正しい使い方

はじめに

分類モデルの性能を評価する際に、「精度(Accuracy)」だけを見て満足していませんか?

実は分類問題では、「どのクラスをどれだけ正しく予測できているか」を詳しく確認する必要があり、そのための指標が「混同行列」や「精度・再現率・F1スコア」です。

本記事では、それぞれの指標の意味と使いどころ、そしてscikit-learnによる実装例をわかりやすく解説します。


混同行列(Confusion Matrix)とは?

概要

混同行列とは、分類モデルの予測結果と実際の正解をマトリクス(表)形式で示したものです。

2値分類の例:

予測:陽性(1)予測:陰性(0)
実際:陽性(1)TP(真陽性)FN(偽陰性)
実際:陰性(0)FP(偽陽性)TN(真陰性)

この4つの値をもとに、以下のような指標を計算します。


評価指標の定義と意味

精度(Accuracy)

精度を求める公式の図
  • 全体のうち正しく分類された割合
  • データが偏っているときに過大評価されやすい

適合率(Precision)

適合率を求める公式の図
  • 「陽性」と予測したうち、どれだけ正しかったか
  • FPを減らすことに関心がある場面(例:スパム検出)

再現率(Recall)

再現率を求める公式の図
  • 実際に陽性だったものをどれだけ取りこぼさず検出できたか
  • FNを減らすことに関心がある場面(例:がん検出)

F1スコア

F1スコアを求める公式の図
  • Precision と Recall のバランスをとる指標
  • どちらも重要な場合に最適

実装:分類結果を評価してみよう

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, classification_report

# データセットとモデル準備
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = LogisticRegression(max_iter=10000)
model.fit(X_train, y_train)

# 予測と評価
y_pred = model.predict(X_test)
print("混同行列:\n", confusion_matrix(y_test, y_pred))
print("分類レポート:\n", classification_report(y_test, y_pred))

多クラス分類の場合は?

  • 混同行列はクラスごとに正解/誤りの関係を整理
  • precision/recall/F1 は「micro平均」「macro平均」「weighted平均」などでまとめられる

🔸用語の前提

  • 多クラス分類:例)犬・猫・ウサギを分類するタスク(3クラス)
  • 各クラスごとにPrecision, Recall, F1が出せる
  • それらを全体として1つの評価指標にまとめる方法が、今回の3つです。

✅ micro平均(マイクロ平均)

🔹特徴

  • 全クラスの「個々の予測」を合算して計算
  • 各クラスを区別せずに1つの混同行列としてまとめて評価するイメージ。

🔹イメージ

各クラスのTP(True Positive)、FP、FNを全部足し合わせてから、PrecisionやRecallを計算。

micro_Precision = 全クラスのTPの合計 / 全クラスの( TP + FP )の合計
micro_Recall = 全クラスのTPの合計 / 全クラスの( TP + FN )の合計

🔹向いているケース

  • 不均衡データで、全体の正確さを重視したいとき。
  • 「全体でどれくらい正しく当てたか?」を重視。

✅ macro平均(マクロ平均)

🔹特徴

  • 各クラスの指標を個別に計算して平均をとる。
  • クラスごとのバランスを見るのに適している

🔹イメージ

macro_Precision = (P_クラス1 + P_クラス2 + P_クラス3) / 3
macro_Recall = (R_クラス1 + R_クラス2 + R_クラス3) / 3

🔹向いているケース

  • クラス数が少ない or クラスの重要度が等しい場合に◎
  • 少数派クラスも等しく重視したいとき

✅ weighted平均(加重平均)

🔹特徴

  • 各クラスの指標に「そのクラスのサンプル数」で重みをかけて平均する。

🔹イメージ

weighted_Precision = Σ(P_i × サンプル数_i) / 全サンプル数

🔹向いているケース

  • クラスに偏りがある(例:猫が9割)ときでも、全体を代表するようなスコアが欲しいとき。
  • macro平均の弱点(少数クラスの影響が大きすぎる)を補いたいとき。

🎯まとめ表

指標計算方法特徴向いているケース
micro平均全クラスのTP,FP,FNを合算全体の正解率を反映全体の性能評価をしたいとき
macro平均各クラスの指標を平均各クラスを同等に扱う少数クラスも重要なとき
weighted平均各クラスにサンプル数の重みを加えるクラス数に応じた現実的な平均クラス不均衡を反映しつつ平均したいとき

どの指標を使えばよいか?

タスク例重視する指標
スパムフィルタPrecision(誤検出を防ぎたい)
医療診断Recall(見逃しを減らしたい)
バランス型の分類F1スコア(PrecisionとRecallのバランス)

おわりに

分類モデルの評価は「正しく分類できたか?」だけではなく、「どのように間違えたか?」が非常に重要です。

混同行列と主要指標(Precision・Recall・F1)を理解し、課題に応じた適切な指標を選ぶことで、より信頼性の高いモデル設計が可能になります。

次回は、SVM・決定木・ランダムフォレストなどのモデルを比較し、精度と解釈性のトレードオフについて解説します。


練習問題

Q1. 再現率が高いとはどういうこと?

  • A. 誤検出が少ない
  • B. 見逃しが少ない
  • C. 全体精度が高い

Q2. F1スコアは何のバランスをとる指標?

  • A. AccuracyとRecall
  • B. PrecisionとRecall
  • C. FPとFN

Q3. 精度(Accuracy)の過信が危険な状況は?

  • A. データが均等に分布しているとき
  • B. クラスに偏りがあるとき
  • C. 多クラス分類のとき

🔗 機械学習シリーズ 関連リンク

▶ 入門〜分類編

▶ 回帰編

▶ 応用編


コメント

タイトルとURLをコピーしました