Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler

Învățarea automată (ML) perturbă o mulțime de industrii într-un ritm fără precedent. Industria asistenței medicale și științelor vieții (HCLS) a trecut printr-o evoluție rapidă în ultimii ani, îmbrățișând ML într-o multitudine de cazuri de utilizare pentru furnizarea de îngrijiri de calitate și îmbunătățirea rezultatelor pacienților.

Într-un ciclu de viață tipic ML, inginerii de date și oamenii de știință își petrec cea mai mare parte a timpului pe pregătirea datelor și pașii de inginerie a caracteristicilor chiar înainte de a începe procesul de construire și formare a modelelor. Având un instrument care poate reduce bariera de intrare pentru pregătirea datelor, îmbunătățind astfel productivitatea, este o solicitare extrem de dorită pentru aceste persoane. Amazon SageMaker Data Wrangler este conceput de AWS pentru a reduce curba de învățare și pentru a permite practicienilor de date să realizeze pregătirea datelor, curățarea și sarcinile de inginerie a caracteristicilor în mai puțin efort și timp. Oferă o interfață GUI cu multe funcții încorporate și integrări cu alte servicii AWS, cum ar fi Serviciul Amazon de stocare simplă (Amazon S3) și Magazinul de caracteristici Amazon SageMaker, precum și surse de date partenere, inclusiv Snowflake și Databricks.

În această postare, demonstrăm cum să folosiți Data Wrangler pentru a pregăti datele de asistență medicală pentru formarea unui model care să prezică insuficiența cardiacă, având în vedere datele demografice ale pacientului, condițiile medicale anterioare și istoricul rezultatelor testelor de laborator.

Prezentare generală a soluțiilor

Soluția constă din următorii pași:

  1. Obțineți un set de date de asistență medicală ca intrare în Data Wrangler.
  2. Utilizați funcțiile de transformare încorporate ale Data Wrangler pentru a transforma setul de date. Aceasta include eliminarea coloanelor, prezentarea datelor/timpului, alăturarea setului de date, imputarea valorilor lipsă, codificarea variabilelor categoriale, scalarea valorilor numerice, echilibrarea setului de date și multe altele.
  3. Utilizați funcția de transformare personalizată a Data Wrangler (codul Pandas sau PySpark) pentru a completa transformările suplimentare necesare dincolo de transformările încorporate și pentru a demonstra extensibilitatea Data Wrangler. Aceasta include rânduri de filtrare, date grupate, forme noi de cadre de date bazate pe condiții și multe altele.
  4. Utilizați funcțiile de vizualizare încorporate ale Data Wrangler pentru a efectua analize vizuale. Aceasta include scurgerile țintei, corelarea caracteristicilor, modelul rapid și multe altele.
  5. Utilizați opțiunile de export încorporate ale Data Wrangler pentru a exporta setul de date transformat în Amazon S3.
  6. Lansați un notebook Jupyter pentru a utiliza setul de date transformat din Amazon S3 ca intrare pentru a antrena un model.

Generați un set de date

Acum că ne-am hotărât cu declarația problemei ML, mai întâi ne-am pus ochii pe obținerea datelor de care avem nevoie. Studii de cercetare precum Predicția insuficienței cardiace poate furniza date care sunt deja în stare bună. Cu toate acestea, întâlnim adesea scenarii în care datele sunt destul de dezordonate și necesită alăturare, curățare și alte câteva transformări care sunt foarte specifice domeniului de asistență medicală înainte de a putea fi utilizate pentru instruirea ML. Dorim să găsim sau să generăm date destul de dezordonate și să vă ghidăm prin pașii pregătirii lor folosind Data Wrangler. Având în vedere acest lucru, am ales Synthea ca instrument pentru a genera date sintetice care se potrivesc obiectivului nostru. Synthea este un generator de pacienți sintetici open-source care modelează istoricul medical al pacienților sintetici. Pentru a genera setul de date, parcurgeți următorii pași:

  1. Urmați instrucțiunile conform pornire rapidă documentație pentru a crea un Amazon SageMaker Studio domeniu și lansați Studio.
    Acesta este un pas obligatoriu. Este opțional dacă Studio este deja configurat în contul dvs.
  2. După lansarea Studio, pe Launcher fila, alegeți Terminal de sistem.
    Aceasta lansează o sesiune de terminal care vă oferă o interfață de linie de comandă cu care să lucrați.
  3. Pentru a instala Synthea și a genera setul de date în format CSV, rulați următoarele comenzi în sesiunea de terminal lansată:
    $ 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

Furnizăm un parametru pentru a genera seturile de date cu o populație de 10,000. Rețineți că parametrul de dimensiune denotă numărul de membri vii ai populației. În plus, Synthea generează și date pentru membrii morți ai populației, care ar putea adăuga câteva puncte de date suplimentare peste dimensiunea eșantionului specificat.

Așteptați până când generarea datelor este completă. Acest pas durează de obicei aproximativ o oră sau mai puțin. Synthea generează mai multe seturi de date, inclusiv patients, medications, allergies, conditions, și altele. Pentru această postare, folosim trei dintre seturile de date rezultate:

  • pacienţi.csv – Acest set de date are aproximativ 3.2 MB și conține aproximativ 11,000 de rânduri de date despre pacient (25 de coloane, inclusiv ID-ul pacientului, data nașterii, sexul, adresa și multe altele)
  • condiţii.csv – Acest set de date are aproximativ 47 MB ​​și conține aproximativ 370,000 de rânduri de date despre starea medicală (șase coloane, inclusiv ID-ul pacientului, data de începere a stării, codul de afecțiune și multe altele)
  • observații.csv – Acest set de date are aproximativ 830 MB și conține aproximativ 5 milioane de rânduri de date de observare (opt coloane, inclusiv ID-ul pacientului, data observării, codul de observație, valoarea și multe altele)

Există o relație unu-la-mulți între patients și conditions seturi de date. Există, de asemenea, o relație unu-la-mulți între patients și observations seturi de date. Pentru un dicționar de date detaliat, consultați Dicţionar de date fişier CSV.

  1. Pentru a încărca seturile de date generate într-un compartiment sursă în Amazon S3, executați următoarele comenzi în sesiunea terminalului:
    $ cd ./output/csv
    $ aws s3 sync . s3://<source bucket name>/

Lansați Data Wrangler

Alege Resurse SageMaker în pagina de navigare din Studio și pe Proiecte meniu, alegeți Data Wrangler pentru a crea un flux de date Data Wrangler. Pentru pași detaliați despre cum să lansați Data Wrangler din Studio, consultați Începeți cu Data Wrangler.

Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Date de import

Pentru a importa datele, parcurgeți următorii pași:

  1. Alege Amazon S3 și localizați fișierul patients.csv în găleata S3.
  2. În Detalii panoul, alegeți În primul rând K pentru Prelevarea de probe.
  3. Intrați 1100 pentru Marime de mostra.
    În panoul de previzualizare, Data Wrangler extrage primele 100 de rânduri din setul de date și le afișează ca previzualizare.
  4. Alege Import.
    Data Wrangler selectează primii 1,100 de pacienți din totalul de pacienți (11,000 de rânduri) generat de Synthea și importă datele. Abordarea de eșantionare permite Data Wrangler să prelucreze doar datele eșantionului. Ne permite să ne dezvoltăm fluxul de date cu un set de date mai mic, ceea ce are ca rezultat o procesare mai rapidă și o buclă de feedback mai scurtă. După ce creăm fluxul de date, putem trimite rețeta dezvoltată la a Prelucrare SageMaker sarcina de a extinde pe orizontal procesarea pentru setul de date complet sau mai mare într-un mod distribuit.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  5. Repetați acest proces pentru conditions și observations seturi de date.
    1. Pentru conditions set de date, introduceți 37000 pentru Marime de mostra, care reprezintă 1/10 din totalul de 370,000 de rânduri generate de Synthea.
    2. Pentru observations set de date, introduceți 500000 pentru Marime de mostra, care reprezintă 1/10 din observațiile totale 5 milioane de rânduri generate de Synthea.

Ar trebui să vedeți trei seturi de date, așa cum se arată în următoarea captură de ecran.

Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Transformă datele

Transformarea datelor este procesul de modificare a structurii, valorii sau formatului uneia sau mai multor coloane din setul de date. Procesul este de obicei dezvoltat de un inginer de date și poate fi o provocare pentru persoanele cu un set mai mic de abilități de inginerie a datelor să descifreze logica propusă pentru transformare. Transformarea datelor face parte din procesul mai larg de inginerie a caracteristicilor, iar succesiunea corectă a pașilor este un alt criteriu important de care trebuie să țineți cont atunci când concepeți astfel de rețete.

Data Wrangler este conceput pentru a fi un instrument low-code pentru a reduce bariera de intrare pentru o pregătire eficientă a datelor. Vine cu peste 300 de transformări de date preconfigurate din care puteți alege fără a scrie o singură linie de cod. În secțiunile următoare, vedem cum să transformăm seturile de date importate în Data Wrangler.

Aruncă coloanele în pacienti.csv

Mai întâi aruncăm câteva coloane din patients set de date. Eliminarea coloanelor redundante elimină informațiile nerelevante din setul de date și ne ajută să reducem cantitatea de resurse de calcul necesare procesării setului de date și antrenării unui model. În această secțiune, aruncăm coloane precum SSN sau numărul pașaportului, pe baza bunului simț că aceste coloane nu au valoare predictivă. Cu alte cuvinte, ele nu ajută modelul nostru să prezică insuficiența cardiacă. De asemenea, studiul nostru nu este preocupat de alte coloane, cum ar fi locul nașterii sau influența cheltuielilor de îngrijire a sănătății asupra insuficienței cardiace a pacientului, așa că le renunțăm și la acestea. Coloanele redundante pot fi identificate și prin rularea analizelor încorporate, cum ar fi scurgerea țintei, corelarea caracteristicilor, multicoliniaritatea și multe altele, care sunt încorporate în Data Wrangler. Pentru mai multe detalii despre tipurile de analize acceptate, consultați Analizați și vizualizați. În plus, puteți utiliza Raport privind calitatea datelor și perspective pentru a efectua analize automate pe seturile de date pentru a ajunge la o listă de coloane redundante de eliminat.

  1. Alegeți semnul plus de lângă Tipuri de date pentru setul de date patients.csv și alegeți Adăugați transformare.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  2. Alege Adăugați pasul Și alegeți Gestionați coloanele.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  3. Pentru Transforma¸ alege Aruncați coloana.
  4. Pentru Coloane de aruncat, alegeți următoarele coloane:
    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. Alege Anunţ pentru a examina setul de date transformat, apoi alegeți Adăuga.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
    Ar trebui să vezi pasul Aruncați coloana în lista ta de transformări.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Prezentați data/ora în patients.csv

Acum folosim funcția Featurize data/ora pentru a genera noua caracteristică Year de la BIRTHDATE coloana din patients set de date. Folosim noua caracteristică într-un pas ulterior pentru a calcula vârsta pacientului în momentul în care are loc observația.

  1. În transformări panoul dvs Aruncați coloana pagina pentru patients set de date, alegeți Adăugați pasul.
  2. Alege Prezentați data/ora transforma.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  3. Alege Extrageți coloanele.
  4. Pentru Coloane de intrare, adăugați coloana BIRTHDATE.
  5. Selectați An și deselectați Lună, Zi, oră, Minut, Al doilea.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  6. Alege Anunţ, Apoi alegeți Adăuga.

Adăugați transformări în observations.csv

