まとめ
- 分類タスクで使う主要指標と二値・多クラス・マルチラベルの違いを整理します。
- 混同行列系・閾値調整系・確率評価系・ランキング系の指標を俯瞰します。
- ビジネス要件に応じた指標セットの組み立て方と報告時の注意点をまとめます。
Chapter 3 #
分類評価指標の全体像 #
分類モデルの評価は「クラスのバランス」「閾値の扱い」「予測確率の信頼性」「上位ランキングの質」といった観点によって指標が変わります。この章では代表的な指標群を整理し、用途に応じた選び方のガイドラインを紹介します。
指標カテゴリ #
1. 混同行列ベース #
- Accuracy(正解率): 全体の正解率。ラベル不均衡では過大評価になりやすい。
- Precision / Recall / F1(適合率・再現率、F1): クラスごとのエラーコストに応じて使い分け。
- Specificity / Sensitivity(感度・特異度): 医療検査など偽陰性・偽陽性のバランスが重要な場面で。
- Macro / Micro / Weighted averaging(平均化戦略): 多クラスでの集約方法。
2. 閾値調整・ランキング系 #
- Precision-Recall 曲線 / PR-AUC(P-R): 正例が少ない場合の比較に有効。
- ROC 曲線 / ROC-AUC(ROC-AUC): 全体の識別力を評価。
- Top-k Accuracy / Hit Rate(Top-k Accuracy、Hit Rate): 推薦や検索で上位候補に正解が含まれるか。
3. 確率・校正系 #
- Log Loss(対数損失): 予測確率の精度を重視。
- Brier Score(ブライアスコア): 校正曲線と合わせて確率の信頼性を確認。
- Calibration 曲線: 実測頻度と予測確率の整合性を可視化。
4. クラス不均衡の補助指標 #
閾値を変えたときのスコア推移 #
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score, recall_score, f1_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
X, y = make_classification(
n_samples=2000,
n_features=12,
n_informative=4,
weights=[0.85, 0.15],
random_state=42,
)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, stratify=y, random_state=42
)
scaler = StandardScaler()
model = LogisticRegression(max_iter=2000)
model.fit(scaler.fit_transform(X_train), y_train)
prob = model.predict_proba(scaler.transform(X_test))[:, 1]
thresholds = np.linspace(0.05, 0.95, 19)
precision, recall, f1 = [], [], []
for t in thresholds:
y_pred = (prob >= t).astype(int)
precision.append(precision_score(y_test, y_pred, zero_division=0))
recall.append(recall_score(y_test, y_pred, zero_division=0))
f1.append(f1_score(y_test, y_pred, zero_division=0))
fig, ax = plt.subplots(figsize=(6.8, 4))
ax.plot(thresholds, precision, label="Precision", color="#2563eb")
ax.plot(thresholds, recall, label="Recall", color="#dc2626")
ax.plot(thresholds, f1, label="F1", color="#0d9488")
ax.set_xlabel("Threshold")
ax.set_ylabel("Score")
ax.set_title("Effect of threshold on classification metrics")
ax.set_ylim(0, 1.05)
ax.grid(alpha=0.3)
ax.legend()
plt.tight_layout()

閾値を下げると再現率は上がるが適合率が低下する。F1 が極大となるバランスポイントを選ぶ方法もある。
報告・運用時のポイント #
- 混同行列を必ず添付
クラスごとの誤分類傾向が一目で分かります。重要クラスの誤差を強調しましょう。 - 閾値の根拠を共有
PR 曲線や閾値–スコアの図を用いて、どの閾値を採用したか説明します。 - 確率の校正状況を確認
価格やリソース配分に確率を使う場合は、Brier Score や校正曲線で信頼性をチェック。 - クラス不均衡の影響を把握
Balanced Accuracy や MCC を併用し、Accuracy のみで判断しないようにします。 - ドリフトモニタリング
Precision / Recall、PR-AUC、ROC-AUC の推移を監視し、閾値の再調整に備えます。
クイックリファレンス #
| 観点 | 代表的な指標 | 関連ページ | メモ |
|---|---|---|---|
| 全体精度 | Accuracy / Balanced Accuracy | Accuracy / Balanced Accuracy | ラベル不均衡では Balanced Accuracy を併記 |
| 偽陽性 vs 偽陰性 | Precision / Recall / Fβ | Precision-Recall / F1 | 閾値調整と併用 |
| ランキング品質 | PR-AUC / ROC-AUC / Top-k | PR 曲線 / ROC-AUC / Top-k Accuracy | クラス不均衡や推薦タスク向き |
| 確率校正 | Log Loss / Brier Score | Log Loss / Brier Score | 予測確率を意思決定に使うとき |
| 評価の頑健性 | MCC / Cohen’s κ | MCC / Cohen’s κ | クラス不均衡でも安定 |
チェックリスト #
- クラス不均衡を考慮した指標を併用したか
- 閾値の根拠(PR/ROC 図、コスト分析など)を共有したか
- 予測確率の校正状況を確認したか
- 評価データと運用データの分布が一致するか確認したか
- モデル更新時に比較する基準指標を統一したか