Shikata Ga Nai

Private? There is no such things.

33. モデル評価の方法① 〜精度・再現率・F1スコア〜

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, (^^ゞ