Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler

O aprendizado de máquina (ML) está revolucionando muitos setores em um ritmo sem precedentes. O setor de saúde e ciências da vida (HCLS) vem passando por uma rápida evolução nos últimos anos, adotando o ML em uma infinidade de casos de uso para fornecer atendimento de qualidade e melhorar os resultados dos pacientes.

Em um ciclo de vida típico de ML, engenheiros de dados e cientistas passam a maior parte do tempo na preparação de dados e nas etapas de engenharia de recursos antes mesmo de iniciar o processo de construção e treinamento de modelos. Ter uma ferramenta que possa reduzir a barreira de entrada para a preparação de dados, melhorando assim a produtividade, é um pedido altamente desejável para essas personas. Gerenciador de dados do Amazon SageMaker é desenvolvido pela AWS para reduzir a curva de aprendizado e permitir que os profissionais de dados realizem tarefas de preparação, limpeza e engenharia de recursos de dados com menos esforço e tempo. Ele oferece uma interface GUI com muitas funções integradas e integrações com outros serviços da AWS, como Serviço de armazenamento simples da Amazon (Amazon S3) e Loja de recursos Amazon SageMaker, bem como fontes de dados de parceiros, incluindo Snowflake e Databricks.

Neste post, demonstramos como usar o Data Wrangler para preparar dados de saúde para treinar um modelo para prever insuficiência cardíaca, considerando a demografia de um paciente, condições médicas anteriores e histórico de resultados de exames laboratoriais.

Visão geral da solução

A solução consiste nas seguintes etapas:

  1. Adquira um conjunto de dados de saúde como entrada para o Data Wrangler.
  2. Use as funções de transformação integradas do Data Wrangler para transformar o conjunto de dados. Isso inclui descartar colunas, destacar dados/hora, unir conjuntos de dados, imputar valores ausentes, codificar variáveis ​​categóricas, dimensionar valores numéricos, equilibrar o conjunto de dados e muito mais.
  3. Use a função de transformação personalizada do Data Wrangler (código Pandas ou PySpark) para complementar as transformações adicionais necessárias além das transformações internas e demonstrar a extensibilidade do Data Wrangler. Isso inclui filtrar linhas, agrupar dados, formar novos dataframes com base em condições e muito mais.
  4. Use as funções de visualização integradas do Data Wrangler para realizar a análise visual. Isso inclui vazamento de destino, correlação de recursos, modelo rápido e muito mais.
  5. Use as opções de exportação integradas do Data Wrangler para exportar o conjunto de dados transformado para o Amazon S3.
  6. Inicie um notebook Jupyter para usar o conjunto de dados transformado no Amazon S3 como entrada para treinar um modelo.

Gerar um conjunto de dados

Agora que estabelecemos a declaração do problema de ML, primeiro nos concentramos em adquirir os dados de que precisamos. Estudos de pesquisa, como Previsão de Insuficiência Cardíaca pode fornecer dados que já estão em boa forma. No entanto, muitas vezes encontramos cenários em que os dados são bastante confusos e exigem associação, limpeza e várias outras transformações muito específicas para o domínio da saúde antes que possam ser usados ​​para treinamento de ML. Queremos encontrar ou gerar dados que sejam confusos o suficiente e orientá-lo nas etapas de preparação usando o Data Wrangler. Com isso em mente, escolhemos o Synthea como uma ferramenta para gerar dados sintéticos que se encaixam no nosso objetivo. Sinteia é um gerador de paciente sintético de código aberto que modela o histórico médico de pacientes sintéticos. Para gerar seu conjunto de dados, conclua as etapas a seguir:

  1. Siga as instruções conforme começo rápido documentação para criar um Estúdio Amazon SageMaker domínio e inicie o Studio.
    Esta é uma etapa de pré-requisito. É opcional se o Studio já estiver configurado em sua conta.
  2. Após o lançamento do Studio, no lançador guia, escolha Terminal do sistema.
    Isso inicia uma sessão de terminal que fornece uma interface de linha de comando para trabalhar.
  3. Para instalar o Synthea e gerar o conjunto de dados no formato CSV, execute os seguintes comandos na sessão de terminal iniciada:
    $ 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

