Oma

From Epidemium
Jump to: navigation, search

Prediction de la mortalité du cancer dans les pays en développement

Contexte

Le cancer est l’un des fléau de notre société moderne. Chaque année, environ 14 millions de nouveaux cas de cancer sont diagnostiqués dans le monde et ce chiffre est parti pour augmenter. D’après l’organisation mondiale de la santé, le nombre de cancers dans le monde devrait augmenter de 70% dans les vingt prochaines années. Les pays en développement sont d’ailleurs ceux où le cancer sévit le plus. Plus de 60% des cas se trouvent en Asie, en Afrique, en Amérique centrale et du Sud. Qui plus est, ces régions du monde regroupent 70% des décès liés au cancer.

Nous nous trouvons par ailleurs dans un contexte d’open data où existent des bases de données sur le cancer. Serait-ce possible de valoriser ces données ?

Plus précisément, Epidemium met à notre disposition trois bases de données:

  • Incidence et mortalité de différents cancers
  • Des données économiques (World Bank)
  • Des données de l’organisation des nations unis pour l’alimentation et l’agriculture

Nous allons tenter, à partir de ces outils, de prédire la mortalité du cancer dans les pays en développement

Problématique

Notre but ultime serait de prédire la mortalité de tous les cancers, dans tous les pays. Nous ne disposons cependant pas d’un nombre suffisant de données pour tous les cancers. Nous avons donc choisi de recentrer notre étude sur un cancer en particulier.

Choix du cancer

Afin de choisir notre cancer d’étude, nous avons analysé notre dataset et choisi un cancer comportant un maximum de données. Nous avons finalement sélectionné le cancer de l’estomac (C16)

Choix de la variable à prédire

Nous disposons de données de mortalité de différentes catégories de la population, segmentées selon l’âge et le sexe. Cette segmentation n’apparaît cependant plus dans les données économiques dont nous disposons. Nous avons donc fait le choix de prédire la mortalité globale (sans distinction d’âge ou de sexe) pour un pays et une date donnés. Ce choix nous a paru être le plus pertinent dans la mesure où nous ne disposons pas d'un nombre illimité de données

Choix des pays

Ne disposant que d’une donnée par année et par pays. Nous avons choisi de nous intéresser à plusieurs pays afin de maximiser nos données. Nous avons ainsi centré notre étude sur les pays en développement d’Amérique du sud et centrale, ainsi que sur les pays d’Asie. Nous avons par ailleurs écarté les pays africain à cause du grand nombre de données manquantes.

Prétraitement des données

Afin d’être capable de prédire la mortalité dans chaque pays pour une année donnée, il est d’abord nécessaire de prétraiter nos données de manière à pouvoir alimenter l’apprentissage de nos modèles de prédiction.

Prétraitement de la Mortalité

Après avoir aggrégé les données par pays/année, nous avons été confronté à nos premiers problèmes liés aux défauts des datasets :

  • Des trous de données sur certaines années
  • L’existence de faux zéro

Nous avons d’abord fait une présélection des pays comportant au moins 80% de données valides. Nous nous avons par exemple du nous affranchir du Honduras, de la Mongolie, ou encore des Philippines.

Nous nous sommes ensuite attaqué au problème des données manquantes :On peut voir ci-dessus la Mortalité du causé par le cancer de l’estomac du Guatemala en fonction des années. Cependant on remarque des données manquantes entre 1971 et 1974 et 1981 et 1984 ce qui est problématique dans notre étude, dans la mesure où l’aspect chronologique est important dans un objectif de prédiction. C’est ainsi que l’on a dû prédire les “trous” pour pouvoir continuer notre étude. Ainsi on a fait le choix d’une interpolation linéaire. On obtient alors le résultat suivant une fois les valeurs manquantes interpolées :A présent, nous devons traiter les “faux zéro” qui apparaissent comme dans le cas suivant :Le graphe ci-dessus montre la mortalité de la Colombie après interpolation. On remarque la présence d’un “faux zéro” en 1981, qui correspond à une erreur dans les données de mortalité. Ainsi on remarque qu’en plus d’induire des erreurs dans les données, il va également biaiser l’interpolation qui va être attiré par le zéro. Il est donc très important de supprimer ces zéro pour pouvoir continuer l’étude. On obtient alors le graphe suivant :

Concaténation des datasets

Après avoir construit la variable de mortalité, nous avons construit les features à partir desquels le modèle va pouvoir essayer de la prédire.

Pour cela nous avons utilisé les données économiques de la World Bank et les données de la FAO que nous avons du concaténer par pays et par années

Cependant, encore une fois, nous avons remarqué beaucoup de données manquantes dans certains pays, ce qui nous a poussé à rejeter certaines localisations de notre étude. Ainsi Taïwan, la Palestine, la Bolivie et la Guyane ont été retiré de notre base de donnée faute de présence de suffisamment de variables prédictives.

Prétraitement final

Nos tableaux sont maintenant rassemblés mais des valeurs manquantes subsistent toujours.

Afin de minimiser la perte d’information, nous avons choisi de supprimer les variables/pays contenant trop de valeurs manquantes en quatre temps:

(i) Suppression des pays contenant moins de 50% de données valides(ii) Suppression des variables contenant plus de 20% de NA (iii) Suppression des pays contenant plus de 20% de NA(iv) Suppression des variables contenant plus de 5% de NACette méthode itérative permet de ne garder que les variables contenant 95% de données valides tout en conservant le maximum de variables et de pays.

Pour les 5% restant, nous procédons de la même manière que pour la mortalité afin de combler les trous : interpolation linéaire des variables.

Data visualisation - PCA

Afin d’avoir une première visualisation de nos données, nous avons effectué une PCA sur les données présélectionnées :Dans cette projection nous avons coloré chaque pays, ce qui nous permet de constater que les pays forment des clusters naturels grâce à leurs caractéristiques. On se rend alors compte de l’importance de la variable “pays” pour caractériser différents comportements. Cependant cette variable de classification est difficilement appréhendable par les algorithmes. On a alors recours à une méthode de one hot encoding pour pouvoir exploiter cette variable.

One hot encoding

Le one hot encoding est une astuce qui permet de transformer les variables catégoriques en une forme qui peut être gérer par les algorithmes de machine learning. Ainsi on va transformer un vecteur de la forme [Brazil, Colombia, Colombia, Chile, Argentina] en une matrice 5x4 car il y a 5 valeur appartenant à 4 classes différentes. Cette matrice sera remplie de 1 et de 0 de la manière suivante : Si on analyse la première colonne, on l'interprète de la manière suivante : la première ligne appartient à la classe Brésil, la seconde n’appartient pas à la classe Brésil car il y a un 0, la troisième ligne n’appartient pas à la classe Brésil, etc…

Cette astuce permet, de faire comprendre aux algorithmes que chaque objet appartient à une classe et que si nécessaire il doit être traité de manière différente.

On a ainsi transformer la variable de pays par un processus de one hot encoding, afin de traiter cette variable de manière optimale.

Normalisation de la sortie

On comprend assez facilement que la mortalité est fortement lié à la taille du pays ou au nombre d’habitant. Ainsi, dans un petit pays telle que la Guyane, on pourra trouver une mortalité du cancer de l’estomac de l’ordre de 50, alors que le Brésil atteindra facilement les 20 000. On se rend compte de la nécessité de normaliser la donnée de mortalité par pays, au risque de très bien prédire les pays ayant de grosse mortalité, et être très mauvais sur les petit pays. Cette conséquence se déduit de la fonction erreur que l’algorithme va essayer d’optimiser, en effet les erreurs de prédictions sur les petits pays seront fortement négligeable par rapport à ceux des gros pays dans un calcul de Mean Square Error par exemple.

Notre modèle

Protocole

