Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Funzionalità di ingegneria su larga scala per l'assistenza sanitaria e le scienze della vita con Amazon SageMaker Data Wrangler

Il machine learning (ML) sta sconvolgendo molti settori a un ritmo senza precedenti. Il settore sanitario e delle scienze della vita (HCLS) ha attraversato una rapida evoluzione negli ultimi anni, abbracciando il ML in una moltitudine di casi d'uso per fornire cure di qualità e migliorare i risultati dei pazienti.

In un tipico ciclo di vita di ML, ingegneri e scienziati dei dati trascorrono la maggior parte del loro tempo nella preparazione dei dati e nelle fasi di progettazione delle funzionalità prima ancora di iniziare con il processo di creazione di modelli e formazione. Avere uno strumento in grado di abbassare la barriera all'ingresso per la preparazione dei dati, migliorando così la produttività, è una richiesta altamente auspicabile per queste persone. Gestore di dati di Amazon SageMaker è stato creato appositamente da AWS per ridurre la curva di apprendimento e consentire ai professionisti dei dati di eseguire la preparazione dei dati, la pulizia e le attività di progettazione delle funzionalità in meno tempo e fatica. Offre un'interfaccia GUI con molte funzioni integrate e integrazioni con altri servizi AWS come Servizio di archiviazione semplice Amazon (Amazon S3) e Negozio di funzionalità Amazon SageMaker, nonché le origini dati dei partner, tra cui Snowflake e Databricks.

In questo post, dimostriamo come utilizzare Data Wrangler per preparare i dati sanitari per addestrare un modello per prevedere lo scompenso cardiaco, dati i dati demografici di un paziente, le condizioni mediche precedenti e la cronologia dei risultati dei test di laboratorio.

Panoramica della soluzione

La soluzione consiste nei seguenti passaggi:

  1. Acquisire un set di dati sanitari come input per Data Wrangler.
  2. Utilizza le funzioni di trasformazione integrate di Data Wrangler per trasformare il set di dati. Ciò include colonne di rilascio, funzionalità di dati/ora, unire set di dati, imputare valori mancanti, codificare variabili categoriali, ridimensionare valori numerici, bilanciare il set di dati e altro ancora.
  3. Usa la funzione di trasformazione personalizzata di Data Wrangler (codice Pandas o PySpark) per integrare le trasformazioni aggiuntive richieste oltre alle trasformazioni integrate e dimostrare l'estendibilità di Data Wrangler. Ciò include righe di filtro, dati di gruppo, creazione di nuovi frame di dati in base alle condizioni e altro ancora.
  4. Utilizza le funzioni di visualizzazione integrate di Data Wrangler per eseguire analisi visive. Ciò include la perdita del target, la correlazione delle funzionalità, il modello rapido e altro ancora.
  5. Utilizza le opzioni di esportazione integrate di Data Wrangler per esportare il set di dati trasformato in Amazon S3.
  6. Avvia un notebook Jupyter per utilizzare il set di dati trasformato in Amazon S3 come input per addestrare un modello.

Genera un set di dati

Ora che abbiamo stabilito la dichiarazione del problema ML, per prima cosa ci siamo concentrati sull'acquisizione dei dati di cui abbiamo bisogno. Studi di ricerca come Previsione di insufficienza cardiaca può fornire dati che sono già in buone condizioni. Tuttavia, incontriamo spesso scenari in cui i dati sono piuttosto disordinati e richiedono l'unione, la pulizia e molte altre trasformazioni che sono molto specifiche del dominio sanitario prima che possano essere utilizzati per la formazione ML. Vogliamo trovare o generare dati abbastanza disordinati e guidarti attraverso i passaggi per prepararli utilizzando Data Wrangler. Con questo in mente, abbiamo scelto Synthea come strumento per generare dati sintetici che si adattano al nostro obiettivo. Sintea è un generatore di pazienti sintetici open source che modella la storia medica dei pazienti sintetici. Per generare il tuo set di dati, completa i seguenti passaggi:

  1. Seguire le istruzioni di cui al avvio rapido documentazione per creare un Amazon Sage Maker Studio dominio e avviare Studio.
    Questo è un passaggio prerequisito. È facoltativo se Studio è già configurato nel tuo account.
  2. Dopo il lancio di Studio, il Launcher scheda, scegliere Terminale di sistema.
    Questo avvia una sessione terminale che ti offre un'interfaccia a riga di comando con cui lavorare.
  3. Per installare Synthea e generare il set di dati in formato CSV, eseguire i seguenti comandi nella sessione del terminale avviata:
    $ 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

Forniamo un parametro per generare i set di dati con una dimensione della popolazione di 10,000. Si noti che il parametro size indica il numero di membri vivi della popolazione. Inoltre, Synthea genera anche dati per i membri morti della popolazione che potrebbero aggiungere alcuni punti dati extra oltre alla dimensione del campione specificata.

Attendi fino al completamento della generazione dei dati. Questo passaggio richiede solitamente circa un'ora o meno. Synthea genera più set di dati, inclusi patients, medications, allergies, conditions, e altro ancora. Per questo post, utilizziamo tre dei set di dati risultanti:

  • pazienti.csv – Questo set di dati è di circa 3.2 MB e contiene circa 11,000 righe di dati del paziente (25 colonne tra cui ID paziente, data di nascita, sesso, indirizzo e altro)
  • condizioni.csv – Questo set di dati è di circa 47 MB ​​e contiene circa 370,000 righe di dati sulle condizioni mediche (sei colonne che includono ID paziente, data di inizio della condizione, codice della condizione e altro)
  • osservazioni.csv – Questo set di dati è di circa 830 MB e contiene circa 5 milioni di righe di dati di osservazione (otto colonne tra cui ID paziente, data di osservazione, codice di osservazione, valore e altro)

C'è una relazione uno-a-molti tra il patients ed conditions set di dati. C'è anche una relazione uno-a-molti tra il patients ed observations set di dati. Per un dizionario dei dati dettagliato, fare riferimento a Dizionario dati file CSV.

  1. Per caricare i set di dati generati in un bucket di origine in Amazon S3, esegui i seguenti comandi nella sessione del terminale:
    $ cd ./output/csv
    $ aws s3 sync . s3://<source bucket name>/

Avvia Data Wrangler

Scegli Risorse di SageMaker nella pagina di navigazione in Studio e sul Progetti menù, scegliere Wrangler di dati per creare un flusso di dati di Data Wrangler. Per i passaggi dettagliati su come avviare Data Wrangler da Studio, fare riferimento a Inizia con Data Wrangler.

Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Importa le date

Per importare i tuoi dati, completa i seguenti passaggi:

  1. Scegli Amazon S3 e individuare il file Patients.csv nel bucket S3.
  2. Nel Dettagli riquadro, scegli Primo K per Campionamento.
  3. entrare 1100 per Misura di prova.
    Nel riquadro di anteprima, Data Wrangler estrae le prime 100 righe dal set di dati e le elenca come anteprima.
  4. Scegli Importare.
    Data Wrangler seleziona i primi 1,100 pazienti dal totale dei pazienti (11,000 righe) generati da Synthea e importa i dati. L'approccio di campionamento consente a Data Wrangler di elaborare solo i dati di esempio. Ci consente di sviluppare il nostro flusso di dati con un set di dati più piccolo, il che si traduce in un'elaborazione più rapida e un ciclo di feedback più breve. Dopo aver creato il flusso di dati, possiamo inviare la ricetta sviluppata a a elaborazione SageMaker lavoro per scalare orizzontalmente l'elaborazione per il set di dati completo o più grande in modo distribuito.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  5. Ripetere questo processo per il conditions ed observations set di dati.
    1. Per la conditions set di dati, entrare 37000 per Misura di prova, che è 1/10 delle 370,000 righe totali generate da Synthea.
    2. Per la observations set di dati, entrare 500000 per Misura di prova, che è 1/10 delle osservazioni totali 5 milioni di righe generate da Synthea.

Dovresti vedere tre set di dati come mostrato nello screenshot seguente.

Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Trasforma i dati

La trasformazione dei dati è il processo di modifica della struttura, del valore o del formato di una o più colonne nel set di dati. Il processo è solitamente sviluppato da un ingegnere dei dati e può essere difficile per le persone con un set di competenze di ingegneria dei dati più piccolo decifrare la logica proposta per la trasformazione. La trasformazione dei dati fa parte del più ampio processo di progettazione delle funzionalità e la corretta sequenza di passaggi è un altro criterio importante da tenere a mente durante l'elaborazione di tali ricette.