Fornecemos um parâmetro para gerar os conjuntos de dados com um tamanho populacional de 10,000. Observe que o parâmetro size denota o número de membros vivos da população. Além disso, o Synthea também gera dados para membros mortos da população, o que pode adicionar alguns pontos de dados extras ao tamanho de amostra especificado.

Aguarde até que a geração de dados seja concluída. Essa etapa geralmente leva cerca de uma hora ou menos. Synthea gera vários conjuntos de dados, incluindo patients, medications, allergies, conditions, e mais. Para este post, usamos três dos conjuntos de dados resultantes:

  • pacientes.csv – Este conjunto de dados tem cerca de 3.2 MB e contém aproximadamente 11,000 linhas de dados do paciente (25 colunas, incluindo ID do paciente, data de nascimento, sexo, endereço e mais)
  • condições.csv – Este conjunto de dados tem cerca de 47 MB ​​e contém aproximadamente 370,000 linhas de dados de condição médica (seis colunas, incluindo ID do paciente, data de início da condição, código de condição e mais)
  • observações.csv – Este conjunto de dados tem cerca de 830 MB e contém aproximadamente 5 milhões de linhas de dados de observação (oito colunas, incluindo ID do paciente, data de observação, código de observação, valor e mais)

Existe uma relação um-para-muitos entre o patients e conditions conjuntos de dados. Existe também uma relação um-para-muitos entre o patients e observations conjuntos de dados. Para um dicionário de dados detalhado, consulte Dicionário de dados do arquivo CSV.

  1. Para fazer upload dos conjuntos de dados gerados para um bucket de origem no Amazon S3, execute os seguintes comandos na sessão do terminal:
    $ cd ./output/csv
    $ aws s3 sync . s3://<source bucket name>/

Iniciar o Data Wrangler

Escolha Recursos do SageMaker na página de navegação do Studio e no Projectos menu, escolha Organizador de dados para criar um fluxo de dados do Data Wrangler. Para obter etapas detalhadas sobre como iniciar o Data Wrangler de dentro do Studio, consulte Introdução ao Data Wrangler.

Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Datas de importação

Para importar seus dados, conclua as seguintes etapas:

  1. Escolha Amazon S3 e localize o arquivo patient.csv no bucket do S3.
  2. No Adicionar ao carrinho painel, escolha Primeiro K para Amostragem.
  3. Entrar 1100 para Tamanho da amostra.
    No painel de visualização, o Data Wrangler extrai as primeiras 100 linhas do conjunto de dados e as lista como uma visualização.
  4. Escolha importação.
    O Data Wrangler seleciona os primeiros 1,100 pacientes do total de pacientes (11,000 linhas) gerados pelo Synthea e importa os dados. A abordagem de amostragem permite que o Data Wrangler processe apenas os dados de amostra. Ele nos permite desenvolver nosso fluxo de dados com um conjunto de dados menor, o que resulta em um processamento mais rápido e um ciclo de feedback mais curto. Depois de criarmos o fluxo de dados, podemos enviar a receita desenvolvida para um Processamento do SageMaker trabalho para dimensionar horizontalmente o processamento para o conjunto de dados completo ou maior de forma distribuída.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  5. Repita este processo para o conditions e observations conjuntos de dados.
    1. Para o conditions conjunto de dados, insira 37000 para Tamanho da amostra, que é 1/10 do total de 370,000 linhas geradas pelo Synthea.
    2. Para o observations conjunto de dados, insira 500000 para Tamanho da amostra, que é 1/10 do total de observações 5 milhões de linhas geradas pelo Synthea.

Você deve ver três conjuntos de dados, conforme mostrado na captura de tela a seguir.

Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Transforme os dados

A transformação de dados é o processo de alteração da estrutura, valor ou formato de uma ou mais colunas no conjunto de dados. O processo geralmente é desenvolvido por um engenheiro de dados e pode ser um desafio para pessoas com um conjunto menor de habilidades de engenharia de dados para decifrar a lógica proposta para a transformação. A transformação de dados faz parte do processo de engenharia de recursos mais amplo, e a sequência correta de etapas é outro critério importante a ser lembrado ao elaborar essas receitas.

O Data Wrangler foi projetado para ser uma ferramenta de baixo código para reduzir a barreira de entrada para uma preparação eficaz de dados. Ele vem com mais de 300 transformações de dados pré-configuradas para você escolher sem escrever uma única linha de código. Nas seções a seguir, veremos como transformar os conjuntos de dados importados no Data Wrangler.

Solte colunas em pacientes.csv

Primeiro, removemos algumas colunas do patients conjunto de dados. A eliminação de colunas redundantes remove informações não relevantes do conjunto de dados e nos ajuda a reduzir a quantidade de recursos de computação necessários para processar o conjunto de dados e treinar um modelo. Nesta seção, descartamos colunas como SSN ou número do passaporte com base no senso comum de que essas colunas não têm valor preditivo. Em outras palavras, eles não ajudam nosso modelo a prever insuficiência cardíaca. Nosso estudo também não está preocupado com outras colunas, como local de nascimento ou a influência das despesas de saúde na insuficiência cardíaca de um paciente, então as descartamos também. Colunas redundantes também podem ser identificadas executando as análises integradas, como vazamento de destino, correlação de recursos, multicolinearidade e muito mais, que são incorporadas ao Data Wrangler. Para obter mais detalhes sobre os tipos de análise suportados, consulte Analisar e visualizar. Além disso, você pode usar o Relatório de insights e qualidade de dados para realizar análises automatizadas nos conjuntos de dados para chegar a uma lista de colunas redundantes a serem eliminadas.

  1. Escolha o sinal de mais ao lado de Tipos de dados para o conjunto de dados patient.csv e escolha Adicionar transformação.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  2. Escolha Adicionar etapa e escolha Gerenciar colunas.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  3. Escolha Transformar¸ escolher Coluna de queda.
  4. Escolha Colunas para soltar, escolha as seguintes colunas:
    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. Escolha visualização para revisar o conjunto de dados transformado e escolha Adicionar.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
    Você deve ver o passo Coluna de queda na sua lista de transformações.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Apresente data/hora em pacientes.csv

Agora usamos a função Featurize date/time para gerar o novo recurso Year do BIRTHDATE coluna no patients conjunto de dados. Usamos o novo recurso em uma etapa subsequente para calcular a idade de um paciente no momento da observação.

  1. No Transformações painel do seu Coluna de queda página para o patients conjunto de dados, escolha Adicionar etapa.
  2. Escolha o Destaque data/hora transformar.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  3. Escolha Extrair colunas.
  4. Escolha Colunas de entrada, adicione a coluna BIRTHDATE.
  5. Selecionar Ano e desmarque Mês, Dia, hora, Minuto, Segundo.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  6. Escolha visualização, Em seguida, escolha Adicionar.

Adicionar transformações em notes.csv

