ROC 曲線和 AUC 怎麼看?門檻怎麼調、AUC-PR 差在哪

ROC 曲線和 AUC 怎麼看?ROC 曲線把每個門檻「抓到幾成、冤枉幾成」連成線,AUC 是線下面積,越接近 1 越會分辨。

上一篇的混淆矩陣,是在一個門檻下算出來的。這篇把門檻從高轉到低,一格一格算給你看,畫出 ROC 曲線、算出 AUC,再告訴你資料不平衡時為什麼要改看 AUC-PR,以及門檻到底該設在哪裡。

ROC 曲線和 AUC 怎麼看:10 人快篩分數,門檻從 0.9 調到 0.1 畫出 ROC 曲線,AUC = 0.875

為什麼你需要知道

  • 同一個模型,換個門檻就像換了一個模型:門檻調一下,召回率可以從 25% 變成 100%。只看一組混淆矩陣,你看到的只是模型的其中一面
  • 比較兩個模型時,需要一個不受門檻影響的分數:A 模型在門檻 0.5 比較好,B 模型在門檻 0.3 比較好,到底誰強?AUC 就是用來回答這個問題
  • 資料不平衡時,AUC-ROC 會讓模型看起來比實際好:抓詐騙、抓罕見疾病,要看 AUC-PR 才不會被騙
  • 證照必考:PMLE 考題很愛問「資料極度不平衡,AutoML 該選哪個最佳化目標」「誤報很貴,門檻該往哪調」

先準備一組例子:10 個人的快篩分數

第 5 篇〈混淆矩陣是什麼?〉用的是流感快篩。這篇繼續用快篩,但換一個更接近模型真實運作的版本。

模型其實不會直接說「陽性」或「陰性」,而是先給每個人一個分數(0 到 1 之間),代表「這個人有流感的機率有多高」。

假設(教學用的數字)有 10 個人做快篩,其中 4 個人真的有流感、6 個人沒有,模型給的分數如下:

人模型給的分數真的有流感嗎
A0.95✅ 有
B0.80✅ 有
E0.72❌ 沒有
C0.60✅ 有
F0.45❌ 沒有
D0.35✅ 有
G0.28❌ 沒有
H0.20❌ 沒有
I0.15❌ 沒有
J0.05❌ 沒有

表格已經照分數從高排到低。你會發現模型大致把病人排在前面,但不完美:沒病的 E 拿了 0.72,比病人 C(0.60)和 D(0.35)都高。

接下來整篇文章,全部用這 10 個人算。


門檻(Threshold):分數超過多少,就說「陽性」

白話是什麼

門檻:一條線,模型給的分數大於等於這條線就判陽性,低於就判陰性。

比喻

就像考試的及格線。同一批考卷,及格線定 60 分和定 80 分,「及格的人」會差很多,但考卷本身一個字都沒改。

快篩試劑也一樣:那條線要多深才算陽性?標準定得寬鬆,比較多人會被判陽性;定得嚴格,比較少人被判陽性。

來龍去脈

第 2 篇〈分類和迴歸差在哪?〉講過,像邏輯迴歸這類分類模型,輸出的其實是一個機率。但現實世界要的是決定:這封信要不要丟進垃圾桶?這個人要不要隔離?所以一定要有一條線,把機率轉成「是/不是」。這條線就是門檻。

Google 機器學習速成課程也特別說明:門檻不是固定 0.5,要依照情境調整。

為什麼要學

模型訓練好之後,門檻是你唯一不用重新訓練、就能改變模型行為的旋鈕。很多考題的正確答案不是「換模型」,而是「調門檻」。


算一次給你看:門檻從 0.9 調到 0.1

我們挑 5 個門檻,每個門檻都數一次混淆矩陣的四格。

以門檻 0.5 為例:分數 ≥ 0.5 的是 A、B、E、C,這 4 人被判陽性。

  • A、B、C 真的有病 → 抓對了 3 個(TP)
  • E 沒病 → 冤枉 1 個(FP)
  • D 有病但只有 0.35 → 漏掉 1 個(FN)
  • 其他 5 個沒病的都低於 0.5 → 放對 5 個(TN)

5 個門檻全部算完:

門檻判陽性的人抓對 TP冤枉 FP漏掉 FN放對 TN召回率偽陽性率精確率
0.9A10360.250.001.00
0.7A、B、E21250.500.170.67
0.5A、B、E、C31150.750.170.75
0.3再加 F、D42041.000.330.67
0.1再加 G、H、I45011.000.830.44

三個分數的公式(第 5 篇都算過):

召回率   = 抓對了 ÷ 真的有病的人 = TP ÷ (TP + FN)
偽陽性率 = 冤枉人 ÷ 真的沒病的人 = FP ÷ (FP + TN)
精確率   = 抓對了 ÷ 說陽性的人   = TP ÷ (TP + FP)

以門檻 0.5 那一列為例:召回率 = 3 ÷ 4 = 0.75;偽陽性率 = 1 ÷ 6 ≈ 0.17;精確率 = 3 ÷ 4 = 0.75。

門檻怎麼調:門檻調低,召回率上升、冤枉的人也變多;門檻調高,冤枉變少、漏掉變多

數字怎麼看

  • 門檻調低(0.9 → 0.1):模型越來越敢說陽性。召回率從 0.25 一路升到 1.00,病人都抓到了;但偽陽性率也從 0 升到 0.83,6 個健康的人冤枉了 5 個
  • 門檻調高:反過來,冤枉的人變少,但漏掉的病人變多
  • 沒有一個門檻能讓「抓到 100%」又「冤枉 0%」,除非模型完美。這就是上一篇講的取捨

問題來了:5 個門檻、5 組數字,到底這個模型好不好? 這就需要 ROC 曲線。


ROC 曲線:把每個門檻的表現連成一條線

白話是什麼

ROC 曲線:橫軸是偽陽性率(冤枉幾成),縱軸是召回率(抓到幾成)。每個門檻算出一個點,把所有點連起來,就是 ROC 曲線。

在畫 ROC 曲線的場合,召回率通常改叫真陽性率(True Positive Rate,TPR),偽陽性率叫 FPR(False Positive Rate),兩個是同一個東西的不同叫法。

比喻

像調收音機的靈敏度旋鈕。轉到最靈敏,連很遠的電台都收得到(抓到多),但雜訊也一起進來(冤枉多);轉到最不靈敏,雜訊沒了,但很多電台也收不到。ROC 曲線就是把旋鈕從頭轉到尾,每一格記下「收到幾成、雜訊幾成」畫成的軌跡。

來龍去脈

ROC 的全名是 Receiver Operating Characteristic,中文常譯成接收者操作特徵曲線。名字這麼奇怪,是因為它來自二次世界大戰的雷達(Google 速成課程也有提到):雷達兵要從螢幕上的訊號判斷「這是敵機,還是雜訊」。訊號判讀調得太敏感,會一直誤報;太遲鈍,又會漏掉真的敵機。這個「抓到 vs 誤報」的取捨,後來被醫學和機器學習沿用。

算一次給你看:把 5 個門檻畫成點

從上面的表,每個門檻取出 (偽陽性率, 召回率):

門檻偽陽性率(橫軸)召回率(縱軸)點
比 0.95 還高00(0, 0):誰都不說陽性
0.90.000.25(0, 0.25)
0.70.170.50(0.17, 0.5)
0.50.170.75(0.17, 0.75)
0.30.331.00(0.33, 1)
0.10.831.00(0.83, 1)
011(1, 1):每個人都說陽性

ROC 曲線一定從左下角 (0, 0) 出發,走到右上角 (1, 1):門檻最高時誰都不判陽性,門檻最低時每個人都判陽性。

數字怎麼看

  • 左上角 (0, 1) 是夢想的位置:抓到 100%、冤枉 0%。曲線越往左上角靠,模型越好
  • 斜對角線(左下到右上)是丟銅板:一個亂猜的模型,抓到幾成就冤枉幾成,點都落在這條線上
  • 我們的曲線在門檻 0.3 時到了 (0.33, 1):病人全抓到,代價是 6 個健康的人冤枉 2 個

為什麼要學

ROC 曲線讓你不用先決定門檻,就能看到模型的完整能力,也是你挑門檻時的地圖:曲線上每個點都是一個可以選的門檻。


AUC:把整條曲線濃縮成一個分數

白話是什麼