Data Wrangler è progettato per essere uno strumento low-code per ridurre la barriera di ingresso per un'efficace preparazione dei dati. Viene fornito con oltre 300 trasformazioni di dati preconfigurate tra cui scegliere senza scrivere una singola riga di codice. Nelle sezioni seguenti, vediamo come trasformare i set di dati importati in Data Wrangler.

Elimina colonne in Patients.csv

Per prima cosa eliminiamo alcune colonne da patients set di dati. L'eliminazione delle colonne ridondanti rimuove le informazioni non rilevanti dal set di dati e ci aiuta a ridurre la quantità di risorse di elaborazione necessarie per elaborare il set di dati e addestrare un modello. In questa sezione, eliminiamo colonne come SSN o numero di passaporto in base al buon senso che queste colonne non hanno valore predittivo. In altre parole, non aiutano il nostro modello a prevedere l'insufficienza cardiaca. Il nostro studio non si occupa nemmeno di altre colonne come il luogo di nascita o l'influenza delle spese sanitarie sull'insufficienza cardiaca di un paziente, quindi le lasciamo cadere. Le colonne ridondanti possono anche essere identificate eseguendo le analisi integrate come la dispersione del target, la correlazione delle caratteristiche, la multicollinearità e altro, che sono integrate in Data Wrangler. Per maggiori dettagli sui tipi di analisi supportati, fare riferimento a Analizza e Visualizza. Inoltre, puoi utilizzare il Rapporto sulla qualità dei dati e sugli approfondimenti per eseguire analisi automatizzate sui set di dati per arrivare a un elenco di colonne ridondanti da eliminare.

  1. Scegli il segno più accanto a Tipi di dati per il set di dati Patients.csv e scegliere Aggiungi trasformazione.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  2. Scegli Aggiungi passaggio e scegli Gestisci colonne.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  3. Nel Trasformare¸ scegli Colonna di rilascio.
  4. Nel Colonne da eliminare, scegli le seguenti colonne:
    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. Scegli Anteprima per rivedere il set di dati trasformato, quindi scegliere Aggiungi.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
    Dovresti vedere il passaggio Colonna di rilascio nell'elenco delle trasformazioni.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Presenta data/ora in Patients.csv

Ora utilizziamo la funzione Metti in evidenza data/ora per generare la nuova funzionalità Year dal BIRTHDATE colonna nel patients set di dati. Utilizziamo la nuova funzionalità in un passaggio successivo per calcolare l'età di un paziente al momento dell'osservazione.

  1. Nel Trasformazioni riquadro del tuo Colonna di rilascio pagina per il patients set di dati, scegli Aggiungi passaggio.
  2. Scegliere il Metti in evidenza data/ora trasformare.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  3. Scegli Estrai colonne.
  4. Nel Colonne di input, aggiungi la colonna BIRTHDATE.
  5. Seleziona Anno e deseleziona Mese, Giorni, ora, Minuto, Seconda.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  6. Scegli Anteprima, Quindi scegliere Aggiungi.

Aggiungi trasformazioni in osservazioni.csv

