Article
· Mai 4, 2023 6m de lecture

Exemple de FHIR et IntegratedML

Exemple d'utilisation de la base de données FHIR d'InterSystems IRIS for Health pour effectuer de modèles ML via InterSystems IRIS IntegratedML

Description

IntegratedML est une fonctionnalité intéressante pour former/tester et déployer des modèles ML. FHIR est un standard puissant pour l'interopérabilité des informations de santé. Ce projet vise à montrer comment utiliser les outils IRIS/IRIS for Health, par exemple les transformations DTL pour préparer les données FHIR à l'application de modèles ML dans IntegratedML. Voici quelques applications potentielles des idées présentées dans ce projet :

  • Réutilisation et extension des transformations DTL dans d'autres bases de données FHIR pour des modèles ML personnalisés
  • Utilisation des transformations DTL pour normaliser les messages FHIR et publier les modèles ML en tant que services
  • Création d'un référentiel de modèles et de règles de transformation à utiliser dans n'importe quel jeu de données FHIR

Installation

Clone/git extrait le référentiel dans n'importe quel répertoire local.

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

Ouvrez le terminal dans ce répertoire et lancez:

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

Si vous souhaitez obtenir un journal de ce qui s'est passé lors de l'installation, utilisez la commande suivante :

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

Initialisation d'un terminal IRIS

Pour initialiser un terminal IRIS, procédez comme suit:

Dans un terminal powershell/cmd lancez:

docker exec -it fhir-integratedml-example_iris_1 bash

Dans linux shell, créez une session IRIS:

irissession iris

Démonstration

Afin de démontrer le concept du projet, deux modèles ont été configurés :

  • Un modèle de prédiction de non-présentation à une consultation
  • Un modèle de prédiction de l'insuffisance cardiaque

Tout d'abord, des ensembles de données de formation ont été utilisés pour générer des ressources FHIR synthétiques. Ces jeux de données contenaient des informations sur les patients, les pathologies, les observations, les rendez-vous et les visites envoyés aux patients, représentés par différentes ressources FHIR. Cette étape émule une véritable base de données FHIR, dans laquelle les prédictions de non-présentation et d'insuffisance cardiaque pourraient être appliquées.

Lorsque la base de données FHIR est prête à être utilisée, les données doivent être transformées en combinant les ressources FHIR qui sont pertinentes pour le problème, dans des tableaux uniques. Cette combinaison FHIR est réalisée par les transformations DTL telles que NoShowDTL et HeartFailureDTL :

Comme les transformations DTL peuvent être exportées/importées, il est possible de partager les modèles ML appliqués aux données FHIR. Ces transformations pourraient également être étendues par d'autres équipes si nécessaire.

Après avoir appliqué les transformations DTL, les ressources FHIR sont mappées en lignes simples, créant ainsi des tableaux qui pourraient être utilisés pour former des modèles ML pour les prédictions de non-présentation et d'insuffisance cardiaque.

Pour former et tester des modèles à l'aide d'IntegratedML, utilisez les instructions SQL suivantes. Ils sont exécutés lors de l'installation, mais vous pouvez les réexécuter et essayer IntegratedML par vous-même.

Modèle de non-présentation

 

-- créer le jeu de données de formation
CREATE OR REPLACE VIEW PackageSample.NoShowMLRowTraining AS SELECT * FROM PackageSample.NoShowMLRow WHERE ID < 1800
-- créer le jeu de données de test
CREATE OR REPLACE VIEW PackageSample.NoShowMLRowTest AS SELECT * FROM PackageSample.NoShowMLRow WHERE ID >= 1800
-- éviter les erreurs dans la commande CREATE MODEL ; ignorer toute erreur ici
DROP MODEL NoShowModel

-- un modèle IntegratedML pour la colonne de prédiction Noshow (non-présentation) est créé à partir d'autres modèles, en utilisant le jeu de données PackageSample.NoShowMLRowTraining pour l'étape de formation ; le paramètre Graine "seed" ici est destiné à assurer la reproductibilité des résultats.
CREATE MODEL NoShowModel PREDICTING (Noshow) FROM PackageSample.NoShowMLRowTraining USING {"seed": 6}

-- le modèle est formé, tel qu'il a été défini dans la commande de création d'un modèle "CRÉER UN MODÈLE"
TRAIN MODEL NoShowModel

-- des informations sur le modèle formé sont affichées, comme par exemple le modèle ML sélectionné par IntegratedML
SELECT * FROM INFORMATION_SCHEMA.ML_TRAINED_MODELS

-- la fonction de prédiction (PREDICT) est utilisée pour voir comment utiliser le modèle dans les instructions SQL
SELECT top 10 PREDICT(NoShowModel) AS PredictedNoshow, Noshow AS ActualNoshow FROM PackageSample.NoShowMLRowTest

-- une validation sur un ensemble de données de test est effectuée et les mesures de performance du modèle sont calculées
VALIDATE MODEL NoShowModel FROM PackageSample.NoShowMLRowTest

-- les mesures de performance sont affichées
SELECT * FROM INFORMATION_SCHEMA.ML_VALIDATION_METRICS

 

Modèle d'insuffisance cardiaque

 

-- créer le jeu de données de formation
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
-- créer le jeu de données de test
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
-- éviter les erreurs dans la commande CREATE MODEL ; ignorer toute erreur ici
DROP MODEL HeartFailureModel

-- des informations sur le modèle formé sont affichées, comme par exemple le modèle ML sélectionné par IntegratedML
CREATE MODEL HeartFailureModel PREDICTING (DEATHEVENT) FROM PackageSample.HeartFailureMLRowTraining USING {"seed": 6}

-- le modèle est formé, tel qu'il a été défini dans la commande de création d'un modèle "CRÉER UN MODÈLE"
TRAIN MODEL HeartFailureModel

-- des informations sur le modèle formé sont affichées, comme par exemple le modèle ML sélectionné par IntegratedML
SELECT * FROM INFORMATION_SCHEMA.ML_TRAINED_MODELS

-- la fonction de prédiction (PREDICT) est utilisée pour voir comment utiliser le modèle dans les instructions SQL
SELECT top 10 PREDICT(HeartFailureModel) AS PredictedHeartFailure, DEATHEVENT AS ActualHeartFailure FROM PackageSample.HeartFailureMLRowTest

-- une validation sur un ensemble de données de test est effectuée et les mesures de performance du modèle sont calculées
VALIDATE MODEL HeartFailureModel FROM PackageSample.HeartFailureMLRowTest

-- les mesures de performance sont affichées
SELECT * FROM INFORMATION_SCHEMA.ML_VALIDATION_METRICS

 

La dernière instruction SQL peut vous indiquer les paramètres de performance de la classification :

La même transformation pourrait être appliquée pour transformer les ressources FHIR provenant de systèmes externes, par le biais d'une API REST par exemple (voir le code) :

Dépannage

Si vous obtenez des erreurs lors des requêtes API, indiquant que le modèle n'existe pas, il est probable que quelque chose d'anormal se produise lors de la création du conteneur pour les modèles de formation. Essayez de réexécuter la méthode de formation. Ouvrez le terminal IRIS et exécutez:

 

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

 

Générique

Ressources FHIR utilisées comme modèles: http://hl7.org/fhir/

Jeu de données pour la formation de modèle de non-présentation: IntegratedML template

Jeu de données pour la formation de modèle d'insuffisance cardiaque: kaggle

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer