iT邦幫忙

2026 iThome 鐵人賽

DAY 10
0
佛心分享-SideProject30

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

Day 10|資料選定:為什麼整個系列只使用 Kaggle KTAS?

  • 分享至 

  • xImage
  •  

上一篇,我們把研究問題寫成可以失敗的假設。下一步不是立刻訓練模型,而是確認手上的資料,是否真的能回答那些問題。

這次還有一個很明確的限制:病患資料必須能從公開頁面取得,不簽署醫療資料使用協議,也不把需要額外認證的資料當作主要實驗來源。

在這個條件下,本系列正式選定 Kaggle 的 Emergency Service - Triage Application作為唯一病患資料。它包含 1,267 筆韓國急診紀錄,也同時提供護理師原始級數與專家重新判定級數。

這個決定讓取得與重現流程更單純,但也帶來兩項代價:資料量小,而且資料檔沒有附上一套可直接重建的完整官方 KTAS 手冊。後續所有文章都必須在這條邊界內設計實驗。

下圖用一張沒有精確文字與數字的概念工作台表達今天的任務。重點不是從最多的資料中選一份,而是逐一檢查取得方式、欄位、標籤、規則與結論範圍。

桌面上放著不同資料卡、五級積木、放大鏡與檢查標記,表示資料選擇需要逐項稽核

上圖用概念工作台提醒我們:公開、可下載與適合實驗是三件不同的事,資料仍要逐項通過後續檢查。


今天要完成什麼

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

  1. 說明本系列為什麼只使用 Kaggle KTAS 病患資料。
  2. 分辨「資料可以下載」與「資料適合模型輸入」是兩件事。
  3. 說明 KTAS_expertKTAS_RN 的不同角色。
  4. 理解完整官方規則不足時,RAG 的結論為什麼必須縮小。
  5. 說出單一小型資料集不能支持哪些主張。

本篇會用到的名詞

中文名稱 英文全名/縮寫 本篇用途
韓國急診檢傷與急迫度分級量表 Korean Triage and Acuity Scale, KTAS 本系列唯一病患資料所使用的五級制度
檢索增強生成 Retrieval-Augmented Generation, RAG 先找公開 KTAS 知識,再交給模型產生有證據的級數
資料使用協議 Data Use Agreement, DUA 某些資料要求使用者簽署的使用契約;本系列不使用這類病患資料
參考標籤 Reference Label 模型預測完成後用來比較的專家級數
資料洩漏 Data Leakage 模型看到檢傷當下不可能知道的答案或未來結果
外部效度 External Validity 結果能否延伸到其他醫院、時間、人群或制度
交叉驗證 Cross-Validation 輪流切換訓練與驗證資料,以降低單次切分的偶然性

先把「公開」翻成可以執行的條件

「公開資料」常被當成單一狀態,實際上至少可能包含:

  • 可以直接從公開頁面取得。
  • 免費,但需要帳號驗證或完成課程。
  • 可以提出研究申請,但需要簽署 DUA。
  • 文章公開,逐筆病患資料仍須向作者或醫院申請。

本系列採用最直接的操作邊界:病患資料不需要簽署醫療資料 DUA。Kaggle 平台本身是否要求登入,屬於平台下載流程;它不會改變本系列不使用受控病患資料的決定。

這個限制不是在判斷哪一套檢傷制度比較好,而是在決定讀者能否跟著文章取得同一份病患資料。

選定的 Kaggle KTAS 資料是什麼

本系列固定使用的資料頁是:

Emergency Service - Triage Application

Kaggle 頁面將資料來源連回 Moon 等人在 2019 年發表的 KTAS 檢傷準確性研究。來源研究回顧韓國兩所都市教學醫院的成人急診紀錄,研究期間為 2016 年 10 月到 2017 年 9 月,最後納入 1,267 筆紀錄。來源研究

本系列在 2026 年 8 月 2 日核對到的 Kaggle 壓縮檔中,只有一個 data.csv

項目 稽核結果
資料列數 1,267 筆,不含標題列
欄位數 24 欄
分隔符 分號 ;
文字編碼 Windows-1254,可用 Python 的 cp1254 讀取
主訴語言 Kaggle CSV 中為英文
主要標籤 KTAS_expert
人類參考 KTAS_RN

壓縮檔與 CSV 的安全雜湊演算法 256 位元版本(Secure Hash Algorithm 256-bit, SHA-256)如下:

ZIP  f78df0a06c31b6df873c410b0596ecb95ac9335485beaf890dcabf7c69560f26
CSV  0e2c088e358fd4cdfd0dcc2fd4c2f085aa303856e3a6df8ceb44a69cef8ed2de

SHA-256 會把檔案內容轉成固定長度的字串。檔案只要改動一個位元,雜湊通常就會改變,因此能協助我們確認讀者與實驗使用的是不是同一版本。

能下載,不代表可以把 24 欄全部交給模型