O Data Wrangler oferece suporte a transformações personalizadas usando Python (funções definidas pelo usuário), PySpark, Pandas ou PySpark (SQL). Você pode escolher seu tipo de transformação com base em sua familiaridade com cada opção e preferência. Para as três últimas opções, o Data Wrangler expõe a variável df para você acessar o dataframe e aplicar transformações nele. Para uma explicação detalhada e exemplos, consulte Transformações personalizadas. Nesta seção, adicionamos três transformações personalizadas ao observations conjunto de dados.

  1. Adicione uma transformação ao arquivo reflections.csv e elimine o DESCRIPTION coluna.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  2. Escolha visualização, Em seguida, escolha Adicionar.
  3. No Transformações painel, escolha Adicionar etapa e escolha Transformação personalizada.
  4. No menu suspenso, escolha Python (pandas).
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  5. Insira o seguinte código:
    df = df[df["CODE"].isin(['8867-4','8480-6','8462-4','39156-5','777-3'])]

    Estes são códigos LONIC que correspondem às seguintes observações que estamos interessados ​​em usar como recursos para prever insuficiência cardíaca:

    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. Escolha visualização, Em seguida, escolha Adicionar.
  7. Adicionar uma transformação para extrair Year e Quarter do DATE coluna.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  8. Escolha visualização, Em seguida, escolha Adicionar.
  9. Escolha Adicionar etapa e escolha Transformação personalizada.
  10. No menu suspenso, escolha Python (PySpark).
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
    Os cinco tipos de observações nem sempre podem ser registrados na mesma data. Por exemplo, um paciente pode visitar seu médico de família em 21 de janeiro e medir e registrar sua pressão arterial sistólica, pressão arterial diastólica, frequência cardíaca e índice de massa corporal. No entanto, um teste laboratorial que inclua plaquetas pode ser feito posteriormente, no dia 2 de fevereiro. Portanto, nem sempre é possível juntar dataframes até a data de observação. Aqui juntamos dataframes em uma granularidade grosseira na base trimestral.
  11. Insira o seguinte código:
    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. Escolha visualização, Em seguida, escolha Adicionar.
  13. Escolha Adicionar etapa, Em seguida, escolha Gerenciar linhas.
  14. Escolha Transformar, escolha Soltar duplicatas.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  15. Escolha visualização, Em seguida, escolha Adicionar.
  16. Escolha Adicionar etapa e escolha Transformação personalizada.
  17. No menu suspenso, escolha Python (pandas).
  18. Insira o código a seguir para obter uma média de pontos de dados que compartilham o mesmo valor de tempo:
    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. Escolha visualização, Em seguida, escolha Adicionar.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Junte-se a pacientes.csv e observações.csv

Nesta etapa, mostramos como realizar junções complexas em conjuntos de dados de maneira eficaz e fácil sem escrever nenhum código por meio da poderosa interface do usuário do Data Wrangler. Para saber mais sobre os tipos suportados de junções, consulte Transformar dados.

  1. Para a direita de Transformar: pacientes.csv, escolha o sinal de mais ao lado de Passos e escolha Cadastrar.
    Você pode ver o arquivo pacientes.csv transformado listado em Conjuntos de dados no painel esquerdo.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  2. Para a direita de Transformar: observações.csv, Clique no Passos para iniciar a operação de junção.
    O arquivo de observações.csv transformado agora está listado em Conjuntos de dados no painel esquerdo.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  3. Escolha configurar.
  4. Escolha Tipo de junção, escolha Interior.
  5. Escolha Esquerdo, escolha Id.
  6. Escolha Certo, escolha paciente.
  7. Escolha visualização, Em seguida, escolha Adicionar.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Adicionar uma transformação personalizada aos conjuntos de dados unidos

Nesta etapa, calculamos a idade do paciente no momento da observação. Também descartamos colunas que não são mais necessárias.

  1. Escolha o sinal de mais ao lado de 1º Junte-se e escolha Adicionar transformação.
  2. Adicione uma transformação personalizada no Pandas:
    df['age'] = df['DATE_year'] - df['BIRTHDATE_year']
    df = df.drop(columns=['BIRTHDATE','DEATHDATE','BIRTHDATE_year','patient'])

  3. Escolha visualização, Em seguida, escolha Adicionar.

Adicionar transformações personalizadas a conditions.csv

  1. Escolha o sinal de mais ao lado de Transformar: condições.csv e escolha Adicionar transformação.
  2. Adicione uma transformação personalizada no Pandas:
    df = df[df["CODE"].isin(['84114007', '88805009', '59621000', '44054006', '53741008', '449868002', '49436004'])]
    df = df.drop(columns=['DESCRIPTION','ENCOUNTER','STOP'])

Observação: Como demonstramos anteriormente, você pode descartar colunas usando código personalizado ou usando as transformações internas fornecidas pelo Data Wrangler. As transformações personalizadas no Data Wrangler fornecem a flexibilidade de trazer sua própria lógica de transformação na forma de trechos de código nas estruturas com suporte. Esses snippets podem ser pesquisados ​​e aplicados posteriormente, se necessário.