Comme pour tout modèle de prédiction, il nous faut pouvoir évaluer la qualité de notre modèle. Pour cela une première approche consiste à séparer le dataset en 2 datasets, dont l’un va constituer le “train set” qui va permettre d'entraîner le modèle et régler les paramètres de prédiction. Tandis que le second, le “test set” va permettre de tester les performances. En effet, on pourra prédire la variable de mortalité du test set, puis en définissant une Loss fonction, quantifier l’erreur entre la prédiction et la vraie valeur.

La méthode classiquement utilisée pour évaluer des modèles de machine learning est de séparer le dataset de manière aléatoire. Cependant, étant donné l’importance de la variable temps de notre projet, cette approche ne semble pas très pertinente. En effet, en utilisant ce protocole, on pourrait par exemple tomber sur le cas où le modèle essaierait de prédire la mortalité du Brésil en 2000 tout en disposant des données de la mortalité en 2001 et 1999, ce qui est beaucoup plus facile que de prédire 2000 en ne disposant que des données antérieurs. Ce n’est donc pas approprié étant donné que nous voulons être capable de prédire uniquement les valeurs futures.

C’est pour cette raison que nous avons imaginé un nouveau protocole pour tester plus fidèlement les performances de notre modèle. Tout d’abord on introduit la notion de “lag” qui sera le temps d’horizon de la prédiction : si lag= 5 années, on essaiera de prédire la valeur de la mortalité du Brésil en 2000, en alimentant notre algorithme avec les données antérieurs à 1995

Ainsi notre protocole de test s'exécute de la manière suivante : pour lag =p, on va récursivement prédire la mortalité de l’année n en entraînant notre algorithme avec les données sur la mortalité et les variables explicatives associées aux années antérieures à n-p puis mesurer de manière classique l’erreur de prédiction. A noter la contrainte de ressource de calcul supplémentaire que cela induit. En effet, tandis qu’un protocole de séparation test set/ train set classique ne demande qu’une seule phase d’apprentissage, le protocole que l’on propose demande autant de phase d’apprentissage que d’année à prédire. Ainsi cette contrainte est non négligeable si les modèle utilisé sont très coûteux en terme de temps de convergence de l’apprentissage.

Selection de variables

On s'intéresse à présent aux caractéristiques de chaque variables, et leur qualité prédictive vis à vis de notre problématique. Pour cela, nous avons adopté 2 approches différentes, pour essayer de sélectionner au mieux les variables :

Lasso

La première approche est une approche Lasso dont le principe est d’approcher au mieux le problème de régression pénalisé suivant :

Min  L(B) = N2(Y - BX) + N1(B)

Le premier terme est celui d’une régression linéaire supervisée classique. Le second [ N1(B) ] est une pénalité servant à réduire le nombre de paramètres.

En effectuant cette minimisation, certains paramètres se rapprochent de zéro alors que d’autres gardent une valeur significative. Nous ne gardons que les variables correspondant à des paramètres significatifs et sélectionnons les 14 variables suivantes, par ordre d'importance :

  1. Old_Mortality
  2. Meat, chicken / Production
  3. Eggs, hen, in shell / Production
  4. Roots and Tubers,Total / Gross Production Index Number (2004-2006 = 100)
  5. Roots and Tubers,Total / Production
  6. Oilcrops Primary / Area harvested
  7. Coarse Grain, Total / Seed
  8. Milk, whole fresh cow / Emissions intensity
  9. Goats / Direct emissions (N2O) (Manure applied)
  10. Goats / Indirect emissions (N2O that leaches) (Manure on pasture)
  11. Chickens, layers / Indirect emissions (N2O that leaches) (Manure on pasture)
  12. Sheep and Goats / Indirect emissions (N2O) (Manure on pasture)
  13. Agricultural area / Area
  14. Permanent meadows and pastures / Area

Gradient Boosting variable selection

Dans cette approche, on a appliqué un algorithme de gradient boosting pour essayer de prédire la mortalité à horizon 1. Ensuite en étudiant la structure du modèle, il est possible d’isoler les variables les plus importantes dans la prédiction. En effet, les variables explicatives ne vont pas contribuer de manière égale à l’élaboration de la prédiction. Ainsi dans le cadre d’un algorithme de gradient boosting, chaque arbre de décision va en quelque sorte accomplir une sélection de variables en choisissant de manière appropriée les points de séparation des variables. Cette information peut alors être utilisé pour mesurer l’importance de chaque variable selon le concept suivant : plus la variable est utilisée en tant que variable de séparation, plus la variable sera importante. En faisant une moyenne de cette importance, on peut déduire l’importance de chaque variable et on obtient :Ci-dessus sont représentées les 25 variables les plus importantes d’après l’algorithme de gradient boosting à horizon 1 an. Le facteur numéro 1 de prédiction est la mortalité de l’année en cours “Old Mortality”, ce qui signifie que connaître la mortalité actuelle est une information importante dans la prédiction de la mortalité futur. D’autre part on trouve ‘Year’ en 4eme position, on remarque donc l’importance relative de la dépendance temporelle de la mortalité du cancer de l’estomac. D’autre part, on retrouve beaucoup de facteurs lié à la consommation l’alimentaire : production de viandes, fruits, légumes, et quelques facteurs à risque comme l’importation de pesticides. Il est intéressant de remarquer que l’algorithme reconnaît naturellement les facteurs responsable du cancer de l’estomac sans les avoir explicitement suggéré.

Résultats

Nos premiers résultats en utilisant une sélection de variable Lasso donne des résultats correct pour un nombre très restreint de variable (14 variables), cependant la méthode de sélection par gradient boosting permet de sélectionner plus de variables et montre un meilleur pouvoir prédictif.

Ainsi par la méthode Gradient Boosting feature selection, nous avons essayé de prédire la mortalité du cancer de l'estomac pour différents lag et pour des modèles comportant un nombre de features différent. On obtient le graphe des erreurs suivant pour chaque modèle :On remarque que l’erreur diminue radicalement lorsque l’on essaie de prédire la mortalité du cancer de l’estomac à horizon 5 ans. Cela nous semble cohérent vis à vis du décalage de temps “cause du cancer”  et “répercussion sur le taux de mortalité”. En effet, on peut comprendre qu’un facteur explicatif du cancer de l’estomac n’affectera les personnes affectées que quelques années suivant l’exposition.

D’autre part, certains modèles ont un pouvoir prédictif supérieur aux autres. Entre autre, les modèles utilisant 30, 100 et 350 variables prédictives. On aura tendance à favoriser le modèle ayant le moins de variables explicatives pour pénaliser les phénomènes d’overfitting, et pour augmenter la robustesse du modèle. C’est ainsi que notre modèle définitif sera un modèle de Gradient Boosting, prédisant la mortalité du cancer de l’estomac dans les pays en voie de développement à l’horizon 5 ans à partir de 30 variables explicatives.

On obtient alors un sqrt(MSE) de  0.039 pour des données normalisées ce qui peut être interprété comme plus ou moins un écart de 4% aux valeurs réelles.

Voici quelques visualisations de nos résultats finaux :

Conclusion

Nous obtenons finalement un modèle prédictif qui montre des performances raisonnables sur une prévision de mortalité à horizon 5 ans. En construisant le modèle, nous sommes également parvenu à isoler 30 variables explicatives qui influencent la mortalité du cancer. Des instituts voulant prédire le cancer de l'estomac pourraient donc le faire à partir de 30 variables seulement.

Pour aller plus loin, en observant les série temporelles de la mortalité, on remarque une certaine régularité :

On retrouve d’ailleurs cette dépendance temporelle lors de l’étude des features qui suggère que la variable ‘Year’ est parmi les variables explicatives les plus importantes. Cependant les algorithmes de machine learning classiques gèrent difficilement cet aspect "d’ordre" qu'induit la dépendance temporelle.

Ainsi pour aller plus loin, il serait intéressant de modéliser chaque pays par un modèle dépendant du temps, puis évaluer la valeur des résidus par une approche data science. Un tel modèle permettrait de réduire la dépendance temporelle de la variable à prédire (le résidu), ce qui pourrait constituer une approche peut-être plus fine et plus robuste du problème.