警示疲勞 vs 安全:為什麼 ExClinCalc 只做 12 組藥物交互,不是上千組

藥物交互作用清單上千組,但我的系統只實作 12 組。這不是偷懶 ── 是基於 Ancker 2017 對警示疲勞的研究做的設計取捨。

#clinical-decision-support#alert-fatigue#drug-interaction#ux#patient-safety

TL;DR

醫療系統警示功能的常見問題不是「警示太少」,是「警示太多」。當醫師被誤報轟炸到習慣按 dismiss,下次真有問題時也會 dismiss 掉 ── 這就是 alert fatigue(警示疲勞)。我在 ExClinCalc 的處方藥物交互檢查只實作 12 組關鍵組合,這是設計,不是窮盡


背景:CDSS 警示的雙刃劍

臨床決策支援系統(CDSS)的核心功能之一就是主動警示:醫師開錯藥、漏看過敏史、處方對腎功能不良的劑量 ── 系統跳警告。

直觀想:警示越完整越安全。但實證研究說的不是這樣。

Ancker et al. (2017) 在 BMC Medical Informatics and Decision Making 發表的研究做了量化測量:

醫師被警示打斷越多次,警示的「忽略率(override rate)」越高。當忽略率超過 90%,警示系統等同沒裝。

這個發現顛覆了「警示越多越安全」的直覺。一個系統如果丟給醫師 50 個警示,其中 48 個是誤報、2 個是真問題 ── 真問題很可能跟誤報一起被 dismiss 掉


真實數據:alert override rates

Ancker 的研究跟 follow-up 研究發現:

  • 一般醫院 CDSS 警示的 override rate:85–95%
  • 即使是「重要」警示(紅色)也常見 60–80% override
  • 醫師被警示打斷的時間 average:每天 30+ 分鐘,多數是看一眼就 dismiss

這代表 ── 大多數 CDSS 警示功能在實務上是噪音


我的設計取捨

知道這個前提後,我做 ExClinCalc 處方檢查時的核心問題不是「能撈多少組藥物交互?」,是「怎麼讓醫師看到警示就停下來,而不是反射 dismiss?

三個設計原則

原則 1:稀少 + 重大

只警示最常見、最致命的組合。例如:

  • NSAIDs + ACEI/ARB(腎傷害 + 高血鉀)
  • Warfarin + Aspirin(出血風險倍增)
  • ACEI + 高血鉀利尿劑(致命高血鉀)
  • 部分 CYP3A4 強抑制 / 誘導劑組合

12 組不是窮盡 ── 是「醫師看到絕不會 dismiss 的那一組」

原則 2:分級警示

不是所有警示都同等緊急。我用兩層:

🔴 紅色高優先:12 組關鍵組合,必須點確認才能繼續
🟡 黃色提示:劑量 / 給藥時機提醒,可帶過

紅色警示稀少 + 強,醫師看到 = 停下來。強訊號不能稀釋

原則 3:脈絡感知

同一組藥物在不同病人脈絡下的風險不同。例如 NSAIDs + ACEI:

  • 對 30 歲健康人 + 短期使用 → 風險低
  • 對 70 歲 CKD G3a 病人 → 高風險

我的系統會看病人現有 eGFR 跟年齡,分級警示的緊急程度。情境化警示比一刀切警示誤報率低很多


為什麼不接 FDA OpenFDA API 撈所有交互?

這個問題我自己問過自己。台灣食藥署、FDA OpenFDA、UpToDate 都有完整藥物交互清單,少則幾百組、多則上千組。接進去不是技術問題

不接的理由很現實:

  1. 沒分級數據:FDA OpenFDA 的清單沒區分「嚴重組合」vs「理論可能交互但臨床罕見」。一律警示等同 alert fatigue。
  2. 缺脈絡判斷:FDA 的清單是藥物層級,不看病人。要做情境化警示得自己再過一層規則引擎。
  3. 更新節奏不可控:FDA 清單一更新可能新增上百組。我的系統如果直接 sync,可能某天醫師突然多了 50 個新警示,然後習慣全部 dismiss。

我的選擇:寧願覆蓋率低,但每個警示都值得停下來


開放問題:怎麼擴充而不破壞

我的 12 組設計目前夠用,但顯然不能永遠停在 12 組。怎麼擴充?

我正在思考的方向:

方向 1:分層警示庫

Layer 1(紅色):12–20 組「絕對嚴重」── 醫師必看
Layer 2(黃色):100+ 組「需注意」── 預設關閉、醫師可開
Layer 3(資訊):上千組「理論交互」── 預設關閉、可查閱不警示

讓醫師自己選敏感度。關鍵是 default 不要過度。

方向 2:機構自訂

不同診所的病人組成不同。心臟科診所可能想開更多心血管藥物警示。讓管理員調整警示組合比中央決定更務實。

方向 3:實證學習

長期記錄每位醫師對每類警示的 override rate。如果某類警示某醫師 override > 90%,自動降級。讓系統學會「對這個醫師、這類警示是噪音」。

這個方向有 ML 介入空間,但要小心:自動降級不能涵蓋「絕對嚴重」這層 ── 只能降級可調的部分。


跟業界對比

我把 ExClinCalc 的警示策略跟現有商業 CDSS 比過:

系統藥物交互組合數Override rate(業界估計)
Epic CDSS(美國大醫院)1000+80–90%
Cerner1000+80–90%
台灣健保 IC 卡警示數百95%+
ExClinCalc(我做的)12(紅色)+ 50(規劃黃色)目標 < 50%

我故意走「少而強」路線。比較有沒有警示之外,還要看警示有沒有真的影響行為


一個提醒

寫這篇不是要黑大型 CDSS。Epic / Cerner 都是業界頂尖團隊做的、有他們的需求脈絡(多醫院、多科、多保險方案)。我做的是中小型診所,目標客群、需求都不一樣。

但我希望這篇能讓更多人意識到:「裝越多警示」≠ 「越安全」

醫療系統的設計應該以真實行為改變為目標,不是 feature checklist。Ancker 2017 跟後續研究說得很清楚 ── 少而強的警示,比多而吵的警示,更可能真的救人


延伸閱讀