Os códigos na transformação anterior são códigos SNOMED-CT que correspondem às seguintes condições. o heart failure or chronic congestive heart failure condição torna-se o rótulo. Usamos as condições restantes como recursos para prever insuficiência cardíaca. Também descartamos algumas colunas que não são mais necessárias.

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

  1. Em seguida, vamos adicionar uma transformação personalizada no 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))
    )

    Realizamos uma junção externa esquerda para manter todas as entradas no dataframe de insuficiência cardíaca. Uma nova coluna has_xxx é calculado para cada condição que não seja insuficiência cardíaca com base na data de início da condição. Estamos interessados ​​apenas em condições médicas que foram registradas antes da insuficiência cardíaca e as usamos como recursos para prever insuficiência cardíaca.

  2. Adicione um integrado Gerenciar colunas transform para descartar as colunas redundantes que não são mais necessárias:
    1. hypertension
    2. diabetes
    3. coronary
    4. smoke
    5. atrial
  3. Extrair Year e  Quarter do heartfailure coluna.
    Isso corresponde à granularidade que usamos anteriormente na transformação do observations conjunto de dados.
  4. Devemos ter um total de 6 etapas para conditions.csv.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Junte as condições.csv ao conjunto de dados associado

Agora realizamos uma nova junção para unir o conjunto de dados de condições ao conjunto patients e observations conjunto de dados.

  1. Escolha Transformar: 1º Junte-se.
  2. Escolha o sinal de mais e escolha Cadastrar.
  3. Escolha Passos próximo de Transformar: condições.csv.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  4. Escolha configurar.
  5. Escolha Tipo de junção, escolha Exterior esquerdo.
  6. Escolha Esquerdo, escolha Id.
  7. Escolha Certo, escolha paciente.
  8. Escolha visualização, Em seguida, escolha Adicionar.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Adicionar transformações aos conjuntos de dados unidos

Agora que temos todos os três conjuntos de dados unidos, vamos aplicar algumas transformações adicionais.

  1. Adicione a seguinte transformação personalizada no PySpark para has_heartfailure torna-se nossa coluna de rótulos:
    from pyspark.sql.functions import col, when
    df = (
        df.withColumn("has_heartfailure", when(col("heartfailure").isNotNull(), 1).otherwise(0))
    )

  2. Adicione a seguinte transformação personalizada no 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")))))
        )
    )

    Estamos interessados ​​apenas em observações registradas antes do diagnóstico da condição de insuficiência cardíaca e as usamos como recursos para prever insuficiência cardíaca. As observações feitas após o diagnóstico de insuficiência cardíaca podem ser afetadas pela medicação que o paciente toma, por isso queremos excluir essas.

  3. Elimine as colunas redundantes que não são mais necessárias:
    1. Id
    2. DATE_year
    3. DATE_quarter
    4. patient
    5. heartfailure
    6. heartfailure_year
    7. heartfailure_quarter
  4. No Análise guia, para Tipo de análise¸ escolher Resumo da tabela.
    Uma varredura rápida através do resumo mostra que o MARITAL coluna tem dados ausentes.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  5. Escolha o Data guia e adicione uma etapa.
  6. Escolha Tratamento ausente.
  7. Escolha Transformar, escolha Preenchimento ausente.
  8. Escolha Colunas de entrada, escolha CONJUGAL.
  9. Escolha Valor de preenchimento, entrar S.
    Nossa estratégia aqui é assumir que o paciente é solteiro se o estado civil tem valor omisso. Você pode ter uma estratégia diferente.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  10. Escolha visualização, Em seguida, escolha Adicionar.
  11. Preencha o valor ausente como 0 para has_hypertension, has_diabetes, has_coronary, has_smoke, has_atrial.

Marital e Gender são variáveis ​​categoriais. O Data Wrangler tem uma função interna para codificar variáveis ​​categoriais.

  1. Adicione uma etapa e escolha Codificar categorial.
  2. Escolha Transformar, escolha Codificação one-hot.
  3. Escolha Colunas de entrada, escolha CONJUGAL.
  4. Escolha Estilo de saída, escolha Coluna.
    Esse estilo de saída produz valores codificados em colunas separadas.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  5. Escolha visualização, Em seguida, escolha Adicionar.
  6. Repita essas etapas para o Gênero coluna.