Data Wrangler supporta trasformazioni personalizzate utilizzando Python (funzioni definite dall'utente), PySpark, Pandas o PySpark (SQL). Puoi scegliere il tipo di trasformazione in base alla tua familiarità con ciascuna opzione e preferenza. Per le ultime tre opzioni, Data Wrangler espone la variabile df per accedere al dataframe e applicare trasformazioni su di esso. Per una spiegazione dettagliata ed esempi, fare riferimento a Trasformazioni personalizzate. In questa sezione, aggiungiamo tre trasformazioni personalizzate al file observations set di dati.

  1. Aggiungi una trasformazione a osservazioni.csv e rilascia il file DESCRIPTION colonna.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  2. Scegli Anteprima, Quindi scegliere Aggiungi.
  3. Nel Trasformazioni riquadro, scegli Aggiungi passaggio e scegli Trasformazione personalizzata.
  4. Nel menu a discesa, scegli Python (Panda).
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  5. Inserisci il seguente codice:
    df = df[df["CODE"].isin(['8867-4','8480-6','8462-4','39156-5','777-3'])]

    Questi sono codici LONIC che corrispondono alle seguenti osservazioni che ci interessa utilizzare come caratteristiche per prevedere l'insufficienza cardiaca:

    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. Scegli Anteprima, Quindi scegliere Aggiungi.
  7. Aggiungi una trasformazione per estrarre Year ed Quarter dal DATE colonna.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  8. Scegli Anteprima, Quindi scegliere Aggiungi.
  9. Scegli Aggiungi passaggio e scegli Trasformazione personalizzata.
  10. Nel menu a discesa, scegli Pitone (PySpark).
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
    I cinque tipi di osservazioni potrebbero non essere registrati sempre nella stessa data. Ad esempio, un paziente può visitare il proprio medico di famiglia il 21 gennaio e farsi misurare e registrare la pressione sistolica, la pressione diastolica, la frequenza cardiaca e l'indice di massa corporea. Tuttavia, un test di laboratorio che includa le piastrine potrebbe essere eseguito in un secondo momento, il 2 febbraio. Pertanto, non è sempre possibile unire i frame di dati entro la data di osservazione. Qui uniamo i frame di dati con una granularità grossolana su base trimestrale.
  11. Inserisci il seguente codice:
    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. Scegli Anteprima, Quindi scegliere Aggiungi.
  13. Scegli Aggiungi passaggio, Quindi scegliere Gestisci le righe.
  14. Nel Trasformarescegli Elimina duplicati.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  15. Scegli Anteprima, Quindi scegliere Aggiungi.
  16. Scegli Aggiungi passaggio e scegli Trasformazione personalizzata.
  17. Nel menu a discesa, scegli Python (Panda).
  18. Immettere il codice seguente per ottenere una media di punti dati che condividono lo stesso valore temporale:
    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. Scegli Anteprima, Quindi scegliere Aggiungi.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Unisciti apatients.csv e osservazioni.csv

In questo passaggio, mostriamo come eseguire in modo efficace e semplice join complessi su set di dati senza scrivere codice tramite la potente interfaccia utente di Data Wrangler. Per ulteriori informazioni sui tipi di join supportati, fare riferimento a Trasforma i dati.

  1. Alla destra Trasforma: pazienti.csv, scegli il segno più accanto a Passi e scegli Registrati.
    Puoi vedere il file Patients.csv trasformato elencato sotto Dataset nel riquadro di sinistra.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  2. Alla destra Trasforma: osservazioni.csv, Fare clic sul Passi per avviare l'operazione di unione.
    Il file di osservazioni.csv trasformato è ora elencato sotto Dataset nel riquadro di sinistra.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  3. Scegli Configurazione.
  4. Nel Tipo di unionescegli Interno.
  5. Nel sinistrascegli Id.
  6. Nel La giustascegli paziente.
  7. Scegli Anteprima, Quindi scegliere Aggiungi.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Aggiungi una trasformazione personalizzata ai set di dati uniti

In questo passaggio, calcoliamo l'età di un paziente al momento dell'osservazione. Eliminiamo anche le colonne che non sono più necessarie.

  1. Scegli il segno più accanto a 1a adesione e scegli Aggiungi trasformazione.
  2. Aggiungi una trasformazione personalizzata in Panda:
    df['age'] = df['DATE_year'] - df['BIRTHDATE_year']
    df = df.drop(columns=['BIRTHDATE','DEATHDATE','BIRTHDATE_year','patient'])

  3. Scegli Anteprima, Quindi scegliere Aggiungi.

Aggiungi trasformazioni personalizzate a condition.csv

  1. Scegli il segno più accanto a Trasforma: condition.csv e scegli Aggiungi trasformazione.
  2. Aggiungi una trasformazione personalizzata in Panda:
    df = df[df["CODE"].isin(['84114007', '88805009', '59621000', '44054006', '53741008', '449868002', '49436004'])]
    df = df.drop(columns=['DESCRIPTION','ENCOUNTER','STOP'])

Nota: Come dimostrato in precedenza, puoi eliminare le colonne utilizzando il codice personalizzato o utilizzando le trasformazioni integrate fornite da Data Wrangler. Le trasformazioni personalizzate all'interno di Data Wrangler offrono la flessibilità di portare la propria logica di trasformazione sotto forma di frammenti di codice nei framework supportati. Questi frammenti possono essere successivamente ricercati e applicati, se necessario.

I codici nella trasformazione precedente sono codici SNOMED-CT che corrispondono alle seguenti condizioni. Il heart failure or chronic congestive heart failure condizione diventa l'etichetta. Usiamo le condizioni rimanenti come caratteristiche per prevedere l'insufficienza cardiaca. Eliminiamo anche alcune colonne che non sono più necessarie.

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

  1. Successivamente, aggiungiamo una trasformazione personalizzata 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))
    )

    Eseguiamo un join esterno sinistro per mantenere tutte le voci nel dataframe dell'insufficienza cardiaca. Una nuova colonna has_xxx viene calcolato per ogni condizione diversa dall'insufficienza cardiaca in base alla data di inizio della condizione. Siamo interessati solo alle condizioni mediche che sono state registrate prima dell'insufficienza cardiaca e le usiamo come caratteristiche per prevedere l'insufficienza cardiaca.

  2. Aggiungi un built-in Gestisci colonne trasforma per eliminare le colonne ridondanti che non sono più necessarie:
    1. hypertension
    2. diabetes
    3. coronary
    4. smoke
    5. atrial
  3. Estratto Year ed  Quarter dal heartfailure colonna.
    Questo corrisponde alla granularità che abbiamo usato in precedenza nella trasformazione di observations set di dati.
  4. Dovremmo avere un totale di 6 passaggi per condition.csv.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Unisci condition.csv al set di dati unito

