BLOG

[Techblog] Amazon HealthLake의 정규화된 데이터를 가지고 Amazon SageMaker를 사용해 예측 질병 모델 구축하기
작성일: 2021-01-20

오늘은 MIMIC-III 데이터세트를 통해 샘플 데이터를 학습한 두 가지 예측 질병 모델을 사용하여 Amazon SageMaker에서 Amazon HealthLake에 저장된 데이터로 기계 학습(ML) 모델을 구축하는 방법을 보여드리겠습니다. 이 데이터 세트는 전산 생리학을 위해 MIT 연구소에서 개발했으며, 약 60,000 건의 ICU 입원과 관련된 익명화된 의료 데이터로 구성됩니다. 데이터 세트에는 임상 기록과 함께 인구 통계, 활력 징후 및 약물과 같은 환자에 대한 여러 속성이 포함됩니다. 먼저 인구 통계, 활력 징후 및 약물과 같은 구조화된 데이터를 사용하여 모델을 개발합니다. 그 후 임상 기록에서 추출 및 정규화된 추가 데이터로 이러한 모델을 보강하여 성능을 테스트하고 비교합니다. 이 두 실험에서지도 학습(분류) 또는 비지도 학습(클러스터링) 문제로 모델링할 때 모델 성능이 향상되었음을 발견했습니다.

 

 

왜 여러 modality인가요?

Modality는 컴퓨터와 인간 사이의 하나의 독립적인 센서 입/출력의 분류로 정의 할 수 있습니다. 예를 들어, 우리는 감각을 사용하여 사물을 보고 소리를 들을 수 있습니다. 이것들은 두 개의 별개의 modality로 간주될 수 있습니다. 여러 양식을 나타내는 데이터 세트는 다중 모드 데이터 세트로 분류됩니다. 예를 들어 이미지는 검색 및 구성에 도움이 되는 태그로 구성될 수 있으며 텍스트 데이터에는 이미지에 있는 내용을 설명하는 이미지가 포함될 수 있습니다. 의사가 임상 결정을 내릴 때 일반적으로 다양한 의료 데이터 양식에서 수집된 정보를 기반으로 합니다. 의사는 환자의 관찰, 과거 이력, 스캔 및 방문 중 환자의 신체적 특징을 살펴보고 확실한 진단을 내립니다. ML 모델은 실제 성능을 달성하려고 할 때 이 점을 고려해야 합니다.  Building a medical image search platform on AWS(AWS에서 의료 이미지 검색 플랫폼을 구축하기) 게시글을 보시면 이미지와 해당 방사선 보고서의 기능을 결합하여 의료 이미지 검색 플랫폼을 만드는 방법에 대해 확인해 보실 수 있습니다. 이러한 모델을 생성하는 데 있어 문제는 다중 모드 데이터 세트를 사전 처리하고 여기에서 적절한 기능을 추출하는 것입니다.

 

 

Amazon HealthLake를 사용하면 다중 modal 데이터에 대한 모델 학습이 더 쉬워집니다. 

Amazon HealthLake는 의료 서비스 제공 업체, 건강 보험 회사 및 제약 회사가 AWS 클라우드에서 페타 바이트 규모로 건강 데이터를 저장, 변환, 쿼리 및 분석 할 수 있도록 지원하는 HIPAA 적격 서비스입니다. 변환의 일부로 Amazon HealthLake는 특수 ML 모델을 사용하여 비정형 데이터에 태그를 지정하고 인덱싱합니다. 이러한 태그와 인덱스는 분석을 위해 데이터의 관계를 이해하고 쿼리 및 검색하는 데 사용할 수 있습니다.

 