資料選定後,還要完成四項對齊:

  1. 病患輸入是不是檢傷當下已知。
  2. 參考標籤來自誰、扮演什麼角色。
  3. RAG 使用的知識是否屬於 KTAS 且可以追溯。
  4. 結論是否限制在資料真正能支持的範圍。

下圖將四項條件放在同一個畫面。中央不是一個可以自動解決所有問題的資料集,而是提醒我們:四個角落都要有明確答案。

中央是 Kaggle KTAS 1267 筆資料,四周依序連到檢傷當下輸入、參考標籤、公開 KTAS 知識與結論範圍

上圖顯示,取得方式只解決「能不能拿到資料」。它沒有自動回答欄位時點、標籤品質、知識完整度與外部效度。

為什麼 KTAS_expert 是主要標籤

資料中有兩個五級欄位:

  • KTAS_RN:註冊護理師(Registered Nurse, RN)在實際急診流程中登錄的 KTAS 級數。
  • KTAS_expert:研究中的三位 KTAS 專家依初始護理紀錄重新判定的級數。

本系列把 KTAS_expert 設為主要參考標籤,把 KTAS_RN 留作人類現場參考。這不表示專家級數毫無誤差。專家是回顧病歷,不是重新在現場檢查病患;病歷中沒有記錄的症狀,也不會憑空出現在專家判斷裡。

兩個欄位都不能成為模型輸入。若模型看到 KTAS_RN,它可能只是在模仿護理師級數;若看到 KTAS_expert,就等於直接看到評分答案。

選擇這份資料同時接受哪些代價

資料選擇不是只有優點。下圖將四個選擇條件、資料現況及其直接影響放在一起。

四列矩陣說明 Kaggle KTAS 的取得限制、標籤品質、資料規模與規則完整度,以及各自對實驗的影響

上圖不是模型效能排名,而是資料選擇的限制清單。下面逐項說明每個限制會如何影響實驗設計與結論範圍。

代價一:資料量不大

1,267 筆資料適合做完整教學與受控實驗,但不足以支撐過度複雜的訓練。尤其專家第一級只有 26 筆,單次切分可能讓測試集中只剩極少數第一級案例。

因此,主要結果規劃使用固定種子的重複分層五折交叉驗證。分層表示每一折盡量維持五個級數的比例;重複表示不只依賴一次 folds。所有方法必須使用相同 folds,才能逐筆配對比較。

代價二:沒有病患識別碼

資料沒有能確認病患身分的識別欄位,因此不能保證同一病患的重複就醫不會落在不同 folds。

後續可以誠實報告以「紀錄」為單位的交叉驗證,但不能寫成病患層級切分,也不能忽略可能存在的列間相依性。

代價三:Kaggle CSV 不是完整規則手冊

檢索增強生成需要可檢索的外部知識。Kaggle CSV 提供病患欄位與標籤,但沒有附上完整的 KTAS 官方規則庫。

後續知識庫只會放入公開可引用、來源可追溯的 KTAS 說明,並把完整度標為 partial。因此我們可以研究「公開 KTAS 知識檢索是否有幫助」,不能宣稱「完整重建官方 KTAS 演算法」。

代價四:沒有外部驗證資料

重複交叉驗證仍使用同一批紀錄。它能檢查結果是否依賴單次切分,不能證明模型到了另一家醫院、另一個年份或另一個國家仍然有效。

一份 CSV 要拆成四種角色

下圖把 24 個欄位依用途分流。閱讀時先看左邊的原始檔,再沿四條箭頭查看每一組欄位可以去哪裡。

Kaggle data.csv 分流成十四個模型候選輸入、兩個稽核欄位、兩個標籤與人類參考,以及六個禁止輸入與衍生評估欄位

上圖先按照資料在實驗中的角色分流,而不是只看欄位是否存在。四種角色如下:

  1. 模型候選輸入:主訴、生命徵象、疼痛、意識、人口與到院資訊,共 14 欄。
  2. 稽核與分層:急診場域與每小時到院人數,共 2 欄,預設不交給模型。
  3. 標籤與人類參考KTAS_expertKTAS_RN,共 2 欄。
  4. 禁止輸入與衍生評估:診斷、去向、兩種時間、Error_groupmistriage,共 6 欄。

第四組中有些欄位很可能和級數高度相關,但相關不等於可使用。急診診斷與住院去向是在檢傷後才形成;mistriage 更是比較兩個級數後產生。把它們放進模型,只會製造無法在檢傷當下重現的高分。

把資料決定寫進設定檔

本篇的機器可讀決策保存在:

configs/data/day-10-dataset-roles.json

設定檔記錄 Kaggle slug、資料來源、檔案雜湊、主要標籤、排除選項、可允許主張與禁止主張。

步驟一:確認檔案存在

  • 目的:確認資料選擇不是只留在文章文字。
  • 前置條件:終端機位於專案根目錄。
  • 輸入:Day 10 的 JSON 設定檔。
  • 操作:執行下列指令。
test -f configs/data/day-10-dataset-roles.json
  • 預期輸出:指令正常結束,不會印出文字。
  • 驗證方式:接著執行 ls -l configs/data/day-10-dataset-roles.json,應看見檔案資訊。