Ora eseguiamo un nuovo join per unire il dataset delle condizioni al join patients ed observations set di dati.

  1. Scegli Trasforma: 1a unione.
  2. Scegli il segno più e scegli Registrati.
  3. Scegli Passi accanto a Trasforma: condition.csv.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  4. Scegli Configurazione.
  5. Nel Tipo di unionescegli Esterno sinistro.
  6. Nel sinistrascegli Id.
  7. Nel La giustascegli paziente.
  8. Scegli Anteprima, Quindi scegliere Aggiungi.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Aggiungi trasformazioni ai set di dati uniti

Ora che abbiamo unito tutti e tre i set di dati, applichiamo alcune trasformazioni aggiuntive.

  1. Aggiungi la seguente trasformazione personalizzata in PySpark così has_heartfailure diventa la nostra colonna etichetta:
    from pyspark.sql.functions import col, when
    df = (
        df.withColumn("has_heartfailure", when(col("heartfailure").isNotNull(), 1).otherwise(0))
    )

  2. Aggiungi la seguente trasformazione personalizzata 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")))))
        )
    )

    Siamo interessati solo alle osservazioni registrate prima di quando viene diagnosticata la condizione di insufficienza cardiaca e le usiamo come caratteristiche per prevedere l'insufficienza cardiaca. Le osservazioni fatte dopo la diagnosi di insufficienza cardiaca possono essere influenzate dai farmaci che un paziente assume, quindi vogliamo escluderli.

  3. Elimina le colonne ridondanti che non sono più necessarie:
    1. Id
    2. DATE_year
    3. DATE_quarter
    4. patient
    5. heartfailure
    6. heartfailure_year
    7. heartfailure_quarter
  4. Sulla Analisi scheda, per Tipo di analisi¸ scegli Riepilogo tabella.
    Una rapida scansione del riepilogo mostra che il MARITAL la colonna ha dati mancanti.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  5. Scegliere il Dati scheda e aggiungi un passaggio.
  6. Scegli Maniglia mancante.
  7. Nel Trasformarescegli Riempimento mancante.
  8. Nel Colonne di inputscegli CIVILE.
  9. Nel Valore di riempimento, accedere S.
    La nostra strategia qui è presumere che il paziente sia single se lo stato civile ha un valore mancante. Puoi avere una strategia diversa.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  10. Scegli Anteprima, Quindi scegliere Aggiungi.
  11. Riempi il valore mancante come 0 per has_hypertension, has_diabetes, has_coronary, has_smoke, has_atrial.

Marital ed Gender sono variabili categoriali. Data Wrangler ha una funzione incorporata per codificare variabili categoriali.

  1. Aggiungi un passaggio e scegli Codifica categoriale.
  2. Nel Trasformarescegli Codifica a caldo.
  3. Nel Colonne di inputscegli CIVILE.
  4. Nel Stile di outputscegli Colonna.
    Questo stile di output produce valori codificati in colonne separate.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  5. Scegli Anteprima, Quindi scegliere Aggiungi.
  6. Ripetere questi passaggi per il Sesso colonna.

