M03.09|混淆矩陣:看透模型錯在哪裡
TP、FP、FN、TN — 四個格子告訴你模型的強項和弱點
本講學習重點
混淆矩陣(Confusion Matrix)是分類模型最重要的評估工具, 用一個 2×2 表格完整呈現模型在每種預測結果上的表現: - TP(True Positive):正確預測為正例 - FP(False Positive):錯誤預測為正例(實際是負例) - FN(False Negative):錯誤預測為負例(實際是正例) - TN(True Negative):正確預測為負例 由混淆矩陣衍生的三個核心指標: - 精確率(Precision)= TP / (TP + FP):預測為正的有多少真的是正的 - 召回率(Recall)= TP / (TP + FN):所有真正的正例有多少被找到了 - F1 分數 = 2 × (Precision × Recall) / (Precision + Recall):調和平均數,兩者兼顧 精確率 vs 召回率的取捨(Precision-Recall Trade-off): - 強調精確率:避免假警報,適合垃圾郵件過濾(誤判正常信件代價高) - 強調召回率:避免漏網,適合疾病篩檢(漏診代價遠高於多驗一次) 多分類混淆矩陣:N×N 格,對角線為正確預測,非對角線為各種混淆方式
🎙️ Podcast(中文)
一句話搞懂
準確率只告訴你模型「對了幾成」,混淆矩陣才告訴你模型「怎麼錯的」——四個格子 TP、FP、FN、TN,完整呈現模型的強項與弱點,是所有分類評估的起點。
白話解說
準確率的致命缺陷
假設台灣某醫院做癌症篩檢,送來的 1,000 份樣本中,只有 10 份是真正的陽性(癌症)。
一個什麼都不做、永遠回答「陰性」的模型,準確率是: \(\frac{990}{1000} = 99\%\)
99% 準確率聽起來很厲害,但這個模型完全沒有用——它把 10 位真正的病患全部漏掉了。
準確率在類別不平衡時完全失效。這就是為什麼我們需要混淆矩陣。
四個格子的真正含義
混淆矩陣是一張 2×2 表格,橫軸是「模型預測的結果」,縱軸是「實際的真相」:
模型預測
陽性 陰性
┌─────────────────────────┐
實 陽性 │ TP(真陽性) FN(偽陰性)│
際 │ │
真 陰性 │ FP(偽陽性) TN(真陰性)│
相 └─────────────────────────┘
用醫療篩檢的比喻,把每個格子講清楚:
TP(True Positive,真陽性)
模型說「有病」,實際上「真的有病」。
這是最理想的情況。醫生篩出了真正的患者,後續可以安排治療。數量越多越好。
在癌症篩檢中:100 個真正的癌症患者,模型成功找出 85 個 → TP = 85
FP(False Positive,偽陽性)
模型說「有病」,但實際上「沒有病」。
又叫做「誤報」或「假警報」。被診斷為陽性的人需要做進一步確認檢查,造成不必要的心理壓力和醫療資源浪費。但代價通常比 FN 低。
在癌症篩檢中:900 個正常人中,模型錯誤地說 50 個「可能有問題」→ FP = 50
FN(False Negative,偽陰性)
模型說「沒病」,但實際上「真的有病」。
又叫做「漏網」或「漏診」。這通常是最危險的錯誤——真正的患者被告知正常,錯過了黃金治療時間。
在癌症篩檢中:100 個真正的癌症患者中,模型漏掉了 15 個 → FN = 15
TN(True Negative,真陰性)
模型說「沒病」,實際上「真的沒病」。
正常人被正確篩為正常,皆大歡喜。數量越多越好。
在癌症篩檢中:900 個正常人中,模型正確判定 850 個為正常 → TN = 850
完整混淆矩陣範例
以上述癌症篩檢為例,完整的混淆矩陣如下:
模型預測
陽性(有癌) 陰性(正常) 合計
實 陽性(癌症) 85 15 100
際 陰性(正常) 50 850 900
合計 135 865 1000
從這個矩陣中,我們可以立刻看出:
- 模型總共預測了 135 人為陽性,其中 85 個是真的,50 個是誤報
- 100 個真正的癌症患者中,模型找到了 85 個,漏掉了 15 個
準確率 = (TP + TN) / 全部 = (85 + 850) / 1000 = 93.5%
但這個 93.5% 掩蓋了「15% 的癌症患者被漏診」這個嚴重問題。
從混淆矩陣衍生三大指標
精確率(Precision)
問題:「模型說是的,有多少真的是?」
\[\text{Precision} = \frac{TP}{TP + FP} = \frac{85}{85 + 50} = \frac{85}{135} \approx 63\%\]精確率 63% 意思是:模型每找 100 個「疑似患者」,其中只有 63 個是真的患者,37 個是誤報。
精確率衡量的是「預測為正例的可信度」。
召回率(Recall)
問題:「所有真正是正例的,模型找到了幾個?」
\[\text{Recall} = \frac{TP}{TP + FN} = \frac{85}{85 + 15} = \frac{85}{100} = 85\%\]召回率 85% 意思是:100 個真正的癌症患者,模型成功找出了 85 個,漏掉了 15 個。
召回率衡量的是「真正正例被找到的比例」,又稱為「敏感度(Sensitivity)」。
F1 分數(F1 Score)
問題:「精確率和召回率能同時兼顧嗎?」
\[\text{F1} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} = 2 \times \frac{0.63 \times 0.85}{0.63 + 0.85} \approx 72.5\%\]F1 是精確率和召回率的調和平均數。調和平均數的特性是:如果兩個數字差距很大,調和平均數會被拉向較小的那個。因此,F1 分數懲罰「一方很高、另一方很低」的情況,鼓勵兩者都好。
F1 適合在精確率和召回率都重要、且需要一個綜合指標的場景使用。
精確率 vs 召回率:如何選擇?
精確率和召回率之間存在天然的取捨關係(Precision-Recall Trade-off):
| 場景 | 優先指標 | 理由 |
|---|---|---|
| 癌症早期篩檢 | 召回率 | 漏掉一個真正的患者,代價遠大於多做幾次確認檢查 |
| 垃圾郵件過濾 | 精確率 | 把重要信件誤判為垃圾比漏掉幾封垃圾信更糟糕 |
| 信用卡詐騙偵測 | 召回率 | 每一筆真實詐騙都要抓到,誤報可讓客服確認 |
| 法院 AI 輔助判決 | 精確率 | 誤判無辜比放走罪犯代價更高(取決於法律原則) |
| 新藥副作用預警 | 召回率 | 安全比效率更重要,寧可多預警也不能漏 |
透過調整分類的「閾值(Threshold)」可以在精確率和召回率之間移動:
- 閾值調高 → 更保守,精確率上升,召回率下降
- 閾值調低 → 更積極,召回率上升,精確率下降
多分類混淆矩陣
當分類問題有三個以上的類別時,混淆矩陣會擴展為 N×N 的格子。
以台灣健康保險理賠審查為例,假設系統將理賠申請分為三類:
模型預測
核准 拒絕 需補件 合計
實 核准 420 30 50 500
際 拒絕 25 310 15 350
需補件 40 20 90 150
合計 485 360 155 1000
讀法:
- 對角線(左上到右下)是正確預測:420 + 310 + 90 = 820,整體準確率 82%
- 非對角線是各種混淆:「應核准」有 80 件被錯誤處理;「需補件」有 60 件被誤判
觀察重點:
- 「應核准」有 50 件被判為「需補件」→ 客戶需要多等時間,滿意度受影響
- 「應拒絕」有 25 件被錯判為「核准」→ 不當理賠,財務風險
- 「需補件」有 40 件被錯判為「核准」→ 審核流程不嚴謹
多分類混淆矩陣讓你一眼看出:哪兩個類別之間最常被混淆,從而針對性地改善特徵工程或收集更多該類別的訓練資料。
應用場景
台灣垃圾郵件過濾系統的實際數字
台灣某電信業者的企業郵件系統,每日處理約 250 萬封郵件,其中估計 62% 為垃圾郵件(約 155 萬封)、38% 為正常郵件(約 95 萬封)。
部署 AI 垃圾郵件過濾器後,以某日的 10 萬封樣本為例,實際混淆矩陣如下:
模型預測
垃圾郵件 正常郵件 合計
實 垃圾郵件 60,800 1,200 62,000
際 正常郵件 950 37,050 38,000
合計 61,750 38,250 100,000
計算關鍵指標:
| 指標 | 計算式 | 數值 | 業務意義 |
|---|---|---|---|
| 準確率 | (60,800 + 37,050) / 100,000 | 97.85% | 整體正確率 |
| 精確率 | 60,800 / (60,800 + 950) | 98.47% | 被判定為垃圾的信有 98.47% 真的是垃圾 |
| 召回率 | 60,800 / (60,800 + 1,200) | 98.06% | 所有垃圾信中抓到 98.06% |
| F1 分數 | 2 × (0.9847 × 0.9806) / (0.9847 + 0.9806) | 98.26% | 精確率和召回率的調和平均 |
業務重點分析:
這個系統的關鍵指標是精確率——因為 FP(950 封被誤判為垃圾的正常郵件)造成企業客戶漏收重要信件,對業務傷害極大。
- FP = 950 封:每天約有 950 封正常郵件被誤送進垃圾桶
- FN = 1,200 封:每天有 1,200 封垃圾郵件成功逃脫,進入收件匣
工程師後續決策:若要進一步降低 FP(提高精確率),可將分類閾值從 0.5 調高至 0.7;預期精確率從 98.47% 提升至約 99.2%,但召回率會從 98.06% 下降至約 96.5%,每天約多漏 2,000 封垃圾信。
這正是精確率和召回率取捨的業務決策核心:電信業者與企業客戶協商後,最終選擇「寧可多放行幾封垃圾,也不能漏掉正常郵件」,精確率優先。
常見誤區
誤區一:把準確率當成唯一指標,忽略混淆矩陣
許多人看到模型準確率 95% 就認為沒問題,實際上在類別不平衡的情境(如詐騙偵測、罕見疾病篩檢),準確率高可能只是因為模型把大多數樣本都預測為多數類別。例如詐騙率 2% 的資料集,永遠說「不是詐騙」就有 98% 準確率,但完全沒有實用價值。正確做法是搭配混淆矩陣,分別看各類別的精確率和召回率,才能判斷模型是否真的有效。
誤區二:混淆精確率(Precision)與準確率(Accuracy)
中文名稱相近,但兩者完全不同。準確率(Accuracy)看的是整體:「所有預測中有多少是對的」;精確率(Precision)看的是局部:「預測為正例的當中有多少是真正的正例」。在類別不平衡問題中,準確率可能很高,精確率卻很低。考試時務必注意:Accuracy ≠ Precision,中文翻譯「準確率」和「精確率」字面上只差一個字,但計算公式完全不同。
誤區三:認為 F1 分數永遠是最好的評估指標
F1 是精確率和召回率的調和平均,適合兩者都重要的場景。但在某些情境下,F1 並非最佳選擇:(1) 若業務明確要求「寧可誤報也不能漏網」(如癌症篩檢),應直接最大化召回率而非 F1;(2) 若類別極度不平衡,AUC-ROC 或 PR-AUC 往往比 F1 更有區分力;(3) 若各類別的誤判代價差異懸殊,應使用加權 F1(Weighted F1)或根據業務設計自訂損失函數。沒有一個指標適合所有情境,選擇評估指標本身就是業務判斷,不是純粹的技術問題。
小練習
練習一:讀懂混淆矩陣
某台灣銀行部署了一套 AI 信用卡詐騙偵測系統,在某日的 10,000 筆交易中產生以下混淆矩陣(正例 = 詐騙交易):
模型預測
詐騙 正常 合計
實 詐騙 72 8 80
際 正常 45 9,875 9,920
合計 117 9,883 10,000
請回答以下三個問題:
- 這個模型的準確率、精確率、召回率各是多少?
- 從業務角度,哪個指標最重要?為什麼?
- 如果調低分類閾值(模型變得更積極地標記詐騙),精確率和召回率各自會往哪個方向變化?
看解答
**問題 1:計算指標** - **準確率** = (TP + TN) / 全部 = (72 + 9,875) / 10,000 = **99.47%** - **精確率** = TP / (TP + FP) = 72 / (72 + 45) = 72 / 117 ≈ **61.5%** - **召回率** = TP / (TP + FN) = 72 / (72 + 8) = 72 / 80 = **90%** 準確率 99.47% 看起來很漂亮,但精確率只有 61.5%——表示模型標記的「疑似詐騙」中,有將近 40% 是誤報,每天有 45 位正常客戶的交易被卡住,需要致電客服確認,造成客戶不滿。 **問題 2:業務重點指標——召回率** 信用卡詐騙偵測最怕的是「漏網」(FN):一旦真正的詐騙交易沒被攔下,銀行承擔財務損失,客戶資金受損,商譽受重創。相比之下,誤報(FP)的代價是客服電話確認,成本相對低。 因此,詐騙偵測應以**召回率優先**,目標是把 FN(漏網詐騙)降到最低。目前召回率 90% 意味著每 100 筆真實詐騙,有 10 筆漏網。 **問題 3:調低閾值的影響** 調低閾值 → 模型更容易將交易標記為「詐騙」: - **召回率上升**:更多真正的詐騙被抓到(FN 減少) - **精確率下降**:更多正常交易被誤報(FP 增加) 這是精確率與召回率的天然取捨。銀行工程師需要根據「每筆漏網詐騙的平均損失」和「每次誤報的客服成本」,找到最佳的業務平衡點,而不是盲目追求任一指標最大化。練習二:選擇正確的評估指標
以下三個 AI 應用場景,各自應該最優先哪個指標(準確率、精確率、召回率、F1)?請為每個場景選擇並說明理由:
場景 A:台灣食品廠的過期產品偵測系統。工廠每天生產 100 萬個產品,過期品約佔 0.1%。要求:絕對不能讓過期品流出到消費者手中。
場景 B:新聞媒體的假新聞標記系統。用於在社群平台上標記可疑新聞,讓讀者注意。若標記錯誤,原本正確的報導被打上「疑似假新聞」,媒體可能提告。
場景 C:醫院急診室的心臟病發作風險預測。用於輔助醫生對急診患者排優先順序,高風險患者立即安排進一步檢查。