跳到主要內容
Lab Grimoire
TW
請喝咖啡
動手實作

鑑別式 AI:混淆矩陣、ROC 曲線與決策樹

鑑別式與生成式模型的差別,精確率、召回率、F1 的計算與選擇,ROC 與 PR 曲線,吉尼不純度、bagging 與 boosting,迴歸評估指標。

作者
CY
發表
AI 的資料基礎:從統計到生成式 AI · 第 14/19 篇

本系列第 14 篇|這篇回答:分類模型怎麼畫出判斷的邊界?又該用什麼指標評估它? 讀完這篇,你應該能:

  • 用 P(y∣x) 與 P(x)、P(x, y) 說明鑑別式模型與生成式模型各在學什麼
  • 從 TP、FP、FN、TN 算出準確率、精確率、召回率、特異度與 F1,並依漏判或誤報的代價選指標
  • 用吉尼不純度與熵看一個節點有多雜,並說明隨機森林的 bagging 與梯度提升的 boosting 如何使用多棵樹

一、原理:鑑別式模型學的是「邊界」

鑑別式模型直接學 P(y∣x),目標是切開類別的決策邊界。

詳細說明

鑑別式模型(discriminative model)要回答的是:這筆輸入 x 已經在手上,類別或數值 y 是什麼。它直接學條件機率 P(y∣x)。詐欺或正常、會流失或不會流失、信用分數落在哪一段,都是在學一條把類別切開的決策邊界。

生成式模型(generative model)學的是資料本身的分佈,寫成 P(x),或連類別一起寫成 P(x, y)。分佈在手上,就可以依這個分佈產生新樣本。鑑別式模型把力氣放在邊界上,目標是把類別分開。

這類邊界常見於詐欺偵測、客戶流失預測、信用評分、製程瑕疵的影像辨識、醫療影像輔助判讀、垃圾郵件過濾。這些任務通常有大量且帶標籤的資料。標籤寫明每一筆的正確答案,模型才學得到較細的決策邊界。

二、方法:常見模型、不純度與評估指標

常見模型

選模型看輸入長什麼樣、要不要被人讀懂、推論扛不扛得住量。

詳細說明

下面這些都是鑑別式任務裡常用的模型。選的時候看輸入長什麼樣、要不要被人讀懂、以及推論能不能扛大量線上請求。

  • 邏輯斯迴歸(logistic regression)是線性模型,係數可以解釋,計算快,適合大規模線上推論。類別大致能用線性邊界分開、又要立刻回傳判別時,它對得上。
  • 決策樹(decision tree)把切分寫成可讀的規則,但也容易過擬合。樹若一直切到節點幾乎只剩單一類,訓練時看到的巧合也會被寫進規則。
  • 隨機森林(random forest)屬於 bagging。每棵樹使用自助抽樣的資料,以及隨機抽到的一部分特徵,再對各樹投票或平均。自助抽樣是從原資料抽出樣本,抽過的仍可再被抽到。多棵樹平均之後,單棵樹的不穩定被壓低,變異下降。
  • 梯度提升(gradient boosting)屬於 boosting。樹不是同時投票,而是一棵接一棵長,下一棵修正前一輪的錯誤。XGBoost、LightGBM 是這個家族裡,表格資料上常見的強模型。
  • 支援向量機(SVM)把兩類之間的邊界拉到最寬,也就是最大化邊界。
  • 最近鄰法(KNN)用最近的鄰居決定這一筆屬於哪一類。特徵尺度要先對齊,否則數字大的欄位會主導距離。每預測一筆都要重新找鄰居,預測時計算量大。
  • 單純貝氏(naive Bayes)假設特徵在給定類別之下條件獨立,計算因此快,文字分類常用它。
  • 神經網路(neural network)依資料型態分工:卷積神經網路(CNN)擅長影像,循環神經網路(RNN)與 Transformer 擅長序列。製程瑕疵與醫療影像這類圖像輸入,對得上 CNN;一筆筆依序發生的事件,才對得上 RNN 或 Transformer。

表格上的欄位(金額、次數、天數)先想邏輯斯迴歸、決策樹、隨機森林與梯度提升。不要把一列欄位誤當成影像送進 CNN。

決策樹的切分

每一刀都選不純度下降最多的切分,一棵樹只用一種不純度。

詳細說明

樹的每一刀都在問:切完之後,子節點比原本更純嗎。純度用兩種不純度來量,演算法選讓不純度下降最多的切分。

吉尼不純度(Gini)的定義是

Gini = 1 − Σ pᵢ²

pᵢ 是節點裡第 i 類的比例。只有一類時,p = 1,Gini = 1 − 1² = 0。

70 筆 A、30 筆 B:p 為 0.7 與 0.3。

0.7² = 0.49,0.3² = 0.09,兩者相加 0.58。

Gini = 1 − 0.58 = 0.42。

60 筆與 40 筆:0.6² = 0.36,0.4² = 0.16,相加 0.52。

Gini = 1 − 0.52 = 0.48。

0.48 比 0.42 高,因為 60/40 比 70/30 更接近對半,節點更雜。兩類恰好各半時,Gini = 1 − (0.5² + 0.5²) = 1 − 0.5 = 0.5,這是二元節點的最高雜度。

熵(entropy)的定義是

Entropy = −Σ pᵢ log₂ pᵢ

只有一類時,p = 1,log₂ 1 = 0,該項為 0;另一類機率為 0 的那一項在這個定義裡取 0,所以熵也是 0。兩類各半時,log₂ 0.5 = −1,

Entropy = −(0.5 × −1 + 0.5 × −1) = 1。

同一個 50/50 節點,吉尼不純度是 0.5、熵是 1。兩把尺的數字不能直接比較高低。

資訊增益(information gain)定義為

資訊增益 = 切分前的熵 − 切分後的加權熵

加權的作法:每個子節點的熵,乘上該子節點筆數佔父節點的比例,再加總。增益越大,這一刀讓熵下降越多。改用吉尼不純度時,同樣是挑下降最多的那一刀。一棵樹選定一種不純度來比切分。

從混淆矩陣讀分類表現

不平衡時準確率幾乎看不出漏掉的陽性,指標要跟著代價走。

詳細說明

二元分類把結果放進混淆矩陣(confusion matrix)。四格是 TP(真陽性, true positive)、FP(偽陽性, false positive)、FN(偽陰性, false negative)、TN(真陰性, true negative)。

用一批共 1,000 筆的結果當例子:TP 40、FN 10、FP 20、TN 930。

預測陽性 預測陰性
實際陽性 TP 40 FN 10
實際陰性 FP 20 TN 930

準確率(accuracy) = (TP + TN) / 全部。分子是判對的筆數,分母是全部筆數。

(40 + 930) / 1000 = 970/1000 = 0.97。

精確率(precision) = TP / (TP + FP)。分母是「模型說是陽性」的筆數,答案是其中真的為陽性的比例。

40 / (40 + 20) = 40/60 ≈ 0.667。

召回率(recall)又稱敏感度、TPR,定義是 TP / (TP + FN)。分母是實際上的陽性,答案是其中被抓到的比例。

40 / (40 + 10) = 40/50 = 0.8。

特異度(specificity) = TN / (TN + FP)。分母是實際上的陰性,答案是其中被正確放行的比例。

930 / (930 + 20) = 930/950。

F1 = 2 × P × R / (P + R)。用上面的分數精確算:P = 40/60 = 2/3,R = 4/5。

2 × (2/3) × (4/5) = 16/15

P + R = 2/3 + 4/5 = 10/15 + 12/15 = 22/15

F1 = (16/15) / (22/15) = 16/22 = 8/11 ≈ 0.727。

若先四捨五入成小數:2 × 0.667 × 0.8 = 1.0672,0.667 + 0.8 = 1.467,1.0672 / 1.467 ≈ 0.727。兩條算式對到同一個約數。

0.97 的準確率裡,970 筆判對的有 930 筆是真陰性。50 筆實際陽性只抓到 40 筆這件事,準確率幾乎看不出來。類別很不平衡時,這個落差會更大。詐欺若只佔 0.5%,模型全部猜「正常」,準確率 = 1 − 0.005 = 0.995,也就是 99.5%,但 TP = 0,召回率 = 0。

指標要跟著代價走。漏掉陽性的代價高時,看召回率。癌症篩檢漏掉病人、詐欺偵測放行走詐,都屬於這一側。誤報的代價高時,看精確率。垃圾郵件過濾若把重要信刪掉,或風控把正常帳戶凍結,都是 FP 太貴,精確率的分母 TP + FP 正好在管這件事。

門檻、ROC 與 PR 曲線

極度不平衡時 ROC 會看輕少數類誤報,要改看 PR 曲線。

詳細說明

二元模型通常先給出陽性機率,再拿門檻切成類別。門檻降低,更多人被判成陽性,召回率上升,精確率通常下降。

ROC 曲線(receiver operating characteristic)的橫軸是 FPR(false positive rate) = FP / (FP + TN),縱軸是 TPR。上面那批數字的 FPR = 20/950。特異度與 FPR 共用分母 FP + TN:

20/950 + 930/950 = 950/950 = 1

所以 FPR + 特異度 = 1。

畫 ROC 時,把門檻從高調到低。判成陽性的人只會變多或不變,TPR 與 FPR 都只會增加或停住。曲線從 (0, 0) 走到 (1, 1),不會往回走。某一段若只多抓到真陽性、沒有新增偽陽性,FPR 不變而 TPR 上升,曲線與縱軸平行,這仍是往 (1, 1) 的方向。

AUC(area under the curve)是 ROC 下方的面積。AUC = 0.5 等於隨機猜,越接近 1 越好。

類別極度不平衡時,TN 非常多,FPR 的分母很大,FPR 不容易升高,ROC 會把少數類的誤報看得比較輕。此時改看 PR 曲線(precision-recall curve),軸是精確率對召回率,較能反映少數類的表現。PR 曲線下方的面積稱 PR-AUC,和召回率、精確率一起用,才能避開「全猜多數類就有很高準確率」的模型。

門檻與這三個指標的對照,可以用下面的程式表示。model、X、y_true 分別是已訓練的模型、特徵矩陣與真實標籤;0.3 是這個例子自訂的門檻。

from sklearn.metrics import confusion_matrix, classification_report, roc_auc_score

# model: trained classifier; X: feature matrix; y_true: ground-truth labels
positive_proba = model.predict_proba(X)[:, 1]
y_pred = [1 if p >= 0.3 else 0 for p in positive_proba]

print(confusion_matrix(y_true, y_pred))
print(classification_report(y_true, y_pred))
print(roc_auc_score(y_true, positive_proba))

confusion_matrix 對上四格計數,classification_report 對上精確率、召回率與 F1,roc_auc_score 用的是陽性機率,不是切過門檻的 0/1。同一組機率,換一個門檻就換一組 TP、FP、FN、TN。

迴歸指標

連續標籤改看誤差,RMSE 對大誤差的懲罰比 MAE 更重。

詳細說明

標籤是連續數值時,改看誤差,不再用準確率。

MAE(mean absolute error,平均絕對誤差)把每個誤差取絕對值再平均,單位與原資料相同,對離群值較不敏感。

MSE(mean squared error)是平方誤差的平均。

RMSE(root mean squared error)是 MSE 開根號,√MSE。誤差先平方,大誤差被放得更大,所以 RMSE 對大誤差的懲罰比 MAE 更重。

MAPE(mean absolute percentage error,平均絕對百分比誤差)把誤差換成相對實際值的百分比再平均。實際值接近 0 時,分母太小,少數幾筆就會把指標放大,數值不穩定。

R² 是迴歸的擬合指標。它不取代上面的誤差,也不能拿去評詐欺、流失這類分類題。

房價裡少數極端豪宅造成很大的誤差,而且希望大誤差被罰得更重時,對得上的是 RMSE。MAE 會把那些豪宅的拉力看得比較輕。

單筆預測怎麼解釋

特徵重要度看整個模型,SHAP 值看單筆每個特徵的貢獻。

詳細說明

模型挑完之後,有些場景還得說出理由。特徵重要度(feature importance)看的是整個模型裡,哪些特徵影響比較大。SHAP 值看的是單獨一筆預測,每個特徵對這一筆貢獻了多少。信用評分需要向當事人說明為什麼是這個結果時,就用得到這種單筆的拆解。

三、容易混淆的地方

六組差別都來自定義本身。右欄整理實務工作中可觀察到的線索。

容易混淆 差別在哪 實際遇到時的線索
鑑別式 vs 生成式 鑑別式學 P(y∣x),給定 x 決定 y。生成式學 P(x) 或 P(x, y),可以產生新樣本。 產品需求要產生新資料時看生成式;若只要把類別分開,則看鑑別式。
精確率 vs 召回率 精確率的分母是 TP + FP,也就是預測為陽性的筆數。召回率的分母是 TP + FN,也就是實際陽性。 評估中誤報成本高(誤刪重要信、誤凍結正常帳戶)時看精確率;漏掉陽性成本高(癌症篩檢、詐欺)時看召回率。
ROC vs PR 曲線 ROC 是 TPR 對 FPR,門檻從高調到低時只會往 (1, 1) 走。PR 是精確率對召回率;極度不平衡時較能反映少數類。 資料中多數類佔絕大多數、準確率已經很高,但產品報表仍需呈現少數類有沒有被抓到時,關注 PR 曲線。
bagging vs boosting bagging(隨機森林)用自助抽樣與隨機特徵子集訓練多棵樹,再投票或平均,降低變異。boosting(梯度提升)一棵接一棵修正前一輪的錯誤,例如 XGBoost、LightGBM。 模型日誌顯示多棵樹各自抽樣後投票,或依序修正前一輪的錯誤時,可分辨 bagging 與 boosting。
Gini vs Entropy Gini = 1 − Σ pᵢ²,Entropy = −Σ pᵢ log₂ pᵢ。純節點兩者都是 0。二元且各半時,Gini 為 0.5、熵為 1,數字不能互相比大小。切分都是挑不純度下降最多的一刀。 實作要依類別筆數代入公式;若程式碼只出現 Σ pᵢ²,表示還沒用 1 減去該值。
MAE vs RMSE MAE 是絕對誤差的平均,對離群值較不敏感。RMSE 是平方誤差平均後再開根號,大誤差懲罰更重。MAPE 則在實際值接近 0 時不穩定。 預測目標是連續標籤且需求希望大誤差受較重懲罰時用 RMSE,不用準確率。

四、基礎練習

六題都只用本篇的定義。計算題先寫出分母是哪一群人。

第 1 題

某電商檢查 1,000 筆交易的詐欺模型,結果為 TP 40、FN 10、FP 20、TN 930。下列哪一個說法正確?

  • (A) 精確率是 0.8,召回率約 0.667
  • (B) 準確率是 0.97,模型已經夠好,不必再看精確率與召回率
  • (C) 精確率約 0.667,召回率是 0.8
  • (D) 召回率是 40/1000 = 0.04
看答案與解析

答案:C

精確率 = TP / (TP + FP) = 40 / (40 + 20) = 40/60 ≈ 0.667。召回率 = TP / (TP + FN) = 40 / (40 + 10) = 40/50 = 0.8。

  • (A) 把兩個分母對調了:40/50 = 0.8 是召回率,40/60 ≈ 0.667 才是精確率。
  • (B) 準確率 = (40 + 930) / 1000 = 0.97,分子裡有 930 筆真陰性,看不出 50 筆實際詐欺抓到了幾筆。
  • (D) 40/1000 把分母換成全部筆數;召回率的分母是實際陽性 50。

第 2 題

某支付系統的決策樹有一個節點,裡面 100 筆交易,70 筆正常、30 筆詐欺。這個節點的吉尼不純度是多少?

  • (A) 0.58
  • (B) 0.21
  • (C) 0.5
  • (D) 0.42
看答案與解析

答案:D

p(正常) = 70/100 = 0.7,p(詐欺) = 30/100 = 0.3。Gini = 1 − (0.7² + 0.3²) = 1 − (0.49 + 0.09) = 1 − 0.58 = 0.42。

  • (A) 0.58 是 Σ pᵢ²,公式還要用 1 去減。
  • (B) 0.21 = 0.7 × 0.3,不是 1 − Σ pᵢ²。
  • (C) 0.5 是兩類各半的吉尼不純度:1 − (0.5² + 0.5²) = 0.5。這個節點是 70/30。

第 3 題

某支付公司的交易裡,詐欺只佔 0.5%。團隊挑選模型時只比較準確率。下列哪一個判斷正確?

  • (A) 全部猜「正常」就有 99.5% 準確率,會挑到抓不到詐欺的模型;應看召回率、精確率與 PR-AUC
  • (B) 準確率越高模型越好,直接採用準確率最高的那一個
  • (C) 類別不平衡不影響準確率,只看準確率就夠
  • (D) 這是分類問題,改看迴歸指標 R² 就能避開不平衡
看答案與解析

答案:A

全部猜正常時,準確率 = 1 − 0.005 = 0.995 = 99.5%,但 TP = 0,召回率 = 0。挑模型時要看召回率、精確率,以及對少數類較敏感的 PR-AUC。

  • (B) 準確率最高的候選,可以是完全抓不到詐欺的那一個。
  • (C) 不平衡會讓大量真陰性進入準確率的分子,準確率被多數類抬高。
  • (D) R² 是迴歸的擬合指標,詐欺的標籤是類別。

第 4 題

某醫院做癌症初篩,希望盡量不要漏掉真正有病的人。多出來的陽性可以再用確診檢查複驗。這個目標下,指標應怎麼擺?

  • (A) 優先提高精確率,寧可少報
  • (B) 優先提高召回率,可接受較多偽陽性,再以確診檢查複驗
  • (C) 只看特異度,特異度高就代表篩檢成功
  • (D) 只看準確率,準確率高就代表很少漏診
看答案與解析

答案:B

漏掉病人是 FN。召回率 = TP / (TP + FN),提高召回率就是把實際有病的人盡量判進陽性。因此多出的偽陽性,用後續確診檢查複驗。

  • (A) 精確率的分母是預測陽性。優先拉高它會傾向少報,漏掉的病人變多。
  • (C) 特異度 = TN / (TN + FP),看的是實際沒病的人有沒有被放行;它高仍可以同時漏掉很多病人。
  • (D) 準確率的分子包含全部真陰性,漏診不一定拉得動這個分數。

第 5 題

同一個模型只調整門檻來畫 ROC 曲線。下列哪一個最不可能出現?

  • (A) 曲線從 (0, 0) 出發,終點在 (1, 1)
  • (B) AUC 為 0.85
  • (C) 曲線某段往左下回折(TPR 下降而 FPR 上升)
  • (D) 曲線有一段與縱軸平行
看答案與解析

答案:C

門檻只從高調到低時,TPR 與 FPR 都只會增加或不變,曲線從 (0, 0) 走到 (1, 1)。TPR 下降同時 FPR 上升,是往回走,單靠調整門檻不會出現。

  • (A) 高門檻時幾乎都不判陽性,落在 (0, 0);門檻降到極低時幾乎都判陽性,落到 (1, 1)。
  • (B) AUC = 0.5 是隨機猜,越接近 1 越好;0.85 落在兩者之間,有可能。
  • (D) 與縱軸平行表示這一段 FPR 沒變、TPR 上升,符合只增不減,有可能。

第 6 題

某房屋估價模型在少數極端豪宅上出現很大的誤差。團隊希望評估指標對大誤差懲罰較重。應採用哪一個?

  • (A) MAE
  • (B) 準確率
  • (C) MAPE,而且它一定比其他指標好
  • (D) RMSE
看答案與解析

答案:D

RMSE = √MSE。MSE 先把誤差平方再平均,大誤差平方後更大,開根號之後仍比 MAE 更重懲大誤差。極端豪宅造成的大誤差,正好被這把尺放大。

  • (A) MAE 是絕對誤差的平均,對離群值較不敏感,方向與「大誤差罰更重」相反。
  • (B) 準確率用在分類;房價是連續值。
  • (C) MAPE 在實際值接近 0 時不穩定,並沒有「一定較好」這件事;本題對得上的性質是對大誤差懲罰較重。

五、重點回顧

  • 鑑別式模型學的是 P(y∣x),目標是把類別分開;生成式模型學 P(x) 或 P(x, y),因此能產生新樣本。
  • 決策樹用 吉尼不純度 1 − Σ pᵢ² 或 熵 −Σ pᵢ log₂ pᵢ 衡量節點有多雜,並挑不純度下降最多的切分;只有一類時兩者都是 0。
  • 隨機森林用 bagging,讓多棵樹在自助抽樣與隨機特徵子集上投票或平均,以降低變異;梯度提升用 boosting,讓下一棵樹修正前一輪的錯誤。
  • 準確率 = (TP + TN) / 全部,真陰性很多時會很好看。漏掉陽性代價高就看 召回率 TP / (TP + FN);誤報代價高就看 精確率 TP / (TP + FP)。
  • 門檻降低時召回率上升、精確率通常下降。同一模型的 ROC 曲線從 (0, 0) 走到 (1, 1),TPR 與 FPR 只增不減;極度不平衡時改看 PR 曲線。
  • 迴歸裡 MAE 對離群值較不敏感,RMSE 對大誤差懲罰更重,MAPE 在實際值接近 0 時不穩定。需要說明單筆預測時,用特徵重要度看整體、用 SHAP 值看各特徵對該筆的貢獻。

覺得有幫助? RSS · X · 請我喝杯咖啡

散點代表類別 A 與類別 B,曲線是用來把兩類標籤分開的決策邊界。

鑑別式模型直接學分類邊界
1 / 3
類別 A 的散點
模型依輸入判斷類別,目標是把不同標籤分開;點與邊界為示意。
  1. 這些點是已經在手上的輸入 x,標籤寫明正確類別。模型要回答的就是給定輸入後 y 是什麼。
  2. 這些點帶著另一個類別的正確標籤。邊界的目標是把類別分開,所以兩類要一起看。
  3. 直接學的是條件機率 P(y∣x)。有大量帶標籤的資料,邊界才能切得較細。

比較 70/30 與 60/40 兩種節點比例,看 Gini 哪一邊更高。

類別越接近對半,Gini 越高
1 / 2
70/30 與 60/40 的 Gini
70/30 的 Gini 為 0.42,60/40 為 0.48;越接近對半,節點越雜。
  1. 70/30:0.7² + 0.3² = 0.58,Gini = 1 − 0.58 = 0.42。
  2. 60/40:Gini = 1 − 0.52 = 0.48,比 0.42 高;越接近對半,節點越雜。

表身四格是 TP 40、FN 10、FP 20、TN 930,兩個框圈住不同的分母。

精確率看預測陽性,召回率看實際陽性
1 / 5
表頭標出實際與預測
TP = 40、FP = 20、FN = 10、TN = 930;精確率約 0.667,召回率為 0.8。
  1. 列是實際類別,欄是模型的預測。後面四格都沿著這兩個方向讀。
  2. 這 50 筆確實是陽性。TP 是被抓到的,FN 是漏掉的。
  3. 這 950 筆確實是陰性。TN 是被正確放行的,FP 是被誤報成陽性的。
  4. 分母是模型說成陽性的 60 筆,其中真陽性 40 筆,約為 0.667。
  5. 分母是實際上的 50 筆陽性,抓到 40 筆,得到 0.8。漏掉陽性的代價高時,就看這個比例。

橫軸是 FPR、縱軸是 TPR,對角是隨機猜,另一條是模型的 ROC。

ROC 曲線越靠左上,區辨越好
1 / 3
對角直線代表隨機猜
AUC 是 ROC 曲線下方面積;0.5 等於隨機猜,越接近 1 越好。曲線為示意。
  1. 這條線是隨機猜的基準;模型的 ROC 越往左上方偏離它,區辨越好。
  2. 判成陽性的人只會變多或不變。若只多抓到真陽性、沒有新增偽陽性,這一段與縱軸平行。
  3. AUC = 0.5 等於隨機猜,越接近 1 越好。極度不平衡時 FPR 的分母很大,少數類誤報會被看得比較輕,要改看 PR 曲線。

兩根長條是同一組誤差算出的 MAE 與 RMSE,看哪一根被大誤差拉高。

RMSE 對大誤差懲罰更重
1 / 2
同一組誤差的 MAE 與 RMSE
RMSE 先平方誤差再開根號,對大誤差的懲罰比 MAE 更重;數值為示意。
  1. MAE 把每個誤差取絕對值再平均,單位與原資料相同,對離群值較不敏感。
  2. RMSE 是 MSE 開根號。誤差先平方,大誤差被放得更大,所以懲罰比 MAE 更重。