AUC(Area Under the Curve):曲線下面積。ROC 曲線底下的面積,範圍 0 到 1。通常說「AUC」指的就是 ROC 曲線下的面積,也寫成 AUC-ROC 或 AUROC。

比喻

AUC 有一個很好懂的意思,Google 速成課程是這樣定義的:

隨便抓一個病人、再隨便抓一個健康的人,模型給病人比較高分的機率。

像兩個人比賽:一個病人、一個健康的人站在一起,模型要指出誰比較可能有病。AUC 就是模型指對的機率。

來龍去脈

一條曲線很難拿來比較:A 模型在左邊比較高,B 模型在右邊比較高,到底誰好?所以大家把曲線底下的面積算出來,變成一個數字,就可以直接比大小。

算一次給你看:數「病人贏了幾場」

4 個病人 × 6 個健康的人,總共可以配出 4 × 6 = 24 組。每一組比一次:病人的分數比較高,就算「模型排對了」。

病人分數贏過哪些健康的人贏幾組
A0.95E、F、G、H、I、J(全部)6
B0.80E、F、G、H、I、J(全部)6
C0.60F、G、H、I、J(輸給 E 的 0.72)5
D0.35G、H、I、J(輸給 E、F)4
AUC = 排對的組數 ÷ 全部組數
    = (6 + 6 + 5 + 4) ÷ 24
    = 21 ÷ 24
    = 0.875

用面積驗算:把曲線底下切成三塊長方形。

偽陽性率 0 → 1/6 這段,曲線高度 0.50:面積 = 1/6 × 0.50 ≈ 0.083
偽陽性率 1/6 → 2/6 這段,曲線高度 0.75:面積 = 1/6 × 0.75 = 0.125
偽陽性率 2/6 → 1 這段,曲線高度 1.00:面積 = 4/6 × 1.00 ≈ 0.667
總面積 ≈ 0.083 + 0.125 + 0.667 = 0.875

兩種算法答案一樣,都是 0.875。

AUC 是什麼:4 個病人和 6 個健康的人配成 24 組,模型把病人排在前面的有 21 組,AUC = 21 ÷ 24 = 0.875

數字怎麼看

  • 0.875:隨便抓一個病人和一個健康的人,模型有 87.5% 的機率給病人比較高分
  • AUC 跟門檻無關:它只看「排名排得對不對」,不管你最後門檻設在哪。這也是它適合拿來比較模型的原因
  • AUC 不管分數本身準不準:把所有分數都除以 2,排名不變,AUC 也不變。所以 AUC 高,不代表模型說「70% 機率」就真的是 70%

AUC 0.5、0.7、0.9 各代表什麼程度

下面是業界常見的粗略分級,不是官方標準,不同領域的要求也不一樣(醫療通常要求更高):

AUC白話說明
1.0完美每個病人的分數都比每個健康的人高。實務上看到 1.0 要先懷疑資料洩漏(第 8 篇會講)
0.9 以上很會分辨大部分配對都排對
0.8~0.9不錯我們的 0.875 在這裡
0.7~0.8普通有用,但還有進步空間
0.5~0.7差只比亂猜好一點
0.5丟銅板病人和健康的人分不出來,曲線就是那條斜對角線
低於 0.5比亂猜還差通常是標籤弄反了。官方速成課程提到:把預測反過來,就會變得比亂猜好

為什麼要學

AUC 是比較分類模型最常用的單一分數。BigQuery ML 的評估結果有 roc_auc,AutoML 二元分類的預設最佳化目標就是最大化 AUC-ROC(後面會講)。


PR 曲線和 AUC-PR:精確率的版本

白話是什麼

PR 曲線(Precision-Recall Curve,精確率-召回率曲線):橫軸是召回率,縱軸是精確率。一樣是每個門檻算一個點連成線。

AUC-PR:PR 曲線底下的面積,也叫 AUPRC。依照 Agent Platform 官方文件,它也被稱為平均精確率(Average Precision),範圍 0 到 1,越高越好。

比喻

像撒網捕魚。網撒得越大(召回率越高),魚撈得越多,但網裡的垃圾也越多(精確率下降)。PR 曲線記錄的是:撈到幾成的魚時,網裡還有幾成是魚。

來龍去脈

