Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Feature engineering op schaal voor gezondheidszorg en life sciences met Amazon SageMaker Data Wrangler

Machine learning (ML) ontwricht veel industrieën in een ongekend tempo. De sector van de gezondheidszorg en levenswetenschappen (HCLS) heeft de afgelopen jaren een snelle evolutie doorgemaakt, waarbij ML wordt omarmd in een groot aantal gebruiksscenario's voor het leveren van kwaliteitszorg en het verbeteren van de resultaten voor patiënten.

In een typische ML-levenscyclus besteden data-ingenieurs en wetenschappers het grootste deel van hun tijd aan de gegevensvoorbereiding en feature-engineeringstappen voordat ze zelfs maar beginnen met het proces van modelbouw en training. Het hebben van een tool die de toegangsdrempel voor datavoorbereiding kan verlagen, waardoor de productiviteit wordt verbeterd, is een zeer wenselijke vraag voor deze persona's. Amazon SageMaker-gegevens Wrangler is speciaal gebouwd door AWS om de leercurve te verminderen en gegevensbeoefenaars in staat te stellen gegevensvoorbereiding, opschoning en feature-engineeringtaken uit te voeren in minder inspanning en tijd. Het biedt een GUI-interface met veel ingebouwde functies en integraties met andere AWS-services zoals: Amazon eenvoudige opslagservice (Amazon S3) en Amazon SageMaker Feature Store, evenals gegevensbronnen van partners, waaronder Snowflake en Databricks.

In dit bericht laten we zien hoe u Data Wrangler kunt gebruiken om gezondheidsgegevens voor te bereiden voor het trainen van een model om hartfalen te voorspellen, rekening houdend met de demografische gegevens van een patiënt, eerdere medische aandoeningen en de geschiedenis van laboratoriumtestresultaten.

Overzicht oplossingen

De oplossing bestaat uit de volgende stappen:

  1. Verkrijg een dataset voor de gezondheidszorg als invoer voor Data Wrangler.
  2. Gebruik de ingebouwde transformatiefuncties van Data Wrangler om de dataset te transformeren. Dit omvat drop-kolommen, gegevens/tijd kenmerken, gegevenssets samenvoegen, ontbrekende waarden toerekenen, categorische variabelen coderen, numerieke waarden schalen, de gegevensset in evenwicht brengen en meer.
  3. Gebruik de aangepaste transformatiefunctie van Data Wrangler (Pandas- of PySpark-code) om aanvullende transformaties aan te vullen die nodig zijn naast de ingebouwde transformaties en om de uitbreidbaarheid van Data Wrangler te demonstreren. Dit omvat filterrijen, groepsgegevens, nieuwe dataframes vormen op basis van voorwaarden en meer.
  4. Gebruik de ingebouwde visualisatiefuncties van Data Wrangler om visuele analyses uit te voeren. Dit omvat doellekkage, functiecorrelatie, snel model en meer.
  5. Gebruik de ingebouwde exportopties van Data Wrangler om de getransformeerde dataset naar Amazon S3 te exporteren.
  6. Start een Jupyter-notebook om de getransformeerde dataset in Amazon S3 te gebruiken als invoer om een ​​model te trainen.

Een dataset genereren

Nu we de ML-probleemstelling hebben vastgesteld, hebben we ons eerst gericht op het verkrijgen van de gegevens die we nodig hebben. Onderzoeksstudies zoals: Voorspelling van hartfalen kan gegevens opleveren die al in goede staat zijn. We komen echter vaak scenario's tegen waarin de gegevens nogal rommelig zijn en samenvoeging, opschoning en verschillende andere transformaties vereisen die zeer specifiek zijn voor het zorgdomein voordat ze kunnen worden gebruikt voor ML-training. We willen gegevens vinden of genereren die rommelig genoeg zijn en u door de stappen leiden om deze voor te bereiden met behulp van Data Wrangler. Met dat in gedachten hebben we Synthea gekozen als een tool om synthetische gegevens te genereren die bij ons doel passen. synthea is een open-source synthetische patiëntgenerator die de medische geschiedenis van synthetische patiënten modelleert. Voer de volgende stappen uit om uw dataset te genereren:

  1. Volg de instructies volgens de snelle start documentatie om een Amazon SageMaker Studio domein en start Studio.
    Dit is een noodzakelijke stap. Het is optioneel als Studio al is ingesteld in uw account.
  2. Nadat Studio is gelanceerd, op de Launcher tabblad, kies Systeemterminal.
    Hiermee wordt een terminalsessie gestart die u een opdrachtregelinterface geeft om mee te werken.
  3. Om Synthea te installeren en de dataset in CSV-indeling te genereren, voert u de volgende opdrachten uit in de gestarte terminalsessie:
    $ 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

