Les novices en sciences des données pensent parfois qu'il leur suffit de trouver le bon modèle pour leurs données et de l'adapter. Or aucune approche ne pourrait être plus éloignée de la pratique réelle de la science des données. En fait, le data wrangling ou formatage des données - également appelé data cleansing (nettoyage des données) ou data munging (regroupement des données) - et l'analyse exploratoire des données occupent souvent 80 % du temps du scientifique des données. Malgré la simplicité conceptuelle du formatage des données et de l'analyse exploratoire des données, l’accomplissement correct de ce travail peut s’avérer difficile. Les données non nettoyées ou mal nettoyées sont des déchets, et le principe du GIGO (garbage in/garbage out) s'applique autant à la modélisation et à l'analyse qu'à tout autre aspect du traitement des données.
Qu'est-ce que le data wrangling ?
Il est rare que les données soient directement utilisables. Elles sont souvent contaminées par des erreurs et des omissions, présentent peu souvent la structure souhaitée et manquent généralement de contexte. Le data wrangling consiste à découvrir les données, à les nettoyer, à les valider, à les structurer pour les rendre utilisables, à enrichir leur contenu (en ajoutant éventuellement des informations provenant de données publiques, par exemple les conditions météorologiques et économiques) et, dans certains cas, à les agréger et à les transformer. Ce que recouvre exactement le data wrangling peut varier. Si les données proviennent d'instruments ou de dispositifs IoT, le transfert de données peut constituer une partie importante du processus. Si les données sont destinées à être utilisées pour l'apprentissage machine, le travail sur les données peut inclure de la normalisation ou de la standardisation ainsi qu’une réduction de dimensionnalité. Si l'analyse exploratoire des données est destinée à être effectuée sur des ordinateurs personnels disposant d'une mémoire et d'un stockage limités, le processus de formatage peut inclure l'extraction de sous-ensembles de données. Si les données proviennent de sources multiples, les noms des champs et les unités de mesure peuvent nécessiter une consolidation par le biais d'un mappage et d'une transformation des données.
Qu'est-ce que l'analyse exploratoire des données ?
L'analyse exploratoire des données est étroitement associée à John Tukey, de l'université de Princeton et des Bell Labs. C’est en 1961 que John Tukey propose l'analyse exploratoire des données et, en 1977, il écrit un livre à ce sujet. Son intérêt pour l'analyse exploratoire des données a influencé le développement du langage statistique S aux Bell Labs, qui a ensuite donné naissance aux langages de programmation S-Plus et R. M. Tukey trouvait que l’on accordait une importance excessive aux tests d'hypothèses statistiques, également appelés analyse confirmatoire des données, et c’est ce qui a motivé son travail sur l'analyse exploratoire des données. La différence entre les deux, c’est que dans l'analyse exploratoire des données, on commence par étudier les données et on les utilise ensuite pour suggérer des hypothèses, au lieu de sauter directement aux hypothèses et d'ajuster des lignes et des courbes aux données. En pratique, l'analyse exploratoire des données combine des graphiques et des statistiques descriptives. Dans un chapitre de son livre souvent cité, John Tukey utilise le langage R pour explorer l'économie vietnamienne des années 1990 à l'aide d'histogrammes, d'estimations par noyau, de diagrammes en boîte, de moyennes et d'écarts types, et de graphiques d'illustration.
ETL et ELT pour l'analyse des données
Dans la pratique classique des bases de données, l'ETL (extract, transform and load) fait référence au processus d'extraction des données d'une source de données, souvent une base de données transactionnelle, de leur transformation en une structure adaptée à l'analyse et de leur chargement dans un entrepôt de données. L’ELT (extract, load and transform) est un processus plus moderne qui consiste à introduire les données dans un lac ou un entrepôt de données sous forme brute, à charge pour l'entrepôt de données d’effectuer ensuite toutes les transformations nécessaires. Que l’on dispose de lacs, d'entrepôts, de tous ces éléments ou d'aucun d'entre eux, le processus ELT est plus approprié que le processus ETL pour l'analyse de données et plus particulièrement pour l'apprentissage machine. La raison à cela, c’est que l'apprentissage machine oblige souvent à itérer sur les transformations de données au service de l'ingénierie des fonctionnalités, ce qui est très important pour faire de bonnes prédictions.
La capture de données d’écran pour l'exploration de données
Il arrive que les données soient disponibles sous une forme illisibles par les programmes d'analyse, que ce soit sous forme de fichier ou via une API. Mais qu'en est-il lorsque les données ne sont disponibles que sous forme de sortie d'un autre programme, par exemple un site Web sous forme de tableaux ? Il n'est pas très difficile d'analyser et de collecter des données Web à l'aide d'un programme qui imite un navigateur Web. Ce processus de capture de données d’écran est appelé screen scraping, Web scraping ou data scraping. À l'origine, le screen scraping consistait à lire des données textuelles sur l'écran d'un terminal d'ordinateur. Aujourd’hui, il est beaucoup plus courant que les données soient affichées dans des pages Web HTML.
Nettoyage des données et imputation des valeurs manquantes pour l'analyse de données
Dans le monde réel, la plupart des ensembles de données brutes comportent des valeurs manquantes ou manifestement erronées. Une manière simple pour les nettoyer est de supprimer les colonnes et les lignes qui présentent un pourcentage élevé de valeurs manquantes. On peut également décider d’effacer les valeurs aberrantes plus tard dans le processus. Parfois, un respect trop scrupuleux de ces règles peut conduire à une perte importante de données. Une autre façon de traiter les valeurs manquantes est d’imputer les valeurs. Il s'agit essentiellement de deviner ce qu'elles devraient être. Cette méthode est facile à mettre en œuvre avec les bibliothèques Python standard. Les fonctions d'importation de données de Pandas, comme read_csv(), peuvent remplacer un joker comme « ? » par « NaN ». La classe Scikit_learn SimpleImputer() peut remplacer les valeurs « NaN » en utilisant l'une des quatre stratégies suivantes : moyenne de la colonne (column mean), médiane de la colonne (column median), mode de la colonne (column mode) et constante (constant). Pour une valeur de remplacement constante, la valeur par défaut est « 0 » pour les champs numériques et « missing_value » pour les champs de type string ou object. On peut définir une valeur de remplissage (fill_value) pour remplacer cette valeur par défaut. Mais quelle est la meilleure stratégie d'imputation ? Tout dépend de ses données et de son modèle. La seule façon de le savoir est de les essayer toutes et de voir quelle stratégie permet d'obtenir le modèle le mieux adapté et les meilleurs scores de précision de validation.
Ingénierie des fonctionnalités pour la modélisation prédictive
Une fonctionnalité est une propriété individuelle mesurable ou une caractéristique d'un phénomène observé. L'ingénierie des fonctionnalités repose sur la construction d’un ensemble minimum de variables indépendantes qui expliquent un problème. Si deux variables sont fortement corrélées, il faut soit les combiner en une seule caractéristique, soit en supprimer une. Parfois, on effectue une analyse en composantes principales (ACP) pour convertir les variables corrélées en un ensemble de variables linéairement non corrélées. Les variables catégorielles, généralement sous forme de texte, doivent être codées en nombres pour être utiles pour l'apprentissage machine. L'attribution d'un nombre entier à chaque catégorie (encodage des étiquettes) semble évidente et facile, mais malheureusement, certains modèles d'apprentissage machine confondent les nombres entiers avec les nombres ordinaux. Une alternative courante est le codage one-hot (ou encodage 1 parmi n), dans lequel chaque catégorie est assignée à une colonne (ou dimension d'un espace vectoriel) qui est codée 1 ou 0.
La génération de fonctionnalités désigne le processus de construction de nouvelles fonctionnalités à partir des observations brutes. Par exemple, en soustrayant l'année de naissance de l'année de décès, on obtient l'âge au moment du décès, qui est une variable indépendante de premier ordre pour l'analyse de la durée de vie et de la mortalité. L'algorithme Deep Feature Synthesis (DFS) est utile pour automatiser la génération de fonctionnalités. Il est implementé dans le framework open source Featuretools. La sélection des fonctionnalités désigne le processus d'élimination des fonctionnalités inutiles de l'analyse, afin d'éviter le « fléau de la dimension » et l'ajustement excessif des données. Les algorithmes de réduction de dimensionnalité peuvent le faire automatiquement. Parmi les techniques disponibles, on peut citer la suppression des variables avec de nombreuses valeurs manquantes, la suppression des variables à faible variance, l'arbre de décision (Decision Tree), la forêt d’arbres décisionnels (Random Forest), la suppression ou la combinaison des variables à forte corrélation, l'élimination progressive des variables les moins discriminantes (Backward Feature Elimination), la sélection des fonctionnalités en mode ascendant (Forward Feature Selection), l'analyse factorielle (Factor Analysis) et l'analyse en composantes principales (Principal component analysis).
Normalisation des données pour l'apprentissage machine
Pour utiliser des données numériques dans l’analyse des données en régression, il faut généralement normaliser les données. Dans le cas contraire, les nombres ayant des plages plus larges pourraient avoir tendance à dominer la distance euclidienne entre les vecteurs de caractéristiques, leurs effets pourraient être amplifiés au détriment des autres champs, et l'optimisation par la méthode mathématique du point col (Method of steepest descent) pourrait avoir des difficultés à converger. Il existe plusieurs manières de normaliser et de standardiser les données pour l'apprentissage machine, notamment la normalisation min-max, la normalisation moyenne, la standardisation et la mise à l'échelle de la longueur unitaire. Ce processus est souvent appelé « mise à l'échelle des fonctionnalités » ou « Feature scaling ».
Cycle de vie de l'analyse des données
Même s’il existe probablement autant de variantes du cycle de vie de l'analyse des données que d'analystes, une formulation raisonnable décompose ce cycle en sept ou huit étapes, selon le mode de comptage :
- identifier les questions auxquelles il faut répondre pour comprendre l'activité et les variables qui doivent être prédites;
- acquérir les données (également appelé exploration de données);
- nettoyer les données et tenir compte des données manquantes, soit en éliminant des lignes, soit en imputant des valeurs;
- explorer les données;
- effectuer l'ingénierie des fonctionnalités;
- faire la modélisation prédictive, y compris l'apprentissage machine, la validation, les méthodes et les tests statistiques;
- visualiser des données ; et
- revenir à l'étape 1 (compréhension de l'activité) et continuer le cycle.
Les étapes 2 et 3 sont souvent considérées comme du data wrangling, mais il est important d'établir le contexte du data wrangling en identifiant les questions métier auxquelles il faut répondre (étape 1). Il est également nécessaire de procéder à l'analyse exploratoire des données (étape 4) avant la modélisation, afin d'éviter d'introduire des biais dans les prédictions. Il est courant d'itérer sur les étapes 5 à 7 pour trouver le meilleur modèle et le meilleur ensemble de fonctionnalités. Et, oui, le cycle de vie redémarre presque toujours quand on pense avoir terminé, soit parce que les conditions changent, soit parce que les données dérivent, soit parce que l'entreprise a besoin de répondre à des questions supplémentaires.