← M03 機器學習入門 M03 機器學習入門

M03.09|混淆矩陣:看透模型錯在哪裡

TP、FP、FN、TN — 四個格子告訴你模型的強項和弱點

L1-AI基礎知識-混淆矩陣 L1-AI基礎知識-模型錯誤分析
混淆矩陣 模型評估 精確率 召回率 F1分數
📋

本講學習重點

四個格子各代表什麼?
精確率和召回率差在哪?
什麼時候用 F1?
多分類怎麼讀混淆矩陣?

混淆矩陣(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 格,對角線為正確預測,非對角線為各種混淆方式

📌 準確率(Accuracy)只告訴你模型對了幾成,卻隱藏了模型「怎麼錯的」。 混淆矩陣讓你看到模型把哪個類別誤判成哪個類別,從而診斷根本問題。 精確率、召回率和 F1 分數各有適用情境,理解它們的差異, 是在真實業務場景中正確評估 AI 系統的關鍵素養。
混淆矩陣:看透模型錯在哪裡

🎙️ Podcast(中文)

0:00 / 0:00

一句話搞懂

準確率只告訴你模型「對了幾成」,混淆矩陣才告訴你模型「怎麼錯的」——四個格子 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. 這個模型的準確率、精確率、召回率各是多少?
  2. 從業務角度,哪個指標最重要?為什麼?
  3. 如果調低分類閾值(模型變得更積極地標記詐騙),精確率和召回率各自會往哪個方向變化?
看解答 **問題 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:醫院急診室的心臟病發作風險預測。用於輔助醫生對急診患者排優先順序,高風險患者立即安排進一步檢查。

看解答 **場景 A:食品過期偵測 → 召回率優先** 過期品只有 0.1%,準確率毫無意義(永遠說「正常」就有 99.9% 準確率)。關鍵是把每一個過期品都找出來(降低 FN)。FN 的代價是產品安全危害、食安事故、品牌崩塌;FP 的代價是多做一次人工複查,可接受。 因此應**最大化召回率**,目標接近 100%,即使精確率偏低(誤報率高)也可以接受,因為最終有人工複查把關。 **場景 B:假新聞標記 → 精確率優先** FN(漏掉假新聞)的代價是假新聞繼續流傳;FP(誤標真實報導)的代價是媒體名譽受損、法律訴訟。在有法律風險的場景下,FP 的代價極高。 因此應**最大化精確率**——寧可少標記幾篇假新聞,也不能誤傷真實報導。這個系統不應追求高召回率,否則將承擔過多法律與公關風險。 **場景 C:急診心臟病風險預測 → 召回率優先(兼顧 F1)** FN(漏掉真正心臟病發作的患者)代價是患者在等待中惡化甚至死亡,代價極高。FP(誤判為高風險)的代價是多做一次心電圖或血液檢查,醫療資源有一定浪費但可接受。 因此應**召回率優先**,確保真正高風險患者不被漏網。由於急診資源有限,精確率也不宜太低(避免所有人都被判為高風險導致系統失靈),實務上常用 **F1 分數作為調優目標,但設定召回率下限**(如召回率不得低於 95%)。

關鍵字自我檢核

✅ confusion matrix ✅ true positive ✅ false positive ✅ false negative ✅ true negative ✅ precision ✅ recall ✅ F1 score ✅ 模型錯誤分析 ✅ 二元分類