We leveren een parameter om de datasets met een populatiegrootte van 10,000 te genereren. Merk op dat de parameter grootte het aantal levende leden van de populatie aangeeft. Bovendien genereert Synthea ook gegevens voor dode leden van de populatie die een paar extra gegevenspunten kunnen toevoegen bovenop de gespecificeerde steekproefomvang.

Wacht tot het genereren van gegevens is voltooid. Deze stap duurt meestal ongeveer een uur of minder. Synthea genereert meerdere datasets, waaronder: patients, medications, allergies, conditions, en meer. Voor dit bericht gebruiken we drie van de resulterende datasets:

  • patienten.csv – Deze dataset is ongeveer 3.2 MB groot en bevat ongeveer 11,000 rijen met patiëntgegevens (25 kolommen inclusief patiënt-ID, geboortedatum, geslacht, adres en meer)
  • voorwaarden.csv – Deze dataset is ongeveer 47 MB ​​groot en bevat ongeveer 370,000 rijen medische toestandsgegevens (zes kolommen inclusief patiënt-ID, startdatum toestand, toestandscode en meer)
  • observaties.csv – Deze dataset is ongeveer 830 MB groot en bevat ongeveer 5 miljoen rijen observatiegegevens (acht kolommen inclusief patiënt-ID, observatiedatum, observatiecode, waarde en meer)

Er is een één-op-veel relatie tussen de patients en conditions gegevenssets. Er is ook een een-op-veel-relatie tussen de patients en observations gegevenssets. Voor een gedetailleerd datadictionary, zie: CSV-bestandsgegevenswoordenboek.

  1. Om de gegenereerde datasets te uploaden naar een bronbucket in Amazon S3, voert u de volgende opdrachten uit in de terminalsessie:
    $ cd ./output/csv
    $ aws s3 sync . s3://<source bucket name>/

Start Data Wrangler

Kies SageMaker-bronnen op de navigatiepagina in Studio en op de Projecten menu, kies Gegevens Wrangler om een ​​Data Wrangler-gegevensstroom te maken. Voor gedetailleerde stappen voor het starten van Data Wrangler vanuit Studio, zie: Aan de slag met Data Wrangler.

Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Datums importeren

Voer de volgende stappen uit om uw gegevens te importeren:

  1. Kies Amazon S3 en zoek het bestand patient.csv in de S3-bucket.
  2. In het Details kies het venster Eerste K For monsterneming.
  3. Enter 1100 For Grootte van de steekproef.
    In het voorbeeldvenster haalt Data Wrangler de eerste 100 rijen uit de gegevensset en geeft deze weer als voorbeeld.
  4. Kies import.
    Data Wrangler selecteert de eerste 1,100 patiënten uit het totale aantal patiënten (11,000 rijen) die door Synthea zijn gegenereerd en importeert de gegevens. Met de bemonsteringsaanpak kan Data Wrangler alleen de voorbeeldgegevens verwerken. Het stelt ons in staat om onze datastroom te ontwikkelen met een kleinere dataset, wat resulteert in een snellere verwerking en een kortere feedbackloop. Nadat we de gegevensstroom hebben gemaakt, kunnen we het ontwikkelde recept indienen bij een SageMaker-verwerking taak om de verwerking voor de volledige of grotere dataset op een gedistribueerde manier horizontaal uit te schalen.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  5. Herhaal dit proces voor het conditions en observations gegevenssets.
    1. Voor de conditions gegevensset, voer in 37000 For Grootte van de steekproef, wat 1/10 is van de in totaal 370,000 rijen die door Synthea zijn gegenereerd.
    2. Voor de observations gegevensset, voer in 500000 For Grootte van de steekproef, wat 1/10 is van de totale waarnemingen van 5 miljoen rijen die door Synthea zijn gegenereerd.

U zou drie datasets moeten zien, zoals weergegeven in de volgende schermafbeelding.

Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Transformeer de gegevens

Gegevenstransformatie is het proces waarbij de structuur, waarde of indeling van een of meer kolommen in de gegevensset wordt gewijzigd. Het proces wordt meestal ontwikkeld door een data-engineer en kan een uitdaging zijn voor mensen met een kleinere data-engineering-vaardigheden om de logica te ontcijferen die wordt voorgesteld voor de transformatie. Gegevenstransformatie maakt deel uit van het bredere feature-engineeringproces en de juiste volgorde van stappen is een ander belangrijk criterium om in gedachten te houden bij het bedenken van dergelijke recepten.

Data Wrangler is ontworpen als een low-code tool om de toegangsdrempel voor effectieve gegevensvoorbereiding te verminderen. Het wordt geleverd met meer dan 300 vooraf geconfigureerde gegevenstransformaties waaruit u kunt kiezen zonder een enkele regel code te hoeven schrijven. In de volgende secties zien we hoe de geïmporteerde datasets in Data Wrangler kunnen worden getransformeerd.

Zet kolommen neer in patienten.csv

We droppen eerst enkele kolommen uit de patients gegevensset. Door overbodige kolommen te verwijderen, wordt niet-relevante informatie uit de dataset verwijderd en kunnen we de hoeveelheid computerbronnen verminderen die nodig zijn om de dataset te verwerken en een model te trainen. In deze sectie laten we kolommen zoals SSN of paspoortnummer vallen op basis van gezond verstand dat deze kolommen geen voorspellende waarde hebben. Met andere woorden, ze helpen ons model niet om hartfalen te voorspellen. Onze studie houdt zich ook niet bezig met andere kolommen, zoals de invloed van geboorteplaats of zorgkosten op hartfalen van een patiënt, dus laten we ze ook vallen. Redundante kolommen kunnen ook worden geïdentificeerd door de ingebouwde analyses uit te voeren, zoals doellekkage, functiecorrelatie, multicollineariteit en meer, die in Data Wrangler zijn ingebouwd. Voor meer details over de ondersteunde analysetypes, zie: Analyseren en visualiseren. Daarnaast kunt u de Rapport Gegevenskwaliteit en inzichten om geautomatiseerde analyses uit te voeren op de datasets om te komen tot een lijst met overbodige kolommen om te elimineren.

  1. Kies het plusteken naast Datatypen voor de patient.csv dataset en kies Voeg transformatie toe.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  2. Kies Stap toevoegen En kies Beheer kolommen.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  3. Voor TransformerenKiezen Kolom laten vallen.
  4. Voor Kolommen om te laten vallen, kies de volgende kolommen:
    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. Kies Voorbeschouwing om de getransformeerde dataset te bekijken, kies dan Toevoegen.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
    Je zou de stap moeten zien Kolom laten vallen in uw lijst met transformaties.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Geef datum/tijd weer in patienten.csv

Nu gebruiken we de functie Datum/tijd weergeven om de nieuwe functie te genereren Year van het BIRTHDATE kolom in de patients gegevensset. We gebruiken de nieuwe functie in een volgende stap om de leeftijd van een patiënt te berekenen op het moment dat de observatie plaatsvindt.

  1. In het transformaties deelvenster van je Kolom laten vallen pagina voor de patients gegevensset, kies Stap toevoegen.
  2. Kies de Datum/tijd uitlichten transformeren.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  3. Kies Kolommen extraheren.
  4. Voor Invoerkolommen, voeg de kolom toe BIRTHDATE.
  5. kies Jaar en deselecteer Maand, Dag, uur, Minuut, Tweede.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  6. Kies Voorbeschouwing, kies dan Toevoegen.

Voeg transformaties toe in observations.csv