A codificação one-hot divide a coluna Marital em Marital_M (casado) e Marital_S (único) e divide a coluna Gênero em Gender_M (masculino) e Gender_F (fêmea). Porque Marital_M e Marital_S são mutuamente exclusivos (como são Gender_M e Gender_F), podemos descartar uma coluna para evitar recursos redundantes.

  1. Cair Marital_S e Gender_F.

Características numéricas como sistólica, frequência cardíaca e idade têm padrões de unidade diferentes. Para um modelo baseado em regressão linear, precisamos normalizar esses recursos numéricos primeiro. Caso contrário, alguns recursos com valores absolutos mais altos podem ter uma vantagem injustificada sobre outros recursos com valores absolutos mais baixos e resultar em desempenho insatisfatório do modelo. O Data Wrangler possui o escalonador de transformação Min-max integrado para normalizar os dados. Para um modelo de classificação baseado em árvore de decisão, a normalização não é necessária. Nosso estudo é um problema de classificação, então não precisamos aplicar normalização. Classes desequilibradas são um problema comum na classificação. O desequilíbrio ocorre quando o conjunto de dados de treinamento contém uma distribuição de classes severamente distorcida. Por exemplo, quando nosso conjunto de dados contém desproporcionalmente mais pacientes sem insuficiência cardíaca do que pacientes com insuficiência cardíaca, isso pode fazer com que o modelo seja tendencioso para prever nenhuma insuficiência cardíaca e ter um desempenho ruim. O Data Wrangler tem uma função integrada para resolver o problema.

  1. Adicione uma transformação personalizada no Pandas para converter o tipo de dados das colunas do tipo “objeto” para o tipo numérico:
    import pandas as pd
    df=df.apply(pd.to_numeric)

  2. Escolha o Análise aba.
  3. Escolha Tipo de análise¸ escolher Histograma.
  4. Escolha eixo X, escolha has_heartfailure.
  5. Escolha visualização.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
    É óbvio que temos uma classe desequilibrada (mais pontos de dados rotulados como sem insuficiência cardíaca do que pontos de dados rotulados como insuficiência cardíaca).
  6. Volte para a Data aba. Escolher Adicionar etapa e escolha Dados de saldo.
  7. Escolha Coluna de destino, escolha has_heartfailure.
  8. Escolha Proporção desejada, entrar 1.
  9. Escolha Transformar, escolha FERIR.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
    SMOTE significa Synthetic Minority Over-sampling Technique. É uma técnica para criar novas instâncias minoritárias e adicionar ao conjunto de dados para alcançar o equilíbrio de classes. Para obter informações detalhadas, consulte SMOTE: Técnica de sobreamostragem de minoria sintética.
  10. Escolha visualização, Em seguida, escolha Adicionar.
  11. Repita a análise do histograma na etapa 20-23. O resultado é uma aula equilibrada.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Visualize o vazamento de destino e a correlação de recursos

Em seguida, vamos realizar algumas análises visuais usando o rico conjunto de ferramentas do Data Wrangler de tipos avançados de análise com suporte de ML. Primeiro, analisamos o vazamento de destino. O vazamento de destino ocorre quando os dados no conjunto de dados de treinamento estão fortemente correlacionados com o rótulo de destino, mas não estão disponíveis em dados do mundo real no momento da inferência.

  1. No Aba de análise, Por Tipo de análise¸ escolher Vazamento de Alvo.
  2. Escolha Tipo de Problema, escolha classificação.
  3. Escolha Target, escolha has_heartfailure.
  4. Escolha visualização.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
    Com base na análise, hr é um vazamento alvo. Vamos soltá-lo em uma etapa subsequente. age é sinalizado um vazamento de destino. É razoável dizer que a idade de um paciente estará disponível durante o tempo de inferência, portanto, mantemos a idade como um recurso. Systolic e diastolic também são sinalizados como vazamento alvo provável. Esperamos ter as duas medições durante o tempo de inferência, então as mantemos como recursos.
  5. Escolha Adicionar para adicionar a análise.