步驟二:驗證 JSON 語法

  • 目的:排除括號、逗號或引號錯誤。
  • 前置條件:系統可以執行 Python 3。
  • 輸入:同一份 JSON。
  • 操作:執行:
python3 -m json.tool configs/data/day-10-dataset-roles.json > /dev/null
  • 預期輸出:指令正常結束且沒有錯誤訊息。
  • 驗證方式:若出現行號,依錯誤位置修正 JSON,不能讓後續程式自行忽略設定。

步驟三:確認唯一資料集與標籤

  • 目的:防止後續文章又把其他制度或受控資料加入主要實驗。
  • 前置條件:JSON 語法已通過。
  • 輸入dataset.idreference_labelhuman_reference
  • 操作:執行以下唯讀檢查。
python3 - <<'PY'
import json
from pathlib import Path

config = json.loads(
    Path("configs/data/day-10-dataset-roles.json").read_text(encoding="utf-8")
)

assert config["dataset"]["id"] == "kaggle_ktas_emergency_service_triage"
assert config["dataset"]["reference_label"] == "KTAS_expert"
assert config["dataset"]["human_reference"] == "KTAS_RN"
print("通過:唯一病患資料為 Kaggle KTAS,標籤角色一致")
PY
  • 預期輸出:看到「通過:唯一病患資料為 Kaggle KTAS,標籤角色一致」。
  • 驗證方式:若任何斷言失敗,先停止後續實驗並檢查設定,不要只修改文章表面文字。

這份資料可以與不能支持什麼

可以支持的問題包括:

  • 模型與 KTAS_expert 的五級差異。
  • 模型與 KTAS_RN 的錯誤方向比較。
  • 不同資料表示、檢索、知識結構、門控與重排序的相對效果。
  • 第一、二級召回率、檢傷不足、檢傷過度與跨級距離。
  • 結果對 folds、缺失值策略與主訴正規化是否敏感。

不能支持的主張包括:

  • KTAS 結果等於台灣急診檢傷結果。
  • 交叉驗證等於外部醫院驗證。
  • 公開摘要知識等於完整官方 KTAS 規則。
  • 離線分類結果足以證明可以臨床部署。
  • 模型高於某個人工參考分數,就代表模型優於臨床專業人員。

常見錯誤

把 Kaggle 頁面當成完整資料字典

Kaggle 說明能協助理解代碼,但仍要實際檢查分隔符、文字編碼、欄位名稱、缺失代碼與數值格式。Day 11 會逐欄完成這項工作。

KTAS_RN 當模型特徵

這會讓模型看到護理師已完成的級數,無法回答主訴與生命徵象本身是否足夠。KTAS_RN 必須和模型輸入分開保存。

把專家標籤稱為絕對真值

本系列可以稱它為專家重新判定或主要參考標籤。專家仍受病歷完整度與回顧設計限制。

用更多 folds 假裝增加資料

交叉驗證只是在不同輪次重用 1,267 筆紀錄,不會產生新的醫院或病患。報告時要區分「估計較穩定」與「外部效度提高」。


本日小結

今天完成的是資料選擇契約,不是模型實驗:

  1. 本系列唯一病患資料是 Kaggle 的 1,267 筆 KTAS 公開紀錄。
  2. 不使用需要簽署醫療資料 DUA 的病患資料。
  3. KTAS_expert 是主要參考標籤,KTAS_RN 只作人類現場參考。
  4. 14 個檢傷當下欄位是候選輸入;標籤、診斷、去向、時間與衍生錯誤欄位不得輸入模型。
  5. 主要評估採重複分層交叉驗證,並誠實保留沒有病患識別碼的限制。
  6. RAG 只使用公開可追溯的部分 KTAS 知識,不宣稱重建完整官方演算法。
  7. 所有結論都限制在這份資料的離線實驗範圍。

下一篇預告

Day 11 會真正打開 data.csv,依序處理:

  • 為什麼它要用分號而不是逗號切欄。
  • 為什麼必須以 cp1254 讀取。
  • ??#BOŞ! 與空字串如何統一成缺失值。
  • 24 個欄位如何拆成模型輸入、稽核、標籤與禁止輸入。
  • 如何用 SHA-256、欄位白名單與黑名單驗證處理結果。

Day 10 的資料選擇,會成為 Day 11 每一個資料清理步驟的前提。

參考資料

  1. Kaggle. Emergency Service - Triage Application.
  2. Moon, S.-H., Shim, J. L., Park, K.-S., & Park, C.-S. (2019). Triage accuracy and causes of mistriage using the Korean Triage and Acuity Scale. PLOS ONE, 14(9), e0216972.
  3. Korean Triage and Acuity Scale. KTAS 官方介紹.

上一篇
Day 09|不要只問哪個最好:把研究問題寫成可驗證的假設
下一篇
Day 11|打開 Kaggle KTAS:1,267 筆專家重標急診資料導讀
系列文
30 天打造公開資料版急診檢傷系統:Side Project 與實驗計畫16
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言