Data Wrangler acceptă transformări personalizate folosind Python (funcții definite de utilizator), PySpark, Pandas sau PySpark (SQL). Puteți alege tipul de transformare în funcție de familiaritatea dvs. cu fiecare opțiune și preferință. Pentru ultimele trei opțiuni, Data Wrangler expune variabila df pentru ca dvs. să accesați cadrul de date și să aplicați transformări pe acesta. Pentru o explicație detaliată și exemple, consultați Transformări personalizate. În această secțiune, adăugăm trei transformări personalizate la observations set de date.

  1. Adăugați o transformare la observations.csv și plasați DESCRIPTION coloana.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  2. Alege Anunţ, Apoi alegeți Adăuga.
  3. În transformări panoul, alegeți Adăugați pasul Și alegeți Transformare personalizată.
  4. În meniul derulant, alegeți Python (Panda).
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  5. Introduceți următorul cod:
    df = df[df["CODE"].isin(['8867-4','8480-6','8462-4','39156-5','777-3'])]

    Acestea sunt coduri LONIC care corespund următoarelor observații pe care ne interesează să le folosim ca caracteristici pentru prezicerea insuficienței cardiace:

    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. Alege Anunţ, Apoi alegeți Adăuga.
  7. Adăugați o transformare pentru a extrage Year și Quarter de la DATE coloana.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  8. Alege Anunţ, Apoi alegeți Adăuga.
  9. Alege Adăugați pasul Și alegeți Transformare personalizată.
  10. În meniul derulant, alegeți Python (PySpark).
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
    Este posibil ca cele cinci tipuri de observații să nu fie înregistrate întotdeauna la aceeași dată. De exemplu, un pacient poate să-și viziteze medicul de familie pe 21 ianuarie și să li se măsoare și să se înregistreze tensiunea arterială sistolica, tensiunea arterială diastolică, ritmul cardiac și indicele de masă corporală. Cu toate acestea, un test de laborator care include trombocite poate fi efectuat la o dată ulterioară, pe 2 februarie. Prin urmare, nu este întotdeauna posibil să se alăture cadrelor de date până la data observării. Aici unim cadre de date pe o granularitate grosieră la trimestru.
  11. Introduceți următorul cod:
    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. Alege Anunţ, Apoi alegeți Adăuga.
  13. Alege Adăugați pasul, Apoi alegeți Gestionați rândurile.
  14. Pentru Transforma, alege Eliminați duplicatele.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  15. Alege Anunţ, Apoi alegeți Adăuga.
  16. Alege Adăugați pasul Și alegeți Transformare personalizată.
  17. În meniul derulant, alegeți Python (Panda).
  18. Introduceți următorul cod pentru a lua o medie a punctelor de date care au aceeași valoare de timp:
    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. Alege Anunţ, Apoi alegeți Adăuga.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Alăturați-vă pacientilor.csv și observațiilor.csv

În acest pas, vă prezentăm cum să realizați eficient și ușor alinări complexe pe seturi de date fără a scrie niciun cod prin interfața de utilizare puternică a Data Wrangler. Pentru a afla mai multe despre tipurile de îmbinări acceptate, consultați Transformarea datelor.

  1. La dreapta de Transform: pacienti.csv, alegeți semnul plus de lângă paşi Și alegeți Alatura-te.
    Puteți vedea fișierul patients.csv transformat enumerat mai jos Datasets în panoul din stânga.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  2. La dreapta de Transformă: observații.csv, faceți clic pe paşi pentru a iniția operația de alăturare.
    Fișierul transformat observations.csv este acum listat sub Datasets în panoul din stânga.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  3. Alege Configurare.
  4. Pentru Alăturați-vă tipului, alege Interior.
  5. Pentru Stânga, alege Id.
  6. Pentru Dreapta, alege pacient.
  7. Alege Anunţ, Apoi alegeți Adăuga.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Adăugați o transformare personalizată la seturile de date unite

În acest pas, calculăm vârsta unui pacient în momentul observării. Aruncăm și coloanele care nu mai sunt necesare.

  1. Alegeți semnul plus de lângă Prima alăturare Și alegeți Adăugați transformare.
  2. Adăugați o transformare personalizată în Pandas:
    df['age'] = df['DATE_year'] - df['BIRTHDATE_year']
    df = df.drop(columns=['BIRTHDATE','DEATHDATE','BIRTHDATE_year','patient'])

  3. Alege Anunţ, Apoi alegeți Adăuga.

Adăugați transformări personalizate la conditions.csv

  1. Alegeți semnul plus de lângă Transformă: conditions.csv Și alegeți Adăugați transformare.
  2. Adăugați o transformare personalizată în Pandas:
    df = df[df["CODE"].isin(['84114007', '88805009', '59621000', '44054006', '53741008', '449868002', '49436004'])]
    df = df.drop(columns=['DESCRIPTION','ENCOUNTER','STOP'])

Notă: După cum am demonstrat mai devreme, puteți elimina coloanele fie folosind cod personalizat, fie utilizând transformările încorporate furnizate de Data Wrangler. Transformările personalizate din Data Wrangler oferă flexibilitatea de a vă aduce propria logică de transformare sub formă de fragmente de cod în cadrele acceptate. Aceste fragmente pot fi căutate și aplicate ulterior, dacă este necesar.

