iT邦幫忙

2026 iThome 鐵人賽

DAY 7
0
佛心分享-SideProject30

30 天打造公開資料版急診檢傷系統:Side Project 與實驗計畫系列 第 7

Day 07|整體準確率為什麼不夠?先建立急診檢傷評估地圖

  • 分享至 

  • xImage
  •  

檢索增強生成(Retrieval-Augmented Generation, RAG)是一種先從外部知識庫找出候選證據,再交給大型語言模型(Large Language Model, LLM)整理回答的方法。Day 06 把 RAG 拆成平面式、階層式與門控式三種候選路徑;下一個直覺問題是:哪一條路徑比較好?Lewis 等人:Retrieval-Augmented Generation

先假設其中一個系統在 100 筆測試案例中答對 82 筆。整體準確率是 82%,看起來很不錯,我們能不能直接宣布它勝出?

還不行。這 82 筆可能大多來自樣本最多的第三級,而第一級只答對 2 筆、漏掉 3 筆。對五級急診檢傷來說,「總共答對多少」只是第一個問題,不是整份評估報告。

下圖把這個盲點畫成一面大型摘要面板。請注意面板下方五條軌道:中央大量案例能主導整體觀感,兩側的小群體卻可能藏著摘要分數沒有說出的缺口。

一面大型綠色摘要面板遮住五條案例軌道,中央軌道有大量標記,兩條樣本較少的軌道出現橘紅色缺口,臨床工作者用放大鏡查看細節

上圖是概念示意:單一摘要分數可能被大量樣本主導,無法自動揭露每個級別與每種錯誤方向的風險。


讀完這篇,你會知道什麼?

讀完 Day 07 後,你應該能夠:

  1. 說明整體準確率能回答什麼,以及它為什麼可能受多數類別主導。
  2. 從混淆矩陣計算各級召回率與平衡準確率。
  3. 按照五級數字方向,區分檢傷不足與檢傷過度。
  4. 用平均絕對誤差與跨多級錯誤率描述錯誤距離。
  5. 解釋同一個「檢傷不足率」為什麼可能因分母不同而得到不同數字。
  6. 在實驗開始前固定主要指標、安全指標與必要報告欄位。

這篇會用到的名詞

今天的新名詞比較多,先用這張表建立索引;正文後面仍會逐一用例子解釋。

中文名稱 英文全名/縮寫 在本篇的用途
類別不平衡 Class Imbalance 描述五個級別的樣本數差距很大
整體準確率 Overall Accuracy 計算全部案例中預測級數完全正確的比例
混淆矩陣 Confusion Matrix 同時整理參考級數與模型預測級數的交叉筆數
召回率 Recall 檢查真正屬於某一級的案例,有多少被模型找回
平衡準確率 Balanced Accuracy 先計算每一級召回率,再讓五級等權平均
檢傷不足 Undertriage 模型預測的急迫度低於參考級數
檢傷過度 Overtriage 模型預測的急迫度高於參考級數
平均絕對誤差 Mean Absolute Error, MAE 計算模型預測與參考級數平均相差幾級
信賴區間 Confidence Interval, CI 表達有限測試樣本造成的統計不確定性

先固定五級數字的方向

台灣急診檢傷與急迫度分級量表(Taiwan Triage and Acuity Scale, TTAS)把急迫度分成五級:第一級為復甦急救、第二級為危急、第三級為緊急、第四級為次緊急、第五級為非緊急。也就是說,數字越小,處理越急迫衛生福利部:新急診五級檢傷分類標準

本篇所有合成範例都採用這個數字方向:

  • 參考級數是 2,模型預測為 4,表示模型把案例判得比較不急,屬於檢傷不足。
  • 參考級數是 4,模型預測為 2,表示模型把案例判得比較急,屬於檢傷過度。
  • 參考級數與模型預測相同,才算完全正確。

