Dementia Dx: meilleurs diagnostics de démence grâce aux données

Nihar Patel Spécialiste des données cliniques chez Stryker
James Jasper Analyste Business Insights chez Disney
Ji Yan Software Engineer chez Uber

Ressources

TL; DR

Nous avons formé un algorithme d’apprentissage automatique pour faire la distinction entre les patients atteints de démence atteints de la maladie d’Alzeimehr (MA) et la variante comportementale frontotemporale (bvFTD) sur la base des données que nous avons obtenues du Centre national de coordination Alzheimer (NACC). Le modèle a une aire sous la courbe (AUC) de 0,83. Le modèle est disponible en tant qu’API via dementia.ml. Vous pouvez publier les informations du patient sous forme d’objet JSON ou de fichier CSV pour connaître la probabilité que le patient ait la MA par rapport au bvFTD.

Contexte

Deme ntia est une maladie à long terme, évolutive et débilitante qui entraînera la mort du patient. Malgré sa gravité et sa prévalence généralisée, peu de progrès ont été réalisés dans le traitement ou la prévention de la maladie. Près de 15% des personnes âgées de plus de 71 ans souffrent d’une forme de démence. Bien que la recherche nous ait aidés à mieux comprendre ce qui se passe pendant la démence, nous n’avons toujours pas été en mesure de faire des progrès significatifs dans le traitement ou la prévention de la démence.

Comme la démence n’est pas une maladie unique, mais plutôt un assortiment de maladies variées mais distinctes avec des symptômes progressifs similaires, une personne diagnostiquée peut être à n’importe quel stade de la maladie et présenter toute variété de symptômes. Il en résulte des difficultés à déterminer le véritable sous-type de démence sous-jacent en raison de symptômes conflictuels ou inexistants chez les patients. Nous pensons qu’en raison de ce défi, le développement de traitements efficaces pour différents sous-types de démence est beaucoup plus difficile et ralenti en raison de diagnostics inexacts.

Bien que le cancer et les maladies cardiaques reçoivent une grande attention, le coût annuel du traitement de la démence dépasse ces deux maladies! Selon la Lewy Body Dementia Association et la société RAND, les soins de la démence coûtent entre 157 milliards de dollars et 215 milliards de dollars. La majorité de ces coûts proviennent de la nature du besoin de soins constants tout au long de la maladie, qui ne fait qu’augmenter à mesure que la maladie s’aggrave. D’ici 2040, alors que la population vieillit et que la majorité des baby-boomers entrent dans la période à haut risque de démence, ces coûts pourraient doubler. À moins d’une percée, le système de santé est mal préparé à faire face à l’augmentation du coût des soins à ces patients.

Le Centre national de coordination de la maladie d’Alzheimer a mis au point une enquête standardisée qui est administrée aux patients entrant dans l’un de leurs centres par des membres du personnel spécialement formés. Heureusement, l’enquête est standardisée, couvrant le patient lui-même, le comportement observé par les membres du personnel et les interactions avec les membres de la famille et le personnel de soins primaires. Au total, plus de 750 mesures différentes sont collectées pour un patient donné et environ 15 000 patients individuels ont été évalués. Cependant, le diagnostic de la maladie incombe toujours aux spécialistes qui doivent peser les preuves pour et contre un sous-type donné.

Compte tenu des données disponibles, nous avons créé un modèle de classification d’apprentissage automatique sophistiqué pour aider les médecins de soins primaires à diagnostiquer leurs patients à partir de toutes les données disponibles, plutôt qu’à partir de leurs seules connaissances personnelles. De plus, certains sous-types de démence sont relativement rares! Un spécialiste peut ne voir que quelques cas dans sa carrière. Nous nous sommes concentrés sur les deux types distincts de démence: la maladie d’Alzheimer et la démence frontotemporale à variables comportementales pour prouver le cas d’utilisation et avons créé une API ouverte à partir de laquelle les professionnels peuvent télécharger une enquête auprès des patients et recevoir la classification prévue.