精確率和召回率這兩個詞,最早來自圖書館和搜尋系統的評估:搜尋結果裡有幾成是你要的(精確率),你要的資料有幾成被找出來(召回率)。搜尋的世界,「相關的資料」永遠只佔極少數,所以 PR 曲線天生就適合陽性很少的情況。

算一次給你看

同樣 10 個人,從上面的大表取出 (召回率, 精確率):

門檻召回率(橫軸)精確率(縱軸)
0.90.251.00
0.70.500.67
0.50.750.75
0.31.000.67
0.11.000.44

平均精確率的算法很直覺:照分數從高到低一個一個往下看,每抓到一個病人,就記下當下的精確率,最後平均。

抓到 A(第 1 名):說陽性 1 人,對 1 人 → 精確率 1/1 = 1.00
抓到 B(第 2 名):說陽性 2 人,對 2 人 → 精確率 2/2 = 1.00
(E 第 3 名,沒病,跳過)
抓到 C(第 4 名):說陽性 4 人,對 3 人 → 精確率 3/4 = 0.75
(F 第 5 名,沒病,跳過)
抓到 D(第 6 名):說陽性 6 人,對 4 人 → 精確率 4/6 ≈ 0.67

平均精確率 = (1.00 + 1.00 + 0.75 + 0.67) ÷ 4 ≈ 0.85

數字怎麼看

  • AUC-PR 越接近 1 越好:代表一路抓病人,判陽性的人大多真的有病
  • 及格線不是 0.5:亂猜的模型,精確率就等於「陽性佔的比例」。我們 10 人裡有 4 個病人,亂猜的 AUC-PR 約 0.4,0.85 遠高於它
  • 如果陽性只佔 1%,亂猜的 AUC-PR 只有約 0.01。這時 AUC-PR 0.3 可能已經很不錯;AUC-ROC 的亂猜基準卻永遠是 0.5。看 AUC-PR 一定要先知道陽性佔幾成

什麼時候該看 AUC-PR,而不是 AUC-ROC

算一次給你看:同一個 ROC 點,精確率差 7 倍

假設(教學用的數字)兩家醫院用同一款快篩,同樣設定門檻,都得到 召回率 0.8、偽陽性率 0.05,在 ROC 曲線上是同一個點。

醫院甲:100 個病人、100 個健康的人醫院乙:10 個病人、1,000 個健康的人
抓對了100 × 0.8 = 8010 × 0.8 = 8
冤枉人100 × 0.05 = 51,000 × 0.05 = 50
精確率80 ÷ (80 + 5) ≈ 0.948 ÷ (8 + 50) ≈ 0.14

數字怎麼看:

  • 在醫院甲,拿到陽性,94% 是真的有病
  • 在醫院乙,拿到陽性,只有 14% 是真的,大約 7 個陽性裡有 6 個是被冤枉的
  • 但兩家醫院的 ROC 曲線長得一模一樣,AUC-ROC 完全看不出這個差別

原因在分母:偽陽性率的分母是「所有健康的人」,醫院乙有 1,000 個,冤枉 50 個也才 5%,看起來很小。精確率的分母是「被判陽性的人」,冤枉的人直接被看見。

AUC-ROC 和 AUC-PR 差在哪:同一個 ROC 點(召回率 0.8、偽陽性率 0.05),平衡資料精確率 0.94,不平衡資料精確率只有 0.14

這就是 Google 速成課程說的:ROC 和 AUC 在兩類數量差不多時很好用;資料不平衡時,PR 曲線和它的面積可能是更好的比較方式。

一張表比完

AUC-ROCAUC-PR
曲線的兩個軸偽陽性率(橫)× 召回率(縱)召回率(橫)× 精確率(縱)
白話意思隨便抓一個陽性、一個陰性,模型排對的機率一路往下抓,判陽性的人平均有幾成是真的
亂猜的分數永遠 0.5等於陽性佔的比例(例如 1% 就是 0.01)
適合兩類數量差不多,想比較模型整體分辨能力類別不平衡,在意少數那一類(詐騙、罕病、故障)
弱點大量容易判斷的陰性,會讓分數看起來很漂亮分數高低要搭配陽性比例才看得懂
GCP 上的名字BigQuery ML roc_auc;AutoML maximize-au-rocAutoML maximize-au-prc、評估頁的 AuPRC

門檻怎麼選:把「錯的代價」算進去