Em seguida, analisamos a correlação de recursos. Queremos selecionar recursos correlacionados com o destino, mas não correlacionados entre si.

  1. No Aba de análise, Por Tipo de análise¸ escolher Correlação de recursos.
  2. Escolha Tipo de correlação¸ escolher linear.
  3. Escolha visualização.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

As pontuações dos coeficientes indicam fortes correlações entre os seguintes pares:

  • systolic e diastolic
  • bmi e age
  • has_hypertension e has_heartfailure (etiqueta)

Para características que são fortemente correlacionadas, as matrizes são computacionalmente difíceis de inverter, o que pode levar a estimativas numericamente instáveis. Para mitigar a correlação, podemos simplesmente remover um do par. Nós largamos diastolic e bmi e manter systolic e age em uma etapa subsequente.

Solte colunas diastólicas e IMC

Adicione etapas de transformação adicionais para descartar o hr, diastolic e bmi colunas usando a transformação interna.

Gerar o Relatório de insights e qualidade de dados

AWS recentemente anunciou o novo recurso Data Quality and Insights Report no Data Wrangler. Este relatório verifica automaticamente a qualidade dos dados e detecta anormalidades em seus dados. Os cientistas de dados e engenheiros de dados podem usar essa ferramenta para aplicar com eficiência e rapidez o conhecimento do domínio para processar conjuntos de dados para treinamento de modelos de ML. Esta etapa é opcional. Para gerar este relatório em nossos conjuntos de dados, conclua as etapas a seguir:

  1. No Análise guia, para Tipo de análise, escolha Relatório de insights e qualidade de dados.
  2. Escolha Coluna de destino, escolha has_heartfailure.
  3. Escolha Tipo de problema, selecione Classificação.
  4. Escolha Crie.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Em poucos minutos, ele gera um relatório com resumo, recursos visuais e recomendações.

Gerar uma análise de modelo rápido

Concluímos nossa preparação de dados, limpeza e engenharia de recursos. O Data Wrangler tem uma função integrada que fornece uma estimativa aproximada da qualidade prevista esperada e o poder preditivo dos recursos em nosso conjunto de dados.

  1. No Análise guia, para Tipo de análise¸ escolher Modelo Rápido.
  2. Escolha O rótulo, escolha has_heartfailure.
  3. Escolha visualização.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

De acordo com nossa análise do modelo rápido, podemos ver o recurso has_hypertension tem a pontuação de importância de recurso mais alta entre todos os recursos.

Exporte os dados e treine o modelo

Agora vamos exportar os recursos prontos para ML transformados para um bucket do S3 de destino e dimensionar todo o pipeline de engenharia de recursos que criamos até agora usando as amostras em todo o conjunto de dados de maneira distribuída.

  1. Escolha o sinal de mais ao lado da última caixa no fluxo de dados e escolha Adicionar destino.
  2. Escolha Amazon S3.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  3. Digite um Nome do conjunto de dados. Para Localização do Amazon S3, escolha um bucket do S3 e escolha Adicionar destino.
  4. Escolha Criar emprego para iniciar um trabalho de processamento distribuído do PySpark para realizar a transformação e enviar os dados para o bucket do S3 de destino.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
    Dependendo do tamanho dos conjuntos de dados, essa opção nos permite configurar facilmente o cluster e dimensionar horizontalmente sem código. Não precisamos nos preocupar em particionar os conjuntos de dados ou gerenciar o cluster e os internos do Spark. Tudo isso é automaticamente cuidado por nós pelo Data Wrangler.
  5. No painel esquerdo, escolha Em seguida, 2. Configure o trabalho.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  6. Então escolha Execute.
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Como alternativa, também podemos exportar a saída transformada para o S3 por meio de um Jupyter Notebook. Com essa abordagem, o Data Wrangler gera automaticamente um notebook Jupyter com todo o código necessário para iniciar um trabalho de processamento para aplicar as etapas de fluxo de dados (criadas usando uma amostra) no conjunto de dados completo maior e usar o conjunto de dados transformado como recursos para kick- fora de um trabalho de treinamento mais tarde. O código do notebook pode ser executado prontamente com ou sem alterações. Vamos agora percorrer as etapas sobre como fazer isso por meio da interface do usuário do Data Wrangler.

  1. Escolha o sinal de mais ao lado da última etapa no fluxo de dados e escolha Exportar para.
  2. Escolha Amazon S3 (via Jupyter Notebook).
    Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  3. Ele abre automaticamente uma nova guia com um notebook Jupyter.
  4. No notebook Jupyter, localize a célula na (Opcional) Próximas etapas seção e mudança run_optional_steps da False para True.
    As etapas opcionais habilitadas no notebook realizam o seguinte:
    • Treinar um modelo usando o XGBoost
      Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.
  5. Volte para o topo do notebook e no Execute menu, escolha Executar todas as células.