Nettoyage, prétraitement et exploration des données

L’ensemble de données d’origine que nous avons reçu du NACC contenait 758 variables pour 15 000 patients. Vous pouvez trouver le dictionnaire de données ici. Nous avons parcouru les données et choisi uniquement des variables objectives et supprimé les variables subjectives et principales qui révéleraient le type de démence. Nous avons fini avec 87 variables (y compris la variable de résultat). Voici un échantillon des variables:

Vous pouvez trouver une liste complète et le processus d’extraction dans ce notebook Jupyter. L’ensemble de données a ensuite été divisé en ensembles de formation, de validation et de test.

Formation et validation du modèle

La première étape de la modélisation de l’ensemble de données a été de créer des variables d’entité (X) et de résultat (y) dans un format attendu par scikit-learn.

Les données passent par les étapes de préparation suivantes:

L’ensemble de données résultant contient 163 variables. Vous pouvez en savoir plus sur ces étapes de préparation ici. Un notebook Jupyter qui détaille les étapes de modélisation est disponible ici.

Un examen rapide des données révèle que nous avons affaire à un ensemble de données déséquilibré. Les cas de maladie d’Alzheimer (MA) sont plus de 20 fois plus fréquents dans l’ensemble de données (95,4% de cas de MA vs 5% de bvFTD).

Entraînons un arbre de décision pour développer une certaine intuition sur le pouvoir prédictif de nos fonctionnalités:

À chaque division, l’algorithme d’arbre de décision (CART) recherche la variable qui peut réduire au maximum une métrique appelée impureté gini. Fondamentalement, CART recherche une variable qui peut diviser les données en sous-ensembles AD et bvFTD avec le moins d’instances de l’autre groupe (impureté). Une variable idéale divisera parfaitement (purement) l’ensemble de données, mais comme nous n’avons pas de prédicteur idéal dans cet ensemble de données (ce serait très suspect si nous en trouvions un), l’algorithme continue de diviser les sous-ensembles pour affiner davantage chaque groupe. Dans l’arborescence ci-dessus, la valeur de couleur (obscurité) indique un sous-ensemble plus pur.

Nous avons limité l’arbre à seulement trois divisions (profondeur), ce qui a entraîné des divisions sur les variables suivantes:

Cela correspond à nos connaissances sur les deux maladies. La maladie d’Alzheimer entraîne des problèmes de mémoire, de pensée et de comportement, tandis que le bvFTD entraîne des changements importants de la personnalité. L’âge d’apparition du bvFTD est également plus bas.

Nous avons parcouru plusieurs modèles et hyper-paramètres. Nous avons considéré les algorithmes Naive Bayes, AdaBoost, Gradient Boosting et Random Forest. Nous avons fini par sélectionner un classificateur Random Forest avec 1000 arbres:

qui a pris 3 minutes pour s’entraîner en parallèle sur un Macbook Pro i7 à 2,8 GHz avec 16 Go de RAM.

Les modèles de forêt aléatoires sont fournis avec une mesure relative de l’importance des caractéristiques qui est basée sur la réduction moyenne des impuretés (gini) dans tous les arbres. Le comportement, l’âge, la personnalité, le jugement et la mémoire sont parmi les plus prédictifs qui correspondent à notre compréhension des caractéristiques distinctives entre AD et bvFTD.

Quelle est la qualité de notre modèle?

95% des patients de notre ensemble de données sont étiquetés MA. Par conséquent, notre modèle doit battre un modèle qui prédit toujours AD et obtient 95% des cas corrects (précision de 95%). Le modèle de forêt aléatoire que nous avons choisi est assez toujours précis dans la fourchette 97% -97,5% lorsqu’il y a plus de 10 000 patients. Nous l’avons vérifié en effectuant une validation croisée en cinq étapes.

Étant donné que nous avons affaire à un jeu de données déséquilibré, la précision peut être une métrique trompeuse. Au lieu de cela, nous examinerons la courbe des caractéristiques de fonctionnement du récepteur (ROC) et l’aire sous la courbe (AUC). Les courbes ROC illustrent le compromis entre les vrais et les faux positifs. Un classificateur peut atteindre un taux de vrais positifs de 100% (ou sensibilité ou rappel) en prédisant tout ce qui est vrai. Évidemment, ce n’est pas idéal car le classifieur générera beaucoup de faux positifs. Un exemple est un classificateur pour classer les patients comme ayant ou non un cancer. La plupart des patients n’ont pas de cancer mais le classificateur est inutile comme outil de dépistage s’il classe tout le monde comme n’ayant pas de cancer, même s’il aurait une sensibilité de 100%. Le taux de faux positifs dans ce cas serait très élevé.

La courbe ROC du modèle sélectionné est bien supérieure à celle d’un modèle Naive.

En tant que point de référence, un classificateur Naive Bayes entraîné sur l’ensemble de données donne des performances moins qu’aléatoires (ligne rouge).

La courbe d’apprentissage de Naive Bayes est très différente. La validation croisée est très variable avant d’atteindre 20 000 échantillons d’entraînement et ne produit toujours pas mieux que des performances aléatoires.

Examinons enfin la distribution de la probabilité prédite pour les deux classes. Les boîtes à moustaches bleues montrent la distribution des instances que le modèle a correctement prédit. Les boîtes à moustaches vertes montrent la distribution des prédictions incorrectes. En général, nous pouvons être plus confiants dans les prédictions AD avec une probabilité plus élevée, mais il n’en va pas de même pour bvFTD. En substance, même si notre modèle fonctionne mieux que l’aléatoire dans son ensemble, nous n’avons pas une grande confiance dans les prédictions bvFTD. Cela vient du fait que les cas bvFTD sont rares par rapport à AD.

Développement et utilisation d’API

Nous avons rendu notre modèle disponible en tant qu’API sur dementia.ml. Pour ce faire, nous avons sélectionné le modèle de scikit-learn Random Forest et utilisé Flask, gunicorn et nginx pour servir le modèle. Vous pouvez trouver les détails ici.

Il existe deux options pour interagir avec l’API:

Option 1: POSTER un objet JSON

Le modèle nécessite 85 variables. Les valeurs valides sont disponibles dans le dictionnaire de données. Vous recevrez une erreur si vous transmettez des valeurs invalides. Le point de terminaison sur lequel POSTER l’objet JSON est:

Vous pouvez trouver un exemple d’objet JSON ici.

Option 2: POSTER un fichier CSV

La deuxième option consiste à POSTER un fichier CSV (valeurs séparées par des virgules) sur ce point de terminaison:

Vous pouvez télécharger un exemple de fichier CSV ici. Si votre fichier CSV contient plusieurs lignes de données représentant plusieurs patients, vous recevrez un tableau de prédictions correspondant à l’ordre des patients dans votre fichier CSV.

Sortie API

Si les données publiées sont valides, l’API répondra avec un tableau de tableaux au format suivant:

où pAD_1 est la probabilité que la première instance soit AD et pbvFTD_1 est la probabilité que la première instance soit bvFTD. Notez que la somme des probabilités pour chaque instance est égale à 1 (pAD_1 + pbvFTD_1 = 1).

Comme mentionné précédemment, vous pouvez publier plusieurs instances (lignes) si vous utilisez l’option CSV. Notez que vous ne pouvez pas transmettre plusieurs instances à l’aide de l’objet JSON.

Conclusions

Nous avons formé et testé un modèle pour distinguer les patients atteints de démence MA et bvFTD en utilisant les données NAAC standardisées. Le modèle ne s’applique qu’aux patients déjà soupçonnés d’être atteints de démence et ne s’applique pas à la distinction entre un patient en bonne santé et un patient atteint de démence.