Amazon HealthLake에서 데이터를 내보내면 호출된 리소스 DocumentReference가 출력에 추가됩니다. 이 리소스는 임상 개체(예: 약물, 의학적 상태, 해부학 및 보호 된 건강 정보 (PHI)), 약물에 대한 RxNorm 코드 및 환자에 대한 구조화되지 않은 메모에서 자동으로 파생되는 의료 상태에 대한 ICD10 코드로 구성됩니다. 이는 임상 기록의 구조화되지 않은 부분에 포함 된 환자에 대한 추가 속성이며 다운 스트림 분석에서는 대체로 무시되었을 것입니다. EHR의 구조화된 데이터를 이러한 속성과 결합하면 환자, 그리고 환자의 상태에 대한 보다 전체적인 그림을 제공합니다. 이러한 속성의 가치를 결정하는 데 도움이 되도록 임상 결과 예측에 대한 몇 가지 실험을 만들어 보았습니다.

 

 

아키텍처 개요

다음 다이어그램은 우리의 실험 아키텍처를 보여줍니다.

 

내보내기 API를 사용하여 정규화된 데이터를 Amazon Simple Storage Service(Amazon S3) 버킷으로 내보낼 수 있습니다. 그런 다음 AWS Glue 를 사용하여 데이터 카탈로그를 크롤링하고 구축합니다. 이 카탈로그는 Amazon Athena 에서 공유하여 Colossus에서 내 보낸 데이터에서 직접 쿼리를 실행합니다. Athena는 또한 간편한 쿼리를 위해 JSON 형식 파일을 행과 열로 정규화합니다. DocumentReference 리소스 JSON 파일은 별도로 처리되어 환자 레코드의 구조화되지 않은 부분에서 하생된 인덱스 데이터를 추출합니다. 파일은 환자 속성으로 구성된 계층적 JSON 출력이 있는 extension 태그로 구성됩니다. 이 파일을 처리하는 방법에는 여러 가지가 있습니다((Python 기반 JSON 파서 사용 또는 문자열 기반 정규식 및 패턴 일치 사용). 구현에 대한 예시를 확인하시려면 Population health applications with Amazon HealthLake – Part 1: Analytics and monitoring using Amazon QuickSight(Amazon HealthLake를 이용한 인구 보건 애플리케이션–1 부: Amazon QuickSight를 사용한 분석 및 모니터링) 게시글의 ‘HealthLake와 Athena 연결하기’ 섹션을 참조하십시오.

 

 

예시 설정

MIMIC-III 데이터 세트에 액세스하려면 액세스를 요청해야합니다. 여기선 또한 데이터를 배포하지 않고, MIMIC-III에 액세스할 수 있을 때 이러한 실험을 복제 할 수 있도록 설정하는 단계를 알려드립니다. 더불어 그 결과와 그로 인해 얻은 결론에 대해서도 말씀 드리겠습니다.   

 

첫 번째 실험에서는 울혈성 심부전(CHF) 환자를 예측하기 위한 이진 질환 분류 모델을 구축합니다. 우리는 구조화 된 환자 기록과 구조화되지 않은 환자 기록 모두에 대해 정확성, ROC 및 혼동 매트릭스를 사용하여 성능을 측정합니다. 두 번째 실험에서는 환자 코호트를 고정된 수의 그룹으로 클러스터링하고 구조화되지 않은 환자 기록을 추가하기 전후의 클러스터 분리를 시각화합니다. 두 실험 모두에서 기준 모델을 구축하고 이를 다중 모드 모델과 비교합니다. 여기서 기존의 구조화 된 데이터를 학습 세트의 추가 기능 (ICD-10 코드 및 Rx-Norm 코드)과 결합합니다.

 

이러한 실험은 실제 데이터 세트에서 최신 모델을 생성하기 위한 것이 아닙니다. 그 목적은 구조화된 환자 기록과 구조화되지 않은 환자 기록에 대한 모델 훈련을 위해 Amazon Healthlake에서 내 보낸 기능을 활용하여 전체 모델 성능을 개선하는 방법을 보여주는 것입니다.

 

 

기능 및 데이터 정규화

우리는 모델을 훈련하기 위해 환자 만남과 관련된 다양한 기능을 사용했습니다. 여기에는 환자 인구 통계(성별, 결혼 여부), 임상 상태, 절차, 약물 및 관찰이 포함되었습니다. 각 환자는 여러 관찰, 임상 조건, 절차 및 약물로 구성된 여러 만남을 가질 수 있기 때문에 데이터를 정규화하고 이러한 각 기능을 목록으로 변환했습니다. 이를 통해 각 환자에 대해 이러한 모든 기능(목록)이 포함된 교육 세트를 얻을 수 있었습니다.

 

마찬가지로 Amazon Healthlake가 DocumentReference리소스로 변환한 구조화되지 않은 기능의 경우 ICD-10 코드와 Rx-Norm 코드(아키텍처에 설명 된 방법 사용)를 추출하여 기능 벡터로 변환했습니다.

 

 

기능 엔지니어링 및 모델

데이터 세트의 범주형 속성의 경우 레이블 인코더를 사용하여 속성을 숫자 표현으로 변환했습니다. 다른 모든 목록 속성의 경우 FI-IDF (frequency-inverse document frequency) 벡터라는 용어를 사용했습니다. 그런 다음이 고차원 데이터 세트를 섞고 모델 학습 및 평가를 위해 각각 80 % 훈련 및 20 % 테스트 세트로 분할했습니다. 모델을 훈련하기 위해 그라디언트 부스팅 라이브러리 XGBoost를 사용했습니다. 우리의 목표는 구조화된 환자 기록으로 기준 모델을 훈련한 다음, 구조화되지 않은 기능으로 결과를 개선하는 것이었기 때문에 대부분 기본 하이퍼 파라미터를 고려하고 하이퍼 파라미터 튜닝을 수행하지 않았습니다. 더 나은 하이퍼 파라미터를 채택하거나 다른 기능 엔지니어링 및 모델링 접근 방식으로 변경하면 이러한 결과를 개선할 수 있습니다.

 

 

예시1) 울혈성 심부전 환자 예측