La codifica one-hot divide la colonna coniugale in Marital_M (sposato) e Marital_S (singolo) e divide la colonna Sesso in Gender_M (maschio) e Gender_F (femmina). Perché Marital_M ed Marital_S si escludono a vicenda (come lo sono Gender_M ed Gender_F), possiamo eliminare una colonna per evitare funzionalità ridondanti.

  1. Cadere Marital_S ed Gender_F.

Le caratteristiche numeriche come sistolica, frequenza cardiaca ed età hanno standard di unità diversi. Per un modello basato sulla regressione lineare, dobbiamo prima normalizzare queste caratteristiche numeriche. In caso contrario, alcune funzionalità con valori assoluti più elevati potrebbero avere un vantaggio ingiustificato rispetto ad altre funzionalità con valori assoluti inferiori e risultare in scarse prestazioni del modello. Data Wrangler ha lo scaler Min-max di trasformazione integrato per normalizzare i dati. Per un modello di classificazione basato sull'albero decisionale, la normalizzazione non è richiesta. Il nostro studio è un problema di classificazione, quindi non è necessario applicare la normalizzazione. Le classi sbilanciate sono un problema comune nella classificazione. Lo squilibrio si verifica quando il set di dati di addestramento contiene una distribuzione di classi fortemente distorta. Ad esempio, quando il nostro set di dati contiene un numero sproporzionato di pazienti senza insufficienza cardiaca rispetto ai pazienti con insufficienza cardiaca, il modello può essere distorto verso la previsione dell'assenza di insufficienza cardiaca e prestazioni scadenti. Data Wrangler ha una funzione integrata per affrontare il problema.

  1. Aggiungi una trasformazione personalizzata in Pandas per convertire il tipo di dati delle colonne dal tipo "oggetto" al tipo numerico:
    import pandas as pd
    df=df.apply(pd.to_numeric)

  2. Scegliere il Analisi scheda.
  3. Nel Tipo di analisi¸ scegli Istogramma.
  4. Nel Asse Xscegli ha_insufficienza cardiaca.
  5. Scegli Anteprima.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
    È ovvio che abbiamo una classe sbilanciata (più punti dati etichettati come senza insufficienza cardiaca rispetto ai punti dati etichettati come insufficienza cardiaca).
  6. Torna al Dati tab. Scegliere Aggiungi passaggio e scegli Dati di equilibrio.
  7. Nel Colonna di destinazionescegli ha_insufficienza cardiaca.
  8. Nel Rapporto desiderato, accedere 1.
  9. Nel Trasformarescegli percossero.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
    SMOTE è l'acronimo di Synthetic Minority Over-sampling Technique. È una tecnica per creare nuove istanze di minoranza e aggiungerle al set di dati per raggiungere l'equilibrio di classe. Per informazioni dettagliate, fare riferimento a SMOTE: Tecnica di sovracampionamento di minoranza sintetica.
  10. Scegli Anteprima, Quindi scegliere Aggiungi.
  11. Ripetere l'analisi dell'istogramma nel passaggio 20-23. Il risultato è una classe equilibrata.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Visualizza la perdita del target e la correlazione delle funzioni

Successivamente, eseguiremo alcune analisi visive utilizzando il ricco set di strumenti di Data Wrangler di tipi di analisi avanzati supportati da ML. Per prima cosa, esaminiamo la perdita target. La perdita di destinazione si verifica quando i dati nel set di dati di addestramento sono fortemente correlati all'etichetta di destinazione, ma non sono disponibili nei dati del mondo reale al momento dell'inferenza.

  1. Sulla Scheda Analisi, Per Tipo di analisi¸ scegli Perdita di destinazione.
  2. Nel Tipo di problemascegli classificazione.
  3. Nel Targetscegli ha_insufficienza cardiaca.
  4. Scegli Anteprima.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
    Sulla base dell'analisi, hr è una perdita di destinazione. Lo rilasceremo in un passaggio successivo. age è contrassegnato come una perdita target. È ragionevole affermare che l'età di un paziente sarà disponibile durante il tempo di inferenza, quindi manteniamo l'età come caratteristica. Systolic ed diastolic sono anche contrassegnati come probabili perdite target. Ci aspettiamo di avere le due misurazioni durante il tempo di inferenza, quindi le manteniamo come caratteristiche.
  5. Scegli Aggiungi per aggiungere l'analisi.

