Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

Amazon SageMaker Data Wrangler를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링

머신 러닝(ML)은 전례 없는 속도로 많은 산업을 파괴하고 있습니다. 의료 및 생명 과학(HCLS) 산업은 최근 몇 년 동안 ML을 수용하여 양질의 치료를 제공하고 환자 결과를 개선하기 위한 다양한 사용 사례에서 급속한 발전을 거듭해 왔습니다.

일반적인 ML 수명 주기에서 데이터 엔지니어와 과학자는 모델 구축 및 교육 프로세스를 시작하기 전에 데이터 준비 및 기능 엔지니어링 단계에 대부분의 시간을 보냅니다. 데이터 준비를 위한 진입 장벽을 낮추어 생산성을 향상시킬 수 있는 도구를 갖는 것은 이러한 페르소나에게 매우 바람직한 요구 사항입니다. Amazon SageMaker 데이터 랭글러 학습 곡선을 줄이고 데이터 실무자가 적은 노력과 시간으로 데이터 준비, 정리 및 기능 엔지니어링 작업을 수행할 수 있도록 AWS에서 특별히 구축했습니다. 많은 내장 기능이 있는 GUI 인터페이스와 다음과 같은 다른 AWS 서비스와의 통합을 제공합니다. 아마존 단순 스토리지 서비스 (Amazon S3) 및 Amazon SageMaker 기능 스토어, Snowflake 및 Databricks를 비롯한 파트너 데이터 원본도 포함됩니다.

이 게시물에서는 데이터 랭글러를 사용하여 환자의 인구 통계, 이전 의학적 상태 및 실험실 테스트 결과 기록을 고려하여 심부전을 예측하는 모델을 훈련하기 위한 의료 데이터를 준비하는 방법을 보여줍니다.

솔루션 개요

솔루션은 다음 단계로 구성됩니다.

  1. 데이터 랭글러에 대한 입력으로 의료 데이터 세트를 획득합니다.
  2. Data Wrangler의 기본 제공 변환 기능을 사용하여 데이터 세트를 변환하십시오. 여기에는 열 삭제, 데이터/시간 기능화, 데이터 세트 결합, 누락된 값 대치, 범주형 변수 인코딩, 숫자 값 크기 조정, 데이터 세트 균형 조정 등이 포함됩니다.
  3. Data Wrangler의 사용자 지정 변환 기능(Pandas 또는 PySpark 코드)을 사용하여 기본 제공 변환 외에 필요한 추가 변환을 보완하고 Data Wrangler의 확장성을 보여줍니다. 여기에는 필터 행, 데이터 그룹화, 조건에 따라 새 데이터 프레임 형성 등이 포함됩니다.
  4. Data Wrangler의 내장 시각화 기능을 사용하여 시각적 분석을 수행합니다. 여기에는 대상 누출, 기능 상관 관계, 빠른 모델 등이 포함됩니다.
  5. Data Wrangler의 기본 제공 내보내기 옵션을 사용하여 변환된 데이터 세트를 Amazon S3로 내보냅니다.
  6. Jupyter 노트북을 시작하여 Amazon S3의 변환된 데이터 세트를 모델 교육을 위한 입력으로 사용합니다.

데이터세트 생성

이제 ML 문제 설명을 결정했으므로 먼저 필요한 데이터를 얻는 데 초점을 맞춥니다. 등의 연구 심부전 예측 이미 양호한 상태의 데이터를 제공할 수 있습니다. 그러나 데이터가 매우 지저분하고 ML 교육에 사용하기 전에 의료 도메인에 매우 특정한 결합, 정리 및 기타 여러 변환이 필요한 시나리오가 자주 발생합니다. 우리는 충분히 지저분한 데이터를 찾거나 생성하고 Data Wrangler를 사용하여 데이터를 준비하는 단계를 안내합니다. 이를 염두에 두고 우리는 목표에 맞는 합성 데이터를 생성하기 위한 도구로 Synthea를 선택했습니다. 신시아 합성 환자의 병력을 모델링하는 오픈 소스 합성 환자 생성기입니다. 데이터세트를 생성하려면 다음 단계를 완료하세요.

  1. 에 따라 지침을 따르십시오 빠른 시작 만들기 위한 문서 아마존 세이지 메이커 스튜디오 도메인을 만들고 Studio를 시작합니다.
    이것은 전제 조건 단계입니다. Studio가 이미 계정에 설정되어 있는 경우 선택 사항입니다.
  2. Studio 실행 후 발사 장치 탭에서 시스템 터미널.
    그러면 작업할 명령줄 인터페이스를 제공하는 터미널 세션이 시작됩니다.
  3. Synthea를 설치하고 CSV 형식으로 데이터 세트를 생성하려면 시작된 터미널 세션에서 다음 명령을 실행하십시오.
    $ sudo yum install -y java-1.8.0-openjdk-devel
    $ export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.x86_64
    $ export PATH=$JAVA_HOME/bin:$PATH
    $ git clone https://github.com/synthetichealth/synthea
    $ git checkout v3.0.0
    $ cd synthea
    $ ./run_synthea --exporter.csv.export=true -p 10000