這裡的「參考級數」不是含糊的標準答案。實驗報告必須寫明它來自臨床現場登錄、專家重新判定,還是資料集既有標籤。三種來源不能混成同一欄。

另一個邊界也要保留:韓國急診檢傷與急迫度分級量表(Korean Triage and Acuity Scale, KTAS)與 TTAS 都有五級,而且同樣以較小數字表示較高急迫度,但規則與標籤語意並不完全相同。因此,KTAS 資料上的分數只能稱為 KTAS 評估結果,不能換名為 TTAS 準確率。Day 03 已完整比較三種五級制度;本篇只需要記住「級數相同不代表規則可以互換」。

用同一組合成資料建立共同範例

接下來使用 100 筆合成案例。這些數字專門用來示範公式,不是任何已完成的模型實驗。

五個參考級數的樣本數分別為:

參考級數 第 1 級 第 2 級 第 3 級 第 4 級 第 5 級 合計
樣本數 5 10 70 10 5 100

第三級占 70%,第一級與第五級各只有 5%。這就是類別不平衡(Class Imbalance):不同類別在資料中出現的次數不相等,而且差距足以影響整體指標。

假設模型的預測形成下面這張混淆矩陣(Confusion Matrix)。列代表參考級數,欄代表模型預測級數。矩陣中的 Cᵢⱼ 代表「參考為第 i 級、模型預測為第 j 級」的案例數;這個列欄定義與 scikit-learn 官方文件一致,但其他工具可能採用不同畫法,因此每次都要明寫。scikit-learn:confusion_matrix

參考\預測 第 1 級 第 2 級 第 3 級 第 4 級 第 5 級
第 1 級 2 2 1 0 0
第 2 級 1 6 2 1 0
第 3 級 0 2 68 0 0
第 4 級 0 0 1 4 5
第 5 級 0 0 0 3 2

對角線上的 2、6、68、4、2 是預測正確的筆數。其他位置都是錯誤,但錯誤方向與距離不同,不能全部壓成同一種「答錯」。

整體準確率只回答「完全答對多少」

整體準確率(Overall Accuracy)是所有案例中,模型預測級數與參考級數完全相同的比例。公式是:

整體準確率 = 對角線正確筆數總和 ÷ 全部案例數
             = Σ Cᵢᵢ ÷ N

公式中的符號分別代表:

  • Cᵢᵢ 是混淆矩陣第 i 級對角線上的正確筆數。
  • Σ 表示把第一級到第五級的對角線筆數全部加總。
  • N 是測試案例總數,這裡為 100。

代入合成資料:

整體準確率 = (2 + 6 + 68 + 4 + 2) ÷ 100
             = 82 ÷ 100
             = 82%

數值越大,表示完全預測正確的比例越高。這個定義與 accuracy_score 的官方說明一致。scikit-learn:accuracy_score

82% 沒有算錯,問題是它沒有回答三件事:

  1. 82 筆正確案例分別來自哪一級?
  2. 18 筆錯誤案例被判得更急,還是更不急?
  3. 錯誤只差一級,還是跨越兩級以上?

類別比例也會影響整體準確率。這組資料就算完全不看輸入、永遠預測第三級,也能得到 70% 的整體準確率。這個多數類別基準雖然低於 82%,卻提醒我們:82 個百分點中,有很大一部分來自第三級占比本來就高。

因此,整體準確率不是沒有用。它精確回答「完全答對多少」;只是不能單獨回答「每一級是否穩定」與「錯誤是否安全」。

各級召回率讓少數類別不再隱形

召回率(Recall)用來回答:真正屬於某一級的案例,有多少被模型正確找回?

i 級召回率的公式是:

第 i 級召回率 = 第 i 級預測正確筆數 ÷ 第 i 級參考案例總數
               = Cᵢᵢ ÷ Σⱼ Cᵢⱼ

其中:

  • 分子 Cᵢᵢ 是第 i 級預測正確的筆數。
  • 分母 Σⱼ Cᵢⱼ 是混淆矩陣第 i 列的總和,也就是所有真正屬於第 i 級的案例。
  • 數值越高,表示該級案例越不容易被漏掉。

以第一級為例,5 筆參考案例中只有 2 筆被正確預測:

第 1 級召回率 = 2 ÷ 5 = 40%

第三級則是:

第 3 級召回率 = 68 ÷ 70 ≈ 97.1%

兩個數字放在一起,82% 的來源就清楚了:第三級案例很多,而且第三級召回率很高;第一級案例很少,而且召回率只有 40%。召回率的正式定義與多類別計算方式可參考官方說明。scikit-learn:recall_score

平衡準確率讓五級各有一票

平衡準確率(Balanced Accuracy)會先計算每一級召回率,再進行不加權平均。五級資料的公式如下;標準工具也把它定位為處理不平衡資料的分類指標。scikit-learn:balanced_accuracy_score

平衡準確率 = (R₁ + R₂ + R₃ + R₄ + R₅) ÷ 5

R₁R₅ 分別是第一級到第五級的召回率。每一級都只占五分之一,不會因為第三級有 70 筆就取得 70 倍的影響力。

本例五級召回率依序為 40.0%、60.0%、97.1%、40.0%、40.0%,所以:

平衡準確率 = (40.0% + 60.0% + 97.1% + 40.0% + 40.0%) ÷ 5
             ≈ 55.4%

下圖把資料分布與兩種摘要放在一起。先看左邊第三級的長條,再看右邊第一、四、五級的召回率,就能理解 82.0% 與 55.4% 為什麼可以同時成立。

左側顯示第一到第五級合成樣本數為 5、10、70、10、5,右側比較整體準確率 82.0%、平衡準確率 55.4% 與各級召回率

上圖並不是要用平衡準確率取代所有其他指標。平衡準確率仍然沒有說明錯誤方向,也沒有利用五級之間的先後順序;它只是先修正「樣本多的級別比較有話語權」這個問題。

同樣答錯,檢傷不足與檢傷過度不是同一方向

現在把注意力從「哪一級被漏掉」移到「錯向哪裡」。令 y 代表參考級數,ŷ 代表模型預測級數。在第一級最急、第五級最不急的編碼下:

ŷ > y:檢傷不足,模型判得比較不急
ŷ < y:檢傷過度,模型判得比較急
ŷ = y:預測正確

檢傷不足(Undertriage)可能讓較急迫的案例進入較慢的處理順序;檢傷過度(Overtriage)則可能把較不急迫的案例往前移動,增加有限資源的使用。兩種錯誤都需要量測,但風險型態不同,不能只合併成 18 筆錯誤。

先算全體方向比例

如果分母使用全部 100 筆案例,本例共有:

全體檢傷不足率 = 11 ÷ 100 = 11%
全體檢傷過度率 =  7 ÷ 100 =  7%

這兩個指標回答的是「全部案例中,有多少被判得比較不急或比較急」。它們適合看整體錯誤偏向,但仍可能稀釋少數高急迫案例。

再看第一、二級中的檢傷不足

如果安全問題是「真正屬於第一、二級的案例,有多少被判成比參考級數更不急」,分母就要改成第一、二級參考案例總數。

本例第一、二級共 15 筆,其中 6 筆的預測數字大於參考數字:

第一、二級檢傷不足率 = 6 ÷ 15 = 40%

40% 與前面的全體檢傷不足率 11% 都是正確計算,但回答不同問題。前者的分母是 15 筆第一、二級案例;後者的分母是全部 100 筆。報告若只寫「undertriage = 40%」而不寫分母、適用級別與數字方向,讀者無法重現,也不能和其他實驗公平比較。

同樣地,第一級被預測為第二級,與第一級被預測為第五級都算檢傷不足,但距離與可能後果顯然不同。下一步要把序位距離加回來。

五級是有順序的,錯一級與錯三級不能完全等量看待

五級檢傷屬於序位分類(Ordinal Classification):類別之間有先後順序,但不能只根據數字就假設每一級的臨床差距完全相等。

整體準確率只看是否完全相等。第一級被預測成第二級,與第一級被預測成第五級,在整體準確率中都只算一筆錯誤。

平均絕對誤差(Mean Absolute Error, MAE)則計算每筆預測與參考級數相差多少,再取平均:

MAE = [Σ |ŷₙ - yₙ|] ÷ N

其中:

  • yₙ 是第 n 筆案例的參考級數。
  • ŷₙ 是第 n 筆案例的模型預測級數。
  • |ŷₙ - yₙ| 是兩個級數差的絕對值,只看距離,不分方向。
  • N 是全部案例數。

本例 100 筆案例合計跨了 20 個級距,因此:

MAE = 20 ÷ 100 = 0.20 級

MAE 越接近 0,代表平均距離越小。這個數值也能用標準工具重現。scikit-learn:mean_absolute_error

但 MAE 仍有兩個限制:

  1. 絕對值移除了方向,所以 2 → 4 與 4 → 2 都是跨兩級。
  2. 它把相鄰數字當成等距,但真實臨床風險不一定是線性的。

序位分類研究也提醒,精確率或召回率可能忽略類別順序,而 MAE 又額外假設級距可以用絕對距離衡量。因此,距離指標適合當成補充視角,不應被解讀為完整的臨床傷害函數。Amigó 等人:An Effectiveness Metric for Ordinal Classification

為了不讓少量遠距錯誤被平均值沖淡,本系列也會另外報告「跨兩級以上錯誤率」。本例有 2 筆跨越至少兩級:

跨兩級以上錯誤率 = 2 ÷ 100 = 2%

下圖把方向與距離放回同一張混淆矩陣。右上方的橘色區塊是預測數字較大、判得比較不急的檢傷不足;左下方的紫色區塊是預測數字較小、判得比較急的檢傷過度;離藍色對角線越遠,跨越級數越多。

五乘五合成混淆矩陣以藍色對角線表示預測正確,橘色右上區表示檢傷不足,紫色左下區表示檢傷過度,右側列出方向比例與錯誤距離

上圖最重要的不是背下三個數字,而是建立閱讀順序:先確認列欄與級數方向,再看對角線,接著分開右上與左下,最後檢查離對角線很遠的格子。

把指標排成一張固定的評估地圖

現在可以把 Day 07 的評估流程排成六個步驟。這不是尚未執行的模型成果,而是後續實驗要共同遵守的評估契約。

步驟 1:鎖定評估對象與參考標籤

  • 目的:先說清楚正在評估哪一個制度與哪一種標籤。
  • 前置條件:固定測試集、制度名稱、版本與標籤來源。
  • 輸入:每筆案例的識別碼、參考級數與模型預測級數。
  • 操作:檢查每筆資料只有一個對應制度的參考級數,且第一級到第五級的數字方向已明定。
  • 預期輸出:一份可逐筆對齊的參考與預測配對表。
  • 驗證方式:配對筆數等於測試案例數,沒有把 KTAS、TTAS 或其他制度標籤混在同一欄。

步驟 2:先輸出原始混淆矩陣與各級樣本數

  • 目的:保留所有後續指標的共同來源。
  • 前置條件:步驟 1 的配對表已通過檢查。
  • 輸入:參考級數與模型預測級數。
  • 操作:固定列為參考級數、欄為模型預測級數,計算 5 × 5 筆數矩陣。
  • 預期輸出:25 個格子的原始筆數,以及五個列總和。
  • 驗證方式:25 格總和與五個列總和都必須等於測試案例總數。

步驟 3:計算整體與分級表現

  • 目的:同時回答「全部答對多少」與「每一級找回多少」。
  • 前置條件:混淆矩陣方向已固定。
  • 輸入:混淆矩陣的對角線與各列總和。
  • 操作:計算整體準確率、五級召回率與平衡準確率。
  • 預期輸出:一個整體值、五個分級值與一個等權平均值。
  • 驗證方式:各級分母必須與對應列總和相同;不可只顯示百分比而省略樣本數。

步驟 4:按照方向拆開錯誤

  • 目的:分辨模型偏向把案例判得更急,還是更不急。
  • 前置條件:已確認較小數字代表較高急迫度。
  • 輸入:混淆矩陣對角線以外的格子。
  • 操作:分別計算全體檢傷不足、全體檢傷過度與第一、二級檢傷不足。
  • 預期輸出:每個方向指標都附帶分子、分母與適用級別。
  • 驗證方式:全體正確、全體檢傷不足與全體檢傷過度的筆數相加,應等於測試案例總數。

步驟 5:加入序位距離

  • 目的:區分相鄰錯誤與遠距錯誤。
  • 前置條件:級數已使用一致的 1 到 5 編碼。
  • 輸入:每筆參考級數與模型預測級數的絕對差。
  • 操作:計算 MAE 與跨兩級以上錯誤率,並將遠距檢傷不足另列。
  • 預期輸出:平均距離與不同距離門檻的錯誤筆數。
  • 驗證方式:MAE 不得小於 0;若整體準確率為 100%,MAE 與遠距錯誤率都必須為 0。

步驟 6:補上樣本數與統計不確定性

  • 目的:避免把少量測試案例產生的百分比當成精確常數。
  • 前置條件:所有指標都有明確分子與分母。
  • 輸入:逐筆預測結果與預先指定的抽樣方法。
  • 操作:為主要結果報告樣本數與 95% 信賴區間(95% Confidence Interval, 95% CI)。
  • 預期輸出:點估計、區間下限、區間上限與計算方法。
  • 驗證方式:特別檢查第一、二級的區間是否因樣本少而很寬;若只剩單一百分比,報告仍不完整。

95% CI 用來表達有限樣本造成的不確定性,不表示「模型有 95% 機率安全」,也不能取代外部資料與臨床驗證。實際採用的抽樣方法與比較檢定會在後續實驗文章中完整實作。

下圖將六個步驟濃縮成四層問題。上方共同起點負責固定測試集與標籤;中間四張卡片依序回答整體、分級、方向與距離;底部則提醒所有結果都要附上樣本數、分母與不確定性。

一條由固定測試集、參考級數與模型預測級數開始的評估流程,分別連到整體表現、各級表現、錯誤方向與錯誤距離四個區塊,底部標示樣本數與信賴區間

上圖也說明這個系列不會用單一分數決定哪種 RAG 架構最好。架構比較至少要共用同一張評估地圖,否則某個方法可能用整體準確率宣傳,另一個方法卻用危急級召回率宣傳,最後只剩下各自挑選有利數字。

哪些指標放在主要、次要與安全位置?

後續正式比較模型時,本系列預計使用以下順序。這是預先指定的評估設計,不是已完成結果。

指標角色 預計報告內容 主要原因
主要效能指標 平衡準確率、五級召回率 避免多數類別完全主導摘要,並保留每一級表現
安全指標 第一級召回率、第二級召回率、第一至二級檢傷不足率、跨兩級以上的檢傷不足 聚焦高急迫案例是否被判得更不急,以及是否出現遠距錯誤
次要效能指標 整體準確率、MAE、全體檢傷不足率、全體檢傷過度率 保留整體可讀性、序位距離與資源偏向
必要附帶資訊 各級樣本數、分子、分母、95% CI、資料與模型版本 讓百分比可以解讀、比較與重現

這張表沒有預先設定「可以部署」的門檻。門檻需要結合使用情境、臨床風險、人工覆核流程、資料代表性與前瞻驗證,不能由合成範例決定。

這個 Side Project 的系統定位仍是臨床決策支援。LLM 與 RAG 可以整理候選規則、產生可追查輸出,但評估分數不會讓系統自動取得取代醫師或護理師的資格。美國食品藥物管理局(Food and Drug Administration, FDA)的臨床決策支援軟體指引也強調軟體功能、使用者與決策依據的界線必須被清楚界定。FDA:Clinical Decision Support Software Guidance

幾個容易誤解的地方

「整體準確率不能看,所以直接刪掉」

整體準確率仍然清楚回答完全答對比例,也方便理解整體錯誤量。正確做法是把它放回分級、方向與距離旁邊,而不是把它當成唯一指標或完全捨棄。

「有平衡準確率,就不用看每一級」

平衡準確率仍是一個平均值。第一級很低、其他四級較高時,平均後仍可能遮住最需要檢查的級別。五個召回率與各級樣本數必須保留。

「檢傷不足率有固定公式,不必解釋分母」

不同報告可能使用全部案例、高急迫案例、特定級別或所有錯誤作為分母。每一個指標都要把適用族群、方向條件、分子與分母寫完整。

「MAE 比較低,就一定比較安全」

MAE 不分檢傷不足與檢傷過度,也把相鄰級距當成相同距離。一個模型可能 MAE 很低,卻仍在少數第一級案例出現危險方向錯誤,因此必須搭配分級與方向指標。

「上圖中的 82% 是目前系統成績」

不是。Day 07 的 100 筆資料、混淆矩陣與所有百分比都是固定合成範例,只用來驗證計算與閱讀方法。真正的模型結果必須來自鎖定的測試資料與完整實驗紀錄。


今天走到了哪裡?

Day 07 建立了四層評估問題:

  1. 整體準確率回答所有案例中有多少完全預測正確。
  2. 各級召回率與平衡準確率讓少數類別不再被多數級別遮住。
  3. 檢傷不足與檢傷過度把錯誤拆成不同方向,而且必須明寫分母。
  4. MAE 與跨多級錯誤率補回五級標籤的序位距離。
  5. 每個結果都要同時報告樣本數、分子、分母與 95% CI。
  6. 評估尺規要在看結果之前固定,不能在實驗完成後才挑選有利指標。

你可以用下面六個問題自行檢查:

  1. 一個永遠預測多數類別的模型,為什麼仍可能得到不低的整體準確率?
  2. 第一級召回率的分母應該包含哪些案例?
  3. 在第一級最急的編碼下,參考級數 2、模型預測 4 屬於哪一種錯誤?
  4. 全體檢傷不足率與第一、二級檢傷不足率為什麼不能只比較百分比?
  5. MAE 為什麼不能分辨錯誤方向?
  6. 一張評估表除了百分比,至少還要保留哪些資訊?

本日小結

整體準確率沒有說謊,它只是回答得不夠多。

對五級急診檢傷來說,一份可以解讀的報告不能停在「100 筆答對 82 筆」。我們還要知道 82 筆來自哪些級別、18 筆錯向哪裡、遠離正確級數多少,以及第一、二級的分母是否小到讓百分比很不穩定。

今天固定的評估地圖會成為後續所有架構與模型比較的共同尺規。只有使用同一組標籤、同一個測試集與同一套指標,分數差異才有進一步解釋的資格。

下一篇預告

Day 08 會把注意力從「用什麼尺量」移到「比較時究竟改了什麼」。

如果平面式、階層式與門控式 RAG 同時更換查詢文字、知識結構、候選數量與重排序器,即使分數不同,也很難知道改善來自哪一個元件。下一篇會用控制變因與消融實驗,把混在一起的設計因素逐一拆開。


參考資料


上一篇
Day 06|同一套規則,三種檢索架構會走出什麼不同路徑?
下一篇
Day 08|不是三選一:找出被混在一起的實驗變因
系列文
30 天打造公開資料版急診檢傷系統:Side Project 與實驗計畫17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言