轉換匹配患者記錄,看Amazon Lake Formation FindMatches顯神通!

亞馬遜雲開發者發表於2022-01-22

患者匹配是實現醫療護理互通性的主要障礙之一。不匹配的患者記錄和無法檢索患者歷史資訊可能嚴重阻礙做出正確的臨床決定,並導致漏診或治療延誤。另外,醫療護理提供者經常會花精力去處理患者重複資料的刪除,尤其當他們的資料庫中的患者記錄數量急速增加時。電子健康記錄 (EHR) 近年來大幅優化了患者的安全和護理協調,但準確的患者匹配對很多醫療護理組織來說仍然是一項挑戰。

重複的患者記錄會因為各種原因產生,包括人為生成記錄的插入、刪除、替換,或轉置錯誤。雖然光學字元辨識 (OCR) 軟體會將患者記錄數字化,但也可能引入錯誤。

我們可以採用多種記錄匹配演算法來解決此問題。它們包括:基本確定性法(如分組和比較相關欄位,包括 SSN、姓名或出生日期等)、語音編碼系統,以及更高階的使用機器學習 (ML) 的演算法。

Amazon Lake Formation 是一項符合 HIPAA 要求的服務,可幫助您在若干簡單的步驟內構建安全的資料湖。Lake Formation 還內建 FindMatches,這項 ML 轉換功能讓您可以在不同的資料集中匹配記錄,並且識別與移除重複的記錄,但需要較少,甚至完全不需要任何人為干預。

本文將向您介紹如何使用 FindMatches ML 轉換在綜合生成的資料集裡識別匹配的患者記錄。要使用 FindMatches,您無需編寫程式碼或瞭解 ML 的運作方式。如果沒有可靠的唯一個人識別符號,在資料中查詢匹配將變得非常實用,即使其欄位不完全匹配。

患者資料集

由於其具有敏感性質,不同國家採用各種法規對患者資料進行管理。此現狀導致了用於訓練匹配演算法的患者資料通常較為缺乏,讓模型的開發變得更加複雜。繞開此類挑戰的常見辦法,即使用綜合資料。本文將基於 Open Source Freely Extensible Biomedical Record Linkage Program (FEBRL) 生成患者資料。FEBRL 採用隱馬爾可夫模型 (HMM) 為患者記錄匹配準備姓名和地址資料。它還允許對導致重複的現實患者資料集進行模擬,這些重複資料可能有以下不匹配型別:

1.空白欄位。

2.排版錯誤,如拼寫錯誤、字元轉置或欄位調換等。

3.縮寫中間名和記錄完整中間名。

4.不同格式的郵寄地址。

5.與 OCR 相關的錯誤。

6.語音錯誤。

7.無全域性唯一患者或個人識別符號。每一個醫療護理提供商都可能為相同人員分配一個患者識別符號,但它或許並非類似於 SSN 的個人識別符號,因此,他們有資料集但沒有鍵。

FEBRL 可以根據可配置的引數生成此類資料集,以改變發生每種錯誤的可能性,進而涵蓋導致重複的各種情形。綜合資料集的生成不在本文的討論範圍之內;本文將提供一個預生成的資料集以供您探索之用:

https://aws-bigdata-blog.s3.a...

簡而言之,以下是用於執行 FindMatches 的綜合資料集的生成步驟:

1.下載並安裝 FEBRL。

2.修改引數以建立資料集,對您的預期進行模擬。如需更多資訊,見 FEBRL 資料集生成說明:

https://github.com/J535D165/F...

3.清理資料集(此舉將為每一條記錄確認相同的架構,並移除單引號和家庭角色)。

本文資料集使用的 Amazon 區域為美國東部(弗吉尼亞北部)。

FRBRL 患者資料結構

下表顯示 FEBRL 患者資料的結構。此類資料包含 40000 條記錄。

image.png

原始記錄和重複記錄會被分到一組。以特定的格式生成 patient_id

