Hello there, ('ω')ノ
📌 1. モデル評価の基本(混同行列とは?)
まず、分類モデルの評価に欠かせない 「混同行列(Confusion Matrix)」 について理解しましょう!
📌 混同行列とは? 2クラス分類(例: スパム or 非スパム)における予測結果を整理した表です。
実際の値 ↓ / 予測値 → | Positive(1: スパム) | Negative(0: 非スパム) |
---|---|---|
Positive(スパム) | TP(真陽性) → 正しくスパムと判定 | FN(偽陰性) → 本当はスパムなのに非スパムと判定 |
Negative(非スパム) | FP(偽陽性) → 本当は非スパムなのにスパムと判定 | TN(真陰性) → 正しく非スパムと判定 |
📌 混同行列の意味
- TP(True Positive) → 正しくスパムをスパムと予測
- FP(False Positive) → 間違って非スパムをスパムと予測(誤検知)
- FN(False Negative) → 間違ってスパムを非スパムと予測(見逃し)
- TN(True Negative) → 正しく非スパムを非スパムと予測
➡ この混同行列をもとに、さまざまな評価指標を計算できる!
📌 2. 精度(Accuracy)とは?
✅ 精度(Accuracy)の計算式
[ Accuracy = \frac{TP + TN}{TP + FP + FN + TN} ] (全データのうち、正しく予測できた割合)
📌 例
- 100件のデータ で、正しく分類できたのが90件なら
[
Accuracy = \frac{90}{100} = 0.90(90%)
]
📌 精度(Accuracy)の問題点 - データが不均衡な場合(例: 健康な人99%、病気1%) - 99%のデータが健康なら、すべて「健康」と予測しても 精度99%!(でも無意味) - 重要なのは「病気を見逃さないこと」= 再現率(Recall)も考慮すべき!
➡ 「データが均等な場合」は精度で評価してもOK! でも、クラスの割合が偏っている場合は注意!
📌 3. 適合率(Precision)と再現率(Recall)
✅ 適合率(Precision)の計算式
[ Precision = \frac{TP}{TP + FP} ] (「スパム」と予測したもののうち、本当にスパムだった割合)
📌 適合率が重要なケース - スパムメール判定(間違って大事なメールをスパムにしないように) - 詐欺検出(誤検知を減らすために)
➡ 「本当にPositive(スパム)のものだけを拾いたい」場合に重要!
✅ 再現率(Recall)の計算式
[ Recall = \frac{TP}{TP + FN} ] (実際のスパムのうち、正しくスパムと判定できた割合)
📌 再現率が重要なケース - 医療診断(病気を見逃さないことが重要!) - 不良品検査(不良品を1つでも見逃さない)
➡ 「Positive(スパム・病気)をできるだけ取りこぼさない」場合に重要!
📌 4. F1スコアとは?
PrecisionとRecallのバランスを取る指標が「F1スコア」!
[ F1 = 2 \times \frac{Precision \times Recall}{Precision + Recall} ]
📌 F1スコアの特徴
- PrecisionとRecallのバランスを考慮
- 両方が高いほど、F1スコアも高くなる!
➡ 「適合率も再現率も大事!」なケース(例: 検索エンジン、情報抽出)で使う!
📌 5. Pythonでモデル評価を実装
Irisデータセットを使って、分類モデルの評価指標を計算 してみましょう!
from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix # データの読み込み iris = load_iris() X, y = iris.data, iris.target # データを学習用・テスト用に分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # ランダムフォレストモデルの作成 model = RandomForestClassifier(n_estimators=100) model.fit(X_train, y_train) # 予測 y_pred = model.predict(X_test) # 評価指標の計算 accuracy = accuracy_score(y_test, y_pred) precision = precision_score(y_test, y_pred, average="weighted") recall = recall_score(y_test, y_pred, average="weighted") f1 = f1_score(y_test, y_pred, average="weighted") # 混同行列 conf_matrix = confusion_matrix(y_test, y_pred) # 結果の表示 print(f"Accuracy: {accuracy:.2f}") print(f"Precision: {precision:.2f}") print(f"Recall: {recall:.2f}") print(f"F1 Score: {f1:.2f}") print("Confusion Matrix:") print(conf_matrix)
✅ 精度・適合率・再現率・F1スコアを計算!
✅ 混同行列を表示し、予測の正確さを確認!
📌 6. どの指標を使うべきか?(ケース別の選び方)
問題 | 重要な指標 | 理由 |
---|---|---|
スパムフィルター | Precision | 重要なメールをスパムにしない |
医療診断(がん検出) | Recall | がん患者を見逃さない |
検索エンジンの精度 | F1スコア | PrecisionもRecallも重要 |
一般的な分類問題 | Accuracy | クラスの割合が均等な場合 |
➡ ケースに応じて、適切な指標を選ぶことが重要!
🎯 まとめ
✅ 精度(Accuracy)だけではモデルを正しく評価できない!
✅ 適合率(Precision)と再現率(Recall)を考慮しよう!
✅ F1スコアを使えば、バランスの良い評価ができる!
✅ Pythonで混同行列や評価指標を計算し、モデルの性能をチェック!
Best regards, (^^ゞ