Se você usar o notebook gerado como está, ele iniciará um trabalho de processamento do SageMaker que dimensiona o processamento em duas instâncias m5.4xlarge para processar o conjunto de dados completo no bucket do S3. Você pode ajustar o número de instâncias e tipos de instância com base no tamanho do conjunto de dados e no tempo necessário para concluir o trabalho.

Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

Aguarde até que o trabalho de treinamento da última célula seja concluído. Ele gera um modelo no bucket S3 padrão do SageMaker.

Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.

O modelo treinado está pronto para implantação para inferência em tempo real ou transformação em lote. Observe que usamos dados sintéticos para demonstrar funcionalidades no Data Wrangler e usamos dados processados ​​para o modelo de treinamento. Dado que os dados que usamos são sintéticos, o resultado de inferência do modelo treinado não se destina ao diagnóstico de condições médicas do mundo real ou à substituição do julgamento dos médicos.

Você também pode exportar diretamente seu conjunto de dados transformado para o Amazon S3 escolhendo Exportações na parte superior da página de visualização de transformação. A opção de exportação direta só exporta a amostra transformada se a amostragem estiver habilitada durante a importação. Essa opção é mais adequada se você estiver lidando com conjuntos de dados menores. Os dados transformados também podem ser ingeridos diretamente em um repositório de recursos. Para obter mais informações, consulte Loja de recursos Amazon SageMaker. O fluxo de dados também pode ser exportado como um pipeline do SageMaker que pode ser orquestrado e agendado de acordo com suas necessidades. Para mais informações, veja Pipelines Amazon SageMaker.

Conclusão

Neste post, mostramos como usar o Data Wrangler para processar dados de saúde e executar engenharia de recursos escaláveis ​​de uma forma de baixo código e orientada por ferramentas. Aprendemos como aplicar as transformações e análises integradas de forma adequada sempre que necessário, combinando-as com transformações personalizadas para adicionar ainda mais flexibilidade ao nosso fluxo de trabalho de preparação de dados. Também analisamos as diferentes opções para dimensionar a receita de fluxo de dados por meio de trabalhos de processamento distribuído. Também aprendemos como os dados transformados podem ser facilmente usados ​​para treinar um modelo para prever insuficiência cardíaca.

Existem muitos outros recursos no Data Wrangler que não abordamos neste post. Explore o que é possível em Prepare dados de ML com o Amazon SageMaker Data Wrangler e saiba como aproveitar o Data Wrangler para seu próximo projeto de ciência de dados ou aprendizado de máquina.


Sobre os autores

Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.Sol da Floresta é arquiteto de soluções sênior da equipe do setor público da AWS em Toronto, Canadá. Ele trabalhou nos setores de saúde e finanças nas últimas duas décadas. Fora do trabalho, ele gosta de acampar com a família.

Engenharia de recursos em escala para saúde e ciências da vida com o Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pesquisa Vertical. Ai.Arunprasath Shankar é arquiteto de soluções especialista em inteligência artificial e aprendizado de máquina (AI / ML) da AWS, ajudando clientes globais a dimensionar suas soluções de IA de maneira eficaz e eficiente na nuvem. Em seu tempo livre, Arun gosta de assistir filmes de ficção científica e ouvir música clássica.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS