科技#health-data#data-pipelines#interoperability#wearables#engineering

健康資料管線:三個部件穿著一件大衣

卓伊工程師卓伊工程師||6 分鐘閱讀
健康資料管線:三個部件穿著一件大衣
重點摘要

健康資料管線就是三個部件穿著一件大衣——感測器、轉換、交付——而真正值得爭論的工程藏在接縫處:單位不一致的地方,以及串流失敗安靜發生的地方。設計時要讓錯誤代價低,而不是假設錯誤不會發生。

健康資料管線是三個部件穿著一件大衣。感測器產生一筆讀數。轉換步驟把它變成資料庫願意接受的格式。交付層把它交給研究人員、臨床醫師或儀表板。每個部件有自己的方言、自己的故障模式,以及對「這個數字代表什麼」的各自意見。工程就住在接縫裡。

系統(它實際在做什麼)

剝掉行銷詞彙,管線就是一串自動化流程:從一個或多個來源擷取、轉換成目標結構、載入目的地。這就是經典的擷取—轉換—載入模式,而它的倒裝版——擷取—載入—轉換——如今在雲端資料倉儲很常見,因為儲存便宜、運算按秒計費。

健康資料讓這串流程更難。來源異質——穿戴裝置、電子病歷、檢驗系統、問卷——而且它們對單位、時間戳記、什麼算缺失各執一詞。管線真正的工作不是搬位元組,而是在不悄悄丟掉「讓資料值得收集」的資訊的前提下,調和這些分歧。建構在 FHIR 等標準上的團隊,心力正是花在這種調和上,因為一旦資料以同一種形狀抵達,科學問題反而是簡單的那部分。

每一層(感測器/模型/應用程式)

從感測器開始。手腕裝置對訊號取樣、套用自己的濾波、決定什麼算有效讀數。那個決定本身就是一個模型:動作、接觸、訊號品質的閾值,你從來看不到。感測器是誠實的;手腕不是個好量測點,韌體也知道。

接著是轉換,讀數被對應到標準本體上。結構化欄位和自由文字註記都需要調和,而調和規則正是相容性輸贏的地方。每分鐘心跳數和赫茲是同一種測量穿著不同衣服;管線若猜錯,會產生一個看似合理、卻差了六十倍的數字。

應用程式層是每個人都在看、卻沒有人稽核的那一層。它聚合、去重、補缺。每個動詞都藏著一個政策選擇。按時間戳記去重,假設時鐘一致。補缺假設缺失值是隨機的。這兩個假設都不是免費的。

邊界情況(有趣的地方)

邊界情況並不稀奇。它們就是星期二。裝置晚同步,讀數亂序抵達。參與者戴了兩個裝置,兩者每分鐘差十下。研究進行到一半時區變了。某筆記錄在結構描述預期整數的地方出現了散文。

調和就是在這裡證明自己的價值。把結構化和非結構化記錄都對應到共享本體的管線,能吸收原本會逼你手動處理的變異。但調和是翻譯,而翻譯會丟東西。該問的不是對應正不正確,而是這個對應讓哪些錯誤變便宜、哪些變昂貴。被丟掉的離群值,只要原始資料還在就救得回來。被悄悄強制轉換的單位,救不回來。

現代設計把監控放在管線本身周圍:確定性檢查標記異常,血緣追溯把壞值追回源頭,補救步驟是白名單制而非即興發揮。有風險的事由人核准,調查工作則已經先做好。

什麼會壞(以及為什麼知道有好處)

管線壞的方式很無聊。上游廠商出更新時結構描述漂移。憑證過期。上個月資料還管用的轉換,這回遇到程式碼預期字串的地方卻是空值。批次工作失敗得很大聲;串流工作失敗得很安靜,而這更糟。

有用的地方在於,每種故障模式都指向一個設計決定。如果一個結構描述變更就能拖垮整條管線,耦合就太緊了。如果壞值在任何人注意到之前就到達儀表板,檢查就位在損害的下游。階段之間鬆耦合——讓每一段能獨立演化——不是架構時尚,而是讓你能修一層而不必重新協商另外兩層的東西。

這些在順利時並不明顯,而這沒關係。一條會露出接縫的管線,是你修得動的管線。大衣做了很多事,但至少你看得見底下的三個部件。

常見問答

為什麼心跳讀數會差到六十倍?

因為每分鐘心跳數和赫茲用不同單位描述同一個訊號,而假設錯單位的對應會產生一個看起來完全合理的數字。下游沒有任何東西會標記它——數值在範圍內、型別正確,只有物理錯了。這就是為什麼單位強制轉換是我最不信任的故障。

串流真的比批次糟嗎?

不是糟,只是更安靜。失敗的批次工作留下你看得見的缺口。丟棄記錄的串流工作讓儀表板保持綠燈,資料集卻在底下變薄。如果你跑串流,檢查必須盯吞吐量和記錄數,不能只看錯誤。

原始資料該保留什麼?

能負擔的就全部保留,至少留到調和規則撐過幾個月的真實記錄。原始資料是你救回被丟棄離群值、重新推導被強制轉換單位的依據。一旦丟掉,每個對應決定就都成了永久決定。

在 MORLD 開始

如果你想看動作資料的乾淨參考長什麼樣子,打開 Morld 的 AB Motion Compare,上傳一段影片對照專業參考,然後逐關節讀 AI 分數——你的讀數和參考之間的落差,就是這篇文章談的同一個接縫問題,只是顯現在你自己的身體上。

相關文章