ROC 曲線給你地圖,但門檻要選在哪,要看兩種錯哪個比較貴。官方速成課程的建議是:

  • 冤枉人很貴:選偽陽性率低的點,就算召回率低一點也沒關係
  • 漏掉很貴:選召回率最高的點
  • 兩種差不多:選最靠近左上角的點

算一次給你看:兩種情境,兩個答案

同樣 10 個人、5 個門檻。用「錯一次扣幾分」來算總代價(教學假設的分數)。

情境一:流感防疫,漏掉一個病人扣 10 分(會傳染給別人),冤枉一個人扣 1 分(多做一次檢查):

總代價 = 10 × 漏掉 + 1 × 冤枉

情境二:垃圾信過濾,把正常信件誤判成垃圾信扣 10 分(可能錯過重要信),漏掉一封垃圾信扣 1 分(自己刪掉就好):

總代價 = 1 × 漏掉 + 10 × 冤枉
門檻漏掉 FN冤枉 FP情境一(漏掉貴)情境二(冤枉貴)
0.93030 + 0 = 303 + 0 = 3 ✅
0.72120 + 1 = 212 + 10 = 12
0.51110 + 1 = 111 + 10 = 11
0.3020 + 2 = 2 ✅0 + 20 = 20
0.1050 + 5 = 50 + 50 = 50

數字怎麼看:

  • 同一個模型、同一條 ROC 曲線,情境一的最佳門檻是 0.3,情境二是 0.9
  • 預設的 0.5 在兩個情境都不是最好的
  • 所以「門檻要設多少」沒有標準答案,要先問清楚哪種錯比較貴

在 GCP 上怎麼做

GCP(Google Cloud Platform) 是 Google 的雲端服務,白話說就是租用 Google 機房裡的電腦和工具。在 GCP 上訓練分類模型,AUC 和 ROC 曲線都可以直接拿到。

1. BigQuery ML:ML.EVALUATE 看 AUC,ML.ROC_CURVE 畫曲線

沿用第 5 篇的例子:診所訓練了一個流感分類模型 clinic.flu_model(教學用的範例)。

看 AUC,用 ML.EVALUATE,回傳的欄位裡 roc_auc 就是 AUC-ROC:

SELECT roc_auc, precision, recall
FROM ML.EVALUATE(MODEL `clinic.flu_model`,
  (SELECT body_temp, has_cough, has_flu FROM `clinic.visits_2026`));

看每個門檻的表現,用 ML.ROC_CURVE。最後的 GENERATE_ARRAY(0.1, 0.9, 0.2) 是自己指定要算哪幾個門檻,這裡會產生 0.1、0.3、0.5、0.7、0.9,跟上面的大表一樣:

SELECT *
FROM ML.ROC_CURVE(MODEL `clinic.flu_model`,
  (SELECT body_temp, has_cough, has_flu FROM `clinic.visits_2026`),
  GENERATE_ARRAY(0.1, 0.9, 0.2));

每一列是一個門檻,有 threshold(門檻)、recall(召回率)、false_positive_rate(偽陽性率),以及 TP、FP、TN、FN 的次數。把 false_positive_rate 當橫軸、recall 當縱軸畫出來,就是 ROC 曲線。

畫 PR 曲線,官方文件示範用同一個函式,自己算出精確率:

SELECT
  recall,
  true_positives / (true_positives + false_positives) AS precision
FROM ML.ROC_CURVE(MODEL `clinic.flu_model`,
  (SELECT body_temp, has_cough, has_flu FROM `clinic.visits_2026`));

依照官方文件,幾個要注意的地方:

  • ML.ROC_CURVE 只能用在二元分類(只有兩個選項的分類)
  • 不給門檻的話,它會依照模型預測分數的分布,自動挑一批門檻來算
  • 不給評估資料的話,會用訓練時切出來的評估資料;訓練時沒切,就用整份訓練資料算(等於在考練習題,第 4 篇講過為什麼不行)

2. AutoML on Agent Platform:訓練前就選好要追哪個分數

AutoML:只要把資料丟進去,Google 自動幫你挑模型、調超參數的服務,不用寫程式。

舊題庫可能還會看到 Vertex AI AutoML 或 AutoML Tables,現在叫 AutoML on Gemini Enterprise Agent Platform。
Google Cloud 在 2026 年 4 月 22 日把 Vertex AI 改名為 Gemini Enterprise Agent Platform(簡稱 Agent Platform),底下功能跟著改名(官方對照表)。功能本身是延續的。

