cours
Comprendre la cardinalité : Défis et solutions pour les flux de travail riches en données
J'ai rencontré le concept de cardinalité pour la première fois lors d'un cours de mécanique quantique, pendant mes études de physique. Dans cette classe, la cardinalité faisait référence à la taille d'un ensemble, qu'il soit fini ou infini, et était liée à des concepts abstraits tels que la dénombrabilité et les infinis. En passant au génie logiciel, je me suis rendu compte que, pour un ingénieur en données ou un scientifique, la cardinalité a une signification beaucoup plus pratique : le caractère distinctif des valeurs dans un ensemble de données.
Dans l'un de mes premiers projets d'analyse de données réelles, j'ai découvert à quel point la cardinalité élevée pouvait être un défi. Il a ralenti les requêtes de ma base de données et a transformé ce qui aurait dû être une vision claire en un désordre confus. Depuis, j'ai acquis une certaine expérience pratique et j'ai rédigé ce guide dans l'espoir qu'il puisse aider d'autres personnes dans la même situation. Vous êtes au bon endroit si vous voulez apprendre ce qu'est la cardinalité élevée, quels sont les défis qu'elle pose et comment les maîtriser de manière pratique et efficace !
Qu'est-ce que la cardinalité et qu'est-ce qu'une cardinalité élevée ?
Les concepts de cardinalité et de cardinalité élevée peuvent sembler un peu abstraits.
Définition et exemples
La cardinalité fait référence au nombre de valeurs uniques dans une colonne d'un ensemble de données. Une colonne à forte cardinalité contient un grand nombre de valeurs uniques, tandis que les colonnes à faible cardinalité contiennent moins d'entrées uniques.
Une cardinalité élevée est particulièrement fréquente dans les ensembles de données comportant des identifiants uniques, comme par exemple :
- Horodatage : Presque chaque valeur est unique lorsque les données sont enregistrées au niveau de la milliseconde ou de la nanoseconde.
- Identifiants des clients : Chaque client dispose d'un identifiant distinct pour le cursus de son activité.
- ID de transaction : Les ensembles de données financières comprennent souvent des codes uniques pour chaque transaction.
Ces valeurs uniques sont importantes pour le cursus, l'agrégation ou la personnalisation des données. Cependant, leur nombre considérable peut poser des défis importants en matière de stockage, de performances et de visualisation, que nous examinerons prochainement.
Cas concrets courants
La cardinalité élevée peut se manifester dans tous les domaines et toutes les industries. J'ai donné quelques exemples ci-dessous pour vous aider à comprendre ce que signifie une cardinalité élevée en termes plus pratiques.
Commerce électronique et données clients
Les plateformes de commerce électronique génèrent quotidiennement d'énormes quantités de données à haute cardinalité :
- Identifiants des clients: Un identifiant unique est attribué à chaque utilisateur afin de suivre son comportement, ses achats et ses préférences.
- ID de session: Chaque session de navigation est enregistrée de manière unique, ce qui entraîne un grand nombre de valeurs distinctes dans les ensembles de données de suivi des sessions.
- UGS du produit: Les unités de stock sont uniques pour chaque variation de produit, ce qui crée une colonne de cardinalité élevée dans les données d'inventaire et de vente.
Ces ensembles de données sont essentiels pour comprendre le comportement des utilisateurs, suivre les stocks et optimiser les stratégies de vente, mais le nombre même d'entrées uniques rend souvent l'analyse complexe.
Dossiers médicaux et dossiers des patients
Dans le domaine des soins de santé, la nécessité d'un suivi et d'une identification précis se traduit naturellement par des données de haute cardinalité. Par exemple, nous pouvons trouver :
- ID des patients: Chaque patient possède un identifiant unique, afin de garantir la précision et la sécurité des dossiers.
- Horodatage des rendez-vous: Des horodatages uniques peuvent être créés pour chaque interaction avec le patient, des visites chez le médecin aux analyses de laboratoire.
- Numéros de déclaration de sinistre: Chaque demande traitée par les assureurs se voit attribuer un code distinct à des fins d'archivage et d'audit.
Ces données sont nécessaires pour conserver l'historique des patients et garantir le respect de la réglementation en matière de protection de la vie privée.
Capteurs IoT et données en continu
La prolifération des appareils IoT a créé une vague d'ensembles de données à haute cardinalité :
- ID des capteurs: Chaque appareil IoT dispose d'un identifiant unique qui permet de suivre son activité et sa localisation.
- Données d'horodatage: Les flux de données continus enregistrent souvent des événements à des intervalles d'une milliseconde ou d'une nanoseconde, ce qui se traduit par des valeurs presque entièrement uniques.
- ID des événements: Chaque événement enregistré dans un système, des relevés de température aux détections de mouvement, se voit attribuer un identifiant unique.
Dans l'IdO, la cardinalité élevée est due à la nécessité de traiter des données fines et en temps réel provenant de nombreux appareils. Ces données sont essentielles pour l'analyse et le suivi, mais il est difficile de les stocker et de les interroger efficacement - nous y reviendrons plus tard !
Les défis de la cardinalité élevée
La cardinalité élevée présente plusieurs défis en matière de traitement des données, d'ingénierie, d'analyse et d'apprentissage automatique. Les ensembles de données à forte cardinalité fournissent une multitude d'informations utiles, mais ils peuvent souvent devenir un goulot d'étranglement et entraver les performances, l'interprétabilité et l'évolutivité.
Stockage des données et problèmes de performance
L'un des plus grands défis de la cardinalité élevée est son impact sur le stockage des données et les performances du système.
- Stockage en hauteur: Les colonnes à forte cardinalité, telles que les identifiants uniques ou les horodatages, donnent lieu à des ensembles de données plus importants. Par exemple, l'enregistrement de millions d'interactions d'utilisateurs sur une plateforme de commerce électronique entraîne une surcharge de stockage considérable en raison de l'unicité des identifiants de session ou de l'horodatage des transactions.
- Diminution des performances des requêtes: Lors de l'interrogation de colonnes à forte cardinalité, les bases de données sont confrontées à la complexité accrue de l'indexation et de l'analyse. Les requêtes qui impliquent un filtrage ou une jointure sur des colonnes à cardinalité élevée ont tendance à prendre plus de temps, car la base de données doit passer au crible un grand nombre de valeurs distinctes.
- Défis en matière d'indexation: Les index, qui sont essentiels pour accélérer les requêtes dans les bases de données, deviennent trop volumineux et moins efficaces avec des colonnes à cardinalité élevée. Cela peut entraîner un ralentissement des recherches et une dégradation des performances.
Prenons l'exemple d'une base de données stockant des données de capteurs IoT avec des identifiants de capteurs uniques et des horodatages précis. Les requêtes filtrées par un capteur et une période spécifiques peuvent nécessiter le traitement par la base de données de millions d'entrées uniques, ce qui entraîne des temps de réponse extrêmement lents et des opérations gourmandes en ressources.
Difficultés de visualisation des données
Le défi consiste à présenter un grand nombre de valeurs distinctes d'une manière qui soit à la fois compréhensible et significative. Sans une réflexion approfondie, les données à cardinalité élevée peuvent en fait cacher des informations au lieu de les révéler.
Le diagramme circulaire ci-dessous en est un bon exemple. La légende et les valeurs sont illisibles parce qu'il y a trop d'entrées uniques (états) pour le type de graphique utilisé. Il est parfois utile de changer le type de graphique utilisé, mais ce n'est pas toujours le cas.
Source : Agence européenne pour l'environnement
Imaginez un diagramme à barres représentant l'activité des clients d'une plateforme de commerce électronique par identifiant de session. Avec des milliers ou des millions d'identifiants uniques, le graphique devient un fouillis de barres illisibles, et il est peu probable que le changement du type de graphique que nous utilisons pour représenter ces données fasse une différence.
D'accord, mais pourquoi ne pas simplement agréger les données pour en tirer des schémas et des relations ? Nous le pouvons, mais il faut le faire avec prudence. L'agrégation de données à forte cardinalité peut nous faire perdre la granularité dont nous avons besoin pour obtenir des informations. Par exemple, le regroupement des données IoT par emplacement peut masquer des variations subtiles mais critiques au niveau de chaque capteur. Les techniques pour résoudre ce problème peuvent être subtiles. Je vous recommande notre cours Intermediate Data Modeling in Power BI pour acquérir une expérience pratique des relations de type un à un et un à plusieurs.
Pertinence pour l'apprentissage automatique
Une cardinalité élevée peut poser des problèmes importants dans le domaine de l'apprentissage automatique, notamment en ce qui concerne l'ingénierie des caractéristiques, la complexité des modèles et l'interprétabilité. Les modèles d'apprentissage automatique s'appuient sur des données structurées et significatives, mais les caractéristiques à forte cardinalité perturbent souvent cet équilibre, ce qui entraîne des complications :
- Augmentation de la densité: Les caractéristiques de haute qualité () donnent souvent lieu à des ensembles de données éparses. Par exemple, l'encodage d'une caractéristique catégorielle à forte cardinalité comme les codes postaux crée une matrice avec un grand nombre de dimensions, dont la plupartsont vides. Cette rareté fait qu'il est plus difficile pour les modèles, en particulier ceux basés sur la distance comme les k-voisins les plus proches ou les algorithmes de regroupement, de trouver des relations significatives dans les données.
- Risques de surajustement: Les caractéristiques à cardinalité élevée peuvent entraîner un surajustement dans les modèles qui divisent les données en catégories fines, tels que les arbres de décision ou les forêts aléatoires. Lorsque chaque catégorie n'est représentée que par quelques échantillons, le modèle peut apprendre du bruit au lieu de véritables modèles, ce qui se traduit par une mauvaise généralisation à des données inédites.
Par exemple, dans le domaine du commerce électronique, un modèle d'apprentissage automatique prédisant le désabonnement des clients peut inclure une caractéristique à forte cardinalité telle que l'"identifiant de l'utilisateur" ou l'"identifiant du produit". S'il n'est pas correctement géré, le modèle pourrait s'adapter de manière excessive à des clients ou des produits spécifiques dans les données d'apprentissage. Cela la rendrait moins efficace lorsqu'elle est appliquée à la prédiction du désabonnement de nouveaux utilisateurs, car elle apprend des schémas propres à l'ensemble de données d'apprentissage plutôt que des tendances généralisables.
Stratégies pour gérer une cardinalité élevée
La gestion efficace d'une cardinalité élevée nécessite un mélange de stratégies spécifiques au domaine et de techniques générales d'optimisation des données. Ces approches permettent non seulement d'améliorer les performances du système, mais aussi de rendre les données plus interprétables et exploitables.
Tirer parti de la technologie et des outils
Heureusement, les défis posés par les ensembles de données à cardinalité élevée sont suffisamment répandus pour que plusieurs techniques et outils aient été créés et affinés spécifiquement pour les traiter.
Optimisation de la base de données
La gestion d'une cardinalité élevée dans les bases de données commence souvent par l'optimisation de la manière dont les données sont stockées et interrogées, au-delà de la simple suppression des doublons. Les techniques les plus courantes sont les suivantes :
- Bucketing (ou binning) : Regrouper les données à forte cardinalité dans des catégories plus larges afin de réduire le nombre de valeurs uniques. Par exemple, regrouper les codes postaux par région plutôt que de les stocker individuellement.
- Partitionnement : Structuration des tableaux par des partitions basées sur les champs fréquemment interrogés. Par exemple, la répartition des données clients par pays peut améliorer les performances des requêtes dans les systèmes distribués géographiquement.
- Indexation : L'utilisation d'index spécifiquement conçus pour les champs à cardinalité élevée, comme les index bitmap ou composites, peut améliorer la vitesse d'interrogation tout en équilibrant l'efficacité du stockage.
Logiciels spécialisés
Si vous avez affaire à une cardinalité extrêmement élevée, il existe des outils et des plateformes spécialisés qui peuvent vous aider :
- Bases de données en colonnes : Ces bases de données, comme Apache Parquet ou Amazon Redshift, sont conçues pour les requêtes analytiques et peuvent stocker et traiter efficacement des colonnes à cardinalité élevée.
- Les bases de données NoSQL : Dans certains cas, les bases de données NoSQL comme MongoDB ou Elasticsearch peuvent mieux gérer la variabilité et la taille des ensembles de données à cardinalité élevée, en particulier lorsqu'elles sont associées à des conceptions sans schéma.
- Bases de données de séries chronologiques: Pour les ensembles de données dominés par les horodatages et les événements, tels que les données de capteurs IoT ou les transactions boursières, les bases de données de séries temporelles telles que InfluxDB ou TimescaleDB sont très utiles. Ils sont spécifiquement optimisés pour stocker efficacement des dimensions de cardinalité élevée et utilisent des techniques de compression avancées pour minimiser les coûts de stockage tout en restant très performants. J'ai travaillé sur quelques projets impliquant d'énormes quantités de données IoT, et les bases de données de séries temporelles ont fait une grande différence lorsqu'il s'agissait de dériver des tendances et des prédictions. J'ai rédigé ce guide sur les bases de données de séries temporelles, si vous souhaitez en savoir plus !
- Outils de profilage des données : Des outils tels que Talend, OpenRefine ou même des scripts Python personnalisés peuvent rapidement identifier les champs à cardinalité élevée et aider à déterminer la meilleure stratégie de prétraitement ou de stockage.
Techniques de prétraitement des données
Dans le domaine de la science des données et de l'apprentissage automatique, le prétraitement désigne les mesures prises pour nettoyer, transformer et organiser les données brutes dans un format adapté à l'analyse ou à la modélisation.
Il s'agit d'un sujet assez vaste et si vous n'avez que peu ou pas de connaissances en ingénierie des données ou en science des données, les informations contenues dans cette section peuvent être un peu difficiles à suivre. Cela dit, j'ai inclus des liens et des exemples pertinents pour vous aider à suivre le processus !
Le prétraitement des données est une étape essentielle pour gérer la cardinalité élevée, car il réduit la complexité, améliore les performances et garantit que la qualité des données est suffisante pour les tâches d'analyse ou d'apprentissage automatique. En transformant les données brutes en formes plus faciles à gérer, nous pouvons relever des défis tels que l'éparpillement, l'inefficacité du stockage et les goulets d'étranglement informatiques.
Réduction de la dimensionnalité
Les techniques de réduction de la dimensionnalité sont particulièrement utiles lorsque la cardinalité élevée se traduit par des ensembles de données comportant de nombreuses caractéristiques ou des matrices éparses. Ces méthodes compressent les données en moins de dimensions tout en conservant les informations essentielles.
Analyse en composantes principales (ACP)
Imaginez que vous disposiez d'un ensemble de données sur les comportements des clients du commerce électronique, avec de nombreuses caractéristiques telles que le nombre de fois qu'un client a consulté un produit, son interaction avec différentes catégories de produits, le temps qu'il a passé sur le site web, etc. Chacune de ces caractéristiques peut avoir une importance capitale, en particulier si vous assurez le cursus d'un grand nombre de produits. L'ACP peut être utilisée pour combiner ces caractéristiques en un nombre réduit de composantes qui capturent toujours les modèles les plus significatifs dans les données, tels que l'engagement global du client ou l'intérêt pour des types de produits particuliers. Pensez-y comme à la Marie Kondo des données : Il conserve les éléments qui suscitent la joie et rejette délicatement les autres !
t-SNE et UMAP
t-SNE et UMAP sont des techniques particulièrement utiles pour visualiser des données à haute dimension en les cartographiant en deux ou trois dimensions tout en préservant leur structure. Par exemple, dans les ensembles de données des dossiers médicaux, les UMAP peuvent aider à regrouper les patients présentant des conditions médicales ou des traitements similaires. Cela permettra de déceler des tendances telles que les maladies concomitantes ou les résultats des traitements.
Sélection des caractéristiques
Si vous construisez un modèle d'apprentissage automatique pour prédire les performances de vente d'une plateforme de commerce électronique et que votre ensemble de données comprend des caractéristiques telles que le nombre de fois qu'un client a cliqué sur une publicité, le nombre de produits qu'il a consultés et le nombre de jours écoulés depuis son dernier achat, vous constaterez que nombre de ces caractéristiques peuvent être corrélées les unes aux autres, ce qui crée une cardinalité et une redondance élevées.
En utilisant des techniques de sélection des caractéristiques telles que l'information mutuelle ou l'élimination récursive des caractéristiques, vous pouvez identifier les caractéristiques qui ont le pouvoir prédictif le plus important (par exemple, le "temps écoulé depuis le dernier achat" peut être plus important que les "clics sur la publicité") et exclure celles qui ne sont pas pertinentes, ce qui améliore en fin de compte les performances de votre modèle.
Si vous souhaitez en savoir plus sur ce sujet, essayez ce cours sur le prétraitement pour l'apprentissage automatique. Vous utiliserez Python pour nettoyer et préparer vos données avant de les introduire dans vos modèles.
Méthodes d'encodage
Le codage est une étape de prétraitement essentielle pour le traitement des données catégorielles, en particulier lorsqu'il s'agit de caractéristiques à cardinalité élevée. Le choix de la méthode d'encodage dépend du cas d'utilisation spécifique et du niveau de cardinalité de l'ensemble de données.
- Encodage One-Hot : L'encodage à chaud crée une colonne binaire pour chaque catégorie unique d'un ensemble de données. Bien que simple et efficace pour les données à faible cardinalité, cette méthode peut conduire à des matrices extrêmement éparses lorsqu'elle est appliquée à des caractéristiques à forte cardinalité. Par exemple, le codage de 1 000 codes postaux uniques produirait 1 000 colonnes binaires, ce qui peut saturer la mémoire et les ressources informatiques. Croyez-moi, je l'ai appris à mes dépens...
- Encodage de la cible (encodage moyen) : Dans cette méthode, les valeurs catégorielles sont remplacées par la moyenne de la variable cible pour chaque catégorie. Par exemple, si vous souhaitez prédire le taux d'attrition des clients, l'encodage cible pourrait remplacer chaque code postal par le taux d'attrition moyen des clients dans cette zone. Cette approche réduit la dimensionnalité mais peut introduire des biais et nécessite une validation minutieuse pour éviter les fuites de données.
- Codage de la fréquence : L'encodage de fréquence attribue la fréquence d'une catégorie comme valeur, réduisant ainsi le nombre de valeurs uniques. Par exemple, dans un ensemble de données sur le commerce électronique, les identifiants des produits pourraient être remplacés par leur fréquence d'achat. Cette technique est économe en ressources et est souvent en corrélation avec l'importance de la caractéristique.
- Codage par hachage : Le codage par hachage associe les catégories à des nombres entiers à l'aide d'une fonction de hachage, qui regroupe certaines catégories. Cette méthode est économe en mémoire et fonctionne bien pour les données en continu ou une cardinalité extrêmement élevée, mais elle introduit le risque de collisions de hachage. Vous êtes-vous déjà demandé pourquoi votre site d'achat en ligne vous recommandait du lait maternisé alors que vous cherchiez de l'huile pour voiture ? C'est ce que l'on appelle les collisions de hachage.
- Couches d'encastrement : Pour les modèles d'apprentissage automatique tels que les réseaux neuronaux, les couches d'intégration peuvent transformer des caractéristiques catégorielles à forte cardinalité en représentations denses et à faible dimension. Cette approche est largement utilisée dans les systèmes de recommandation, tels que l'encodage de millions d'identifiants de produits ou d'utilisateurs dans les plateformes de commerce électronique.
Conclusion
Les ensembles de données à cardinalité élevée peuvent parfois sembler écrasants et l'extraction d'informations utiles à partir de ces ensembles de données peut s'avérer un véritable défi. La prochaine fois que vous rencontrerez un ensemble de données à cardinalité élevée, rappelez-vous que ce n'est pas la faute des données - elles sont simplement pleines de potentiel qui attend d'être débloqué. Qu'il s'agisse de réduction de la dimensionnalité, de techniques d'encodage intelligentes ou d'outils tels que les bases de données de séries chronologiques, vous pouvez gérer efficacement vos ensembles de données et les transformer en atouts très puissants.
Maintenant que vous savez comment travailler avec des données à cardinalité élevée en théorie, il est temps de passer à la pratique :
- Mettez la main à la pâte avec les techniques de réduction de la dimensionnalité et d'encodage - commencez petit et progressez. Notre réduction de la dimensionnalité en Python est un excellent choix.
- Testez certains des outils mentionnés ici (oui, les bases de données de séries temporelles sont aussi cool qu'elles en ont l'air !)
Et surtout, relevez le défi. La cardinalité élevée peut être délicate, mais c'est aussi l'occasion d'apprendre beaucoup sur l'ingénierie et l'analyse des données !
Ingénieur logiciel senior, rédacteur technique et conseiller avec une formation en physique. Nous nous engageons à aider les jeunes entreprises à atteindre leur potentiel et à rendre des concepts complexes accessibles à tous.
FAQ
Comment puis-je identifier une cardinalité élevée dans mes propres ensembles de données ?
Une cardinalité élevée peut être identifiée en vérifiant si les colonnes présentent un grand nombre de valeurs uniques par rapport au nombre de lignes. Par exemple, dans un ensemble de données sur les clients, une colonne telle que "ID client" aura probablement une cardinalité élevée car chaque entrée est unique. Des outils comme pandas en Python peuvent facilement vous aider à vérifier le nombre de valeurs uniques dans une colonne avec des commandes comme df['column_name'].nunique()
.
Quelles sont les conséquences dans le monde réel si la cardinalité élevée est ignorée dans l'analyse des données ?
Ignorer une cardinalité élevée peut entraîner plusieurs problèmes, notamment des problèmes de performance (temps d'interrogation plus lents), des difficultés à comprendre les données (visualisations trop complexes) et des difficultés dans les modèles d'apprentissage automatique (surajustement ou formation inefficace). Si vous ne tenez pas compte de la cardinalité élevée, vos analyses de données risquent d'être encombrées, imprécises ou tout simplement ingérables.
Une cardinalité élevée peut-elle être bénéfique pour l'analyse des données ou doit-elle être évitée ?
Bien que la cardinalité élevée soit souvent considérée comme un défi, elle peut fournir des informations précieuses dans certains contextes. Par exemple, dans les systèmes de recommandation, les caractéristiques à forte cardinalité (comme l'ID de l'utilisateur ou l'ID du produit) aident le système à personnaliser les recommandations. Cependant, il est important de gérer soigneusement la façon dont ces caractéristiques sont utilisées dans les modèles afin d'éviter l'ajustement excessif et la dégradation des performances.
La cardinalité élevée est-elle plus problématique pour les données structurées ou non structurées ?
Une cardinalité élevée peut être un problème dans les données structurées et non structurées, mais c'est généralement plus difficile dans les ensembles de données structurés (par exemple, les bases de données relationnelles) où la cardinalité est souvent liée à des colonnes spécifiques telles que les identifiants ou les horodatages. Dans les données non structurées, telles que les textes ou les images, les problèmes de cardinalité peuvent se manifester de manière plus subtile, par exemple par un trop grand nombre de mots ou de pixels uniques, ce qui rend le traitement plus complexe.
Apprenez avec DataCamp
cours
Understanding Data Science
cours
Data Modeling in Power BI
blog
Les 20 meilleures questions d'entretien pour les flocons de neige, à tous les niveaux

Nisha Arya Ahmed
20 min
blog
2022-2023 Rapport annuel DataCamp Classrooms
blog
Les 32 meilleures questions d'entretien sur AWS et leurs réponses pour 2024
blog
Q2 2023 DataCamp Donates Digest
blog
Célébration de Saghar Hazinyar : Une boursière de DataCamp Donates et une diplômée de Code to Inspire

Fereshteh Forough
4 min
blog