Codurile din transformarea precedentă sunt coduri SNOMED-CT care corespund următoarelor condiții. The heart failure or chronic congestive heart failure starea devine eticheta. Folosim condițiile rămase ca caracteristici pentru prezicerea insuficienței cardiace. Aruncăm și câteva coloane care nu mai sunt necesare.

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

  1. Apoi, să adăugăm o transformare personalizată în 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))
    )

    Efectuăm o îmbinare exterioară stângă pentru a păstra toate intrările din cadrul de date pentru insuficiență cardiacă. O nouă coloană has_xxx este calculat pentru fiecare condiție, alta decât insuficiența cardiacă, pe baza datei de începere a afecțiunii. Suntem interesați doar de afecțiunile medicale care au fost înregistrate înainte de insuficiența cardiacă și le folosim ca caracteristici pentru prezicerea insuficienței cardiace.

  2. Adăugați un încorporat Gestionați coloanele transformați pentru a elimina coloanele redundante care nu mai sunt necesare:
    1. hypertension
    2. diabetes
    3. coronary
    4. smoke
    5. atrial
  3. Extrage Year și  Quarter de la heartfailure coloana.
    Aceasta se potrivește cu granularitatea pe care am folosit-o mai devreme în transformarea observations set de date.
  4. Ar trebui să avem un total de 6 pași pentru conditions.csv.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Conectați condition.csv la setul de date alăturat

Acum efectuăm o nouă îmbinare pentru a alătura setul de date de condiții la unire patients și observations set de date.

  1. Alege Transformare: prima alăturare.
  2. Alegeți semnul plus și alegeți Alatura-te.
  3. Alege paşi chiar lângă Transformă: conditions.csv.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  4. Alege Configurare.
  5. Pentru Alăturați-vă tipului, alege Stânga în exterior.
  6. Pentru Stânga, alege Id.
  7. Pentru Dreapta, alege pacient.
  8. Alege Anunţ, Apoi alegeți Adăuga.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Adăugați transformări la seturile de date unite

Acum că avem toate cele trei seturi de date unite, să aplicăm câteva transformări suplimentare.

  1. Adăugați următoarea transformare personalizată în PySpark, deci has_heartfailure devine coloana noastră de etichete:
    from pyspark.sql.functions import col, when
    df = (
        df.withColumn("has_heartfailure", when(col("heartfailure").isNotNull(), 1).otherwise(0))
    )

  2. Adăugați următoarea transformare personalizată în 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")))))
        )
    )

    Ne interesează doar observațiile înregistrate înainte de diagnosticarea insuficienței cardiace și le folosim ca caracteristici pentru prezicerea insuficienței cardiace. Observațiile efectuate după diagnosticarea insuficienței cardiace pot fi afectate de medicația pe care o ia un pacient, așa că dorim să le excludem pe acelea.

  3. Eliminați coloanele redundante care nu mai sunt necesare:
    1. Id
    2. DATE_year
    3. DATE_quarter
    4. patient
    5. heartfailure
    6. heartfailure_year
    7. heartfailure_quarter
  4. Pe Analiză filă, pentru Tipul analizei¸ alege Rezumatul tabelului.
    O scanare rapidă prin rezumat arată că MARITAL coloana are date lipsă.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  5. Alege Date filă și adăugați un pas.
  6. Alege Mâner Lipsă.
  7. Pentru Transforma, alege Umplere lipsă.
  8. Pentru Coloane de intrare, alege MARITAL.
  9. Pentru Valoarea de umplere, introduce S.
    Strategia noastră aici este să presupunem că pacientul este singur dacă starea civilă are valoare lipsă. Poți avea o strategie diferită.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  10. Alege Anunţ, Apoi alegeți Adăuga.
  11. Completați valoarea lipsă ca 0 pentru has_hypertension, has_diabetes, has_coronary, has_smoke, has_atrial.

Marital și Gender sunt variabile categoriale. Data Wrangler are o funcție încorporată pentru a codifica variabilele categoriale.

  1. Adăugați un pas și alegeți Codificare categorială.
  2. Pentru Transforma, alege One-hot codificare.
  3. Pentru Coloane de intrare, alege MARITAL.
  4. Pentru Stilul de ieșire, alege Coloană.
    Acest stil de ieșire produce valori codificate în coloane separate.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  5. Alege Anunţ, Apoi alegeți Adăuga.
  6. Repetați acești pași pentru Gen coloana.

Codificarea one-hot împarte coloana Marital în Marital_M (căsătorit) și Marital_S (singur) și împarte coloana Sex în Gender_M (masculin) și Gender_F (Femeie). Deoarece Marital_M și Marital_S se exclud reciproc (cum sunt Gender_M și Gender_F), putem arunca o coloană pentru a evita caracteristicile redundante.

  1. Picătură Marital_S și Gender_F.

Caracteristicile numerice, cum ar fi sistolica, ritmul cardiac și vârsta au standarde de unitate diferite. Pentru un model bazat pe regresie liniară, trebuie să normalizăm mai întâi aceste caracteristici numerice. În caz contrar, unele caracteristici cu valori absolute mai mari pot avea un avantaj nejustificat față de alte caracteristici cu valori absolute mai mici și pot duce la performanțe slabe ale modelului. Data Wrangler are scalatorul de transformare Min-max încorporat pentru a normaliza datele. Pentru un model de clasificare bazat pe arborele de decizie, normalizarea nu este necesară. Studiul nostru este o problemă de clasificare, așa că nu trebuie să aplicăm normalizarea. Clasele dezechilibrate sunt o problemă comună în clasificare. Dezechilibrul are loc atunci când setul de date de antrenament conține o distribuție de clasă grav denaturată. De exemplu, atunci când setul nostru de date conține în mod disproporționat mai mulți pacienți fără insuficiență cardiacă decât pacienți cu insuficiență cardiacă, poate face ca modelul să fie părtinitor spre a nu prezice insuficiență cardiacă și poate avea performanțe slabe. Data Wrangler are o funcție încorporată pentru a rezolva problema.

  1. Adăugați o transformare personalizată în Pandas pentru a converti tipul de date al coloanelor din tipul „obiect” în tipul numeric:
    import pandas as pd
    df=df.apply(pd.to_numeric)

  2. Alege Analiză tab.
  3. Pentru Tipul analizei¸ alege Histogramă.
  4. Pentru Axa X, alege are_insuficienţă cardiacă.
  5. Alege Anunţ.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
    Este evident că avem o clasă dezechilibrată (mai multe puncte de date etichetate ca fără insuficiență cardiacă decât puncte de date etichetate ca insuficiență cardiacă).
  6. Du-te înapoi la Date filă. Alege Adăugați pasul Și alegeți Datele de echilibru.
  7. Pentru Coloana țintă, alege are_insuficienţă cardiacă.
  8. Pentru Raportul dorit, introduce 1.
  9. Pentru Transforma, alege bătuseră,.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
    SMOTE înseamnă Synthetic Minority Over-sampling Technique. Este o tehnică de a crea noi instanțe minoritare și de a le adăuga la setul de date pentru a ajunge la echilibrul clasei. Pentru informații detaliate, consultați SMOTE: Tehnica de supraeșantionare a minorității sintetice.
  10. Alege Anunţ, Apoi alegeți Adăuga.
  11. Repetați analiza histogramei la pasul 20-23. Rezultatul este o clasă echilibrată.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Vizualizați scurgerea țintă și corelarea caracteristicilor

În continuare, vom efectua câteva analize vizuale folosind setul bogat de instrumente Data Wrangler de tipuri de analize avansate acceptate de ML. În primul rând, ne uităm la scurgerea țintă. Scurgerea țintă are loc atunci când datele din setul de date de antrenament sunt strâns corelate cu eticheta țintă, dar nu sunt disponibile în datele din lumea reală la momentul deducerii.

  1. Pe Fila Analiză, Pentru Tipul analizei¸ alege Scurgere țintă.
  2. Pentru Tipul problemei, alege clasificare.
  3. Pentru Ţintă, alege are_insuficienţă cardiacă.
  4. Alege Anunţ.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
    Pe baza analizei, hr este o scurgere țintă. Îl vom renunța într-un pas ulterior. age este semnalată o scurgere țintă. Este rezonabil să spunem că vârsta unui pacient va fi disponibilă în timpul perioadei de inferență, așa că păstrăm vârsta ca o caracteristică. Systolic și diastolic sunt, de asemenea, semnalate ca fiind probabil scurgeri țintă. Ne așteptăm să avem cele două măsurători în timpul timpului de inferență, așa că le păstrăm ca caracteristici.
  5. Alege Adăuga pentru a adăuga analiza.

Apoi, ne uităm la corelarea caracteristicilor. Dorim să selectăm caracteristici care sunt corelate cu ținta, dar care sunt necorelate între ele.

  1. Pe Fila Analiză, Pentru Tipul analizei¸ alege Corelația caracteristicilor.
  2. Pentru Tipul de corelație¸ alege liniar.
  3. Alege Anunţ.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Scorurile coeficientului indică corelații puternice între următoarele perechi:

  • systolic și diastolic
  • bmi și age
  • has_hypertension și has_heartfailure (eticheta)

Pentru caracteristicile care sunt puternic corelate, matricele sunt dificil de inversat din punct de vedere computațional, ceea ce poate duce la estimări instabile numeric. Pentru a atenua corelația, putem elimina pur și simplu unul din pereche. Scăpăm diastolic și bmi și păstrează systolic și age într-o etapă ulterioară.

Aruncați coloanele diastolice și IMC

Adăugați pași de transformare suplimentari pentru a renunța la hr, diastolic și bmi coloane folosind transformarea încorporată.

Generați raportul privind calitatea datelor și informații

AWS recent a anunțat noua funcție de raport privind calitatea datelor și statisticile din Data Wrangler. Acest raport verifică automat calitatea datelor și detectează anomalii în datele dvs. Oamenii de știință de date și inginerii de date pot folosi acest instrument pentru a aplica eficient și rapid cunoștințele de domeniu pentru a procesa seturi de date pentru formarea modelului ML. Acest pas este opțional. Pentru a genera acest raport pe seturile noastre de date, parcurgeți următorii pași:

  1. Pe Analiză filă, pentru Tipul analizei, alege Raport privind calitatea datelor și perspective.
  2. Pentru Coloana țintă, alege are_insuficienţă cardiacă.
  3. Pentru Tipul problemei, Selectați Clasificare.
  4. Alege Crea.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

În câteva minute, generează un raport cu un rezumat, elemente vizuale și recomandări.

Generați o analiză rapidă a modelului

Am finalizat pregătirea datelor, curățarea și ingineria caracteristicilor. Data Wrangler are o funcție încorporată care oferă o estimare aproximativă a calității estimate așteptate și a puterii de predicție a caracteristicilor din setul nostru de date.

  1. Pe Analiză filă, pentru Tipul analizei¸ alege Model rapid.
  2. Pentru Etichetă, alege are_insuficienţă cardiacă.
  3. Alege Anunţ.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Conform analizei noastre Quick Model, putem vedea caracteristica has_hypertension are cel mai mare scor de importanță a caracteristicilor dintre toate caracteristicile.

Exportați datele și antrenați modelul

Acum haideți să exportăm caracteristicile transformate pregătite pentru ML într-un compartiment S3 de destinație și să scalam întreaga conductă de inginerie de caracteristici pe care am creat-o până acum utilizând mostrele în întregul set de date într-un mod distribuit.

  1. Alegeți semnul plus de lângă ultima casetă din fluxul de date și alegeți Adăugați destinația.
  2. Alege Amazon S3.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  3. Introduceţi un Numele setului de date. Pentru Locație Amazon S3, alegeți o găleată S3, apoi alegeți Adăugați o destinație.
  4. Alege Creați loc de muncă pentru a lansa o lucrare de procesare PySpark distribuită pentru a efectua transformarea și a scoate datele în compartimentul S3 de destinație.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
    În funcție de dimensiunea seturilor de date, această opțiune ne permite să configuram cu ușurință clusterul și să scalam orizontal fără cod. Nu trebuie să ne facem griji cu privire la partiționarea setului de date sau la gestionarea clusterului și a elementelor interne Spark. Toate acestea sunt îngrijite automat pentru noi de Data Wrangler.
  5. În panoul din stânga, alegeți Apoi, 2. Configurați job.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  6. Atunci alege Alerga.
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Alternativ, putem exporta și ieșirea transformată în S3 printr-un notebook Jupyter. Cu această abordare, Data Wrangler generează automat un blocnotes Jupyter cu tot codul necesar pentru a începe o lucrare de procesare pentru a aplica pașii fluxului de date (creați folosind un eșantion) pe setul de date complet mai mare și pentru a utiliza setul de date transformat ca caracteristici pentru a lansa mai târziu de la un loc de muncă. Codul notebook-ului poate fi rulat cu ușurință cu sau fără modificări. Să parcurgem acum pașii despre cum să faceți acest lucru prin interfața de utilizare a Data Wrangler.

  1. Alegeți semnul plus de lângă ultimul pas din fluxul de date și alegeți Export către.
  2. Alege Amazon S3 (prin Jupyter Notebook).
    Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  3. Deschide automat o filă nouă cu un blocnotes Jupyter.
  4. În blocnotesul Jupyter, localizați celula din (Opțional) Următorii pași secțiune și schimbare run_optional_steps din False la True.
    Pașii opționali activați în notebook efectuează următoarele:
    • Antrenează un model folosind XGBoost
      Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.
  5. Reveniți în partea de sus a caietului și pe Alerga meniu, alegeți Rulați toate celulele.

Dacă utilizați blocnotesul generat așa cum este, acesta lansează o sarcină de procesare SageMaker care extinde procesarea în două instanțe m5.4xlarge pentru a procesa setul complet de date din compartimentul S3. Puteți ajusta numărul de instanțe și tipurile de instanțe în funcție de dimensiunea setului de date și de timpul de care aveți nevoie pentru a finaliza lucrarea.

Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Așteptați până la finalizarea lucrării de antrenament din ultima celulă. Acesta generează un model în găleata S3 implicită SageMaker.

Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Modelul instruit este gata pentru implementare fie pentru inferență în timp real, fie pentru transformare în lot. Rețineți că am folosit date sintetice pentru a demonstra funcționalitățile în Data Wrangler și am folosit date procesate pentru modelul de antrenament. Având în vedere că datele pe care le-am folosit sunt sintetice, rezultatul inferenței din modelul antrenat nu este menit pentru diagnosticarea stării medicale în lumea reală sau înlocuirea raționamentului din partea medicilor.

De asemenea, puteți exporta direct setul de date transformat în Amazon S3, alegând Export în partea de sus a paginii de previzualizare a transformării. Opțiunea de export direct exportă proba transformată numai dacă eșantionarea a fost activată în timpul importului. Această opțiune este cea mai potrivită dacă aveți de-a face cu seturi de date mai mici. Datele transformate pot fi, de asemenea, ingerate direct într-un magazin de caracteristici. Pentru mai multe informații, consultați Magazinul de caracteristici Amazon SageMaker. Fluxul de date poate fi, de asemenea, exportat ca o conductă SageMaker care poate fi orchestrată și programată conform cerințelor dumneavoastră. Pentru mai multe informații, vezi Pipelines Amazon SageMaker.

Concluzie

În această postare, am arătat cum să folosim Data Wrangler pentru a procesa datele de asistență medicală și pentru a realiza inginerie scalabilă a caracteristicilor într-un mod bazat pe instrumente, cu cod redus. Am învățat cum să aplicăm transformările și analizele încorporate în mod adecvat oriunde este necesar, combinându-le cu transformări personalizate pentru a adăuga și mai multă flexibilitate fluxului nostru de lucru de pregătire a datelor. De asemenea, am parcurs diferitele opțiuni pentru extinderea rețetei fluxului de date prin joburi de procesare distribuită. De asemenea, am învățat cum datele transformate pot fi utilizate cu ușurință pentru antrenarea unui model care să prezică insuficiența cardiacă.

Există multe alte funcții în Data Wrangler pe care nu le-am acoperit în această postare. Explorați ce este posibil în Pregătiți datele ML cu Amazon SageMaker Data Wrangler și învață cum să folosești Data Wrangler pentru următorul tău proiect de știință a datelor sau de învățare automată.


Despre Autori

Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Forrest Sun este arhitect senior de soluții cu echipa AWS Public Sector din Toronto, Canada. În ultimele două decenii, a lucrat în domeniul sănătății și al finanțelor. În afara serviciului, îi place să campeze împreună cu familia.

Inginerie de caracteristici la scară pentru sănătate și științe ale vieții cu Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Arunprasath Shankar este un arhitect specializat în soluții de inteligență artificială și învățare automată (AI / ML) cu AWS, ajutând clienții globali să își scaleze soluțiile de AI în mod eficient și eficient în cloud. În timpul liber, lui Arun îi place să urmărească filme SF și să asculte muzică clasică.

Timestamp-ul:

Mai mult de la Învățare automată AWS