Data Wrangler ondersteunt aangepaste transformaties met behulp van Python (door de gebruiker gedefinieerde functies), PySpark, Panda's of PySpark (SQL). U kunt uw transformatietype kiezen op basis van uw bekendheid met elke optie en voorkeur. Voor de laatste drie opties stelt Data Wrangler de variabele bloot df zodat u toegang krijgt tot het dataframe en er transformaties op kunt toepassen. Voor een gedetailleerde uitleg en voorbeelden, zie: Aangepaste transformaties. In deze sectie voegen we drie aangepaste transformaties toe aan de observations gegevensset.

  1. Voeg een transformatie toe aan observations.csv en laat de . vallen DESCRIPTION kolom.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  2. Kies Voorbeschouwing, kies dan Toevoegen.
  3. In het transformaties kies het venster Stap toevoegen En kies Aangepaste transformatie.
  4. Kies in het vervolgkeuzemenu Python (panda's).
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  5. Voer de volgende code in:
    df = df[df["CODE"].isin(['8867-4','8480-6','8462-4','39156-5','777-3'])]

    Dit zijn LONIC-codes die overeenkomen met de volgende waarnemingen die we willen gebruiken als functies voor het voorspellen van hartfalen:

    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. Kies Voorbeschouwing, kies dan Toevoegen.
  7. Voeg een transformatie toe om uit te pakken Year en Quarter van het DATE kolom.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  8. Kies Voorbeschouwing, kies dan Toevoegen.
  9. Kies Stap toevoegen En kies Aangepaste transformatie.
  10. Kies in het vervolgkeuzemenu Python (PySpark).
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
    De vijf soorten waarnemingen worden mogelijk niet altijd op dezelfde datum geregistreerd. Een patiënt kan bijvoorbeeld op 21 januari zijn huisarts bezoeken en zijn systolische bloeddruk, diastolische bloeddruk, hartslag en body mass index laten meten en registreren. Een laboratoriumtest met bloedplaatjes kan echter op een later tijdstip op 2 februari worden gedaan. Daarom is het niet altijd mogelijk om dataframes op de observatiedatum aan te sluiten. Hier voegen we dataframes toe op een grove granulariteit op kwartaalbasis.
  11. Voer de volgende code in:
    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. Kies Voorbeschouwing, kies dan Toevoegen.
  13. Kies Stap toevoegen, kies dan Rijen beheren.
  14. Voor Transformeren, kiezen Duplicaten laten vallen.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  15. Kies Voorbeschouwing, kies dan Toevoegen.
  16. Kies Stap toevoegen En kies Aangepaste transformatie.
  17. Kies in het vervolgkeuzemenu Python (panda's).
  18. Voer de volgende code in om een ​​gemiddelde te nemen van gegevenspunten die dezelfde tijdswaarde delen:
    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. Kies Voorbeschouwing, kies dan Toevoegen.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Doe mee aan patienten.csv en observations.csv

In deze stap laten we zien hoe u effectief en eenvoudig complexe samenvoegingen op datasets kunt uitvoeren zonder code te schrijven via de krachtige gebruikersinterface van Data Wrangler. Raadpleeg voor meer informatie over de ondersteunde typen joins: Transformeer gegevens.

  1. Rechts van Transformeren: patienten.csv, kies het plusteken naast Stappen En kies Aanmelden.
    U kunt het getransformeerde bestand patienten.csv zien onder: datasets in het linkerdeelvenster.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  2. Rechts van Transformeren: observations.csv, Klik op de Stappen om de samenvoegbewerking te starten.
    Het getransformeerde observations.csv-bestand wordt nu weergegeven onder datasets in het linkerdeelvenster.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  3. Kies Configure .
  4. Voor Deelnametype, kiezen Binnenste.
  5. Voor Links, kiezen Id.
  6. Voor Rechts, kiezen patiënt.
  7. Kies Voorbeschouwing, kies dan Toevoegen.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Een aangepaste transformatie toevoegen aan de samengevoegde datasets

In deze stap berekenen we de leeftijd van een patiënt op het moment van observatie. We laten ook kolommen vallen die niet meer nodig zijn.

  1. Kies het plusteken naast 1e deelname En kies Voeg transformatie toe.
  2. Voeg een aangepaste transformatie toe in Panda's:
    df['age'] = df['DATE_year'] - df['BIRTHDATE_year']
    df = df.drop(columns=['BIRTHDATE','DEATHDATE','BIRTHDATE_year','patient'])

  3. Kies Voorbeschouwing, kies dan Toevoegen.

Aangepaste transformaties toevoegen aan condition.csv

  1. Kies het plusteken naast Transformeren: voorwaarden.csv En kies Voeg transformatie toe.
  2. Voeg een aangepaste transformatie toe in Panda's:
    df = df[df["CODE"].isin(['84114007', '88805009', '59621000', '44054006', '53741008', '449868002', '49436004'])]
    df = df.drop(columns=['DESCRIPTION','ENCOUNTER','STOP'])

Opmerking: Zoals we eerder hebben aangetoond, kunt u kolommen neerzetten met aangepaste code of met behulp van de ingebouwde transformaties van Data Wrangler. Aangepaste transformaties binnen Data Wrangler bieden de flexibiliteit om uw eigen transformatielogica in de vorm van codefragmenten in de ondersteunde frameworks te brengen. Deze fragmenten kunnen later worden doorzocht en indien nodig worden toegepast.

De codes in de voorgaande transformatie zijn SNOMED-CT-codes die overeenkomen met de volgende voorwaarden. De heart failure or chronic congestive heart failure conditie wordt het label. De overige voorwaarden gebruiken we als kenmerken voor het voorspellen van hartfalen. We laten ook een paar kolommen vallen die niet langer nodig zijn.

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

  1. Laten we vervolgens een aangepaste transformatie toevoegen in 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))
    )

    We voeren een left outer join uit om alle vermeldingen in het dataframe voor hartfalen te behouden. Een nieuwe kolom has_xxx wordt berekend voor elke andere aandoening dan hartfalen op basis van de startdatum van de aandoening. We zijn alleen geïnteresseerd in medische aandoeningen die voorafgaand aan het hartfalen zijn geregistreerd en gebruiken deze als functies voor het voorspellen van hartfalen.

  2. Voeg een ingebouwde . toe Beheer kolommen transformeren om de overbodige kolommen te verwijderen die niet langer nodig zijn:
    1. hypertension
    2. diabetes
    3. coronary
    4. smoke
    5. atrial
  3. Extract Year en  Quarter van het heartfailure kolom.
    Dit komt overeen met de granulariteit die we eerder gebruikten bij de transformatie van de observations gegevensset.
  4. We zouden in totaal 6 stappen moeten hebben voor condition.csv.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Voeg condition.csv toe aan de samengevoegde dataset

