Artigo
· Jun. 12, 2023 6min de leitura

Exemplo do FHIR e IntegratedML

Exemplo de uso do banco de dados FHIR InterSystems IRIS for Health para efetuar modelagem ML através do InterSystems IRIS IntegratedML

Descrição

IntegratedML é uma ótima funcionalidade para treino/teste e implantação de modelos ML. FHIR é um padrão poderoso para a interoperabilidade de informações da saúde. Esse projeto visa mostrar como utilizar as ferramentas IRIS/IRIS for Health. Por exemplo, as transformações DTL para preparar dados do FHIR para aplicação de modelos ML dentro do IntegratedML. Aqui estão algumas potenciais aplicações das ideias apresentadas nesse projeto:

  • Reutilização e extensão de transformações DTL dentro de outras bases de dados FHIR para modelos ML personalizados
  • Utilização das transformações DTL para normalizar mensagens FHIR e publicar modelos ML como serviços
  • Criação de um referencial de modelos e regras de transformação para usar em qualquer conjunto de dados FHIR

Instalação

Clone o repositório em um diretório local:

$ git clone https://github.com/jrpereirajr/fhir-integratedml-example.git

Abra o terminal nesse repositório e execute:

$ cd fhir-integratedml-example
$ docker-compose up -d

Se quiser obter um log do que aconteceu durante a instalação, utilize o seguinte comando :

$ docker-compose up -d > build-log.txt 2>&1

Inicialização de um terminal IRIS

Para inicializar um terminal IRIS, siga esses passos: 

Em um terminal powershell/cmd, execute:

docker exec -it fhir-integratedml-example_iris_1 bash

Dentro do shell do linux , crie uma sessão IRIS:

irissession iris

Demonstração

Para demonstrar o conceito do projeto, foram configurados dois modelos:

  • Um modelo de predição de não-comparecimento à uma consulta;
  • Um modelo de predição de insuficiência cardíaca.

Primeiro, conjuntos de dados de treinamento foram usados para gerar recursos FHIR sintéticos. Esses conjuntos de dados continham informações sobre pacientes, patologias, observações, consultas e visitas enviadas aos pacientes, representadas por diversos recursos FHIR. Essa etapa emula um banco de dados FHIR real, no qual as previsões de não-comparecimento e insuficiência cardíaca podem ser aplicadas.

Quando o banco de dados FHIR estiver pronto para uso, os dados devem ser transformados, combinando recursos FHIR que são pertinentes ao problema, em tabelas únicas. Essa combinação de FHIR é obtida por transformações DTL, como NoShowDTLHeartFailureDTL :

Como as transformações DTL podem ser exportadas/importadas, é possível compartilhar os modelos ML aplicados aos dados FHIR. Essas transformações podem igualmente ser entendidas por outras equipes, se necessário.

Depois de aplicar as transformações DTL, os recursos FHIR são mapeados em linhas simples, criando também tabelas que podem ser utilizadas para formar modelos ML para as previsões de não-comparecimento e insuficiência cardíaca.

Para treinar e testar os modelos usando o IntegratedML, utilize as seguintes instruções SQL. Eles são executadas durante a instalação, mas você pode executá-los novamente e experimentar o IntegratedML por conta própria.

 

Modelo de não-comparecimento

 

-- criar um conjunto de dados de treinamento 
CREATE OR REPLACE VIEW PackageSample.NoShowMLRowTraining AS SELECT * FROM PackageSample.NoShowMLRow WHERE ID < 1800
-- criar um conjunto de dados de teste
CREATE OR REPLACE VIEW PackageSample.NoShowMLRowTest AS SELECT * FROM PackageSample.NoShowMLRow WHERE ID >= 1800
-- evitar os erros no comando CREATE MODEL; ignore qualquer erro aqui
DROP MODEL NoShowModel

-- um modelo IntegratedML para a coluna de previsão noShow (não-apresentação) é criada a partir de outros modelos, utilizando o conjunto de dados PackageSample.NoShowMLRowTraining para a etapa de treinamento; o parâmetro "Semente" (seed) aqui destina-se à assegurar a reprodutibilidade dos resultados.
CREATE MODEL NoShowModel PREDICTING (Noshow) FROM PackageSample.NoShowMLRowTraining USING {"seed": 6}

-- o modelo é treinado, conforme definido no comando de criação de um modelo "CRIAR UM MODELO" 
TRAIN MODEL NoShowModel

-- as informações sobre o modelo treinado são exibidas, como por exemplo o modelo ML selecionado pelo IntegratedML
SELECT * FROM INFORMATION_SCHEMA.ML_TRAINED_MODELS

-- a função de previsão (PREDICT) é utilizada para ver como usar o modelo nas intruções SQL
SELECT top 10 PREDICT(NoShowModel) AS PredictedNoshow, Noshow AS ActualNoshow FROM PackageSample.NoShowMLRowTest

-- uma validação em um conjunto de dados de teste é efetuado e as métricas de performance do modelo são calculadas
VALIDATE MODEL NoShowModel FROM PackageSample.NoShowMLRowTest

-- as métricas de performance são exibidas
SELECT * FROM INFORMATION_SCHEMA.ML_VALIDATION_METRICS

 

Modelo de insuficiência cardíaca 

 

-- criar um conjunto de dados de treinamento
CREATE OR REPLACE VIEW PackageSample.HeartFailureMLRowTraining AS SELECT DEATHEVENT,age,anaemia,creatininephosphokinase,diabetes,ejectionfraction,highbloodpressure,platelets,serumcreatinine,serumsodium,sex,smoking,followuptime FROM PackageSample.HeartFailureMLRow WHERE ID < 200
-- criar um conjunto de dados de teste
CREATE OR REPLACE VIEW PackageSample.HeartFailureMLRowTest AS SELECT DEATHEVENT,age,anaemia,creatininephosphokinase,diabetes,ejectionfraction,highbloodpressure,platelets,serumcreatinine,serumsodium,sex,smoking,followuptime FROM PackageSample.HeartFailureMLRow WHERE ID >= 200
-- evitar os erros no comando CREATE MODEL; ignorar todo erro aqui
DROP MODEL HeartFailureModel

-- as informações sobre o modelo formado são exibidas, como por exemplo o modelo ML selecionado pelo IntegratedML
CREATE MODEL HeartFailureModel PREDICTING (DEATHEVENT) FROM PackageSample.HeartFailureMLRowTraining USING {"seed": 6}

-- o modelo é treinado, conforme definido no comando de criação de um modelo "CRIAR UM MODELO"
TRAIN MODEL HeartFailureModel

-- as informações sobre o modelo treinado são exibidas, como por exemplo o modelo ML selecionado pelo IntegratedML
SELECT * FROM INFORMATION_SCHEMA.ML_TRAINED_MODELS

-- a função de previsão (PREDICT) é utilizada para ver como usar o modelo nas intruções SQL
SELECT top 10 PREDICT(HeartFailureModel) AS PredictedHeartFailure, DEATHEVENT AS ActualHeartFailure FROM PackageSample.HeartFailureMLRowTest

-- uma validação em um conjunto de dados de teste é efetuado e as métricas de performance do modelo são calculadas
VALIDATE MODEL HeartFailureModel FROM PackageSample.HeartFailureMLRowTest

-- as métricas de performance são exibidas
SELECT * FROM INFORMATION_SCHEMA.ML_VALIDATION_METRICS

A última instrução SQL pode indicar os parâmetros de performance da classificação:

A mesma transformação pode ser aplicada para transformar os recursos FHIR provenientes dos sistemas externos através de uma API REST, por exemplo (veja o código):

 

Solução de problemas

Se você tiver erros durante as requisições API, indicando que o modelo não existe, é provável que alguma coisa anormal se produziu durante a criação do contêiner para os modelos de treinamento. Tente executar o método de treinamento novamente. Abra o terminal IRIS e execute:

ZN "FHIRSERVER"
Do ##class(PackageSample.Utils).TrainNoShowModel()
Do ##class(PackageSample.Utils).TrainHeartFailureModel()

 

Referências

Recursos FHIR utilizados como modelos: ttp://hl7.org/fhir/

Conjunto de dados para a formação de modelo de não-comparecimento: IntegratedML templat

Conjunto de dados para a formação de modelo de insuficiência cardíaca: kaggle

Discussão (0)1
Entre ou crie uma conta para continuar