Quindi, esaminiamo la correlazione delle caratteristiche. Vogliamo selezionare le caratteristiche che sono correlate con l'obiettivo ma non sono correlate tra loro.

  1. Sulla Scheda Analisi, Per Tipo di analisi¸ scegli Correlazione delle caratteristiche.
  2. Nel Tipo di correlazione¸ scegli lineare.
  3. Scegli Anteprima.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

I punteggi dei coefficienti indicano forti correlazioni tra le seguenti coppie:

  • systolic ed diastolic
  • bmi ed age
  • has_hypertension ed has_heartfailure (etichetta)

Per le caratteristiche fortemente correlate, le matrici sono computazionalmente difficili da invertire, il che può portare a stime numericamente instabili. Per mitigare la correlazione, possiamo semplicemente rimuoverne uno dalla coppia. Cadiamo diastolic ed bmi e mantenere systolic ed age in un passaggio successivo.

Drop colonne diastoliche e bmi

Aggiungi ulteriori passaggi di trasformazione per eliminare il file hr, diastolic ed bmi colonne utilizzando la trasformazione incorporata.

Genera il rapporto sulla qualità dei dati e sugli approfondimenti

AWS di recente ha annunciato la nuova funzione Data Quality and Insights Report in Data Wrangler. Questo rapporto verifica automaticamente la qualità dei dati e rileva le anomalie nei tuoi dati. I data scientist e gli ingegneri dei dati possono utilizzare questo strumento per applicare in modo efficiente e rapido le conoscenze di dominio per elaborare i set di dati per l'addestramento del modello ML. Questo passaggio è facoltativo. Per generare questo rapporto sui nostri set di dati, completa i seguenti passaggi:

  1. Sulla Analisi scheda, per Tipo di analisiscegli Rapporto sulla qualità dei dati e sugli approfondimenti.
  2. Nel Colonna di destinazionescegli ha_insufficienza cardiaca.
  3. Nel Tipo di problema, selezionare Classificazione.
  4. Scegli Creare.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

In pochi minuti genera un report con un riepilogo, elementi visivi e consigli.

Genera un'analisi del modello rapido

Abbiamo completato la preparazione dei dati, la pulizia e la progettazione delle funzionalità. Data Wrangler ha una funzione integrata che fornisce una stima approssimativa della qualità prevista prevista e del potere predittivo delle funzionalità nel nostro set di dati.

  1. Sulla Analisi scheda, per Tipo di analisi¸ scegli Modello veloce.
  2. Nel Discograficascegli ha_insufficienza cardiaca.
  3. Scegli Anteprima.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Secondo la nostra analisi del modello rapido, possiamo vedere la funzione has_hypertension ha il punteggio di importanza della caratteristica più alto tra tutte le caratteristiche.

Esporta i dati e addestra il modello

Ora esportiamo le funzionalità trasformate pronte per il ML in un bucket S3 di destinazione e ridimensioniamo l'intera pipeline di progettazione delle funzionalità che abbiamo creato finora utilizzando i campioni nell'intero set di dati in modo distribuito.

  1. Scegli il segno più accanto all'ultima casella nel flusso di dati e scegli Aggiungi destinazione.
  2. Scegli Amazon S3.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  3. Entrare in un Nome del set di dati. For Posizione Amazon S3, scegli un bucket S3, quindi scegli Aggiungi destinazione.
  4. Scegli Crea lavoro per avviare un processo di elaborazione PySpark distribuito per eseguire la trasformazione e inviare i dati al bucket S3 di destinazione.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
    A seconda delle dimensioni dei set di dati, questa opzione ci consente di configurare facilmente il cluster e di ridimensionarlo orizzontalmente senza codice. Non dobbiamo preoccuparci di partizionare i set di dati o di gestire il cluster e gli interni di Spark. Tutto questo viene automaticamente curato per noi da Data Wrangler.
  5. Nel riquadro di sinistra, scegli Quindi, 2. Configura il lavoro.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  6. Quindi scegli Correre.
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