모집단 크기가 10,000인 데이터 세트를 생성하기 위한 매개변수를 제공합니다. 크기 매개변수는 인구의 살아있는 구성원 수를 나타냅니다. 또한 Synthea는 지정된 샘플 크기 위에 몇 가지 추가 데이터 포인트를 추가할 수 있는 인구의 죽은 구성원에 대한 데이터도 생성합니다.

데이터 생성이 완료될 때까지 기다리십시오. 이 단계는 일반적으로 약 XNUMX시간 또는 그 미만이 소요됩니다. Synthea는 다음을 포함한 여러 데이터 세트를 생성합니다. patients, medications, allergies, conditions, 그리고 더. 이 게시물에서는 결과 데이터 세트 중 세 가지를 사용합니다.

  • 환자.csv – 이 데이터 세트는 약 3.2MB이고 약 11,000행의 환자 데이터를 포함합니다(환자 ID, 생년월일, 성별, 주소 등을 포함한 25개 열).
  • 조건.csv – 이 데이터 세트는 약 47MB이며 약 370,000행의 의료 상태 데이터를 포함합니다(환자 ID, 상태 시작 날짜, 상태 코드 등을 포함한 XNUMX개 열).
  • 관찰.csv – 이 데이터 세트는 약 830MB이며 약 5백만 행의 관찰 데이터(환자 ID, 관찰 날짜, 관찰 코드, 값 등을 포함한 XNUMX개 열)를 포함합니다.

사이에는 일대다 관계가 있습니다. patientsconditions 데이터 세트. 또한 일대다 관계가 있습니다. patientsobservations 데이터 세트. 자세한 데이터 사전은 다음을 참조하십시오. CSV 파일 데이터 사전.

  1. 생성된 데이터 세트를 Amazon S3의 소스 버킷에 업로드하려면 터미널 세션에서 다음 명령을 실행합니다.
    $ cd ./output/csv
    $ aws s3 sync . s3://<source bucket name>/

데이터 랭글러 실행

왼쪽 메뉴에서 SageMaker 리소스 Studio의 탐색 페이지 및 프로젝트 메뉴, 선택 데이터 랭글러 Data Wrangler 데이터 흐름을 생성합니다. Studio 내에서 Data Wrangler를 시작하는 방법에 대한 자세한 단계는 다음을 참조하십시오. 데이터 랭글러 시작하기.

Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

데이터 가져 오기

데이터를 가져오려면 다음 단계를 완료하십시오.

  1. 왼쪽 메뉴에서 아마존 S3 S3 버킷에서 환자.csv 파일을 찾습니다.
  2. . 세부 정보 창, 선택 퍼스트케이 for 샘플링.
  3. 엔터 버튼 1100 for 표본의 크기.
    미리 보기 창에서 Data Wrangler는 데이터 집합에서 처음 100개 행을 가져와 미리 보기로 나열합니다.
  4. 왼쪽 메뉴에서 수입.
    Data Wrangler는 Synthea에서 생성한 총 환자(1,100행)에서 처음 11,000명의 환자를 선택하고 데이터를 가져옵니다. 샘플링 접근 방식을 사용하면 Data Wrangler가 샘플 데이터만 처리할 수 있습니다. 이를 통해 더 작은 데이터 세트로 데이터 흐름을 개발할 수 있으므로 처리 속도가 빨라지고 피드백 루프가 짧아집니다. 데이터 흐름을 생성한 후 개발된 레시피를 SageMaker 처리 전체 또는 더 큰 데이터 세트에 대한 처리를 분산 방식으로 수평 확장하는 작업입니다.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  5. 이 과정을 반복하십시오. conditionsobservations 데이터 세트.
    1. 다음 conditions 데이터 세트, 입력 37000 for 표본의 크기, 이는 Synthea에서 생성한 총 1개 행의 10/370,000입니다.
    2. 다음 observations 데이터 세트, 입력 500000 for 표본의 크기, 이는 Synthea에서 생성한 총 관찰 1만 행의 10/5입니다.

다음 스크린샷과 같이 XNUMX개의 데이터세트가 표시되어야 합니다.

Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

데이터 변환

데이터 변환은 데이터 세트에 있는 하나 이상의 열 구조, 값 또는 형식을 변경하는 프로세스입니다. 이 프로세스는 일반적으로 데이터 엔지니어가 개발하며 데이터 엔지니어링 기술이 작은 사람들이 변환을 위해 제안된 논리를 해독하는 데 어려울 수 있습니다. 데이터 변환은 광범위한 기능 엔지니어링 프로세스의 일부이며 올바른 단계 순서는 이러한 레시피를 고안할 때 염두에 두어야 할 또 다른 중요한 기준입니다.

Data Wrangler는 효과적인 데이터 준비를 위해 진입 장벽을 낮추는 로우 코드 도구로 설계되었습니다. 코드를 한 줄도 작성하지 않고 선택할 수 있는 300개 이상의 사전 구성된 데이터 변환이 함께 제공됩니다. 다음 섹션에서는 Data Wrangler에서 가져온 데이터 세트를 변환하는 방법을 살펴봅니다.

환자.csv에서 열 삭제

먼저 다음에서 일부 열을 삭제합니다. patients 데이터세트. 중복 열을 삭제하면 데이터 세트에서 관련 없는 정보가 제거되고 데이터 세트를 처리하고 모델을 훈련하는 데 필요한 컴퓨팅 리소스의 양을 줄이는 데 도움이 됩니다. 이 섹션에서는 SSN 또는 여권 번호와 같은 열에 예측 값이 없다는 상식에 따라 이러한 열을 삭제합니다. 다시 말해, 우리 모델이 심부전을 예측하는 데 도움이 되지 않습니다. 우리 연구는 또한 출생지나 의료비가 환자의 심부전에 미치는 영향과 같은 다른 컬럼에 대해서는 우려하지 않으므로, 역시 삭제합니다. 중복 열은 Data Wrangler에 기본 제공되는 대상 누출, 기능 상관 관계, 다중 공선성 등과 같은 기본 제공 분석을 실행하여 식별할 수도 있습니다. 지원되는 분석 유형에 대한 자세한 내용은 다음을 참조하십시오. 분석 및 시각화. 또한 다음을 사용할 수 있습니다. 데이터 품질 및 통찰력 보고서 제거할 중복 열 목록에 도달하기 위해 데이터 세트에 대한 자동화된 분석을 수행합니다.

  1. 옆에 있는 더하기 기호를 선택합니다. 자료형 환자.csv 데이터 세트에 대해 선택하고 변형 추가.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  2. 왼쪽 메뉴에서 단계 추가 선택하고 열 관리.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  3. 럭셔리 변환¸ 선택 열 삭제.
  4. 럭셔리 삭제할 열, 다음 열을 선택합니다.
    1. SSN
    2. DRIVERS
    3. PASSPORT
    4. PREFIX
    5. FIRST
    6. LAST
    7. SUFFIX
    8. MAIDEN
    9. RACE
    10. ETHNICITY
    11. BIRTHPLACE
    12. ADDRESS
    13. CITY
    14. STATE
    15. COUNTY
    16. ZIP
    17. LAT
    18. LON
    19. HEALTHCARE_EXPENSES
    20. HEALTHCARE_COVERAGE
  5. 왼쪽 메뉴에서 시사 변환된 데이터 세트를 검토한 다음 추가.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
    단계를 봐야 합니다. 열 삭제 변환 목록에 있습니다.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

환자.csv에 날짜/시간 표시

이제 날짜/시간 기능을 사용하여 새 기능을 생성합니다. Year 인사말 BIRTHDATEpatients 데이터세트. 후속 단계에서 새로운 기능을 사용하여 관찰 시점에서 환자의 나이를 계산합니다.

  1. . 변환 당신의 창 열 삭제 페이지 patients 데이터 세트, 선택 단계 추가.
  2. 선택 날짜/시간 특징화 변환.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  3. 왼쪽 메뉴에서 열 추출.
  4. 럭셔리 입력 열, 열 추가 BIRTHDATE.
  5. 선택 출간연도 선택 취소 , , 시간, , 두 번째.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  6. 왼쪽 메뉴에서 시사다음을 선택 추가.

Observations.csv에 변환 추가

Data Wrangler는 Python(사용자 정의 함수), PySpark, Pandas 또는 PySpark(SQL)를 사용한 사용자 지정 변환을 지원합니다. 각 옵션 및 기본 설정에 대한 친숙도에 따라 변환 유형을 선택할 수 있습니다. 후자의 세 가지 옵션의 경우 Data Wrangler는 변수를 노출합니다. df 데이터 프레임에 액세스하고 변환을 적용할 수 있습니다. 자세한 설명과 예는 다음을 참조하십시오. 사용자 정의 변환. 이 섹션에서는 세 가지 사용자 정의 변환을 observations 데이터 세트.

  1. Observations.csv에 변환을 추가하고 삭제합니다. DESCRIPTION 열입니다.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  2. 왼쪽 메뉴에서 시사다음을 선택 추가.
  3. . 변환 창, 선택 단계 추가 선택하고 사용자 정의 변환.
  4. 드롭 다운 메뉴에서 Python (팬더).
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  5. 다음 코드를 입력하십시오 :
    df = df[df["CODE"].isin(['8867-4','8480-6','8462-4','39156-5','777-3'])]

    다음은 심부전 예측 기능으로 사용하려는 다음 관찰에 해당하는 LONIC 코드입니다.

    heart rate: 8867-4
    systolic blood pressure: 8480-6
    diastolic blood pressure: 8462-4
    body mass index (BMI): 39156-5
    platelets [#/volume] in Blood: 777-3

  6. 왼쪽 메뉴에서 시사다음을 선택 추가.
  7. 추출할 변환 추가 YearQuarter 인사말 DATE 열입니다.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  8. 왼쪽 메뉴에서 시사다음을 선택 추가.
  9. 왼쪽 메뉴에서 단계 추가 선택하고 사용자 정의 변환.
  10. 드롭 다운 메뉴에서 파이썬(파이스파크).
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
    다섯 가지 유형의 관찰이 항상 같은 날짜에 기록되는 것은 아닙니다. 예를 들어, 환자는 21월 2일에 주치의를 방문하여 수축기 혈압, 이완기 혈압, 심박수 및 체질량 지수를 측정하고 기록할 수 있습니다. 그러나 혈소판을 포함하는 실험실 테스트는 나중에 XNUMX월 XNUMX일에 수행될 수 있습니다. 따라서 관찰 날짜까지 데이터 프레임을 결합하는 것이 항상 가능한 것은 아닙니다. 여기에서 분기 단위로 대략적인 단위로 데이터 프레임을 결합합니다.
  11. 다음 코드를 입력하십시오 :
    from pyspark.sql.functions import col
    
    systolic_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed("value", "systolic")
                       .filter((col("code") == "8480-6"))
      )
    
    diastolic_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed('value', 'diastolic')
                       .filter((col("code") == "8462-4"))
        )
    
    hr_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed('value', 'hr')
                       .filter((col("code") == "8867-4"))
        )
    
    bmi_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed('value', 'bmi')
                       .filter((col("code") == "39156-5"))
        )
    
    platelets_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed('value', 'platelets')
                       .filter((col("code") == "777-3"))
        )
    
    df = (
        systolic_df.join(diastolic_df, ["patient", "DATE_year", "DATE_quarter"])
                                .join(hr_df, ["patient", "DATE_year", "DATE_quarter"])
                                .join(bmi_df, ["patient", "DATE_year", "DATE_quarter"])
                                .join(platelets_df, ["patient", "DATE_year", "DATE_quarter"])
    )

  12. 왼쪽 메뉴에서 시사다음을 선택 추가.
  13. 왼쪽 메뉴에서 단계 추가다음을 선택 행 관리.
  14. 럭셔리 변환선택한다. 중복 삭제.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  15. 왼쪽 메뉴에서 시사다음을 선택 추가.
  16. 왼쪽 메뉴에서 단계 추가 선택하고 사용자 정의 변환.
  17. 드롭 다운 메뉴에서 Python (팬더).
  18. 동일한 시간 값을 공유하는 데이터 포인트의 평균을 구하려면 다음 코드를 입력하십시오.
    import pandas as pd
    df.loc[:, df.columns != 'patient']=df.loc[:, df.columns != 'patient'].apply(pd.to_numeric)
    df = df.groupby(['patient','DATE_year','DATE_quarter']).mean().round(0).reset_index()

  19. 왼쪽 메뉴에서 시사다음을 선택 추가.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

환자.csv 및 관찰.csv 조인

이 단계에서는 Data Wrangler의 강력한 UI를 통해 코드를 작성하지 않고도 데이터세트에서 복잡한 조인을 효과적이고 쉽게 수행하는 방법을 보여줍니다. 지원되는 조인 유형에 대한 자세한 내용은 다음을 참조하십시오. 데이터 변환.

  1. 오른쪽 변환: 환자.csv, 옆에 있는 더하기 기호를 선택합니다. 단계 선택하고 가입하기.
    아래에 나열된 변환된 환자.csv 파일을 볼 수 있습니다. 데이터 세트 왼쪽 된 창에서.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  2. 오른쪽 변환: 관찰.csv은 클릭 단계 조인 작업을 시작합니다.
    변환된observations.csv 파일은 이제 아래에 나열됩니다. 데이터 세트 왼쪽 된 창에서.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  3. 왼쪽 메뉴에서 구성.
  4. 럭셔리 조인 유형선택한다. 안의.
  5. 럭셔리 좌회전선택한다. Id.
  6. 럭셔리 권리선택한다. 환자.
  7. 왼쪽 메뉴에서 시사다음을 선택 추가.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

조인된 데이터세트에 사용자 지정 변환 추가

이 단계에서는 관찰 당시 환자의 나이를 계산합니다. 더 이상 필요하지 않은 열도 삭제합니다.

  1. 옆에 있는 더하기 기호를 선택합니다. 첫 번째 조인 선택하고 변형 추가.
  2. Pandas에서 사용자 지정 변환을 추가합니다.
    df['age'] = df['DATE_year'] - df['BIRTHDATE_year']
    df = df.drop(columns=['BIRTHDATE','DEATHDATE','BIRTHDATE_year','patient'])

  3. 왼쪽 메뉴에서 시사다음을 선택 추가.

condition.csv에 사용자 정의 변환 추가

  1. 옆에 있는 더하기 기호를 선택합니다. 변환: condition.csv 선택하고 변형 추가.
  2. Pandas에서 사용자 지정 변환을 추가합니다.
    df = df[df["CODE"].isin(['84114007', '88805009', '59621000', '44054006', '53741008', '449868002', '49436004'])]
    df = df.drop(columns=['DESCRIPTION','ENCOUNTER','STOP'])

참고 : 앞에서 설명한 것처럼 사용자 지정 코드를 사용하거나 Data Wrangler에서 제공하는 기본 제공 변환을 사용하여 열을 삭제할 수 있습니다. Data Wrangler 내의 사용자 지정 변환은 지원되는 프레임워크에서 코드 조각 형태로 고유한 변환 논리를 가져올 수 있는 유연성을 제공합니다. 이러한 스니펫은 나중에 필요한 경우 검색하여 적용할 수 있습니다.

이전 변환의 코드는 다음 조건에 해당하는 SNOMED-CT 코드입니다. 그만큼 heart failure or chronic congestive heart failure 조건이 레이블이 됩니다. 나머지 조건을 심부전 예측을 위한 특성으로 사용합니다. 또한 더 이상 필요하지 않은 몇 개의 열도 삭제합니다.

Heart failure: 84114007
Chronic congestive heart failure: 88805009
Hypertension: 59621000
Diabetes: 44054006
Coronary Heart Disease: 53741008
Smokes tobacco daily: 449868002
Atrial Fibrillation: 49436004

  1. 다음으로 PySpark에서 사용자 지정 변환을 추가해 보겠습니다.
    from pyspark.sql.functions import col, when
    
    heartfailure_df = (
        df.select("patient", "start")
                          .withColumnRenamed("start", "heartfailure")
                       .filter((col("code") == "84114007") | (col("code") == "88805009"))
      )
    
    hypertension_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "hypertension")
                       .filter((col("code") == "59621000"))
      )
    
    diabetes_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "diabetes")
                       .filter((col("code") == "44054006"))
      )
    
    coronary_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "coronary")
                       .filter((col("code") == "53741008"))
      )
    
    smoke_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "smoke")
                       .filter((col("code") == "449868002"))
      )
    
    atrial_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "atrial")
                       .filter((col("code") == "49436004"))
      )
    
    df = (
        heartfailure_df.join(hypertension_df, ["patient"], "leftouter").withColumn("has_hypertension", when(col("hypertension") < col("heartfailure"), 1).otherwise(0))
        .join(diabetes_df, ["patient"], "leftouter").withColumn("has_diabetes", when(col("diabetes") < col("heartfailure"), 1).otherwise(0))
        .join(coronary_df, ["patient"], "leftouter").withColumn("has_coronary", when(col("coronary") < col("heartfailure"), 1).otherwise(0))
        .join(smoke_df, ["patient"], "leftouter").withColumn("has_smoke", when(col("smoke") < col("heartfailure"), 1).otherwise(0))
        .join(atrial_df, ["patient"], "leftouter").withColumn("has_atrial", when(col("atrial") < col("heartfailure"), 1).otherwise(0))
    )

    심부전 데이터 프레임의 모든 항목을 유지하기 위해 왼쪽 외부 조인을 수행합니다. 새로운 칼럼 has_xxx 상태의 시작 날짜를 기준으로 심부전 이외의 각 상태에 대해 계산됩니다. 우리는 심부전 이전에 기록된 의학적 상태에만 관심이 있으며 이를 심부전 예측을 위한 기능으로 사용합니다.

  2. 내장 추가 열 관리 더 이상 필요하지 않은 중복 열을 삭제하는 변환:
    1. hypertension
    2. diabetes
    3. coronary
    4. smoke
    5. atrial
  3. 발췌 Year 와  Quarter 인사말 heartfailure 열입니다.
    이것은 이전에 의 변환에서 사용한 세분성과 일치합니다. observations 데이터 세트.
  4. condition.csv에 대해 총 6개의 단계가 있어야 합니다.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

조인된 데이터 세트에 conditions.csv 조인

이제 조건 데이터 세트를 조인된 조인에 조인하기 위해 새 조인을 수행합니다. patientsobservations 데이터 세트.

  1. 왼쪽 메뉴에서 변환: 첫 번째 조인.
  2. 더하기 기호를 선택하고 가입하기.
  3. 왼쪽 메뉴에서 단계 옆에 변환: condition.csv.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  4. 왼쪽 메뉴에서 구성.
  5. 럭셔리 조인 유형선택한다. 왼쪽 외부.
  6. 럭셔리 좌회전선택한다. Id.
  7. 럭셔리 권리선택한다. 환자.
  8. 왼쪽 메뉴에서 시사다음을 선택 추가.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

조인된 데이터세트에 변환 추가

이제 세 개의 데이터 세트가 모두 결합되었으므로 몇 가지 추가 변환을 적용해 보겠습니다.

  1. PySpark에 다음 사용자 지정 변환을 추가하여 has_heartfailure 레이블 열이 됩니다.
    from pyspark.sql.functions import col, when
    df = (
        df.withColumn("has_heartfailure", when(col("heartfailure").isNotNull(), 1).otherwise(0))
    )

  2. PySpark에서 다음 사용자 지정 변환을 추가합니다.
    from pyspark.sql.functions import col
    
    df = (
        df.filter(
          (col("has_heartfailure") == 0) | 
          ((col("has_heartfailure") == 1) & ((col("date_year") <= col("heartfailure_year")) | ((col("date_year") == col("heartfailure_year")) & (col("date_quarter") <= col("heartfailure_quarter")))))
        )
    )

    우리는 심부전 상태가 진단되기 전에 기록된 관찰에만 관심이 있으며 이를 심부전 예측을 위한 기능으로 사용합니다. 심부전 진단 후 관찰한 내용은 환자가 복용하는 약물에 따라 영향을 받을 수 있으므로 이러한 관찰은 제외합니다.

  3. 더 이상 필요하지 않은 중복 열을 삭제합니다.
    1. Id
    2. DATE_year
    3. DATE_quarter
    4. patient
    5. heartfailure
    6. heartfailure_year
    7. heartfailure_quarter
  4. Analysis 탭, 분석 유형¸ 선택 표 요약.
    요약을 빠르게 스캔하면 MARITAL 열에 누락된 데이터가 있습니다.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  5. 선택 Data 탭을 클릭하고 단계를 추가합니다.
  6. 왼쪽 메뉴에서 핸들 누락.
  7. 럭셔리 변환선택한다. 채우기 누락.
  8. 럭셔리 입력 열선택한다. 결혼.
  9. 럭셔리 채우기 값, 입력 S.
    여기서 우리의 전략은 결혼 상태에 결측값이 있는 경우 환자가 독신이라고 가정하는 것입니다. 당신은 다른 전략을 가질 수 있습니다.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  10. 왼쪽 메뉴에서 시사다음을 선택 추가.
  11. 누락된 값을 0으로 채우십시오. has_hypertension, has_diabetes, has_coronary, has_smoke, has_atrial.

MaritalGender 범주형 변수입니다. Data Wrangler에는 범주형 변수를 인코딩하는 내장 함수가 있습니다.

  1. 단계를 추가하고 선택 인코딩 범주.
  2. 럭셔리 변환선택한다. 원-핫 인코딩.
  3. 럭셔리 입력 열선택한다. 결혼.
  4. 럭셔리 출력 스타일선택한다. .
    이 출력 스타일은 별도의 열에 인코딩된 값을 생성합니다.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  5. 왼쪽 메뉴에서 시사다음을 선택 추가.
  6. 에 대해 이 단계를 반복합니다. 성별 열입니다.

원-핫 인코딩은 결혼 열을 다음으로 분할합니다. Marital_M (결혼) 그리고 Marital_S (싱글), 성별 열을 다음으로 나눕니다. Gender_M (남성) 및 Gender_F (여자). 왜냐하면 Marital_MMarital_S 상호 배타적입니다(현재와 같이 Gender_MGender_F), 중복 기능을 피하기 위해 하나의 열을 삭제할 수 있습니다.

  1. 드롭 Marital_SGender_F.

수축기, 심박수 및 연령과 같은 숫자 기능에는 다른 단위 표준이 있습니다. 선형 회귀 기반 모델의 경우 먼저 이러한 숫자 기능을 정규화해야 합니다. 그렇지 않으면 절대값이 더 높은 일부 기능이 절대값이 더 낮은 다른 기능에 비해 부당한 이점을 갖게 되어 모델 성능이 저하될 수 있습니다. Data Wrangler에는 데이터를 정규화하기 위한 기본 제공 변환 Min-max 스케일러가 있습니다. 의사 결정 트리 기반 분류 모델의 경우 정규화가 필요하지 않습니다. 우리 연구는 분류 문제이므로 정규화를 적용할 필요가 없습니다. 불균형 클래스는 분류의 일반적인 문제입니다. 교육 데이터 세트에 심하게 치우친 클래스 분포가 포함되어 있으면 불균형이 발생합니다. 예를 들어 데이터세트에 심부전이 없는 환자보다 심부전이 없는 환자가 불균형적으로 더 많으면 모델이 심부전이 없다고 예측하는 쪽으로 편향되어 성능이 저하될 수 있습니다. Data Wrangler에는 문제를 해결하는 기능이 내장되어 있습니다.

  1. Pandas에 사용자 정의 변환을 추가하여 열의 데이터 유형을 "객체" 유형에서 숫자 유형으로 변환합니다.
    import pandas as pd
    df=df.apply(pd.to_numeric)

  2. 선택 Analysis 탭.
  3. 럭셔리 분석 유형¸ 선택 히스토그램.
  4. 럭셔리 X 축선택한다. has_heartfailure.
  5. 왼쪽 메뉴에서 시사.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
    불균형한 클래스가 있음이 분명합니다(심부전으로 레이블이 지정된 데이터 포인트보다 심부전 없음으로 레이블이 지정된 데이터 포인트가 더 많음).
  6. 로 돌아 가기 Data 탭. 선택하다 단계 추가 선택하고 잔액 데이터.
  7. 럭셔리 대상 열선택한다. has_heartfailure.
  8. 럭셔리 원하는 비율, 입력 1.
  9. 럭셔리 변환선택한다. 스 모트.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
    SMOTE는 Synthetic Minority Over-sampling Technique의 약자입니다. 새로운 소수 인스턴스를 만들고 데이터 세트에 추가하여 클래스 균형에 도달하는 기술입니다. 자세한 내용은 다음을 참조하십시오. SMOTE : 합성 소수 오버 샘플링 기법.
  10. 왼쪽 메뉴에서 시사다음을 선택 추가.
  11. 20-23단계에서 히스토그램 분석을 반복합니다. 결과는 균형 잡힌 수업입니다.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

대상 누출 및 기능 상관 관계 시각화

다음으로 Data Wrangler의 풍부한 고급 ML 지원 분석 유형 도구 세트를 사용하여 몇 가지 시각적 분석을 수행하겠습니다. 먼저 대상 누출을 살펴봅니다. 대상 누출은 훈련 데이터 세트의 데이터가 대상 레이블과 강한 상관 관계가 있지만 추론 시간에 실제 데이터에서 사용할 수 없을 때 발생합니다.

  1. 분석 탭에 대한 분석 유형¸ 선택 표적 누출.
  2. 럭셔리 문제 유형선택한다. 분류.
  3. 럭셔리 목표선택한다. has_heartfailure.
  4. 왼쪽 메뉴에서 시사.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
    분석을 바탕으로, hr 대상 누출입니다. 다음 단계에서 삭제하겠습니다. age 대상 누출 플래그가 지정됩니다. 추론 시간 동안 환자의 나이를 사용할 수 있다고 말하는 것이 합리적이므로 나이를 특성으로 유지합니다. Systolicdiastolic 또한 표적 누출 가능성이 있는 것으로 표시됩니다. 추론 시간 동안 두 개의 측정값이 있을 것으로 예상하므로 특성으로 유지합니다.
  5. 왼쪽 메뉴에서 추가 분석을 추가합니다.

그런 다음 특성 상관 관계를 살펴봅니다. 우리는 대상과 상관관계가 있지만 그들 사이에는 상관관계가 없는 기능을 선택하려고 합니다.

  1. 분석 탭에 대한 분석 유형¸ 선택 특징 상관관계.
  2. 럭셔리 상관관계 유형¸ 선택 선의.
  3. 왼쪽 메뉴에서 시사.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

계수 점수는 다음 쌍 간의 강한 상관 관계를 나타냅니다.

  • systolicdiastolic
  • bmiage
  • has_hypertensionhas_heartfailure (상표)

강한 상관 관계가 있는 기능의 경우 행렬은 계산적으로 반전하기 어려우므로 수치적으로 불안정한 추정치가 발생할 수 있습니다. 상관 관계를 완화하기 위해 쌍에서 하나만 제거하면 됩니다. 우리는 떨어 diastolicbmi 유지하다 systolicage 다음 단계에서.

이완기 및 bmi 열 삭제

추가 변환 단계를 추가하여 삭제 hr, diastolicbmi 내장 변환을 사용하여 열.

데이터 품질 및 통찰력 보고서 생성

최근 AWS 발표 Data Wrangler의 새로운 데이터 품질 및 통찰력 보고서 기능. 이 보고서는 데이터 품질을 자동으로 확인하고 데이터의 이상을 감지합니다. 데이터 과학자와 데이터 엔지니어는 이 도구를 사용하여 ML 모델 교육을 위한 프로세스 데이터 세트에 도메인 지식을 효율적이고 빠르게 적용할 수 있습니다. 이 단계는 선택 사항입니다. 데이터세트에 대한 이 보고서를 생성하려면 다음 단계를 완료하십시오.

  1. Analysis 탭, 분석 유형선택한다. 데이터 품질 및 통찰력 보고서.
  2. 럭셔리 대상 열선택한다. has_heartfailure.
  3. 럭셔리 문제 유형, 고르다 분류.
  4. 왼쪽 메뉴에서 만들기.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

몇 분 안에 요약, 시각적 개체 및 권장 사항이 포함된 보고서가 생성됩니다.

빠른 모델 분석 생성

데이터 준비, 정리 및 기능 엔지니어링을 완료했습니다. Data Wrangler에는 데이터 세트에 있는 기능의 예상되는 예상 품질과 예측력에 대한 대략적인 추정치를 제공하는 기본 제공 기능이 있습니다.

  1. Analysis 탭, 분석 유형¸ 선택 빠른 모델.
  2. 럭셔리 라벨선택한다. has_heartfailure.
  3. 왼쪽 메뉴에서 시사.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

Quick Model 분석에 따르면 기능을 볼 수 있습니다. has_hypertension 모든 기능 중에서 기능 중요도 점수가 가장 높습니다.

데이터 내보내기 및 모델 학습

이제 변환된 ML 지원 기능을 대상 S3 버킷으로 내보내고 샘플을 사용하여 지금까지 생성한 전체 기능 엔지니어링 파이프라인을 분산 방식으로 전체 데이터 세트로 확장해 보겠습니다.

  1. 데이터 흐름의 마지막 상자 옆에 있는 더하기 기호를 선택하고 목적지 추가.
  2. 왼쪽 메뉴에서 아마존 S3.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  3. 입력 데이터 세트 이름. 용 아마존 S3 위치, S3 버킷을 선택한 다음 대상 추가.
  4. 왼쪽 메뉴에서 직업 만들기 분산 PySpark 처리 작업을 시작하여 변환을 수행하고 데이터를 대상 S3 버킷으로 출력합니다.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
    데이터 세트의 크기에 따라 이 옵션을 사용하면 클러스터를 쉽게 구성하고 코드 없이 수평으로 확장할 수 있습니다. 데이터 세트를 분할하거나 클러스터 및 Spark 내부를 관리하는 것에 대해 걱정할 필요가 없습니다. 이 모든 것은 Data Wrangler가 자동으로 처리합니다.
  5. 왼쪽 창에서 다음, 2. 작업을 구성합니다.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  6. 그런 다음 달리기.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

또는 Jupyter Notebook을 통해 변환된 출력을 S3로 내보낼 수도 있습니다. 이 접근 방식을 통해 Data Wrangler는 더 큰 전체 데이터 세트에 데이터 흐름 단계(샘플을 사용하여 생성)를 적용하고 변환된 데이터 세트를 시작하는 기능으로 사용하기 위해 처리 작업을 시작하는 데 필요한 모든 코드가 포함된 Jupyter 노트북을 자동으로 생성합니다. 나중에 훈련 직장에서. 노트북 코드는 변경 여부에 관계없이 쉽게 실행할 수 있습니다. 이제 Data Wrangler의 UI를 통해 이 작업을 수행하는 방법에 대한 단계를 살펴보겠습니다.

  1. 데이터 흐름의 마지막 단계 옆에 있는 더하기 기호를 선택하고 다음 위치로 내보내기 :.
  2. 왼쪽 메뉴에서 Amazon S3(Jupyter 노트북 사용).
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  3. Jupyter 노트북으로 새 탭을 자동으로 엽니다.
  4. Jupyter 노트북에서 셀을 찾습니다. (선택 사항) 다음 단계 섹션 및 변경 run_optional_stepsFalseTrue.
    노트북에서 활성화된 선택적 단계는 다음을 수행합니다.
    • XGBoost를 사용하여 모델 훈련
      Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.
  5. 노트북 상단으로 돌아가서 달리기 메뉴, 선택 모든 셀 실행.

생성된 노트북을 있는 그대로 사용하는 경우 두 개의 m5.4xlarge 인스턴스에 걸쳐 처리를 확장하여 S3 버킷의 전체 데이터 세트를 처리하는 SageMaker 처리 작업을 시작합니다. 작업을 완료하는 데 필요한 데이터 세트 크기와 시간에 따라 인스턴스 수와 인스턴스 유형을 조정할 수 있습니다.

Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

마지막 셀의 학습 작업이 완료될 때까지 기다립니다. SageMaker 기본 S3 버킷에 모델을 생성합니다.

Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.

훈련된 모델은 실시간 추론 또는 일괄 변환을 위해 배포할 준비가 되었습니다. Data Wrangler의 기능을 시연하기 위해 합성 데이터를 사용하고 학습 모델에 처리된 데이터를 사용했습니다. 우리가 사용한 데이터가 합성이라는 점을 감안할 때 훈련된 모델의 추론 결과는 실제 의학적 상태 진단이나 의사의 판단을 대체하기 위한 것이 아닙니다.

다음을 선택하여 변환된 데이터 세트를 Amazon S3로 직접 내보낼 수도 있습니다. 수출 변환 미리보기 페이지 상단에 있습니다. 직접 내보내기 옵션은 가져오는 동안 샘플링이 활성화된 경우에만 변환된 샘플을 내보냅니다. 이 옵션은 더 작은 데이터 세트를 처리하는 경우에 가장 적합합니다. 변환된 데이터는 기능 저장소로 직접 수집될 수도 있습니다. 자세한 내용은 Amazon SageMaker 기능 스토어. 데이터 흐름은 요구 사항에 따라 조정 및 예약할 수 있는 SageMaker 파이프라인으로 내보낼 수도 있습니다. 자세한 내용은 Amazon SageMaker 파이프 라인.

결론

이 게시물에서는 Data Wrangler를 사용하여 의료 데이터를 처리하고 도구 기반의 로우 코드 방식으로 확장 가능한 기능 엔지니어링을 수행하는 방법을 보여주었습니다. 우리는 기본 제공 변환 및 분석을 필요한 곳에 적절하게 적용하는 방법을 배웠고 이를 사용자 지정 변환과 결합하여 데이터 준비 워크플로에 더 많은 유연성을 추가했습니다. 또한 분산 처리 작업을 통해 데이터 흐름 레시피를 확장하기 위한 다양한 옵션을 살펴보았습니다. 또한 변환된 데이터가 심부전을 예측하는 모델을 훈련하는 데 어떻게 쉽게 사용할 수 있는지 배웠습니다.

이 게시물에서 다루지 않은 Data Wrangler의 다른 많은 기능이 있습니다. 가능한 것 탐색 Amazon SageMaker Data Wrangler로 ML 데이터 준비 다음 데이터 과학 또는 기계 학습 프로젝트에 Data Wrangler를 활용하는 방법을 알아보세요.


저자에 관하여

Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.포레스트 선 캐나다 토론토에 있는 AWS 공공 부문 팀의 수석 솔루션 설계자입니다. 그는 지난 XNUMX년 동안 의료 및 금융 산업에서 일했습니다. 일 외에는 가족과 함께 캠핑을 즐깁니다.

Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence를 사용하여 의료 및 생명 과학을 위한 대규모 기능 엔지니어링. 수직 검색. 일체 포함.아룬 프라 사스 샨 카르 AWS의 인공 지능 및 기계 학습 (AI / ML) 전문 솔루션 아키텍트로서 글로벌 고객이 클라우드에서 AI 솔루션을 효과적이고 효율적으로 확장 할 수 있도록 지원합니다. 여가 시간에 Arun은 공상 과학 영화를보고 클래식 음악을 듣는 것을 즐깁니다.

타임 스탬프 :

더보기 AWS 기계 학습