lundi 29 novembre 2021

Google Brain - Ventilator Pressure Prediction

 Cet article est un rapport de compétition Kaggle Google Brain - Ventilator Pressure Prediction.

Kaggle est une plateforme web organisant des compétitions en science des données. Sur cette plateforme, les entreprises proposent des problèmes en science des données et offrent un prix aux datalogistes obtenant les meilleures performances. L'entreprise a été fondée en 2010 par Anthony Goldbloom. (Source Wikipedia ).


Problématique

Nous avons choisi de participer a la compétition “Ventilator Pressure Prediction”. Le but de cette compétition est de produire un modèle capable de simuler le comportement des patients sous ventilation artificielle. Avoir une simulation numérique permettra d'améliorer la régulation des appareils respiratoires. 



Compétition:

https://www.kaggle.com/c/ventilator-pressure-prediction


Notebook:

https://www.kaggle.com/manuelmasiello/ventilator-pressure-prediction-using-cnn-lstm/notebook

Etudes des données

Les données sont de type time series. Elles sont composées de 75450 séquences de respirations d’une taille toujours égale de 80 data points. Ces séquences sont des enregistrements de pression ainsi que des consignes données aux appareils respiratoires. Voici la liste des champs et l’explication de leurs valeurs.



id

Identifiant unique de chaque donnée. Il n’y a pas d’information à en tirer. 

breath_id

Identifiant unique des séquences de respiration. Utile pour découper les séquences. Ne donne pas d’information pour la prédiction.

R

Attribut pulmonaire indiquant à quel point les voies respiratoires sont restreintes (en cmH2O/L/S). Information essentielle pour la prédiction. Trois valeurs possibles: 5, 20 et 50.

C

Attribut pulmonaire indiquant le degré de conformité du poumon (en mL/cmH2O). Information essentielle pour la prédiction. Trois valeurs possibles: 5, 20 et 50.

time_step

Pas d’avancement dans la séquence de respiration. Information sans intérêt. Les séquences sont à taille fixe et à échantillonnage régulier. Nous n’avons pas besoin d’information temporelle dans la séquence. 

u_in

Commande de l'électrovanne inspiratoire. Information importante pour la prédiction. Valeur de 0 à 100. 

u_out

Commande de l'électrovanne exploratrice. Soit 0, soit 1.

pressure

La valeur que nous cherchons à prédire. Pression des voies aériennes mesurée dans le circuit respiratoire, mesurée en cmH2O.

Tableau des différentes colonnes du fichier .csv


Courbes des features R, C, u_out, u_in et pressure.



La première séquence du jeu de données. A gauche la période d'inspiration, à droite la période d’expiration.




Schéma de fonctionnement de l'expérience ayant donné les données du dataset.

Préparation des données

Normalisation des données

Nous appliquons l’algorithme sklearn.preprocessing.MinMaxScaler pour normaliser et borner les colonnes entre 0 et +1.



R

C

u_in

u_out

pressure

breath_id






1

0.333333

1.0

0.000833

0.0

0.115911

1

0.333333

1.0

0.183830

0.0

0.116965

1

0.333333

1.0

0.225093

0.0

0.146470

...

...

...

...

...

...

125749

1.000000

0.0

0.015590

1.0

0.085353

125749

1.000000

0.0

0.012727

1.0

0.089568

125749

1.000000

0.0

0.014827

1.0

0.086407

Extrait des données normalisées.

Séquençage

Les données vont être groupées par “breath_id” dans des tableaux à 3 dimensions.


Évaluation

Pour évaluer le modèle, nous utiliserons une validation simple d’un groupe d'entraînement de 69414 séquences (92%) et d’un groupe de test de 6036 séquences (8%). Par ces proportions, nous cherchons à vérifier que l’apprentissage se déroule bien plutôt que d'évaluer la qualité de la prédiction.   

Modèle proposé

La taille fixe des séquences nous permet d’envisager l’usage d’un réseau de neurones convolutifs (CNN) pour abstraire l’information via des kernels de convolution. En utilisant les paramètres du layer padding='same' et strides=2 nous pouvons réduire la taille en sortie du layer par 2. La taille des séquences, 80, nous permet d’envisager 4 couches d’abstraction avec réduction de taille (40, 20, 10, 5). 


A la sortie de la dernière couche de convolution, nous avons une représentation abstraite du signal. Pour prédire la pression, nous devons dé-abstraite le signal avec des couches de convolution inverse. La taille des kernels, et le nombre de kernels ont été fixés empiriquement par l’usage de la librairie Keras Tuner. Pour finir, nous ajoutons un couche Dropout 0.1 ainsi qu’une couche Dense pour avoir une sortie avec la shape (80, 1).

Apprentissage

Nous avons utilisé différentes stratégies pendant l’apprentissage. Nous commençons l’apprentissage avec un “learning rate” de “0.00018”.


ModelCheckpoint

Cette stratégie enregistre le modèle avec le meilleur score d'évaluation.

monitor=’val_loss’


EarlyStopping

Cette stratégie arrête l’apprentissage s' il ne permet plus d'améliorer l'évaluation. 

monitor=’val_loss’

patience=4

ReduceLROnPlateau

Cette stratégie permet de réduire le paramètre learning rate si l’apprentissage ne s'améliore plus.

monitor=’val_loss’, factor=0.9, patience=2





Courbe d’apprentissage

Résultats

Différence absolue moyenne entre la valeur “pressure” et la prédiction pour le jeu de validation.

0.3970 MAE



Extrait de courbe. “pressure” en bleu et la prédiction en orange.




Extrait de courbe. Différente en valeur absolue entre la prédiction et la “pressure”.



 

Trois séquences quelconques. “pressure” en bleu et la prédiction en orange. 


Histogramme de la différence entre la prédiction et la “pressure”.

Axe d’amélioration

L'évaluation simple peut être remplacée par une découpe du dataset en k-fold. Ensuite, les modèles entraînés par k-fold participent au résultat d’un modèle d’ensemble.

Conclusion

Kaggle étant une compétition, le score de 0.397 MAE est dépassé par d'autres techniques plus performantes (comme BiLSTM). Toutefois, pour un usage industriel, l’algorithme obtient de très bons résultats. 



Aucun commentaire:

Enregistrer un commentaire

Comprendre les liens résiduelles - Deep Learning

Comprendre les liens résiduelles Avant la découverte des réseaux à liens résiduels, l'entraînement de réseaux de neurones profonds ...