Que se soit dans le domaine du marketing, de la médecine ou encore du bâtiment pour par exemple étudier les pistes d’optimisation énergétique, il est fréquent d’avoir à faire des analyses à partir de jeux de données dans lesquels il y a des valeurs manquantes. Si certains modèles de data-mining, comme les arbres de décisions, s’appliquent assez bien sur des données avec des manques, il y en a d’autres pour lesquels cette situation est problématique, et elle est souvent problématique ne serait-ce que pour calculer des indicateurs de base comme une valeur moyenne, une médiane ou un écart-type. Un réflexe immédiat, si le nombre de lignes avec des valeurs manquantes n’est pas trop grand, peut être de les retirer et faire l’analyse avec celles qui restent, surtout si le nombre de lignes restantes est assez important. Nous allons voir à travers un exemple comment une telle démarche peut complètement fausser une analyse et donc les décisions qui en découlent, et par suite la performance d’un modèle prédictif que l’on voudrait mettre en œuvre sur les données.
Considérons le jeu de données fictif ci-dessous (dans un cas réel, il y aurait beaucoup plus de lignes mais on se restreint ici à un nombre permettant de bien visualiser la situation).
Ce jeu de données présente un échantillon de pièces que l’on suppose tirées aléatoirement dans l’ensemble des pièces à étudier. Pour chacune des 49 pièces tirées (notées in dans la colonne de gauche), nous disposons de deux caractéristiques notées C1 et C2, de son temps cumulé de fonctionnement en heures, et d’une valeur dans la colonne « Panne » indiquant par un 1 que la pièce a connu une panne depuis sa mise en fonctionnement et indiquant le contraire par un 0.
Nous souhaitons déterminer si le temps de fonctionnement a un impact sur le risque qu’une pièce tombe en panne. Pour se faire une première idée, nous regroupons les pièces selon leur temps de fonctionnement, supérieur ou inférieur à 400 heures, et nous nous demandons : « Est-ce que le fait qu’une pièce ait fonctionné plus de 400 heures a un impact sur le risque qu’elle tombe en panne ? ». Si oui, il serait pertinent de vérifier en particulier ces pièces, de mettre en place une alerte pour être informé qu’une pièce vient de passer les 400 heures de fonctionnement, ou encore d’utiliser ce critère dans un modèle prédictif. Si non, ce sera une piste à oublier.
Il y a dans ce jeu de données des pièces pour lesquelles le temps de fonctionnement est manquant. Supposons donc que nous décidions de retirer les lignes concernées. Nous avons alors 21 pièces avec un temps de fonctionnement inférieur à 400 heures parmi lesquelles 7 ont connu une panne, ce qui représente 33 %. Concernant les pièces ayant un temps de fonctionnement supérieur à 400 heures, 6 sur 18 ont connu une panne, ce qui fait aussi une proportion de 33 %. La proportion de pannes est donc la même sur les deux groupes de pièces, ce qui tend à laisser penser que le fait d’avoir fonctionné plus ou moins de 400 heures n’est pas un critère qui influe sur le risque de tomber en panne. Nous sommes donc tentés d’écarter cette piste.
Le problème est que cette analyse est faussée parce que les pièces pour lesquelles le temps de fonctionnement est manquant ne le sont pas au hasard. Il s’avère que ces pièces ont été installées avant les autres, dans un contexte différent et les relevés de fonctionnement n’ont pas été traités comme pour les autres. Les chiffres manquants sont en fait les suivants :
Si nous reconsidérons l’influence du temps de fonctionnement sur la proportion de panne avec ces chiffres complets, nous trouvons que concernant les pièces avec un temps de fonctionnement supérieur à 400 heures, 14 sur 28 ont connu une panne, ce qui fait 50 % et non pas 33 %. Notre analyse a donc été faussée parce qu’en retirant les lignes, la proportion initiale a été modifiée, alors même que cette proportion était raisonnablement conforme à ce qu’elle est dans l’ensemble complet des pièces parce que le tirage de l’échantillon a été fait aléatoirement. Les conclusions réelles sont donc à l’inverse de celles trouvées précédemment. Le fait de fonctionner plus ou moins que 400 heures a bien un impact sur le risque que la pièce tombe en panne (dans un cas réel, il faudrait confirmer cette conclusion grâce à un test statistique qui aurait pour but de rejeter l’hypothèse que les proportions sont les mêmes dans l’ensemble complet des pièces malgré qu’elles diffèrent dans l’échantillon).
Que peut-on faire pour éviter une telle situation ?
Le première chose est de se renseigner sur la manière dont les données ont été recueillies pour voir si le mécanisme qui a engendré les manques peut être mis en lumière. Dans la situation décrite ici, quelques questions aux personnes chargées de récolter les données auraient peut-être pu permettre de retrouver les valeurs manquantes. Mais il y a bien sûr des situations où il est impossible de comprendre pourquoi des données manquent, soit parce que le phénomène est trop complexe, ou parce que les données sont anciennes… Nous verrons dans un prochain article comment, dans la situation décrite ci-dessus, il est possible de reconstruire l’information de telle sorte à obtenir un jeu de données, non pas avec exactement les valeurs réelles, mais avec des valeurs probables qui évitent de nous induire en erreur.