We voeren nu een nieuwe join uit om de dataset met voorwaarden aan de join te koppelen patients en observations gegevensset.

  1. Kies Transformeren: 1e deelname.
  2. Kies het plusteken en kies Aanmelden.
  3. Kies Stappen naast Transformeren: voorwaarden.csv.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  4. Kies Configure .
  5. Voor Deelnametype, kiezen Links buiten.
  6. Voor Links, kiezen Id.
  7. Voor Rechts, kiezen patiënt.
  8. Kies Voorbeschouwing, kies dan Toevoegen.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Transformaties toevoegen aan de samengevoegde datasets

Nu we alle drie de datasets hebben samengevoegd, gaan we wat extra transformaties toepassen.

  1. Voeg de volgende aangepaste transformatie toe in PySpark dus has_heartfailure wordt onze labelkolom:
    from pyspark.sql.functions import col, when
    df = (
        df.withColumn("has_heartfailure", when(col("heartfailure").isNotNull(), 1).otherwise(0))
    )

  2. Voeg de volgende aangepaste transformatie toe in 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")))))
        )
    )

    We zijn alleen geïnteresseerd in observaties die zijn geregistreerd voordat de aandoening hartfalen wordt gediagnosticeerd en gebruiken deze als functies voor het voorspellen van hartfalen. Waarnemingen die worden gedaan nadat hartfalen is vastgesteld, kunnen worden beïnvloed door de medicatie die een patiënt neemt, dus die willen we uitsluiten.

  3. Verwijder de overbodige kolommen die niet langer nodig zijn:
    1. Id
    2. DATE_year
    3. DATE_quarter
    4. patient
    5. heartfailure
    6. heartfailure_year
    7. heartfailure_quarter
  4. Op de Analyse tabblad, voor Type analyseKiezen Tabeloverzicht.
    Een snelle scan door het overzicht laat zien dat de MARITAL kolom bevat ontbrekende gegevens.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  5. Kies de Data tabblad en voeg een stap toe.
  6. Kies Handvat ontbreekt.
  7. Voor Transformeren, kiezen Vul ontbreekt.
  8. Voor Invoerkolommen, kiezen HUWELIJK.
  9. Voor Vul waarde, ga naar binnen S.
    Onze strategie hier is om aan te nemen dat de patiënt alleenstaand is als de burgerlijke staat waarde heeft. Je kunt een andere strategie hebben.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  10. Kies Voorbeschouwing, kies dan Toevoegen.
  11. Vul de ontbrekende waarde in als 0 voor has_hypertension, has_diabetes, has_coronary, has_smoke, has_atrial.

Marital en Gender zijn categoriale variabelen. Data Wrangler heeft een ingebouwde functie om categoriale variabelen te coderen.

  1. Voeg een stap toe en kies Codeer categorie.
  2. Voor Transformeren, kiezen One-hot coderen.
  3. Voor Invoerkolommen, kiezen HUWELIJK.
  4. Voor Uitvoerstijl, kiezen Kolom.
    Deze uitvoerstijl produceert gecodeerde waarden in afzonderlijke kolommen.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  5. Kies Voorbeschouwing, kies dan Toevoegen.
  6. Herhaal deze stappen voor de Geslacht kolom.

