混同行列を使った評価指標の計算方法と覚え方

# 混同行列を使った評価指標の計算方法と覚え方

機械学習モデルの評価には混同行列（Confusion Matrix）を用いた指標が重要ですが、**正解率（Accuracy）、適合率（Precision）、再現率（Recall）、F1スコア（F1-score）の計算方法が覚えづらい**と感じます。日頃から使用していないと、ど忘れしますよね。
この記事では、**これらの指標を整理し、計算方法をわかりやすく解説**してみます。

## 1. 混同行列とは？

分類問題では、モデルの予測結果を以下のような **混同行列（Confusion Matrix）** に整理できます。

| 実際の値 \ 予測値 | 予測ポジティブ | 予測ネガティブ |
|------------------|-------------|-------------|
| 実際ポジティブ（P）| TP（真陽性） | FN（偽陰性） |
| 実際ネガティブ（N）| FP（偽陽性） | TN（真陰性） |

- **TP（True Positive）**：正しくポジティブと予測  
- **FP（False Positive）**：誤ってポジティブと予測（偽陽性）  
- **FN（False Negative）**：誤ってネガティブと予測（偽陰性）  
- **TN（True Negative）**：正しくネガティブと予測  

これを基に、各評価指標を求めます。

---

## 2. 評価指標の計算式

### (1) **正解率（Accuracy）**
**全体の正しく予測できた割合**
$$
Accuracy = \frac{TP + TN}{TP + TN + FP + FN}
$$
- 全データのうち、どれくらい正しく分類できたかを示します
- 正解を正解/不正解を不正解として正しく予測できたかの割合と思えましょう
- **クラス不均衡がある場合は注意**（例：極端にポジティブが少ない場合、すべてネガティブと予測してもAccuracyは高くなりがち）

### (2) **適合率（Precision）**
**ポジティブと予測したもののうち、本当にポジティブ（に適合する）だった割合**
$$
Precision = \frac{TP}{TP + FP}
$$
- **「陽性」と判断したものの正確性**を示す
- **FPが多いとPrecisionが低下**（偽陽性を減らすことが重要）
- 覚え方：「陽性」と予測したもの内、実際に「陽性」である割合です。実際の「陽性」の適合である
- 例：スパムフィルターでは、スパムと判定したメールのうち、本当にスパムだった割合

### (3) **再現率（Recall, Sensitivity）**
**実際にポジティブなもののうち、どれだけ正しくポジティブと予測（再現）できたか**
$$
Recall = \frac{TP}{TP + FN}
$$
- **本来検出すべきポジティブをどれだけ取り逃さずに取れているか**
- **FNが多いとRecallが低下**（偽陰性を減らすことが重要）
- 覚え方：実際に「陽性」であるもの内、「陽性」と予想した割合です
- 例：スパムフィルターでは、本来スパムのメールのうち、どれくらいスパムとして正しく分類できたか

### (4) **F1スコア（F1-score）**
**PrecisionとRecallのバランスを取る指標**
$$
F1 = \frac{2 \times Precision \times Recall}{Precision + Recall}
$$
- PrecisionとRecallの**調和平均**
- 一方だけが高くてもF1スコアは上がらない
- **バランスよく予測性能を評価するのに適している**

---

## 3. 覚え方のコツ

### ① **TP を基準に考える**
- **Precision（適合率）**：「ポジティブ」と予測したものの正確さ  
  → 分母に FP（誤予測のポジティブ）を含む  
- **Recall（再現率）**：本来ポジティブのうち、どれだけ予測できたか  
  → 分母に FN（取りこぼしたポジティブ）を含む  

### ② **「PR」の順番を意識**
- **Precision（P）** は「ポジティブと予測したものの中の正解率」
- **Recall（R）** は「本来ポジティブの中での検出率」
- **F1 は P と R のバランス**

### ③ **日常例でイメージ**
- **Precision（適合率）**：「スパムだ」と判定したメールが本当にスパムか？
  - Precisionが低い → スパム以外もスパム判定（誤検出が多い）
- **Recall（再現率）**：本来スパムのメールをどれだけスパムと判定できたか？
  - Recallが低い → 本当のスパムを見逃す
- **F1スコア**：Precision（正確性）とRecall（取りこぼしの少なさ）のバランス

---

## 4. 計算例（ガン診断）

### **問題設定**
ある病院で、新しいAIを使ってガンの診断を行いました。  
100人の患者に適用し、以下の結果が得られました：

| 実際の状態 \ 予測 | ガンあり（陽性） | ガンなし（陰性） |
|------------------|-------------|-------------|
| 実際にガンあり（P） | 40（TP） | 10（FN） |
| 実際にガンなし（N） | 15（FP） | 35（TN） |

#### **評価指標の計算**
1. **正解率（Accuracy）**
$$
Accuracy = \frac{40 + 35}{40 + 35 + 15 + 10} = 0.75
$$

2. **適合率（Precision）**
$$
Precision = \frac{40}{40 + 15} \approx 0.727
$$

3. **再現率（Recall）**
$$
Recall = \frac{40}{40 + 10} = 0.8
$$

4. **F1スコア**
$$
F1 = \frac{2 \times 0.727 \times 0.8}{0.727 + 0.8} \approx 0.762
$$

| 指標 | 計算結果 | 意味 |
|------|--------|-----|
| Accuracy（正解率） | 75.0% | 全体の正解率。クラス不均衡があると信用しづらい |
| Precision（適合率） | 72.7% | 「ガンあり」と診断された中で、本当にガンだった割合 |
| Recall（再現率） | 80.0% | 本当のガン患者をどれだけ正しく見つけられたか |
| F1-score | 76.2% | PrecisionとRecallのバランスを取った指標 |

---

## 5. どの指標を重視すべきか？

**状況によって重要な指標が異なる**  
1. **Precision重視（FPを減らしたい）**
   - 例：ガン診断で誤診（FP）を減らし、不必要な治療を防ぎたい場合
   - 対策：閾値を上げる（より厳しく「ガンあり」と判定）

2. **Recall重視（FNを減らしたい）**
   - 例：ガンの見逃し（FN）を減らし、患者を確実に救いたい場合
   - 対策：閾値を下げる（「ガンなし」と誤診しないようにする）

3. **F1-score重視**
   - PrecisionとRecallのバランスが重要な場合（例：スパムフィルター）

---

## まとめ
- **Accuracy** = 正しく分類できた割合
- **Precision** = 「ポジティブ」と予測した中での正解率（FPを抑えたい）
- **Recall** = 実際のポジティブをどれだけ捉えたか（FNを抑えたい）
- **F1-score** = PrecisionとRecallのバランス

これで、混同行列を使った評価指標が、明確になったはずです。
あとは業務なりで日常的に使用していけば、覚えられそうですね。