iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
佛心分享-SideProject30

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

Day 09|不要只問哪個最好:把研究問題寫成可驗證的假設

  • 分享至 

  • xImage
  •  

檢索增強生成(Retrieval-Augmented Generation, RAG)是一種先從外部知識庫找出候選證據,再交給大型語言模型(Large Language Model, LLM)整理回答的方法。Lewis 等人:Retrieval-Augmented Generation Day 08 已把查詢表示、文件結構、門控、檢索與重排序拆成不同實驗因子;今天要再往前一步,把「想知道的事」接到「能夠判讀的結果」。

假設完整方法的平衡準確率增加 3 個百分點,但第一、二級案例的嚴重檢傷不足也增加 2 個百分點。這算進步,還是退步?如果文章只寫「哪一套系統最好」,看到結果後才挑一個有利指標,就能對同一份資料講出完全不同的故事。

真正需要在測試前回答的是:主要比較是哪兩組?主要量測是什麼?預期方向是什麼?可以接受的安全代價是多少?區間跨過零差異時,要寫成沒有差異,還是資料不足?

下圖把這些問題畫成五條獨立路線。每張空白卡片都要經過成對比較、量測框與三格判讀托盤;左側上鎖的資料盒代表共同測試集在規則寫完前不能打開。

五張不同顏色的空白問題卡沿五條獨立軌道,依序通過成對比較模組、透明量測框與三格判讀托盤,兩位研究人員檢查連線,旁邊放著上鎖資料盒

上圖是研究設計的概念示意。每一題都要先寫清楚比較對象、量測方式與判讀規則,才能在打開測試資料後用相同標準解讀結果。


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

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

  1. 分辨研究問題、假設、主要終點與安全護欄。
  2. 把模糊的「哪個 RAG 最好」改成有比較組、指標與方向的問題。
  3. 說明為什麼不是每一個研究問題都適合預設方向。
  4. 將 H4 拆成檢索與重排序兩段,避免重新製造 Day 08 的變因混淆。
  5. 用效果差與信賴區間區分「支持目前假設」「結果不明確」與「方向相反」。
  6. 在相同覆蓋率下比較拒答方法,並檢查高急迫案例是否被大量排除。
  7. 驗證本篇建立的研究計畫設定檔,知道哪些欄位仍待鎖定。

本篇會用到的名詞

今天的新名詞很多,先用表格建立索引。表格是快速查找用途;正文仍會在第一次使用時,以完整句子重新說明。

中文名稱 英文全名/縮寫 在本篇的用途
研究問題 Research Question, RQ 指定要用資料回答的未知問題
研究假設 Research Hypothesis 在看共同測試結果前,寫下預期效果方向
研究計畫書 Study Protocol 保存問題、比較、終點與分析規則的正式計畫
預先指定 Prespecification 先固定比較、指標與判讀規則,再開啟測試集
確認性分析 Confirmatory Analysis 按照預先規則檢查主要主張
探索性分析 Exploratory Analysis 從結果發現新線索,供下一輪驗證
主要終點 Primary Endpoint 一個問題最主要的量測結果
次要終點 Secondary Endpoint 補充機制、代價或其他結果的量測
安全護欄 Safety Guardrail 即使主要指標改善,也不能越過的安全界線
效果估計 Effect Estimate 兩種方法在指定指標上的差值
信賴區間 Confidence Interval, CI 表達有限樣本下效果估計的不確定範圍
拒答 Abstention 證據不足時不輸出正式級數,轉交人工處理
覆蓋率 Coverage 系統實際回答的案例比例
選擇性風險 Selective Risk 只在系統選擇回答的案例中計算錯誤風險

研究問題和假設不是同一句話換個語氣

研究問題(Research Question, RQ)描述目前不知道、而且打算用資料回答的事情。好的研究問題至少要指出:評估對象、比較方法、結果指標與適用範圍。

研究假設(Research Hypothesis)則在看共同測試結果前,寫下預期差異與方向。它不是願望,也不是宣傳標語,而是一個可能被資料反駁的主張。

例如:

  • 「完整方法效果很好」不是可驗證假設,因為「好」沒有比較對象、量測方式與界線。
  • 「完整 RAG 的平衡準確率高於使用相同 LLM、但不提供檢索證據的版本」比較接近可驗證假設。
  • 如果再加上安全護欄、信賴區間判讀與固定測試集,才形成完整的驗證契約。

本篇的 H1H5 是專案內的假設識別字,不是在介紹統計檢定中成對使用的假設符號。換句話說,H1 只是第一條研究主張的代號,不代表它已經成立。

一個問題不一定要硬配一條方向假設

如果已經有足夠理論與前期資料,可以預先寫下方向。若資料來源、制度映射或可用規則仍不完整,先保留成探索性問題,通常比勉強猜一個方向更誠實。

因此,本篇會讓 RQ1、RQ2、RQ3 與 RQ5 對應方向假設;RQ4 則先定位為探索性穩健性問題,檢查結論是否過度依賴某一次資料切分或某一種前處理方式。

確認性分析和探索性分析要分開

預先指定(Prespecification)是先寫下比較組、主要終點、分析方式與判讀規則,再開啟共同測試集。它的目的不是禁止新發現,而是讓讀者分得出「原本要驗證的主張」與「看到資料後想到的新問題」。

確認性分析(Confirmatory Analysis)按照預先計畫檢查主要主張。探索性分析(Exploratory Analysis)則用來找新模式、錯誤群組或下一輪假設。兩者都有價值,但證據角色不同,不能在結果出爐後才把最漂亮的探索結果改名為主要假設。

國際醫藥法規協和會(International Council for Harmonisation of Technical Requirements for Pharmaceuticals for Human Use, ICH)的 E9 統計原則要求臨床試驗在研究計畫書(Study Protocol)中精確定義主要變數、主要假設與分析方式,並區分預先規劃和結果出現後的額外分析。本專案不是藥品臨床試驗,也不把這份指引當成部署認證;我們借用的是「主要問題必須事先說清楚」的實驗原則。ICH E9:Statistical Principles for Clinical Trials

臨床預測模型透明報告指引加人工智慧擴充版(Transparent Reporting of a Multivariable Prediction Model for Individual Prognosis or Diagnosis Plus Artificial Intelligence, TRIPOD+AI)也強調,預測模型研究應完整說明為什麼進行、實際做了什麼、資料如何使用,以及發現了什麼。這提醒我們:設定檔不只服務程式,也要讓讀者能追查問題、方法與結果。Collins 等人:TRIPOD+AI statement

主要終點、次要終點與安全護欄各自負責什麼?

主要終點(Primary Endpoint)是回答一個研究問題時,最主要的量測。主要終點不一定全篇只能有一個,但同一條確認性假設應盡量有一個清楚的主要量測,避免看完結果後在十幾個指標中挑最高者。

本系列延續 Day 07 的評估地圖:

  • 主要效能指標使用平衡準確率(Balanced Accuracy)。它先計算五級召回率,再讓五級等權平均,避免第三級等多數類別完全主導摘要。
  • 主要安全指標使用嚴重檢傷不足率(Severe Undertriage Rate)。它聚焦參考級數為第一、二級,卻被模型判為第三至第五級的案例。
  • 次要終點(Secondary Endpoint)包含各級召回率、整體準確率、錯誤方向、錯誤距離、候選覆蓋、排序品質、延遲與拒答分布。

安全護欄(Safety Guardrail)是主要效能改善時仍不能跨過的界線。例如 H1 即使平衡準確率提高,嚴重檢傷不足也不能增加超過事先容許差異。容許差異不能由本篇憑空決定;它需要臨床審查、樣本規模與使用情境支持,並在共同測試前鎖定。

效果估計(Effect Estimate)是兩種方法在指定指標上的差值。95% 信賴區間(95% Confidence Interval, 95% CI)則表達有限樣本造成的不確定範圍;區間不能被解讀成「研究假設有 95% 機率為真」。

如果容許差異仍寫著 to-be-locked,研究計畫書就仍是規劃草案,不能執行確認性測試。這項未完成狀態必須公開,而不是用一個看似精確、實際沒有依據的小數補上。

五個研究問題先看全景

本系列把「哪一個 RAG 最好」拆成五個層次:

  1. RQ1 價值問題:外部規則檢索是否比無檢索生成增加可測量價值?
  2. RQ2 機制問題:查詢、文件、門控、檢索與重排序各自改變哪一層結果?
  3. RQ3 安全問題:安全候選聯集能否降低高急迫案例的嚴重檢傷不足?
  4. RQ4 穩健性問題:效果方向是否會隨資料切分、缺失值策略或主訴正規化而改變?
  5. RQ5 拒答問題:在相同覆蓋率下,證據感知拒答能否降低已回答案例的風險?

下圖將五題接到主要比較、量測與研究角色。五題都使用同一份 KTAS 資料;先看最右欄:RQ4 沒有預設方向,其他問題也不是全部使用同一個指標。

五列矩陣把 RQ1 到 RQ5 對應到價值、機制、安全、切分與前處理穩健性及拒答問題

上圖把五題的研究角色分開,避免把不同問題硬塞進同一個總分。下面從 RQ1 開始逐題定義。

RQ1:外部規則檢索是否真的增加價值?

RQ1 不是問完整方法能不能打敗最弱的多數類別基準,而是先估計「加入整套外部規則證據流程」的淨差異。

主要比較使用:

  • P0:雙重查詢、階層知識庫、安全候選聯集、混合檢索與重排序組成的完整 RAG。
  • B4:使用相同本地 LLM、相同查詢表示、相同基礎提示詞、相同測試案例與相同輸出格式,但不提供外部檢索證據。

其他基準仍要保留:B0 多數類別、B1 部分規則、B2 結構化機器學習(Machine Learning, ML)、B3 文字嵌入加結構化特徵,以及 B5 平面稠密 RAG。這些比較提供上下文,但 H1 的主要效果先聚焦 P0 - B4,用來估計加入整套外部證據流程的淨差異;它不能拆解 RAG 內部哪一個元件造成差異,元件歸因仍由 RQ2 負責。

H1 的規劃寫法是:

效能差 = P0 的平衡準確率 - B4 的平衡準確率
安全差 = P0 的嚴重檢傷不足率 - B4 的嚴重檢傷不足率

兩個式子中的 P0B4 是方法識別字。效能差大於 0,代表 P0 的平衡準確率較高;安全差大於 0,代表 P0 的嚴重檢傷不足反而更多。

因此,支持 H1 需要同時滿足:效能差的 95% 信賴區間完整位於 0 以上,而且安全差的 95% 信賴區間上限沒有超過事先鎖定的容許增加。只滿足第一項,不能寫成完整方法「更安全」。

RQ2:每一個元件究竟改變哪一層?

RQ2 接續 Day 08 的 A 到 D2 控制比較:

階段 唯一主要變動 最接近的量測層
A 原始、語意與雙重查詢表示 前 k 筆候選是否保留正確規則
B 平面與階層文件結構 父層路由與子規則覆蓋
C 無門控、硬門控、軟門控與安全聯集 門控前後候選及安全錯誤
D1 稠密與混合檢索 正確規則能否進入前 k 筆
D2 同一候選集合的重排序關閉與啟用 正確規則的排序位置

前 k 筆候選(Top-k Candidates)是檢索後保留的前 k 筆規則;k 是事先設定的候選數量。候選覆蓋率只問正確規則是否仍在集合中,不等於最終級數正確。

H2 預期雙重查詢的 Top-k 候選覆蓋率高於只有原始數值與只有規則語意的查詢。這一條先量候選層,不能直接跳成「最終檢傷一定更準」。

H4 必須拆成兩段,否則會重新混淆檢索與重排序:

  • H4a:關閉重排序時,混合檢索的前 k 筆規則召回率(Recall at k, Recall@k)高於稠密檢索。Recall@k 的分母是所有應被找回的正確規則,分子是出現在前 k 筆的正確規則。
  • H4b:固定完全相同候選後,啟用重排序的平均倒數排名(Mean Reciprocal Rank, MRR)高於關閉重排序。每筆查詢先取第一個正確規則排名的倒數,再對全部查詢平均;正確規則越靠前,MRR 越大。

例如正確規則排第 2 名,倒數排名是 1 ÷ 2 = 0.5;排第 5 名則是 1 ÷ 5 = 0.2。若完全沒有正確規則,該筆記為 0。

H4b 還有一個實作驗證:開啟重排序前後,候選成員與 Top-k 覆蓋率必須相同。若候選內容改變,表示程式不只重排,這組比較就不再回答 H4b。

RQ3:安全聯集能否降低嚴重檢傷不足?

本系列的五級編碼採用第一級最急、第五級最不急的方向。嚴重檢傷不足是參考級數為第一、二級,模型卻輸出第三、第四或第五級。

H3 比較安全候選聯集、無門控與生命徵象硬門控。主要終點是第一、二級中的嚴重檢傷不足率:

嚴重檢傷不足率
= 參考為第 1~2 級且預測為第 3~5 級的案例數
  ÷ 全部參考為第 1~2 級的案例數

分子只計算被判得明顯較不急的高急迫案例;分母是測試集中全部第一、二級參考案例。數值越低,表示這一種錯誤越少。

但只讓這個比例下降仍不夠。若系統把大量案例都往第一、二級推,嚴重檢傷不足可能下降,整體檢傷過度與資源壓力卻上升。因此 H3 同時設定整體檢傷過度的安全護欄;檢傷過度差值的 95% CI 上限不能超過事先容許增加。兩個比例都要附分子、分母、各級樣本數與 95% CI。

RQ4:效果會不會只出現在某一種切分?

本系列只使用 Kaggle 上 1,267 筆韓國急診檢傷與急迫度分級量表(Korean Triage and Acuity Scale, KTAS)資料,因此無法用另一個醫院資料集檢查外部效度。RQ4 改問一個這份資料真正能回答的問題:同一項效果是否只在某個亂數種子、某種折數或某個前處理選擇下出現?

主要敏感度軸包括:

  • 重複分層交叉驗證使用的亂數種子。
  • 五折與其他可行折數。
  • 缺失值保留、缺失指示欄與插補策略。
  • 英文主訴大小寫、空白、拼字變體與同義詞正規化。

每一種設定都計算相同的配對效果差:

設定內效果差 = 完整方法的平衡準確率 - 相同 folds 上基準方法的平衡準確率

接著比較效果方向、大小與 95% 信賴區間。若方法只在某一個種子下提高,其他設定接近零或方向相反,就應寫成「結果對切分敏感」,不能挑出最好的一次當成主結論。

RQ4 仍是探索性問題,因為敏感度分析不能取代真正的外部資料驗證。它能揭露內部不穩定,卻不能證明模型換到其他醫院後仍然有效。

把五條主張寫成能失敗的假設

目前的假設契約如下。H4 分成 a、b 兩段,是為了對齊 D1 檢索與 D2 重排序。

假設 主要比較 主要終點 預期方向 必要護欄或不變條件
H1 P0 對照 B4 平衡準確率 P0 較高 嚴重檢傷不足增加不超過容許差異
H2 雙重對照原始與語意查詢 Top-k 候選覆蓋率 雙重高於兩種單通道 相同知識庫、檢索器與 k
H3 安全聯集對照無門控與硬門控 嚴重檢傷不足率 安全聯集較低 檢傷過度增加不超過容許差異
H4a 混合對照稠密檢索 Recall@k 混合較高 重排序關閉
H4b 重排序啟用對照關閉 MRR 啟用較高 候選成員與覆蓋率相同
H5 證據感知對照信心式拒答 相同覆蓋率的選擇性風險 證據感知較低 第一、二級覆蓋率不低於下限

這張表仍缺少兩個需要外部審查的數字:H1、H3 的容許差異,以及 H5 的覆蓋率與第一、二級覆蓋下限。設定檔會把它們保留為待鎖定,提醒我們不能先跑測試再補門檻。

下圖以 H3 展開一條完整契約。請從左到右確認六個欄位,接著看下方三種可能結果。「結果不明確」是正式判讀,不等於證明兩種方法完全相同。

六個相連欄位依序顯示資料範圍、比較組、主要終點、預期方向、安全護欄與決策規則,下方三張卡區分支持目前假設、結果不明確及方向相反或護欄失敗

上圖把一個可反駁假設拆成六個必填欄位,並預先保留三種結果。下面說明這三種判讀不能互相混用。

支持、結果不明確與方向相反怎麼判?

前面定義的效果估計與 95% CI,要一起用來判斷方向與不確定性,不能只看點估計。

以下三組數字只用來示範判讀。假設預期效果差要大於 0:

合成效果差與 95% CI 判讀 原因
+3.2 百分點 [+0.8, +5.6] 支持預期方向 整段區間都大於 0;仍要檢查安全護欄
+3.2 百分點 [-0.6, +7.0] 結果不明確 區間同時包含負值、0 與正值
-3.0 百分點 [-5.0, -1.0] 方向相反 整段區間都小於 0

百分點是兩個百分比直接相減的單位。例如 60% 減 55% 是增加 5 個百分點,不是增加 5%。

p 值(p-value)可以描述資料和某個指定統計模型之間的不相容程度,但它不是研究假設為真的機率,也不表示效果大小或臨床重要性。美國統計協會(American Statistical Association, ASA)的正式聲明也提醒,科學結論不應只依賴 p 值是否跨過單一門檻。ASA:Statement on Statistical Significance and P-Values

所以本系列會一起報告:效果差、95% CI、樣本數、分子、分母、安全護欄與預先角色,而不是只在表格放一顆星號。

RQ5:拒答不能靠隱藏困難案例換取低錯誤

拒答(Abstention)是系統在證據不足、必要欄位缺失或輸出無法通過驗證時,不產生正式級數,改為清楚標記並交由人工處理。拒答不是刪除案例,也不是把案例移出評估資料。

覆蓋率(Coverage)是系統實際回答的案例比例:

覆蓋率 = 系統有輸出正式級數的案例數 ÷ 全部測試案例數

假設 100 筆案例中回答 90 筆,覆蓋率就是 90 ÷ 100 = 90%。覆蓋率越低,表示拒答越多。

選擇性風險(Selective Risk)是在系統選擇回答的案例中計算錯誤。對 H5 的安全問題,還要把第一、二級分母寫清楚:

已回答案例的嚴重檢傷不足率
= 已回答、參考為第 1~2 級、預測為第 3~5 級的案例數
  ÷ 已回答且參考為第 1~2 級的案例數

第一、二級覆蓋率
= 已回答且參考為第 1~2 級的案例數
  ÷ 全部參考為第 1~2 級的案例數

假設 100 筆案例中有 15 筆參考為第一、二級,系統回答其中 12 筆,並有 2 筆嚴重檢傷不足:

第一、二級覆蓋率 = 12 ÷ 15 = 80%
已回答案例的嚴重檢傷不足率 = 2 ÷ 12 ≈ 16.7%

若另一個方法只回答 9 筆第一、二級案例,錯 1 筆,風險雖降為約 11.1%,卻多拒答了 3 筆高急迫案例。這就是 H5 必須同時設定第一、二級覆蓋率下限的原因:不能藉由拒答高風險案例,讓已回答子集看起來特別安全。

H5 比較兩種方法:

  • 證據感知拒答:同時查看檢索證據品質、規則來源、必要欄位與輸出驗證狀態。
  • 信心式拒答:只按照模型本身的信心分數,拒答最低的一部分案例。

兩組要在相同整體覆蓋率下比較;拒答門檻在開發資料選定,不能看共同測試結果後左右移動。選擇性分類研究把「風險」與「覆蓋率」的交換關係視為核心問題,但相關研究多在一般影像分類資料上驗證,不能直接當成急診系統安全證明。Geifman 與 El-Yaniv:Selective Classification for Deep Neural Networks

下圖使用固定合成數值示範 H5 預期怎麼讀。藍線低於紫線只代表在相同覆蓋率下,藍線對應的選擇性風險較低;仍要檢查逐級覆蓋、所有拒答案例與外部驗證。

合成風險覆蓋折線圖在 70% 到 100% 覆蓋率下比較證據感知與只看模型信心的拒答,右側列出相同覆蓋率、門檻先鎖定、拒答案例另報與不得直接解讀為部署證明

上圖也提醒一個容易忽略的事:如果某種拒答方法在 70% 覆蓋率時風險很低,另一種方法卻回答 100%,兩者不能直接排名。必須先把覆蓋率對齊,並揭露被拒答的 30% 是哪些級別與哪些錯誤類型。

用設定檔保存研究計畫,而不是只留在文章裡

本篇接下來會建立 configs/experiments/day-09-research-protocol.json。JavaScript 物件表示法(JavaScript Object Notation, JSON)是一種以鍵與值保存結構化資料的純文字格式。這份設定檔目前明確標示 planning,不代表研究計畫已鎖定,也不代表任何結果已完成。

先在自己的專案資料夾建立本篇完整檔案

接下來不會要求你前往任何程式碼網站。請在自己的電腦開啟專案資料夾,依下列順序建立檔案;每個程式碼區塊都是該檔案的完整內容,不含省略號。

本篇沿用 Day 08 已完整建立的控制比較設定,並新增研究問題與假設契約。

先從專案根目錄建立需要的資料夾:

mkdir -p configs/experiments

如果指令沒有印出訊息是正常的。可用 test -d 資料夾路徑 && echo "資料夾已建立" 驗證單一資料夾。接著使用你熟悉的文字編輯器新增各檔案,把對應區塊完整貼入後儲存。

檔案 1:建立 configs/experiments/day-09-research-protocol.json

保存研究問題、假設、主要終點、方向與安全護欄。

請在文字編輯器建立 configs/experiments/day-09-research-protocol.json,貼入以下完整內容並儲存:

{
  "schema_version": "0.2",
  "status": "planning",
  "description": "Day 09 研究問題與預先假設草案;所有待鎖定欄位完成前,不得執行共同測試集。",
  "scope": {
    "system_role": "clinical decision support candidate only",
    "test_sets_locked_after_protocol": true,
    "triage_system_scores_must_not_be_pooled": true,
    "effect_estimates_reported_with_confidence_intervals": true
  },
  "analysis_policy": {
    "confidence_level": 0.95,
    "resampling_unit": "record; patient identifier is unavailable, so within-patient dependence cannot be ruled out",
    "multiplicity_adjustment": "to-be-locked-before-test",
    "safety_margins": "to-be-locked-with-clinical-review",
    "inconclusive_rule": "confidence interval crosses a decision boundary",
    "post_hoc_findings": "exploratory-only"
  },
  "research_questions": [
    {
      "id": "RQ1",
      "role": "confirmatory",
      "question": "外部規則檢索是否比無檢索生成與其他基準增加可測量價值?",
      "primary_comparison": "P0 versus B4",
      "contextual_comparisons": ["P0 versus B0", "P0 versus B1", "P0 versus B2", "P0 versus B3", "P0 versus B5"],
      "hypotheses": ["H1"]
    },
    {
      "id": "RQ2",
      "role": "mechanism",
      "question": "查詢表示、文件結構、門控、檢索與重排序各自改變哪一層結果?",
      "experiment_stages": ["A", "B", "C", "D1", "D2"],
      "hypotheses": ["H2", "H4a", "H4b"]
    },
    {
      "id": "RQ3",
      "role": "confirmatory-safety",
      "question": "安全候選聯集能否降低第一、二級案例的嚴重檢傷不足?",
      "experiment_stages": ["C", "E"],
      "hypotheses": ["H3"]
    },
    {
      "id": "RQ4",
      "role": "exploratory-robustness",
      "question": "預先比較的效果方向是否對資料切分、缺失值策略與主訴正規化保持穩健?",
      "sensitivity_axes": ["fold seeds", "number of folds", "missing-value handling", "chief-complaint normalization"],
      "hypotheses": []
    },
    {
      "id": "RQ5",
      "role": "confirmatory-after-coverage-lock",
      "question": "在相同覆蓋率下,證據感知拒答能否降低已回答案例的選擇性風險?",
      "coverage_target": "to-be-locked-on-development-data; candidate=0.90",
      "hypotheses": ["H5"]
    }
  ],
  "hypotheses": [
    {
      "id": "H1",
      "comparison": "P0 full retrieval-augmented pipeline versus B4 same local language model without retrieval",
      "primary_endpoint": "paired difference in balanced accuracy",
      "expected_direction": "greater than 0",
      "safety_guardrail": "upper confidence bound for the increase in severe undertriage does not exceed a pre-locked margin"
    },
    {
      "id": "H2",
      "comparison": "dual query representation versus raw-only and semantic-only representations",
      "primary_endpoint": "top-k candidate coverage on the versioned rule probe set",
      "expected_direction": "dual is greater than both single representations"
    },
    {
      "id": "H3",
      "comparison": "safety-union gate versus no gate and vital-sign hard gate",
      "primary_endpoint": "severe undertriage among reference levels 1 and 2",
      "expected_direction": "safety-union is lower than both comparators",
      "safety_guardrail": "upper confidence bound for the increase in overall overtriage does not exceed a pre-locked margin"
    },
    {
      "id": "H4a",
      "comparison": "hybrid retrieval versus dense retrieval with reranking disabled",
      "primary_endpoint": "rule recall at pre-locked k",
      "expected_direction": "hybrid is greater than dense"
    },
    {
      "id": "H4b",
      "comparison": "reranker enabled versus disabled on the exact same candidate sets",
      "primary_endpoint": "mean reciprocal rank of the correct rule",
      "expected_direction": "enabled is greater than disabled",
      "invariant": "candidate membership and top-k coverage are unchanged"
    },
    {
      "id": "H5",
      "comparison": "evidence-aware abstention versus confidence-only abstention at matched coverage",
      "primary_endpoint": "severe undertriage among answered cases at the pre-locked coverage target",
      "expected_direction": "evidence-aware is lower than confidence-only",
      "safety_guardrail": "lower confidence bound for coverage among reference levels 1 and 2 does not fall below a pre-locked floor",
      "required_report": "all rejected cases and the full risk-coverage curve remain visible"
    }
  ]
}

儲存後先確認檔名與相對路徑完全一致,再繼續建立下一個檔案。

完成後產生必要檔案並做靜態檢查

以下命令會在需要時產生套件鎖定檔,接著檢查設定格式與 Python 語法;它們不會啟動模型,也不會把病患資料送到網路:

python3 -m json.tool configs/experiments/day-09-research-protocol.json

每個命令都應正常結束。若 JSON 顯示行號,先檢查貼上時是否遺漏逗號、引號或括號;若 py_compile 報錯,先依行號修正縮排或漏貼內容。靜態檢查通過後,再執行本文後面的正式步驟。

接下來用四個步驟檢查它。

步驟 1:確認檔案與前一篇設定存在

  • 目的:確認研究問題能追到 Day 08 的控制比較階段。
  • 前置條件:已依 Day 08 正文建立控制比較設定,並位於自己的專案根目錄。
  • 輸入:Day 08 控制比較設定與 Day 09 研究計畫設定。
  • 操作:確認 configs/experiments/ 中同時存在兩份 JSON。
  • 預期輸出:可以找到 day-08-controlled-comparisons.jsonday-09-research-protocol.json
  • 驗證方式:若缺少 Day 08 檔案,RQ2 的 A 到 D2 就沒有可追溯實驗定義,不能只靠文章文字猜測。

步驟 2:驗證 JSON 語法

在專案根目錄執行:

python3 -m json.tool configs/experiments/day-09-research-protocol.json
  • 目的:先排除逗號、括號與引號等格式錯誤。
  • 前置條件:電腦可執行 Python 3,步驟 1 的檔案存在。
  • 輸入:Day 09 JSON 設定檔。
  • 操作:使用 Python 內建的 json.tool 解析並格式化內容。
  • 預期輸出:終端機印出縮排整齊的完整設定,指令正常結束。
  • 驗證方式:若出現行號與錯誤訊息,先修正語法;不能讓實驗程式自行忽略無法解析的研究計畫。

步驟 3:檢查問題、假設與終點是否一一相連

  • 目的:避免研究問題存在,但沒有可執行比較或主要量測。
  • 前置條件:JSON 已通過語法檢查。
  • 輸入research_questionshypotheses 兩個陣列。
  • 操作:逐一確認 RQ1 到 RQ5 的角色、比較、實驗階段與假設識別字,再檢查每條假設的主要終點、方向與護欄。
  • 預期輸出:除了刻意保持探索性的 RQ4,每個確認性問題都能追到至少一條假設。
  • 驗證方式:若某條假設沒有比較組、終點或方向,就仍是草稿句子,不得執行共同測試。

步驟 4:鎖定所有待決欄位後才執行測試集

  • 目的:防止測試結果反過來決定門檻、容許差異與統計方法。
  • 前置條件:資料角色、樣本數、臨床審查與開發資料實驗已完成。
  • 輸入:每次重新抽樣要以病患還是就醫紀錄為單位、同時比較多種方法時如何調整判讀門檻、H1/H3 容許差異,以及 H5 覆蓋率與高急迫覆蓋下限。
  • 操作:將所有 to-be-locked 值換成有理由、可追溯的設定,保存研究計畫版本與鎖定時間。
  • 預期輸出:一份不含待決欄位的鎖定計畫,以及對應版本識別字。
  • 驗證方式:若仍有待決欄位,或版本時間晚於第一次共同測試,就只能標為探索性分析。

設定檔只是最低限度的機器可讀契約。正式執行時仍要產生執行清單(Run Manifest),記錄實際資料、程式、規則、提示詞、模型與輸出版本,才能從結果追回當時條件。

常見的六個誤解

「研究問題就是把方法名稱加上問號」

「階層 RAG 好不好?」沒有指定比較組、資料範圍與主要量測。可回答的問題要說清楚和誰比、改哪一項、看哪一層結果。

「假設就是我最希望看到的結論」

假設必須可能失敗。若無論結果變高、變低或不變都能解釋成成功,那是宣傳話術,不是研究假設。

「p 值小於門檻就代表效果重要」

p 值不表示效果大小或臨床重要性。還要看效果差、信賴區間、樣本數、安全護欄與使用情境。

「區間跨過 0,就證明兩種方法相同」

區間跨過 0 表示目前資料同時容許負差、零差與正差,應寫成結果不明確。要判斷差異是否小到可忽略,需要另外事先定義容許界線與相應實驗設計。

「換幾個切分都提高,就等於完成外部驗證」

不同 folds 仍來自同一批 1,267 筆 KTAS 紀錄。它們可以檢查結果是否依賴單次切分,不能代表新的醫院、族群或時間。

「拒答後錯誤下降,就代表更安全」

拒答可能把困難案例,甚至高急迫案例移出已回答分母。必須在相同覆蓋率下比較,並另報第一、二級覆蓋率與所有拒答案例。


本日小結

今天沒有執行模型,也沒有產生效能排行。我們把後續實驗要回答的問題寫成一份可失敗、可追查的契約:

  1. 研究問題描述未知,研究假設在測試前寫下預期方向;兩者不是同一句話。
  2. 確認性分析驗證預先主張,探索性分析發現下一輪問題,結果出爐後不能互換身分。
  3. RQ1 先用 P0 對照 B4 估計整套外部規則證據流程的淨差異,再用其他基準提供上下文。
  4. RQ2 對齊 A 到 D2;H4a 測檢索,H4b 測相同候選的重排序。
  5. RQ3 以嚴重檢傷不足為主要安全終點,並用檢傷過度作護欄。
  6. RQ4 檢查 folds、缺失值與主訴正規化敏感度,但不把內部敏感度分析稱為外部驗證。
  7. RQ5 在相同覆蓋率下比較拒答,並保護第一、二級覆蓋率,避免困難案例從報告消失。
  8. H1 到 H5 都要同時指定資料範圍、比較、主要終點、方向、護欄與決策規則。

這些規則只能提升實驗的可解釋性,不能讓 Side Project 自動取得臨床部署資格。系統仍定位為決策支援候選,所有級數與拒答狀態都需要專業人員覆核。

下一篇預告

研究問題已經寫清楚,下一步才知道資料集必須提供哪些欄位、標籤與規則來源。

Day 10 會說明為什麼本系列最後只選 Kaggle KTAS 資料、這項選擇排除了哪些資料,以及單一小型資料集可以支持和不能支持哪些結論。


參考資料

  1. Lewis, P., et al. (2020). 知識密集型自然語言處理任務的檢索增強生成.
  2. International Council for Harmonisation. E9 Statistical Principles for Clinical Trials.
  3. Collins, G. S., et al. (2024). TRIPOD+AI statement: updated guidance for reporting clinical prediction models.
  4. Wasserstein, R. L., & Lazar, N. A. (2016). ASA Statement on Statistical Significance and P-Values.
  5. Geifman, Y., & El-Yaniv, R. (2017). Selective Classification for Deep Neural Networks.

上一篇
Day 08|不是三選一:找出被混在一起的實驗變因
下一篇
Day 10|資料選定:為什麼整個系列只使用 Kaggle KTAS?
系列文
30 天打造公開資料版急診檢傷系統:Side Project 與實驗計畫17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言