In alternativa, possiamo anche esportare l'output trasformato in S3 tramite un notebook Jupyter. Con questo approccio, Data Wrangler genera automaticamente un notebook Jupyter con tutto il codice necessario per avviare un processo di elaborazione per applicare i passaggi del flusso di dati (creati utilizzando un campione) sul set di dati completo più ampio e utilizzare il set di dati trasformato come funzionalità per avviare dopo un lavoro di formazione. Il codice del notebook può essere eseguito facilmente con o senza apportare modifiche. Esaminiamo ora i passaggi su come farlo tramite l'interfaccia utente di Data Wrangler.

  1. Scegli il segno più accanto all'ultimo passaggio nel flusso di dati e scegli Esporta a.
  2. Scegli Amazon S3 (tramite Jupyter Notebook).
    Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  3. Apre automaticamente una nuova scheda con un taccuino Jupyter.
  4. Nel taccuino di Jupyter, individua la cella nel file (Facoltativo) Passaggi successivi sezione e modifica run_optional_steps da False a True.
    I passaggi facoltativi abilitati nel notebook eseguono quanto segue:
    • Addestra un modello usando XGBoost
      Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
  5. Torna all'inizio del taccuino e sul Correre menù, scegliere Esegui tutte le celle.

Se utilizzi il notebook generato così com'è, avvia un processo di elaborazione SageMaker che scala l'elaborazione su due istanze m5.4xlarge per elaborare l'intero set di dati sul bucket S3. Puoi regolare il numero di istanze e i tipi di istanze in base alle dimensioni del set di dati e al tempo necessario per completare il lavoro.

Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Attendi fino al completamento del lavoro di addestramento dall'ultima cella. Genera un modello nel bucket S3 predefinito di SageMaker.

Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Il modello addestrato è pronto per la distribuzione per l'inferenza in tempo reale o la trasformazione batch. Si noti che abbiamo utilizzato dati sintetici per dimostrare le funzionalità in Data Wrangler e utilizzato i dati elaborati per il modello di addestramento. Dato che i dati che abbiamo utilizzato sono sintetici, il risultato dell'inferenza dal modello addestrato non è inteso per la diagnosi di condizioni mediche nel mondo reale o per la sostituzione del giudizio da parte dei medici.

Puoi anche esportare direttamente il tuo set di dati trasformato in Amazon S3 scegliendo Esportare nella parte superiore della pagina di anteprima della trasformazione. L'opzione di esportazione diretta esporta il campione trasformato solo se il campionamento è stato abilitato durante l'importazione. Questa opzione è più adatta se hai a che fare con set di dati più piccoli. I dati trasformati possono anche essere inseriti direttamente in un feature store. Per ulteriori informazioni, fare riferimento a Negozio di funzionalità Amazon SageMaker. Il flusso di dati può anche essere esportato come una pipeline SageMaker che può essere orchestrata e pianificata in base alle proprie esigenze. Per ulteriori informazioni, vedere Pipeline di Amazon SageMaker.

Conclusione

In questo post, abbiamo mostrato come utilizzare Data Wrangler per elaborare i dati sanitari ed eseguire l'ingegneria delle funzionalità scalabili in un modo low-code basato su strumenti. Abbiamo imparato come applicare le trasformazioni e le analisi integrate in modo appropriato ovunque necessario, combinandole con trasformazioni personalizzate per aggiungere ancora più flessibilità al nostro flusso di lavoro di preparazione dei dati. Abbiamo anche esaminato le diverse opzioni per la scalabilità orizzontale della ricetta del flusso di dati tramite processi di elaborazione distribuiti. Abbiamo anche appreso come i dati trasformati possono essere facilmente utilizzati per addestrare un modello per prevedere l'insufficienza cardiaca.

Ci sono molte altre funzionalità in Data Wrangler che non abbiamo trattato in questo post. Esplora cosa è possibile fare Prepara i dati ML con Amazon SageMaker Data Wrangler e scopri come sfruttare Data Wrangler per il tuo prossimo progetto di data science o machine learning.


Informazioni sugli autori

Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Sole della foresta è un Senior Solution Architect con il team del settore pubblico di AWS a Toronto, in Canada. Ha lavorato nel settore sanitario e finanziario negli ultimi due decenni. Al di fuori del lavoro, gli piace andare in campeggio con la sua famiglia.

Progettazione di funzionalità su larga scala per il settore sanitario e delle scienze della vita con Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.Arunprasath Shankar è uno specialista in Solutions Architect di intelligenza artificiale e apprendimento automatico (AI / ML) con AWS, che aiuta i clienti globali a scalare le loro soluzioni di intelligenza artificiale in modo efficace ed efficiente nel cloud. Nel suo tempo libero, Arun ama guardare film di fantascienza e ascoltare musica classica.

Timestamp:

Di più da Apprendimento automatico di AWS