rec-<record number>-org/dup-<duplicate record number>

下表是您在努力使用 FindMatches ML 轉換所要達成目標的預覽。在對資料集進行匹配以後,生成的表將反映輸入表的結構和資料,並新增 match_id 列。匹配的記錄顯示相同的 match_id 值。誤報和漏報依然有可能發生,但轉換的好處也顯而易見。

image.png

先決條件

本文的示例綜合患者資料集採用美國東部(弗吉尼亞北部)區域,因此本文提到的所有步驟都必須在相同的 Amazon 區域(即 us-east-1)內執行;但如果資料在其他區域,您可以非常輕鬆地對步驟進行修改。

解決方案架構

下圖顯示了該解決方案的架構。

image.png

解決方案概覽

在巨集觀層面上,匹配流程包括以下步驟:

1.在 Amazon S3 儲存桶上上傳csv格式的原始患者資料集

2.使用 Amazon Glue 爬網程式對上傳的患者資料集進行爬網

3.使用 Amazon Glue 資料目錄將您的患者資料編入目錄,並建立 FindMatches ML 轉換。

4.通過 ML 轉換或以手動方式建立標籤集,然後提供匹配和非匹配記錄的標籤示例,以便對 FindMatches 進行訓練。上傳您的標籤,並估計預測的質量。按要求新增更多標籤集並重復此步驟,以獲得所需的查準率、準確率和召回率。

5.建立並執行使用您的 FindMatches 轉換的 Amazon Glue ETL 作業。

6.在 Amazon S3 儲存桶上儲存 FindMatches 轉換的結果

7.建立 FindMatches ML 轉換結果的 Amazon Glue 資料目錄。

8.使用 Amazon Athena 檢查轉換結果。

將您的資料編入目錄,並建立 FindMatches ML 轉換

FindMatches 在 Amazon Glue 資料目錄內定義的表上執行。使用 Amazon Glue 爬網程式以發現患者資料並將其編入目錄。您可以使用為本文生成的 FEBRL 患者資料:

https://aws-bigdata-blog.s3.a...

下方提供的 Cloudformation 堆疊會在 Amazon 區域- us-east-1(美國東部(弗吉尼亞北部))內建立資源

要在 Amazon Glue 中建立目錄和 FindMatches ML 轉換,啟動以下堆疊:

image.png

此堆疊會建立以下資源:

1.儲存 ML 轉換結果的 Amazon S3 儲存桶(可作為啟動的一部分進行配置)。您可以在 Amazon CloudFormation 堆疊控制檯的輸出下方找到儲存桶的名稱。本文使用名稱 S3BucketName

image.png

2.允許 Amazon Glue 訪問其他服務(包括 S3)的 IAM 角色。

3.Amazon Glue 資料庫(可作為啟動的一部分進行配置)。

4.內含“公開原始綜合患者資料集”的 Amazon Glue 表(可作為啟動的一部分進行配置)。

5.Amaozn Glue ML 轉換,源作為您的 Amazon Glue 表,準確率設為 1,而精度設為 0.9。

如需更多資訊,見使用 Amazon Lake Formation FindMatches 整合資料集並刪除重複資料:

https://amazonaws-china.com/b...

ML 轉換調優

誤報匹配的安全風險(即讓臨床醫生誤以為關於患者的錯誤資訊是準確的)可能比漏報匹配(即臨床醫生未能訪問關於患者的現有資訊)的安全風險更大。(如需更多資訊,見 NCBI 網站上的相關研究。) 因此,將召回率 vs.精度滑塊移向精度一邊可提高置信度,以識別記錄是否屬於相同的患者,並在最大程度上降低誤報匹配的安全風險。

更高的準確率設定有助於提高召回率,但代價是需要更長的執行時間(和成本)對更多記錄進行必要的比較。

要針對此特定資料集獲取相對更優的結果,啟動堆疊已為您建立轉換,召回率 vs.精度滑塊設為 0.9 並偏向精度一邊,低成本 vs.準確率滑塊設為準確率。如有必要,您可以在稍後通過選擇轉換並使用調優選單調整此類值。

使用標籤資料訓練 FindMatches

在成功啟動堆疊以後,您可以通過提供採用標籤集的匹配與非匹配記錄對轉換進行訓練。

建立標籤集

您可以自行建立標籤集,或允許 Amazon Glue 基於啟發式演算法生成標籤集。

Amazon Glue 會從您的源資料提取記錄,並建議可能的匹配記錄。生成的標籤集檔案包含大約 100 個供您操作的資料樣本。

本文為您提供可以使用的由 Amazon Glue 生成的標籤資料檔案,其中的標籤列已填充完整的資料。您可以隨時使用此檔案。

若選擇使用本文中提供的預生成標籤資料檔案,請跳過下方的標籤檔案生成步驟

要建立訓練集,執行以下步驟:

1.在 Amazon Glue 控制檯的 ETL、作業和 ML 轉換下方,您將可以看到由提供的堆疊為您建立的名為 cfn-findmatches-ml-transform-demo 的 ML 轉換

2.選擇 ML 轉換 cfn-findmatches-ml-transform-demo ,然後單擊操作並選擇訓練轉換

3.對於使用標籤訓練轉換,選擇我沒有標籤

4.選擇生成標籤檔案

5.提供用於儲存生成標籤檔案的 S3 路徑。

6.選擇下一步

image.png

下表顯示了生成的標籤資料檔案,其中的label列為空。

image.png

您需要標記與相同值真實匹配的記錄,以便填充 label 列。每個標籤集都應包含正負匹配示例。

本文為您提供可以使用的標籤資料檔案,其中的 label 列已填充完整的資料。您可以隨時使用此檔案。

下表顯示的表已完整填充 label 列。

image.png

標籤檔案採用與輸入資料一樣的架構,以及兩個額外的列:labeling_set_id id 和 label

訓練資料集可被分為多個標籤集。每個標籤集都顯示 labeling_set_id 值。此標識方法簡化了標籤新增流程,讓您可以專注於在相同標籤集內匹配記錄關係,而不用對整個檔案進行掃描。對於上述資料集,通過使用正規表示式移除字首 -org 和 -dup,從 patient_id 提取標籤值。但總得來說,您要根據基於屬性值應匹配的記錄來分配此類標籤。

如果為一個標籤集內的兩個或更多記錄指定相同的標籤,則您在訓練 FindMatches 轉換將這些記錄視作匹配。而在另一方面,當相同標籤集內的兩個或更多記錄有不同的標籤時,FindMatches 會學習不要把這些記錄當做匹配。轉換在相同標籤集而不會跨不同標籤集評估記錄之間的記錄關係。

您應該為數百條記錄新增標籤以實現適當的匹配質量,而數千條記錄則能獲得更高的匹配質量。

上傳您的標籤並檢查匹配質量

在您建立標籤資料集(需採用 .csv 格式)以後,訓練 FindMatches 在什麼地方進行查詢。請執行以下步驟:

1.在 Amazon Glue 控制檯上,選擇您在之前建立的轉換。

2.選擇操作

3.選擇訓練轉換

4.對於上傳標籤,選擇我有標籤

5.選擇從 S3 上傳標籤檔案

6.選擇下一步

image.png

7.如果您想要使用本博文中提供的標籤集,在此處下載標籤集:

https://aws-bigdata-blog.s3.a...

8.在由上述已啟動的 cloudformation 模板建立的相同 S3 儲存桶中,建立一個名為訓練集的資料夾。

9.在相同的 S3 儲存桶中,上傳上述位於訓練集的標籤集。

10.選擇覆蓋我的現有標籤。您只能使用一個標籤集。若反覆新增標籤,選擇附加到我的現有標籤選項。

11.選擇上傳。在上傳標籤以後,您現在隨時可以使用轉換。雖然不是硬性要求,但您可以通過檢查匹配和非匹配記錄來確定轉換匹配的質量。