첫 번째 실험에서는 CHF 진단이 양성인 500 명의 환자를 대상으로 했습니다. 음성 분류의 경우 CHF 진단을 받지 않은 500명의 환자를 무작위로 선택했습니다. CHF와 직접적으로 관련된 양성 환자군에서 임상 상태를 제거했습니다. 예를 들어, 양성 등급의 모든 환자는 CHF를 나타내는 ICD-9 코드 428을 가질 것으로 예상되었습니다. 모델이 임상 조건에 과적 합하지 않도록 하기 위해 양성 클래스에서 필터링했습니다.

 

 

기준 모델

기준 모델의 정확도는 85.8 %였습니다. 다음 그래프는 ROC 곡선을 보여줍니다.

 

다음 그래프는 혼동 행렬을 보여줍니다.

 

Amazon HealthLake 증강 모델

Amazon HealthLake 증강 모델의 정확도는 89.1 %였습니다. 다음 그래프는 ROC 곡선을 보여줍니다.

다음 그래프는 혼동 행렬을 보여줍니다.

 

Amazon HealthLake에서 추출한 기능을 추가하면 모델 정확도가 85 %에서 89 %로 향상되고 AUC도 0.86에서 0.89로 향상되었습니다. 두 모델에 대한 혼동 행렬을 보면 위양성이 20에서 13으로 감소하고 위음성이 27에서 20으로 감소했습니다.

 

건강 관리를 최적화하는 것은 환자가 동료 및 올바른 코호트와 연결되도록 하는 것입니다. 환자 데이터가 추가되거나 변경됨에 따라 전반적인 치료 품질 개선을 위해 위음성 및 양성 식별자를 지속적으로 식별하고 줄이는 것이 중요합니다.

성능 향상을 더 잘 설명하기 위해 첫 번째 모델의 위음성 코호트에서 두 번째 모델에서 참 양성으로 이동 한 환자를 선택했습니다. 다음 이미지와 같이 첫 번째 및 두 번째 모델에 대해 이 환자의 상위 건강 상태에 대한 단어 구름을 플로팅했습니다.

 

Amazon HealthLake의 기능 추가 전후에 환자의 건강 상태에는 분명한 차이가 있습니다. 모델 2의 단어 모음은 모델 1의 단어모음 보다 CHF를 나타내는 조건의 의학적 단어들이 더 풍부합니다. Amazon HealthLake에서 추출된 이 환자에 대한 구조화되지 않은 노트에 저장된 데이터는, 그가 잘못된 음성 범주에서 올바른 양성으로 이동하는 것을 도왔습니다.

 