De one-hot codering splitst de echtelijke kolom in Marital_M (getrouwd) en Marital_S (enkel), en splitst de kolom Geslacht in Gender_M (man) en Gender_F (vrouw). Omdat Marital_M en Marital_S sluiten elkaar uit (zoals zijn Gender_M en Gender_F), kunnen we één kolom laten vallen om overbodige functies te vermijden.

  1. Val Marital_S en Gender_F.

Numerieke kenmerken zoals systolisch, hartslag en leeftijd hebben verschillende eenheidsnormen. Voor een op lineaire regressie gebaseerd model moeten we deze numerieke kenmerken eerst normaliseren. Anders kunnen sommige functies met hogere absolute waarden een ongerechtvaardigd voordeel hebben ten opzichte van andere functies met lagere absolute waarden en resulteren in slechte modelprestaties. Data Wrangler heeft de ingebouwde Transform Min-max scaler om de data te normaliseren. Voor een classificatiemodel op basis van een beslissingsboom is normalisatie niet vereist. Onze studie is een classificatieprobleem, dus we hoeven geen normalisatie toe te passen. Onevenwichtige klassen zijn een veelvoorkomend probleem bij classificatie. Onbalans treedt op wanneer de trainingsgegevensset een ernstig scheve klassenverdeling bevat. Wanneer onze dataset bijvoorbeeld onevenredig meer patiënten zonder hartfalen bevat dan patiënten met hartfalen, kan dit ertoe leiden dat het model vertekend is in de richting van het voorspellen van geen hartfalen en slecht presteert. Data Wrangler heeft een ingebouwde functie om het probleem aan te pakken.

  1. Voeg een aangepaste transformatie toe in Panda's om het gegevenstype van kolommen te converteren van het type "object" naar het numerieke type:
    import pandas as pd
    df=df.apply(pd.to_numeric)

  2. Kies de Analyse Tab.
  3. Voor Type analyseKiezen histogram.
  4. Voor X-as, kiezen heeft_hartfalen.
  5. Kies Voorbeschouwing.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
    Het is duidelijk dat we een onevenwichtige klasse hebben (meer datapunten gelabeld als geen hartfalen dan datapunten gelabeld als hartfalen).
  6. Ga terug naar de Data tabblad. Kiezen Stap toevoegen En kies Saldogegevens.
  7. Voor Doelkolom, kiezen heeft_hartfalen.
  8. Voor Gewenste verhouding, ga naar binnen 1.
  9. Voor Transformeren, kiezen VLOT.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
    SMOTE staat voor Synthetic Minority Over-sampling Technique. Het is een techniek om nieuwe minderheidsinstanties te maken en aan de gegevensset toe te voegen om een ​​klassenbalans te bereiken. Raadpleeg voor gedetailleerde informatie: SMOTE: Synthetic Minority Over-sampling-techniek.
  10. Kies Voorbeschouwing, kies dan Toevoegen.
  11. Herhaal de histogramanalyse in stap 20-23. Het resultaat is een evenwichtige klas.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Visualiseer doellekkage en functiecorrelatie

Vervolgens gaan we een paar visuele analyses uitvoeren met behulp van Data Wrangler's uitgebreide toolset van geavanceerde door ML ondersteunde analysetypen. Eerst kijken we naar doellekkage. Doellekkage treedt op wanneer gegevens in de trainingsgegevensset sterk gecorreleerd zijn met het doellabel, maar niet beschikbaar zijn in real-world gegevens op het moment van inferentie.

  1. Op de Tabblad Analysevoor Type analyseKiezen Doel lekkage.
  2. Voor Probleemtype, kiezen classificatie.
  3. Voor doelwit, kiezen heeft_hartfalen.
  4. Kies Voorbeschouwing.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
    Op basis van de analyse, hr is een doellek. We laten het in een volgende stap vallen. age wordt gemarkeerd als een doellek. Het is redelijk om te zeggen dat de leeftijd van een patiënt beschikbaar zal zijn tijdens de inferentietijd, dus we houden leeftijd als functie. Systolic en diastolic worden ook gemarkeerd als waarschijnlijke doellekkage. We verwachten de twee metingen tijdens de inferentietijd te hebben, dus we houden ze als kenmerken.
  5. Kies Toevoegen om de analyse toe te voegen.

Vervolgens kijken we naar de functiecorrelatie. We willen kenmerken selecteren die gecorreleerd zijn met het doel, maar onderling niet gecorreleerd zijn.

  1. Op de Tabblad Analysevoor Type analyseKiezen Functiecorrelatie.
  2. Voor CorrelatietypeKiezen lineair.
  3. Kies Voorbeschouwing.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

De coëfficiëntscores duiden op sterke correlaties tussen de volgende paren:

  • systolic en diastolic
  • bmi en age
  • has_hypertension en has_heartfailure (etiket)

Voor kenmerken die sterk gecorreleerd zijn, zijn matrices rekenkundig moeilijk om te keren, wat kan leiden tot numeriek onstabiele schattingen. Om de correlatie te verminderen, kunnen we er eenvoudig een uit het paar verwijderen. We laten vallen diastolic en bmi en houd systolic en age in een volgende stap.

Diastolische en bmi-kolommen laten vallen

Voeg extra transformatiestappen toe om de hr, diastolic en bmi kolommen met behulp van de ingebouwde transformatie.

Genereer het rapport Gegevenskwaliteit en inzichten

AWS onlangs aangekondigd de nieuwe functie Data Quality en Insights Report in Data Wrangler. Dit rapport verifieert automatisch de gegevenskwaliteit en detecteert afwijkingen in uw gegevens. Datawetenschappers en data-engineers kunnen deze tool gebruiken om domeinkennis efficiënt en snel toe te passen om datasets voor ML-modeltraining te verwerken. Deze stap is optioneel. Voer de volgende stappen uit om dit rapport over onze datasets te genereren:

  1. Op de Analyse tabblad, voor Type analyse, kiezen Rapport Gegevenskwaliteit en inzichten.
  2. Voor Doelkolom, kiezen heeft_hartfalen.
  3. Voor Type probleemselecteer Classificatie.
  4. Kies creëren.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

In een paar minuten genereert het een rapport met een samenvatting, visuals en aanbevelingen.

Een snelle modelanalyse genereren

We hebben onze gegevensvoorbereiding, -opschoning en feature-engineering voltooid. Data Wrangler heeft een ingebouwde functie die een ruwe schatting geeft van de verwachte voorspelde kwaliteit en de voorspellende kracht van features in onze dataset.

  1. Op de Analyse tabblad, voor Type analyseKiezen Snel model.
  2. Voor label, kiezen heeft_hartfalen.
  3. Kies Voorbeschouwing.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Volgens onze Quick Model-analyse kunnen we de functie zien has_hypertension heeft de hoogste score voor het belang van een kenmerk van alle functies.

Exporteer de gegevens en train het model

Laten we nu de getransformeerde functies die klaar zijn voor ML exporteren naar een S3-doelbucket en de volledige pijplijn voor feature-engineering die we tot nu toe hebben gemaakt met behulp van de voorbeelden, op een gedistribueerde manier in de volledige dataset schalen.

  1. Kies het plusteken naast het laatste vak in de gegevensstroom en kies Bestemming toevoegen.
  2. Kies Amazon S3.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  3. Voer een Naam dataset. Voor Amazon S3-locatie, kies een S3-emmer en kies vervolgens Bestemming toevoegen.
  4. Kies Baan creëren om een ​​gedistribueerde PySpark-verwerkingstaak te starten om de transformatie uit te voeren en de gegevens uit te voeren naar de S3-doelbucket.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
    Afhankelijk van de grootte van de datasets, kunnen we met deze optie het cluster eenvoudig configureren en horizontaal schalen zonder code. We hoeven ons geen zorgen te maken over het partitioneren van de gegevenssets of het beheren van het cluster en de interne onderdelen van Spark. Dit alles wordt automatisch voor ons geregeld door Data Wrangler.
  5. Kies in het linkerdeelvenster Vervolgens, 2. Taak configureren.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  6. Kies dan lopen.
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Als alternatief kunnen we de getransformeerde uitvoer ook exporteren naar S3 via een Jupyter Notebook. Met deze aanpak genereert Data Wrangler automatisch een Jupyter-notebook met alle code die nodig is om een ​​verwerkingstaak te starten om de gegevensstroomstappen (gemaakt met behulp van een voorbeeld) toe te passen op de grotere volledige dataset en de getransformeerde dataset te gebruiken als functies om de later van een opleidingsbaan af. De notebookcode kan gemakkelijk worden uitgevoerd met of zonder wijzigingen. Laten we nu de stappen doorlopen om dit voor elkaar te krijgen via de gebruikersinterface van Data Wrangler.

  1. Kies het plusteken naast de laatste stap in de gegevensstroom en kies Exporteren naar.
  2. Kies Amazon S3 (via Jupyter-notebook).
    Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  3. Het opent automatisch een nieuw tabblad met een Jupyter-notebook.
  4. Zoek in het Jupyter-notebook de cel in de (Optioneel) Volgende stappen sectie en verandering run_optional_steps oppompen van False naar True.
    De ingeschakelde optionele stappen in de notebook voeren het volgende uit:
    • Een model trainen met XGBoost
      Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.
  5. Ga terug naar de bovenkant van de notebook en op de lopen menu, kies Voer alle cellen uit.

Als u de gegenereerde notebook ongewijzigd gebruikt, start deze een SageMaker-verwerkingstaak die de verwerking uitbreidt over twee m5.4xgrote instanties om de volledige dataset op de S3-bucket te verwerken. U kunt het aantal exemplaren en exemplaartypen aanpassen op basis van de gegevenssetgrootte en de tijd die u nodig hebt om de taak te voltooien.

Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Wacht tot de trainingstaak van de laatste cel is voltooid. Het genereert een model in de SageMaker standaard S3-bucket.

Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Het getrainde model is klaar voor implementatie voor realtime inferentie of batchtransformatie. Merk op dat we synthetische gegevens hebben gebruikt om functionaliteiten in Data Wrangler te demonstreren en verwerkte gegevens hebben gebruikt voor het trainingsmodel. Aangezien de gegevens die we hebben gebruikt synthetisch zijn, is het gevolgtrekkingsresultaat van het getrainde model niet bedoeld voor diagnose van medische aandoeningen in de echte wereld of vervanging van het oordeel van artsen.

U kunt uw getransformeerde dataset ook rechtstreeks exporteren naar Amazon S3 door te kiezen voor Exporteren bovenaan de transformatievoorbeeldpagina. De directe exportoptie exporteert het getransformeerde monster alleen als bemonstering was ingeschakeld tijdens het importeren. Deze optie is het meest geschikt als je te maken hebt met kleinere datasets. De getransformeerde gegevens kunnen ook rechtstreeks in een feature store worden opgenomen. Voor meer informatie, zie: Amazon SageMaker Feature Store. De gegevensstroom kan ook worden geëxporteerd als een SageMaker-pijplijn die kan worden georkestreerd en gepland volgens uw vereisten. Voor meer informatie, zie Amazon SageMaker-pijpleidingen.

Conclusie

In dit bericht hebben we laten zien hoe u Data Wrangler kunt gebruiken om zorggegevens te verwerken en schaalbare feature-engineering uit te voeren op een toolgestuurde, low-code manier. We hebben geleerd hoe we de ingebouwde transformaties en analyses waar nodig op de juiste manier kunnen toepassen, en deze te combineren met aangepaste transformaties om nog meer flexibiliteit toe te voegen aan onze workflow voor gegevensvoorbereiding. We hebben ook de verschillende opties doorgenomen voor het opschalen van het gegevensstroomrecept via gedistribueerde verwerkingstaken. We hebben ook geleerd hoe de getransformeerde gegevens gemakkelijk kunnen worden gebruikt voor het trainen van een model om hartfalen te voorspellen.

Er zijn veel andere functies in Data Wrangler die we in dit bericht niet hebben behandeld. Ontdek wat er allemaal mogelijk is in Bereid ML-gegevens voor met Amazon SageMaker Data Wrangler en leer hoe u Data Wrangler kunt gebruiken voor uw volgende datawetenschaps- of machine learning-project.


Over de auteurs

Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Boszon is Senior Solution Architect bij het AWS Public Sector-team in Toronto, Canada. Hij heeft de afgelopen twee decennia in de gezondheidszorg en de financiële sector gewerkt. Naast zijn werk kampeert hij graag met zijn gezin.

Functie-engineering op schaal voor gezondheidszorg en biowetenschappen met Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.Arunprasath Shankar is een Artificial Intelligence en Machine Learning (AI / ML) Specialist Solutions Architect met AWS, die wereldwijde klanten helpt hun AI-oplossingen effectief en efficiënt in de cloud te schalen. In zijn vrije tijd kijkt Arun graag naar scifi-films en luistert hij naar klassieke muziek.

Tijdstempel:

Meer van AWS-machine learning