Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Ingénierie des fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler

L'apprentissage automatique (ML) perturbe de nombreuses industries à un rythme sans précédent. L'industrie des soins de santé et des sciences de la vie (HCLS) a connu une évolution rapide ces dernières années, adoptant le ML dans une multitude de cas d'utilisation pour fournir des soins de qualité et améliorer les résultats pour les patients.

Dans un cycle de vie ML typique, les ingénieurs de données et les scientifiques consacrent la majorité de leur temps à la préparation des données et aux étapes d'ingénierie des fonctionnalités avant même de commencer le processus de création et de formation de modèles. Avoir un outil qui peut réduire la barrière à l'entrée pour la préparation des données, améliorant ainsi la productivité, est une demande hautement souhaitable pour ces personnes. Gestionnaire de données Amazon SageMaker est spécialement conçu par AWS pour réduire la courbe d'apprentissage et permettre aux praticiens des données d'accomplir des tâches de préparation, de nettoyage et d'ingénierie des fonctionnalités en moins d'efforts et de temps. Il offre une interface graphique avec de nombreuses fonctions intégrées et des intégrations avec d'autres services AWS tels que Service de stockage simple Amazon (Amazon S3) et Magasin de fonctionnalités Amazon SageMaker, ainsi que des sources de données partenaires, notamment Snowflake et Databricks.

Dans cet article, nous montrons comment utiliser Data Wrangler pour préparer des données de santé pour la formation d'un modèle permettant de prédire l'insuffisance cardiaque, compte tenu des données démographiques d'un patient, de ses conditions médicales antérieures et de l'historique des résultats des tests de laboratoire.

Vue d'ensemble de la solution

La solution comprend les étapes suivantes:

  1. Acquérir un ensemble de données de soins de santé en entrée de Data Wrangler.
  2. Utilisez les fonctions de transformation intégrées de Data Wrangler pour transformer l'ensemble de données. Cela inclut la suppression de colonnes, la caractérisation des données/temps, la jointure d'ensembles de données, l'imputation de valeurs manquantes, l'encodage de variables catégorielles, la mise à l'échelle de valeurs numériques, l'équilibrage de l'ensemble de données, etc.
  3. Utilisez la fonction de transformation personnalisée de Data Wrangler (code Pandas ou PySpark) pour compléter les transformations supplémentaires requises au-delà des transformations intégrées et démontrer l'extensibilité de Data Wrangler. Cela inclut le filtrage des lignes, le regroupement des données, la création de nouvelles trames de données en fonction des conditions, etc.
  4. Utilisez les fonctions de visualisation intégrées de Data Wrangler pour effectuer une analyse visuelle. Cela inclut la fuite cible, la corrélation des fonctionnalités, le modèle rapide, etc.
  5. Utilisez les options d'exportation intégrées de Data Wrangler pour exporter l'ensemble de données transformé vers Amazon S3.
  6. Lancez un bloc-notes Jupyter pour utiliser l'ensemble de données transformé dans Amazon S3 comme entrée pour former un modèle.

Générer un jeu de données

Maintenant que nous avons défini l'énoncé du problème de ML, nous nous concentrons d'abord sur l'acquisition des données dont nous avons besoin. Des études de recherche telles que Prédiction d'insuffisance cardiaque peut fournir des données qui sont déjà en bon état. Cependant, nous rencontrons souvent des scénarios dans lesquels les données sont assez désordonnées et nécessitent une jointure, un nettoyage et plusieurs autres transformations très spécifiques au domaine de la santé avant de pouvoir être utilisées pour la formation ML. Nous voulons trouver ou générer des données suffisamment désordonnées et vous guider à travers les étapes de préparation à l'aide de Data Wrangler. Dans cet esprit, nous avons choisi Synthea comme outil pour générer des données synthétiques qui correspondent à notre objectif. Synthéa est un générateur de patients synthétiques open source qui modélise les antécédents médicaux des patients synthétiques. Pour générer votre ensemble de données, procédez comme suit :

  1. Suivez les instructions selon le de démarrage rapide documentation pour créer un Amazon SageMakerStudio domaine et lancez Studio.
    Il s'agit d'une étape préalable. Il est facultatif si Studio est déjà configuré dans votre compte.
  2. Après le lancement de Studio, sur le lanceur onglet, choisissez Terminal système.
    Cela lance une session de terminal qui vous donne une interface de ligne de commande avec laquelle travailler.
  3. Pour installer Synthea et générer le jeu de données au format CSV, exécutez les commandes suivantes dans la session terminal lancée :
    $ 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