AutoML 訓練表格資料的分類模型時,可以選最佳化目標(Optimization objective),意思是「訓練時要拚命把哪個分數拉高」。依照官方文件,分類模型有這 5 種:

最佳化目標API 名稱什麼時候選
AUC ROCmaximize-au-roc想讓模型把兩類分得越開越好。二元分類的預設值
Log lossminimize-log-loss想讓模型給的機率越準越好。多類別分類只能選這個
AUC PRmaximize-au-prc在意比較少的那一類,例如詐騙、罕見疾病
Precision at Recallmaximize-precision-at-recall召回率要先達到某個數字,在這個前提下精確率越高越好
Recall at Precisionmaximize-recall-at-precision精確率要先達到某個數字,在這個前提下召回率越高越好

Log loss(對數損失)是另一種分數:它不只看排名,還看模型給的機率準不準。例如模型對一個真的病人說「有病機率 0.99」,log loss 很小;說「0.51」雖然一樣判陽性,log loss 就比較大。範圍 0 到無限大,越低越好。

訓練完,評估頁面會列出 AuPRC、AuROC、Log loss,以及不同信心門檻(confidence threshold)下的精確率和召回率。官方寫得很直接:門檻調高,精確率上升、召回率下降。

舊名稱現在的名稱
Vertex AIGemini Enterprise Agent Platform(Agent Platform)
Vertex AI AutoML、AutoML TablesAutoML on Gemini Enterprise Agent Platform
Vertex AI Model MonitoringModel Monitoring on Gemini Enterprise Agent Platform

考試會怎麼考

Google Cloud Professional Machine Learning Engineer(PMLE,專業機器學習工程師) 證照,2026 年 6 月 1 日起的官方考試指南裡,這篇的內容對應到:

考試區塊跟這篇有關的項目
第 1 區:用低程式碼方式打造 AI 方案(約 13%)用 BigQuery ML、Agent Platform AutoML 訓練模型
第 2 區:跨團隊管理資料與模型(約 16%)評估預測型與生成式 AI 方案(例如模型評估指標)
第 6 區:監控 AI 方案(約 13%)為正式上線的模型建立持續評估指標

考題很少叫你算 AUC,而是給一個情境,問你該看哪個分數、該選哪個最佳化目標、門檻該往哪調。

PMLE 考試關鍵字:資料極度不平衡想到 AUC-PR,不想先決定門檻想到 AUC,誤報很貴就調高門檻,AUC 等於 1.0 先懷疑資料洩漏

看到這些字,就想到這個

題目出現的關鍵字想到
「比較兩個模型」「還沒決定門檻」AUC(AUC-ROC)
「陽性只有 1%」「詐騙很少見」「在意少數類別」AUC-PR,AutoML 選 maximize-au-prc
「召回率至少要 95%」「不能漏掉超過 5%」maximize-precision-at-recall
「精確率至少要 90%」「誤報率不能太高」maximize-recall-at-precision
「多類別分類」(三種以上選項)AutoML 只能選 minimize-log-loss
「誤報很貴」「不要打擾正常客戶」調高門檻
「漏掉很貴」「寧可多抓」調低門檻
「AUC 是 1.0」「好到不像真的」先懷疑資料洩漏
「AUC 低於 0.5」標籤可能弄反了
BigQuery ML 要畫 ROC 曲線ML.ROC_CURVE

三個常見陷阱

  1. 不平衡資料還看 AUC-ROC:題目說「詐騙只佔 0.1%」,選項裡有 AUC-ROC 和 AUC-PR,答案通常是 AUC-PR
  2. 以為 AUC 會跟著門檻變:AUC 是把所有門檻一起算的,調門檻不會改變 AUC,只會改變精確率、召回率
  3. 以為門檻一定是 0.5:0.5 只是預設值。題目描述了「哪種錯比較貴」,答案往往就是調門檻

練習情境(自己出的練習,不是真實考題)

一家保險公司要用 AutoML 訓練表格資料模型,偵測理賠詐騙。詐騙案件只佔所有理賠的 0.3%。被標記的案件會轉給調查員人工審查,但調查員人力有限。公司希望模型「盡量把詐騙案排在前面」。應該選哪個最佳化目標?