이 수치는 MIMIC-III 환자의 하위 집합에서 사용한 합성 실험 데이터를 기반으로합니다. 환자 수가 많은 실제 시나리오에서는 이 숫자가 다를 수 있습니다.

 

 

예시 2) 패혈증으로 진단된 환자 그룹화

두 번째 실험에서는 패혈증 진단 양성인 500 명의 환자를 대상으로 했습니다. 우리는 k- 평균 클러스터링을 사용하여 구조화된 임상 기록을 기반으로 이러한 환자를 그룹화했습니다. 이것이 반복 가능한 패턴임을 보여주기 위해 실험 1에 설명된 것과 동일한 기능 엔지니어링 기술을 선택했습니다. 비지도 학습 알고리즘을 구현했기 때문에 데이터를 훈련 및 테스트 데이터 세트로 나누지 않았습니다.

 

먼저 Elbow 방법을 사용하여 그룹화의 최적 클러스터 수를 분석하고 다음 그래프에 표시된 곡선에 도달했습니다.

이를 통해 6 개의 군집이 환자 그룹에서 최적의 수임을 확인할 수 있었습니다.

 

기준 모델

PCA (Principal Component Analysis)를 사용하여 입력 데이터의 차원을 2로 줄이고 다음 산점도를 플로팅했습니다.

 

다음은 각 군집의 환자 수입니다.

클러스터 1
환자 : 44

클러스터 2
환자 : 30

클러스터 3
환자 : 109

클러스터 4
환자 : 66

클러스터 5
환자 : 106

클러스터 6
환자 : 145

 

우리는 6 개 군집 중 최소 4 개가 환자가 뚜렷하게 겹치는 것을 발견했습니다. 즉, 구조화된 임상적 특징으로는 환자를 6 개 그룹으로 명확하게 나누기에 충분하지 않았습니다.

 

 

향상된 모델

향상된 모델의 경우 Amazon HealthLake에서 추출한대로 ICD-10 코드와 각 환자에 대한 해당 설명을 추가했습니다. 그러나 이번에는 환자 그룹의 명확한 분리를 볼 수 있었습니다.

 

또한 6 개 클러스터에 걸친 분포의 변화를 확인했습니다.

클러스터 1
환자 : 54

클러스터 2
환자 : 154

클러스터 3
환자 : 64

클러스터 4
환자 : 44

클러스터 5
환자 : 109

클러스터 6
환자 : 75

 

보시다시피, 환자에 대한 구조화되지 않은 데이터의 특징을 추가하면 클러스터링 모델을 개선하여 환자를 6 개의 클러스터로 명확하게 나눌 수 있습니다. 우리는 일부 환자가 클러스터를 가로 질러 이동하는 것을 보았는데, 이는 모델이 구조화되지 않은 임상 기록을 기반으로 해당 환자를 더 잘 인식하게 되었음을 나타냅니다.

 

 

결론

이렇게 SageMaker를 사용하여 Amazon HealthLake의 데이터에 ML 모델을 쉽게 구축하는 방법을 시연하며, 질병 예측 모델의 정확성을 개선하기 위해 구조화되지 않은 임상 기록의 데이터를 보강하는 이점도 입증해 보았습니다.  이를 통해 Amazon HealthLake에 저장 및 정규화 된 데이터로 SageMaker를 사용하여 ML 모델을 구축하고 임상 결과 예측을 위해 모델 성능을 개선하는 방법을 배우고 도움이 되는 시간이셨기를 바랍니다.

 

 Amazon HealthLake에 대해 더욱 알고 싶으시다면, 웹 사이트 및 기술 문서를 확인해 주시기 바랍니다.

원문URL: https://aws.amazon.com/ko/blogs/machine-learning/building-predictive-disease-models-using-amazon-sagemaker-with-amazon-healthlake-normalized-data/

 

메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글이나 관련 기사 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.