12.選擇估計轉換質量。轉換質量估計將使用您的標籤中的 70% 進行學習。在訓練完成以後,質量估計將針對剩餘的 30% 測試轉換學到的識別匹配記錄的能力。最後,轉換會比較由演算法和您的實際標籤預測的匹配和非匹配,以便生成質量指標。此過程可能長達數分鐘。

您的結果應與以下截圖中的情況類似。

image.png

將這些指標視作近似值,因為測試只會使用資料的一小部分子集估計匹配的質量。若您對指標感到滿意,繼續建立並執行記錄匹配作業。或者,上傳更多標籤記錄以進一步改善匹配質量。

建立並執行 Amazon Glue ETL 作業

在建立 FindMatches 轉換並驗證它已學會識別您的資料中的匹配記錄以後,您就可以在您的完整資料集中識別匹配。要建立並執行記錄匹配作業,執行以下步驟:

1.在 S3 儲存桶內建立一個 transformresults 資料夾,該儲存桶由 Amazon CloudFormation 模板在您啟動堆疊時建立。此資料夾將儲存您的 Amazon Glue 作業的 ML 轉換的結果。

2.在 Amazon Glue 控制檯的作業下方,選擇新增作業

3.在配置作業屬性下方的名稱中,輸入作業的名稱。

4.對於 IAM 角色,在下拉選單中選擇您的角色。選擇由 Amazon CloudFormation 堆疊建立的名為 AWSGlueServiceRoleMLTransform 的 IAM 角色。如需更多資訊,見為 Amazon Glue 建立 IAM 角色:

https://docs.aws.amazon.com/g...

5.選擇 Spark 作為型別,Glue 版本為 Spark 2.2,Python 2(Glue 版本 0.9)

6.為作業執行選擇 Amazon Glue 生成的建議指令碼

image.png

7.在選擇一個資料來源中,選擇轉換資料來源。本文使用資料來源 cfn_table_patient

image.png

8.在選擇轉換型別下方,選擇查詢匹配記錄

9.對於工作執行緒型別,選擇 G.2X

10.對於工作執行緒數量,輸入 10。您可以根據資料集的大小填寫更大數字,以便新增更多工作執行緒。

image.png

11.要檢查被識別為重複的記錄,不要選擇移除重複記錄

12.選擇下一步

13.選擇由您建立的轉換。

14.選擇下一步

15.對於選擇一個資料目標,選擇在資料目標中建立表格

16.對於資料儲存,選擇 Amazon S3

17.對於格式,選擇 CSV

18.對於壓縮型別,選擇

19.對於目標路徑,選擇作業輸出的路徑。目標路徑是由 Amazon CloudFormation 建立的 S3 儲存桶,以及您在之前建立的名為transformresults 的資料夾。

20.選擇儲存作業並編輯指令碼

image.png

現已為您的作業生成指令碼,並隨時可供使用。或者,您也可以進一步對指令碼進行自定義,以滿足您的具體 ETL 需求。

21.要開始識別此資料集中的匹配,選擇如下方螢幕所示執行作業。暫時保留作業引數的預設設定,並在啟動作業後關閉此頁面。以下截圖顯示的是由 Amazon Glue 使用 ML 轉換而生成的建議 Python Spark 指令碼。

image.png

如果執行成功,FindMatches 將顯示執行狀態為 Succeeded。執行可能需要數分鐘才會結束。

FindMatches 會將您的輸出資料作為分段 .csv 檔案儲存於您在作業建立期間指定的目標路徑。生成的 .csv 檔案反映了輸入表的結構和資料,而且內有 match_id 列。匹配的記錄顯示相同的match_id 值。

建立您的轉換結果的資料目錄

要檢視輸出,您可以直接從 S3 儲存桶下載分段 .csv 檔案並在編輯器中檢視,或者您也可以使用 Athena 對儲存在 S3 上的資料執行類似 SQL 的查詢。要通過 Athena 檢視資料,您需要對資料夾以及由您建立的作為 FindMatches ETL 作業輸出一部分的分段 .csv 檔案進行爬網。

轉至 Amazon Glue,使用現有資料庫中的 Amazon爬網程式為患者匹配建立一個新表格,此表中有來自您的 FindMatches ETL 作業輸出的記錄,並且以包含分段 .csv 檔案的 S3 儲存桶資料夾作為源資料。在本文中,源資料為由 Amazon CloudFormation 堆疊建立的儲存桶中的資料夾 transformresults

要建立爬網程式,執行以下步驟:

1.在 Amazon Glue 控制檯的資料目錄下方,選擇爬網程式。

2.單擊新增爬網程式以建立新的爬網程式,對轉換結果進行爬網。

3.提供爬網程式的名稱,並單擊下一步

4.選擇資料儲存作為爬網程式源型別,並單擊下一步。

5.在新增資料儲存部分的選擇一個資料儲存中,選擇 S3

6.對於爬網資料位置,選擇我的賬戶中的指定路徑

7.在包含路徑下方,輸入您的路徑的名稱。它應該是之前由 cloudformation 建立的相同 S3 儲存桶,以及由您建立的名為 transformresults 的資料夾。驗證資料夾中有已建立的分段 csv 檔案。

8.選擇下一步

image.png

9.在選擇一個 IAM 角色部分,選擇選擇 IAM 角色

10.對於 IAM 角色,輸入爬網程式的名稱。

11.選擇下一步

image.png

12.對於頻率,選擇按需執行

13.配置爬網程式的輸出,將資料庫設為cfn-database-patient。

14.將新增到表格的字首的值設為 table_results_。這樣做將有助於識別包含轉換結果的表。

15.單擊結束

16.選擇相同的爬網程式,並單擊執行爬網程式。在成功執行爬網程式以後,您應該看到已建立的,而且與您在爬網程式配置期間選擇的相應資料庫中的爬網程式對應的新表格。

17.在 Amazon Glue 控制檯的資料庫下方,選擇

18.選擇操作

19.選擇編輯表詳細資訊

image.png

20.在Serde序列化庫的下方輸入:

org.apache.hadoop.hive.serde2.OpenCSVSerde

21.在 Serde 引數下方,新增鍵 escapeChar,其值為 \。

22.新增鍵 quoteChar,其值為 "(半形雙引號)。

23.設定鍵 field.delim,值為 ,

24.新增鍵 separatorChar,值為,

image.png

您可以根據基於所擁有資料集的型別的要求設定 Serde 引數。

25.通過將所有列的資料型別設為 String,對錶的架構進行編輯。要編輯表的架構,單擊表格,然後單擊編輯架構按鈕。

您還可以根據您的要求,選擇按爬網程式保留推斷資料型別。為了簡單起見,本文將全部都設為 String資料型別,但 match_id 列除外,它被設為 bigint

使用 Amazon Athena 檢查輸出

要使用 Amazon Athena 檢查輸出,執行以下步驟:

1.在資料目錄中,選擇

2.選擇由您的爬網程式為結果建立的表的名稱。

3.選擇操作

4.選擇檢視資料

image.png

Athena 控制檯將會開啟。 如果首次執行 Amazon Athena,您可能必須單擊開始。在首次執行查詢前,您還將需要設定查詢結果在 Amazon S3 中的位置。在 Amazon Athena 控制檯上單擊設定查詢結果在 Amazon S3 中的位置,然後設定查詢結果的位置。您可以在之前由 cloudformation 建立的相同 Amazon S3 儲存桶中建立更多資料夾。請確保 S3 路徑以 / 結尾。

5.選擇適當的資料庫。在本文中,選擇 cfn-database-patient。如果未在下拉選單中看到該資料庫,您可能需要重新整理資料來源。

6.選擇包含 FindMatches 輸出的結果表,而且此表中有患者記錄和 match_id 列。在此例中就是 table_results_transformresults。如果您為該結果表選擇了不同的名稱,需要更改以下查詢以反映正確的表名稱。

7.選擇執行查詢,以執行以下查詢。

SELECT * FROM "cfn-database-patient"."table_results_transformresults" order by match_id;

以下截圖顯示的是您的輸出。

image.png

image.png

安全注意事項

Amazon Lake Formation 通過為您提供一箇中心位置來幫助保護您的資料;無論使用哪項服務進行訪問,您都可以在此位置中配置精細資料訪問策略

要使用 Lake Formation 集中資料訪問策略控制,首先關閉對您在 S3 中儲存桶進行直接訪問的許可權,以便 Lake Formation 管理所有的資料訪問。通過 Lake Formation 配置資料保護和訪問策略,該 Lake Formation 會在對您的資料湖中的資料進行訪問的所有 Amazon 服務中執行此類策略。您可以配置使用者和角色,並且定義這些角色可以訪問的資料,最低到表和列級別。

Amazon Lake Formation 提供基於簡單授予/撤銷機制的許可權模型。Lake Formation 許可權和 IAM 許可權結合,對訪問儲存於資料庫的資料和描述該資料的後設資料的許可權進行控制。如需更多資訊,見 Lake Formation 中的後設資料和資料的安全及訪問許可權控制:

https://docs.aws.amazon.com/l...

Lake Formation 目前支援 S3 上的伺服器端加密(SSE-S3、AES-265)。Lake Formation 還支援您的 VPC 中的私有終端節點,並記錄 Amazon CloudTrail 中的所有活動,為您提供網路隔離和可審計性。

Amazon Lake Formation 服務是一項符合 HIPAA 要求的服務。

小結

本文演示瞭如何使用 Lake Formation FindMatches ML 轉換在患者資料庫中查詢匹配的記錄。它讓您可以在兩個資料集中的記錄不採用相同的識別符號或包含重複資料時找到匹配。若欄位不完全匹配,或屬性缺失或損壞,此方法幫助您在資料集行之間查詢匹配。

您現在隨時可以通過 Lake Formation 開始構建,並對您的資料嘗試使用 FindMatches。

參考資料

Amazon Lake Formation:

https://amazonaws-china.com/l...

Open Source Freely Extensible Biomedical Record

Linkage Program (FEBRL):

https://github.com/J535D165/F...

Amazon Glue:

https://amazonaws-china.com/glue

Amazon Athena:

http://amazonaws-china.com/at...

Amazon S3:

http://amazonaws-china.com/s3

Amazon CloudFormation:

http://amazonaws-china.com/cl...

由 Amazon Glue 生成的標籤資料檔案:

https://aws-bigdata-blog.s3.a...

預生成標籤資料檔案:

https://aws-bigdata-blog.s3.a...

標籤資料檔案:

https://patient-matching-mltr...

Amazon CloudTrail:

http://amazonaws-china.com/cl...

符合 HIPAA 要求:

https://amazonaws-china.com/c...

本篇作者

image.png
Dhawalkumar Patel 
亞馬遜雲科技高階解決方案架構師
他一直就職於從大型企業到中型初創公司等組織,致力於解決與分散式計算和人工智慧有關的問題。目前,他正專注於研究機器學習和無伺服器技術。

image.png
Ujjwal Ratan
亞馬遜雲科技全球健康醫療與生命科學團隊首席機器學習專家解決方案架構師
他的主攻方向是機器學習及深度學習應用,以解決各種現實中的行業問題,例如,醫學成像、非結構化臨床文字、基因組學、精準醫學、臨床試驗和護理質量優化,等等。他擅長於擴充套件亞馬遜雲科技雲上的機器學習/深度學習演算法,以加快訓練和推導。在業餘時間,他喜歡欣賞(和彈奏)音樂,以及和家人來一場說走就走的公路旅行。

相關文章