Nous fournissons un paramètre pour générer les ensembles de données avec une taille de population de 10,000 XNUMX. Notez que le paramètre de taille indique le nombre de membres vivants de la population. De plus, Synthea génère également des données pour les membres décédés de la population, ce qui peut ajouter quelques points de données supplémentaires en plus de la taille d'échantillon spécifiée.

Attendez que la génération des données soit terminée. Cette étape prend généralement environ une heure ou moins. Synthea génère plusieurs ensembles de données, y compris patients, medications, allergies, conditions, et plus. Pour cet article, nous utilisons trois des ensembles de données résultants :

  • patients.csv – Cet ensemble de données fait environ 3.2 Mo et contient environ 11,000 25 lignes de données sur les patients (XNUMX colonnes comprenant l'ID du patient, la date de naissance, le sexe, l'adresse, etc.)
  • conditions.csv – Cet ensemble de données fait environ 47 Mo et contient environ 370,000 XNUMX lignes de données sur l'état de santé (six colonnes comprenant l'ID du patient, la date de début de l'état, le code de l'état, etc.)
  • observations.csv – Cet ensemble de données fait environ 830 Mo et contient environ 5 millions de lignes de données d'observation (huit colonnes comprenant l'ID du patient, la date d'observation, le code d'observation, la valeur, etc.)

Il existe une relation un-à-plusieurs entre les patients ainsi que conditions ensembles de données. Il existe également une relation un-à-plusieurs entre les patients ainsi que observations ensembles de données. Pour un dictionnaire de données détaillé, reportez-vous à Dictionnaire de données de fichier CSV.

  1. Pour charger les ensembles de données générés dans un compartiment source dans Amazon S3, exécutez les commandes suivantes dans la session de terminal :
    $ cd ./output/csv
    $ aws s3 sync . s3://<source bucket name>/

Lancer Data Wrangler

Selectionnez Ressources SageMaker dans la page de navigation de Studio et sur la Projets menu, choisissez Traqueur de données pour créer un flux de données Data Wrangler. Pour connaître la procédure détaillée de lancement de Data Wrangler depuis Studio, reportez-vous à Premiers pas avec Data Wrangler.

Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Importer des dates

Pour importer vos données, procédez comme suit :

  1. Selectionnez Amazon S3 et recherchez le fichier patients.csv dans le compartiment S3.
  2. Dans le Détails volet, choisissez Premier K en Échantillonnage.
  3. Entrer 1100 en Taille de l'échantillon.
    Dans le volet d'aperçu, Data Wrangler extrait les 100 premières lignes de l'ensemble de données et les répertorie sous forme d'aperçu.
  4. Selectionnez L’.
    Data Wrangler sélectionne les 1,100 11,000 premiers patients parmi le nombre total de patients (XNUMX XNUMX lignes) généré par Synthea et importe les données. L'approche d'échantillonnage permet à Data Wrangler de ne traiter que les exemples de données. Cela nous permet de développer notre flux de données avec un ensemble de données plus petit, ce qui se traduit par un traitement plus rapide et une boucle de rétroaction plus courte. Après avoir créé le flux de données, nous pouvons soumettre la recette développée à un Traitement SageMaker tâche pour étendre horizontalement le traitement de l'ensemble de données complet ou plus volumineux de manière distribuée.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  5. Répétez ce processus pour le conditions ainsi que observations jeux de données.
    1. Pour le conditions ensemble de données, entrez 37000 en Taille de l'échantillon, soit 1/10 du total de 370,000 XNUMX lignes générées par Synthea.
    2. Pour le observations ensemble de données, entrez 500000 en Taille de l'échantillon, soit 1/10 du total des 5 millions de lignes d'observations générées par Synthea.

Vous devriez voir trois jeux de données comme indiqué dans la capture d'écran suivante.

Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Transformez les données

La transformation des données est le processus de modification de la structure, de la valeur ou du format d'une ou de plusieurs colonnes de l'ensemble de données. Le processus est généralement développé par un ingénieur de données et peut être difficile pour les personnes ayant des compétences en ingénierie de données plus petites pour déchiffrer la logique proposée pour la transformation. La transformation des données fait partie du processus d'ingénierie des fonctionnalités plus large, et la séquence correcte des étapes est un autre critère important à garder à l'esprit lors de la conception de telles recettes.

Data Wrangler est conçu pour être un outil low-code permettant de réduire la barrière d'entrée pour une préparation efficace des données. Il est livré avec plus de 300 transformations de données préconfigurées parmi lesquelles vous pouvez choisir sans écrire une seule ligne de code. Dans les sections suivantes, nous verrons comment transformer les jeux de données importés dans Data Wrangler.

Déposer des colonnes dans patients.csv

Nous supprimons d'abord quelques colonnes de la patients base de données. La suppression des colonnes redondantes supprime les informations non pertinentes de l'ensemble de données et nous aide à réduire la quantité de ressources informatiques nécessaires pour traiter l'ensemble de données et former un modèle. Dans cette section, nous supprimons des colonnes telles que SSN ou numéro de passeport en nous basant sur le bon sens que ces colonnes n'ont aucune valeur prédictive. En d'autres termes, ils n'aident pas notre modèle à prédire l'insuffisance cardiaque. Notre étude ne se préoccupe pas non plus d'autres colonnes telles que le lieu de naissance ou l'influence des dépenses de santé sur l'insuffisance cardiaque d'un patient, nous les supprimons donc également. Les colonnes redondantes peuvent également être identifiées en exécutant les analyses intégrées telles que la fuite cible, la corrélation des caractéristiques, la multicolinéarité, etc., qui sont intégrées à Data Wrangler. Pour plus de détails sur les types d'analyses pris en charge, reportez-vous à Analyser et visualiser. De plus, vous pouvez utiliser le Rapport sur la qualité des données et les informations d'effectuer des analyses automatisées sur les jeux de données pour arriver à une liste de colonnes redondantes à éliminer.

  1. Choisissez le signe plus à côté de Types de données pour l'ensemble de données patients.csv et choisissez Ajouter une transformation.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  2. Selectionnez Ajouter une étape et choisissez Gérer les colonnes.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  3. Pour Transformer¸ choisissez Déposer la colonne.
  4. Pour Colonnes à supprimer, choisissez les colonnes suivantes :
    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. Selectionnez Aperçu pour examiner l'ensemble de données transformé, puis choisissez Ajouter.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
    Vous devriez voir l'étape Déposer la colonne dans votre liste de transformations.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Caractériser la date/heure dans patients.csv

Maintenant, nous utilisons la fonction Featurize date/time pour générer la nouvelle fonctionnalité Year du BIRTHDATE colonne dans le patients base de données. Nous utilisons la nouvelle fonctionnalité dans une étape ultérieure pour calculer l'âge d'un patient au moment de l'observation.

  1. Dans le Transforme volet de votre Déposer la colonne page pour le patients jeu de données, choisissez Ajouter une étape.
  2. Choisissez le Caractériser la date/l'heure transformer.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  3. Selectionnez Extraire les colonnes.
  4. Pour Colonnes d'entrée, ajouter la colonne BIRTHDATE.
  5. Sélectionnez Année et désélectionner Mois, Jour, heure, Minute, Deuxième.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  6. Selectionnez Aperçu, Puis choisissez Ajouter.

Ajouter des transformations dans observations.csv

Data Wrangler prend en charge les transformations personnalisées à l'aide de Python (fonctions définies par l'utilisateur), PySpark, Pandas ou PySpark (SQL). Vous pouvez choisir votre type de transformation en fonction de votre familiarité avec chaque option et préférence. Pour les trois dernières options, Data Wrangler expose la variable df pour que vous puissiez accéder à la trame de données et y appliquer des transformations. Pour une explication détaillée et des exemples, reportez-vous à Transformations personnalisées. Dans cette section, nous ajoutons trois transformations personnalisées au observations jeu de données.

  1. Ajoutez une transformation à observations.csv et déposez le DESCRIPTION colonne.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  2. Selectionnez Aperçu, Puis choisissez Ajouter.
  3. Dans le Transforme volet, choisissez Ajouter une étape et choisissez Transformation personnalisée.
  4. Dans le menu déroulant, choisissez Python (Pandas).
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  5. Entrez le code suivant:
    df = df[df["CODE"].isin(['8867-4','8480-6','8462-4','39156-5','777-3'])]

    Ce sont des codes LONIC qui correspondent aux observations suivantes que nous souhaitons utiliser comme caractéristiques pour prédire l'insuffisance cardiaque :

    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. Selectionnez Aperçu, Puis choisissez Ajouter.
  7. Ajouter une transformation pour extraire Year ainsi que Quarter du DATE colonne.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  8. Selectionnez Aperçu, Puis choisissez Ajouter.
  9. Selectionnez Ajouter une étape et choisissez Transformation personnalisée.
  10. Dans le menu déroulant, choisissez Python (PySpark).
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
    Les cinq types d'observations ne sont pas toujours enregistrés à la même date. Par exemple, un patient peut consulter son médecin de famille le 21 janvier et faire mesurer et enregistrer sa tension artérielle systolique, sa tension artérielle diastolique, sa fréquence cardiaque et son indice de masse corporelle. Cependant, un test de laboratoire qui inclut les plaquettes peut être effectué à une date ultérieure le 2 février. Par conséquent, il n'est pas toujours possible de joindre les dataframes à la date d'observation. Ici, nous joignons les dataframes avec une granularité grossière au trimestre.
  11. Entrez le code suivant:
    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. Selectionnez Aperçu, Puis choisissez Ajouter.
  13. Selectionnez Ajouter une étape, Puis choisissez Gérer les lignes.
  14. Pour Transformer, choisissez Supprimer les doublons.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  15. Selectionnez Aperçu, Puis choisissez Ajouter.
  16. Selectionnez Ajouter une étape et choisissez Transformation personnalisée.
  17. Dans le menu déroulant, choisissez Python (Pandas).
  18. Saisissez le code suivant pour calculer la moyenne des points de données partageant la même valeur temporelle :
    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. Selectionnez Aperçu, Puis choisissez Ajouter.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Joindre patients.csv et observations.csv

Dans cette étape, nous montrons comment effectuer efficacement et facilement des jointures complexes sur des ensembles de données sans écrire de code via la puissante interface utilisateur de Data Wrangler. Pour en savoir plus sur les types de jointures pris en charge, reportez-vous à Transformer les données.

  1. À la droite de Transformer : patients.csv, choisissez le signe plus à côté de Étapes et choisissez S'inscrire.
    Vous pouvez voir le fichier patients.csv transformé répertorié sous Jeux de données dans le volet de gauche.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  2. À la droite de Transformer : observations.csv, Cliquez sur le Étapes pour lancer l'opération de jointure.
    Le fichier observations.csv transformé est maintenant répertorié sous Jeux de données dans le volet de gauche.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  3. Selectionnez Configurer.
  4. Pour Type de jointure, choisissez Inner.
  5. Pour Gauche, choisissez Id.
  6. Pour Droite, choisissez patientforward.
  7. Selectionnez Aperçu, Puis choisissez Ajouter.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Ajouter une transformation personnalisée aux ensembles de données joints

Dans cette étape, nous calculons l'âge d'un patient au moment de l'observation. Nous supprimons également les colonnes qui ne sont plus nécessaires.

  1. Choisissez le signe plus à côté de 1ère Rejoindre et choisissez Ajouter une transformation.
  2. Ajoutez une transformation personnalisée dans Pandas :
    df['age'] = df['DATE_year'] - df['BIRTHDATE_year']
    df = df.drop(columns=['BIRTHDATE','DEATHDATE','BIRTHDATE_year','patient'])

  3. Selectionnez Aperçu, Puis choisissez Ajouter.

Ajouter des transformations personnalisées à conditions.csv

  1. Choisissez le signe plus à côté de Transformer : conditions.csv et choisissez Ajouter une transformation.
  2. Ajoutez une transformation personnalisée dans Pandas :
    df = df[df["CODE"].isin(['84114007', '88805009', '59621000', '44054006', '53741008', '449868002', '49436004'])]
    df = df.drop(columns=['DESCRIPTION','ENCOUNTER','STOP'])

Remarque: Comme nous l'avons démontré précédemment, vous pouvez supprimer des colonnes à l'aide d'un code personnalisé ou à l'aide des transformations intégrées fournies par Data Wrangler. Les transformations personnalisées dans Data Wrangler offrent la flexibilité d'apporter votre propre logique de transformation sous la forme d'extraits de code dans les frameworks pris en charge. Ces extraits peuvent ensuite être recherchés et appliqués si nécessaire.

Les codes de la transformation précédente sont des codes SNOMED-CT qui correspondent aux conditions suivantes. La heart failure or chronic congestive heart failure la condition devient l'étiquette. Nous utilisons les conditions restantes comme caractéristiques pour prédire l'insuffisance cardiaque. Nous supprimons également quelques colonnes qui ne sont plus nécessaires.

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

  1. Ensuite, ajoutons une transformation personnalisée dans 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))
    )

    Nous effectuons une jointure externe gauche pour conserver toutes les entrées dans la base de données d'insuffisance cardiaque. Une nouvelle colonne has_xxx est calculé pour chaque affection autre que l'insuffisance cardiaque en fonction de la date de début de l'affection. Nous ne nous intéressons qu'aux conditions médicales qui ont été enregistrées avant l'insuffisance cardiaque et les utilisons comme caractéristiques pour prédire l'insuffisance cardiaque.

  2. Ajouter un intégré Gérer les colonnes transform pour supprimer les colonnes redondantes qui ne sont plus nécessaires :
    1. hypertension
    2. diabetes
    3. coronary
    4. smoke
    5. atrial
  3. Extraction Year ainsi que  Quarter du heartfailure colonne.
    Cela correspond à la granularité que nous avons utilisée précédemment dans la transformation de la observations jeu de données.
  4. Nous devrions avoir un total de 6 étapes pour conditions.csv.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Joindre conditions.csv au jeu de données joint

Nous effectuons maintenant une nouvelle jointure pour joindre l'ensemble de données de conditions à la jointure patients ainsi que observations jeu de données.

  1. Selectionnez Transformer : 1ère jointure.
  2. Choisissez le signe plus et choisissez S'inscrire.
  3. Selectionnez Étapes à côté de Transformer : conditions.csv.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  4. Selectionnez Configurer.
  5. Pour Type de jointure, choisissez Extérieur gauche.
  6. Pour Gauche, choisissez Id.
  7. Pour Droite, choisissez patientforward.
  8. Selectionnez Aperçu, Puis choisissez Ajouter.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Ajouter des transformations aux ensembles de données joints

Maintenant que les trois ensembles de données sont joints, appliquons quelques transformations supplémentaires.

  1. Ajoutez la transformation personnalisée suivante dans PySpark afin has_heartfailure devient notre colonne d'étiquette :
    from pyspark.sql.functions import col, when
    df = (
        df.withColumn("has_heartfailure", when(col("heartfailure").isNotNull(), 1).otherwise(0))
    )

  2. Ajoutez la transformation personnalisée suivante dans 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")))))
        )
    )

    Nous ne nous intéressons qu'aux observations enregistrées avant le diagnostic de l'insuffisance cardiaque et les utilisons comme caractéristiques pour prédire l'insuffisance cardiaque. Les observations prises après le diagnostic d'insuffisance cardiaque peuvent être affectées par les médicaments que prend un patient, nous voulons donc les exclure.

  3. Supprimez les colonnes redondantes qui ne sont plus nécessaires :
    1. Id
    2. DATE_year
    3. DATE_quarter
    4. patient
    5. heartfailure
    6. heartfailure_year
    7. heartfailure_quarter
  4. Sur le Analyse onglet, pour Type d'analyse¸ choisissez Résumé du tableau.
    Une analyse rapide du résumé montre que le MARITAL la colonne contient des données manquantes.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  5. Choisissez le Données onglet et ajouter une étape.
  6. Selectionnez Poignée manquante.
  7. Pour Transformer, choisissez Remplir manquant.
  8. Pour Colonnes d'entrée, choisissez MATRIMONIAL.
  9. Pour Valeur de remplissage, Entrer S.
    Notre stratégie ici est de supposer que le patient est célibataire si l'état matrimonial a une valeur manquante. Vous pouvez avoir une stratégie différente.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  10. Selectionnez Aperçu, Puis choisissez Ajouter.
  11. Remplir la valeur manquante comme 0 pour has_hypertension, has_diabetes, has_coronary, has_smoke, has_atrial.

Marital ainsi que Gender sont des variables catégorielles. Data Wrangler a une fonction intégrée pour coder les variables catégorielles.

  1. Ajoutez une étape et choisissez Encoder catégoriel.
  2. Pour Transformer, choisissez Encodage à chaud.
  3. Pour Colonnes d'entrée, choisissez MATRIMONIAL.
  4. Pour Style de sortie, choisissez Colonne.
    Ce style de sortie produit des valeurs codées dans des colonnes séparées.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  5. Selectionnez Aperçu, Puis choisissez Ajouter.
  6. Répétez ces étapes pour le Genre colonne.

L'encodage one-hot divise la colonne Marital en Marital_M (marié) et Marital_S (célibataire) et divise la colonne Sexe en Gender_M (homme) et Gender_F (femelle). Car Marital_M ainsi que Marital_S s'excluent mutuellement (comme le sont Gender_M ainsi que Gender_F), nous pouvons supprimer une colonne pour éviter les fonctionnalités redondantes.

  1. Goutte Marital_S ainsi que Gender_F.

Les caractéristiques numériques telles que la systolique, la fréquence cardiaque et l'âge ont des normes d'unité différentes. Pour un modèle basé sur la régression linéaire, nous devons d'abord normaliser ces caractéristiques numériques. Sinon, certaines fonctionnalités avec des valeurs absolues plus élevées peuvent avoir un avantage injustifié sur d'autres fonctionnalités avec des valeurs absolues inférieures et entraîner de mauvaises performances du modèle. Data Wrangler a le scaler de transformation Min-max intégré pour normaliser les données. Pour un modèle de classification basé sur un arbre de décision, la normalisation n'est pas nécessaire. Notre étude est un problème de classification, nous n'avons donc pas besoin d'appliquer la normalisation. Les classes déséquilibrées sont un problème courant en classification. Un déséquilibre se produit lorsque l'ensemble de données d'entraînement contient une distribution de classe fortement asymétrique. Par exemple, lorsque notre ensemble de données contient de manière disproportionnée plus de patients sans insuffisance cardiaque que de patients souffrant d'insuffisance cardiaque, cela peut entraîner un biais du modèle vers l'absence d'insuffisance cardiaque et une mauvaise performance. Data Wrangler a une fonction intégrée pour résoudre le problème.

  1. Ajoutez une transformation personnalisée dans Pandas pour convertir le type de données des colonnes de type "objet" en type numérique :
    import pandas as pd
    df=df.apply(pd.to_numeric)

  2. Choisissez le Analyse languette.
  3. Pour Type d'analyse¸ choisissez Histogramme.
  4. Pour axe des X,, choisissez has_heartfailure.
  5. Selectionnez Aperçu.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
    Il est évident que nous avons une classe déséquilibrée (plus de points de données étiquetés comme sans insuffisance cardiaque que de points de données étiquetés comme insuffisance cardiaque).
  6. Retour à la Données languette. Choisir Ajouter une étape et choisissez Données de solde.
  7. Pour Colonne cible, choisissez has_heartfailure.
  8. Pour Rapport souhaité, Entrer 1.
  9. Pour Transformer, choisissez SMOTÉ.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
    SMOTE est l'acronyme de Synthetic Minority Over-sampling Technique. C'est une technique pour créer de nouvelles instances minoritaires et les ajouter à l'ensemble de données pour atteindre l'équilibre des classes. Pour des informations détaillées, reportez-vous à SMOTE : technique de suréchantillonnage synthétique minoritaire.
  10. Selectionnez Aperçu, Puis choisissez Ajouter.
  11. Répétez l'analyse de l'histogramme à l'étape 20-23. Le résultat est une classe équilibrée.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Visualisez la fuite cible et la corrélation des fonctionnalités

Ensuite, nous allons effectuer quelques analyses visuelles à l'aide du riche ensemble d'outils de Data Wrangler de types d'analyse avancés pris en charge par ML. Tout d'abord, nous examinons la fuite cible. Une fuite de cible se produit lorsque les données de l'ensemble de données d'apprentissage sont fortement corrélées avec l'étiquette cible, mais ne sont pas disponibles dans les données du monde réel au moment de l'inférence.

  1. Sur le Onglet Analyse, Pour Type d'analyse¸ choisissez Fuite cible.
  2. Pour Type de problème, choisissez classification.
  3. Pour Target, choisissez has_heartfailure.
  4. Selectionnez Aperçu.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
    Sur la base de l'analyse, hr est une fuite cible. Nous le déposerons dans une étape ultérieure. age est signalé comme une fuite cible. Il est raisonnable de dire que l'âge d'un patient sera disponible pendant le temps d'inférence, nous gardons donc l'âge comme caractéristique. Systolic ainsi que diastolic sont également signalés comme des fuites cibles probables. Nous nous attendons à avoir les deux mesures pendant le temps d'inférence, nous les gardons donc comme caractéristiques.
  5. Selectionnez Ajouter pour ajouter l'analyse.

Ensuite, nous examinons la corrélation des fonctionnalités. Nous voulons sélectionner des fonctionnalités qui sont corrélées avec la cible mais qui ne sont pas corrélées entre elles.

  1. Sur le Onglet Analyse, Pour Type d'analyse¸ choisissez Corrélation des fonctionnalités.
  2. Pour Type de corrélation¸ choisissez linéaire.
  3. Selectionnez Aperçu.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Les scores des coefficients indiquent de fortes corrélations entre les paires suivantes :

  • systolic ainsi que diastolic
  • bmi ainsi que age
  • has_hypertension ainsi que has_heartfailure (étiqueter)

Pour les caractéristiques fortement corrélées, les matrices sont difficiles à inverser en termes de calcul, ce qui peut conduire à des estimations numériquement instables. Pour atténuer la corrélation, nous pouvons simplement en supprimer un de la paire. Nous laissons tomber diastolic ainsi que bmi et de garder systolic ainsi que age dans une étape ultérieure.

Déposez les colonnes diastolique et bmi

Ajoutez des étapes de transformation supplémentaires pour supprimer le hr, diastolic ainsi que bmi colonnes à l'aide de la transformation intégrée.

Générer le rapport sur la qualité des données et les informations

AWS récemment annoncé la nouvelle fonctionnalité de rapport sur la qualité des données et les informations dans Data Wrangler. Ce rapport vérifie automatiquement la qualité des données et détecte les anomalies dans vos données. Les data scientists et les ingénieurs de données peuvent utiliser cet outil pour appliquer efficacement et rapidement les connaissances du domaine afin de traiter des ensembles de données pour la formation de modèles ML. Cette étape est facultative. Pour générer ce rapport sur nos ensembles de données, procédez comme suit :

  1. Sur le Analyse onglet, pour Type d'analyse, choisissez Rapport sur la qualité des données et les informations.
  2. Pour Colonne cible, choisissez has_heartfailure.
  3. Pour Type de problème, sélectionnez Classification.
  4. Selectionnez Création.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

En quelques minutes, il génère un rapport avec un résumé, des visuels et des recommandations.

Générer une analyse de modèle rapide

Nous avons terminé la préparation, le nettoyage et l'ingénierie des fonctionnalités des données. Data Wrangler a une fonction intégrée qui fournit une estimation approximative de la qualité prévue prévue et de la puissance prédictive des fonctionnalités de notre ensemble de données.

  1. Sur le Analyse onglet, pour Type d'analyse¸ choisissez Modèle rapide.
  2. Pour Libellé, choisissez has_heartfailure.
  3. Selectionnez Aperçu.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Selon notre analyse de modèle rapide, nous pouvons voir la fonctionnalité has_hypertension a le score d'importance de fonctionnalité le plus élevé parmi toutes les fonctionnalités.

Exporter les données et former le modèle

Exportons maintenant les fonctionnalités prêtes pour le ML transformées vers un compartiment S3 de destination et redimensionnons l'ensemble du pipeline d'ingénierie de fonctionnalités que nous avons créé jusqu'à présent en utilisant les exemples dans l'ensemble de données complet de manière distribuée.

  1. Choisissez le signe plus à côté de la dernière case du flux de données et choisissez Ajouter destination.
  2. Selectionnez Amazon S3.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  3. Entrez Nom du jeu de données. For Emplacement Amazon S3, choisissez un compartiment S3, puis choisissez Ajouter une destination.
  4. Selectionnez Créer un emploi pour lancer une tâche de traitement PySpark distribuée afin d'effectuer la transformation et de générer les données dans le compartiment S3 de destination.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
    En fonction de la taille des ensembles de données, cette option nous permet de configurer facilement le cluster et de le mettre à l'échelle horizontalement sans code. Nous n'avons pas à nous soucier du partitionnement des ensembles de données ou de la gestion du cluster et des composants internes de Spark. Tout cela est automatiquement pris en charge pour nous par Data Wrangler.
  5. Dans le volet de gauche, choisissez Ensuite, 2. Configurez le travail.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  6. Alors choisi Courir.
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Alternativement, nous pouvons également exporter la sortie transformée vers S3 via un Jupyter Notebook. Avec cette approche, Data Wrangler génère automatiquement un bloc-notes Jupyter avec tout le code nécessaire pour lancer une tâche de traitement afin d'appliquer les étapes de flux de données (créées à l'aide d'un échantillon) sur l'ensemble de données complet plus volumineux et d'utiliser l'ensemble de données transformé comme fonctionnalités pour lancer- quitter un emploi de formation plus tard. Le code du bloc-notes peut être exécuté facilement avec ou sans modifications. Passons maintenant en revue les étapes pour y parvenir via l'interface utilisateur de Data Wrangler.

  1. Choisissez le signe plus à côté de la dernière étape du flux de données et choisissez Exporter vers.
  2. Selectionnez Amazon S3 (via le bloc-notes Jupyter).
    Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  3. Il ouvre automatiquement un nouvel onglet avec un bloc-notes Jupyter.
  4. Dans le bloc-notes Jupyter, localisez la cellule dans le (Facultatif) Étapes suivantes section et changement run_optional_steps de False à True.
    Les étapes facultatives activées dans le bloc-notes effectuent les opérations suivantes :
    • Entraîner un modèle à l'aide de XGBoost
      Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.
  5. Retournez en haut du cahier et sur le Courir menu, choisissez Exécuter toutes les cellules.

Si vous utilisez le bloc-notes généré tel quel, il lance une tâche de traitement SageMaker qui étend le traitement sur deux instances m5.4xlarge pour traiter l'ensemble de données complet sur le compartiment S3. Vous pouvez ajuster le nombre d'instances et de types d'instances en fonction de la taille de l'ensemble de données et du temps dont vous avez besoin pour terminer la tâche.

Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Attendez que la tâche d'apprentissage de la dernière cellule soit terminée. Il génère un modèle dans le compartiment S3 par défaut de SageMaker.

Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Le modèle entraîné est prêt à être déployé pour l'inférence en temps réel ou la transformation par lots. Notez que nous avons utilisé des données synthétiques pour démontrer les fonctionnalités de Data Wrangler et utilisé des données traitées pour le modèle de formation. Étant donné que les données que nous avons utilisées sont synthétiques, le résultat d'inférence du modèle formé n'est pas destiné au diagnostic de condition médicale dans le monde réel ou à la substitution du jugement des médecins.

Vous pouvez également exporter directement votre jeu de données transformé vers Amazon S3 en choisissant Exportations en haut de la page d'aperçu de la transformation. L'option d'exportation directe n'exporte l'échantillon transformé que si l'échantillonnage a été activé lors de l'importation. Cette option est la mieux adaptée si vous traitez des ensembles de données plus petits. Les données transformées peuvent également être ingérées directement dans un magasin de fonctionnalités. Pour plus d'informations, reportez-vous à Magasin de fonctionnalités Amazon SageMaker. Le flux de données peut également être exporté sous forme de pipeline SageMaker qui peut être orchestré et planifié selon vos besoins. Pour plus d'informations, voir Pipelines Amazon SageMaker.

Conclusion

Dans cet article, nous avons montré comment utiliser Data Wrangler pour traiter les données de santé et effectuer une ingénierie de fonctionnalités évolutives de manière pilotée par des outils et à faible code. Nous avons appris à appliquer les transformations et analyses intégrées de manière appropriée là où cela est nécessaire, en les combinant avec des transformations personnalisées pour ajouter encore plus de flexibilité à notre flux de travail de préparation des données. Nous avons également parcouru les différentes options de mise à l'échelle de la recette de flux de données via des tâches de traitement distribué. Nous avons également appris comment les données transformées peuvent être facilement utilisées pour former un modèle afin de prédire l'insuffisance cardiaque.

Il existe de nombreuses autres fonctionnalités dans Data Wrangler que nous n'avons pas couvertes dans cet article. Explorez ce qui est possible dans Préparer les données de ML avec Amazon SageMaker Data Wrangler et apprenez à tirer parti de Data Wrangler pour votre prochain projet de science des données ou d'apprentissage automatique.


À propos des auteurs

Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Soleil de la forêt est un architecte de solutions principal au sein de l'équipe du secteur public d'AWS à Toronto, au Canada. Il a travaillé dans les secteurs de la santé et de la finance au cours des deux dernières décennies. En dehors du travail, il aime faire du camping avec sa famille.

Ingénierie de fonctionnalités à grande échelle pour les soins de santé et les sciences de la vie avec Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Recherche verticale. Aï.Arunprasath Shankar est un architecte de solutions spécialisé en intelligence artificielle et apprentissage automatique (AI / ML) avec AWS, qui aide les clients du monde entier à faire évoluer leurs solutions d'IA de manière efficace et efficiente dans le cloud. Dans ses temps libres, Arun aime regarder des films de science-fiction et écouter de la musique classique.

Horodatage:

Plus de Apprentissage automatique AWS