判斷過程:

  • 「只佔 0.3%」→ 類別不平衡,AUC-ROC 會被大量正常理賠灌水
  • 「在意少數那一類」「調查員人力有限」→ 被標記的案件要盡量是真的詐騙,精確率很重要
  • 答案:選 AUC PR(maximize-au-prc)。如果題目再加一句「至少要抓到 80% 的詐騙案」,就改選 maximize-precision-at-recall

常見問答

ROC 曲線怎麼看?

ROC 曲線的橫軸是偽陽性率(健康的人被冤枉幾成),縱軸是召回率(病人被抓到幾成),每個門檻畫一個點連成線。曲線越靠近左上角越好,左上角代表抓到 100%、冤枉 0%;斜對角線代表跟丟銅板一樣。

AUC 是什麼意思?

AUC 是 ROC 曲線下的面積,範圍 0 到 1。白話的意思是:隨便抓一個陽性、一個陰性,模型給陽性比較高分的機率。AUC 0.875 代表有 87.5% 的機率排對。

AUC 0.7、0.8、0.9 算好嗎?

常見的粗略分級是:0.5 等於亂猜,0.7~0.8 普通,0.8~0.9 不錯,0.9 以上很好。這不是官方標準,醫療等高風險領域通常要求更高。如果 AUC 剛好是 1.0,要先懷疑是不是資料洩漏。

AUC-ROC 和 AUC-PR 差在哪?

AUC-ROC 用偽陽性率和召回率畫曲線,亂猜的分數永遠是 0.5;AUC-PR 用召回率和精確率畫曲線,亂猜的分數等於陽性佔的比例。資料不平衡時,大量陰性會讓 AUC-ROC 看起來很漂亮,AUC-PR 比較能反映少數類別抓得好不好。

什麼時候要看 AUC-PR?

陽性很少、而且你在意陽性那一類的時候,例如詐騙偵測、罕見疾病、設備故障。Google 速成課程也提到,資料不平衡時,PR 曲線和它的面積可能是比 ROC 更好的比較方式。

門檻調高或調低會怎樣?

門檻調高,模型比較保守,冤枉的人變少、精確率上升,但漏掉的變多、召回率下降。門檻調低則相反。調門檻不需要重新訓練,也不會改變 AUC。

門檻一定要設 0.5 嗎?

不用。0.5 只是 BigQuery ML 等工具的預設值。最好的門檻要看兩種錯哪個比較貴:漏掉很貴(防疫、詐騙)就調低,冤枉很貴(垃圾信、誤封帳號)就調高。

AutoML 的 maximize-au-prc 是什麼?

它是 AutoML on Gemini Enterprise Agent Platform(原 Vertex AI AutoML)表格分類模型的最佳化目標之一,意思是訓練時以最大化 PR 曲線下面積為目標,官方說明是「為比較少見的那一類最佳化」。二元分類的預設目標則是 maximize-au-roc。


重點整理

  • 門檻是把分數轉成「是/不是」的那條線:調低,召回率和偽陽性率一起上升;調高則相反
  • ROC 曲線:每個門檻畫一個點(橫軸偽陽性率、縱軸召回率),越靠近左上角越好,斜對角線是亂猜
  • AUC=ROC 曲線下面積=隨便抓一對陽性和陰性,模型排對的機率;0.5 是亂猜,1.0 太完美要懷疑資料洩漏,跟門檻無關
  • AUC-PR 用精確率和召回率畫,亂猜分數等於陽性比例;資料不平衡時看它,AutoML 選 maximize-au-prc
  • 門檻要依錯誤代價選:同一個模型,漏掉貴和冤枉貴的最佳門檻可以完全不同;BigQuery ML 用 ML.ROC_CURVE 看每個門檻的表現

延伸閱讀

本系列

站上相關文章


ROC 曲線和 AUC 看懂了,模型評估這一塊就算打好基礎了,接下來要面對的是「模型為什麼會表現不好」,例如下一篇的過度擬合。如果你想有系統地從雲端基礎一路學到在 GCP 上動手做機器學習,可以看看東東的 GCP 課程,或加 LINE 聊聊你現在的狀況,一起找出最適合你的學習順序。

返回頂端