curso
Comprender la cardinalidad: Retos y soluciones para flujos de trabajo con muchos datos
Me encontré por primera vez con el concepto de cardinalidad en una clase de Mecánica Cuántica, durante mi licenciatura en Física. En esa clase, la cardinalidad se refería al tamaño de un conjunto, ya fuera finito o infinito, y estaba vinculada a conceptos abstractos como la contabilidad y los infinitos. Al pasar a la ingeniería de software, me di cuenta de que, para un ingeniero o científico de datos, la cardinalidad adquiere un significado mucho más práctico: la distinción de valores en un conjunto de datos.
En uno de mis primeros proyectos de análisis de datos del mundo real, aprendí lo difícil que podía ser la cardinalidad alta. Ralentizaba mis consultas a la base de datos y convertía lo que debería haber sido una visión clara en un lío confuso. Desde entonces, he tenido algo de práctica, y he compilado esta guía con la esperanza de que pueda ayudar a otros en la misma situación. Estás en el lugar adecuado si quieres aprender qué es la alta cardinalidad, qué retos plantea y cómo domarlos de forma práctica y eficaz.
¿Qué es la cardinalidad y qué es la cardinalidad alta?
Los conceptos de cardinalidad y alta cardinalidad pueden sonar un poco abstractos, así que vamos a desglosarlos.
Definición y ejemplos
La cardinalidad se refiere al número de valores únicos de una columna del conjunto de datos. Una columna con cardinalidad alta contiene un gran número de valores únicos, mientras que las columnas con cardinalidad baja contienen menos entradas únicas.
La cardinalidad alta es especialmente común en conjuntos de datos que implican identificadores únicos, como:
- Marcas de tiempo: Casi todos los valores son únicos cuando los datos se registran a nivel de milisegundos o nanosegundos.
- ID de cliente: Cada cliente tiene un identificador distinto para seguir su actividad.
- ID de transacción: Los conjuntos de datos financieros suelen incluir códigos únicos para cada transacción.
Estos valores únicos son importantes para rastrear, agregar o personalizar datos. Sin embargo, su enorme número puede plantear importantes retos en cuanto a almacenamiento, rendimiento y visualización, que veremos en breve.
Casos comunes de la vida real
La alta cardinalidad puede manifestarse en todos los ámbitos e industrias. He esbozado algunos ejemplos a continuación, para ayudarte a comprender lo que significa la cardinalidad alta en términos más prácticos.
Comercio electrónico y datos de clientes
Las plataformas de comercio electrónico generan diariamente enormes cantidades de datos de alta cardinalidad:
- ID de cliente: A cada usuario se le asigna un identificador único para rastrear su comportamiento, compras y preferencias.
- Identificadores de sesión: Cada sesión de navegación se registra de forma única, lo que da lugar a un gran número de valores distintos en los conjuntos de datos de seguimiento de sesiones.
- SKU del producto: Las Unidades de Mantenimiento de Existencias son únicas para cada variación de producto, lo que crea una columna de alta cardinalidad en los datos de inventario y ventas.
Estos conjuntos de datos son esenciales para comprender el comportamiento de los usuarios, hacer un seguimiento del inventario y optimizar las estrategias de venta, pero el gran número de entradas únicas a menudo hace que el análisis sea complejo.
Registros sanitarios y de pacientes
En sanidad, la necesidad de un seguimiento y una identificación precisos se traduce naturalmente en datos de alta cardinalidad. Por ejemplo, podemos encontrar
- Identificación de pacientes: Cada paciente tiene un identificador único, para garantizar un registro preciso y seguro.
- Fechas de citas: Se pueden crear marcas de tiempo únicas para cada interacción con el paciente, desde las visitas al médico hasta las pruebas de laboratorio.
- Números de reclamación al seguro: A cada reclamación tramitada por los proveedores de seguros se le asigna un código distinto a efectos de registro y auditoría.
Estos datos son necesarios para mantener los historiales de los pacientes y garantizar el cumplimiento de la normativa sobre privacidad.
Sensores IoT y transmisión de datos
La proliferación de dispositivos IoT ha creado una oleada de conjuntos de datos de alta cardinalidad:
- ID de sensor: Cada dispositivo IoT tiene un identificador único para rastrear su actividad y ubicación.
- Datos del sello de tiempo: Los flujos de datos continuos suelen registrar eventos a intervalos de milisegundos o nanosegundos, lo que da lugar a valores casi totalmente únicos.
- ID de suceso: A cada evento registrado en un sistema, desde lecturas de temperatura a detecciones de movimiento, se le asigna un identificador único.
En IoT, la alta cardinalidad surge debido a la necesidad de procesar datos de grano fino y en tiempo real procedentes de numerosos dispositivos. Esto es vital para el análisis y la supervisión, pero difícil de almacenar y consultar de forma eficaz.
Retos de la alta cardinalidad
La alta cardinalidad presenta varios retos en el procesamiento de datos, la ingeniería, el análisis y el aprendizaje automático. Los conjuntos de datos con alta cardinalidad proporcionan una gran cantidad de información útil, pero a menudo pueden convertirse en un cuello de botella y dificultar el rendimiento, la interpretabilidad y la escalabilidad.
Almacenamiento de datos y problemas de rendimiento
Uno de los mayores retos de la alta cardinalidad es su impacto en el almacenamiento de datos y el rendimiento del sistema.
- Techo de almacenamiento: Las columnas de alta cardinalidad, como los identificadores únicos o las marcas de tiempo, dan lugar a conjuntos de datos más grandes. Por ejemplo, registrar millones de interacciones de usuarios en una plataforma de comercio electrónico crea una inmensa sobrecarga de almacenamiento debido a la unicidad de los ID de sesión o las marcas de tiempo de las transacciones.
- Disminución del rendimiento de la consulta: Cuando se consultan columnas de alta cardinalidad, las bases de datos luchan con la mayor complejidad de la indexación y el escaneado. Las consultas que implican filtrar o unir columnas de alta cardinalidad tienden a tardar más, ya que la base de datos tiene que cribar un gran número de valores distintos.
- Retos de la indexación: Los índices, esenciales para acelerar las consultas a la base de datos, se hinchan y pierden eficacia con columnas de alta cardinalidad. Esto puede dar lugar a búsquedas más lentas y a un rendimiento degradado.
Tomemos como ejemplo una base de datos que almacena datos de sensores IoT con ID de sensor únicos y marcas de tiempo precisas. Las consultas que filtran por un sensor y un intervalo de tiempo concretos pueden requerir que la base de datos procese millones de entradas únicas, lo que provoca tiempos de respuesta superlentos y operaciones que consumen muchos recursos.
Dificultades en la visualización de datos
El reto consiste en presentar un gran número de valores distintos de forma comprensible y significativa. Sin una reflexión cuidadosa, los datos de alta cardinalidad pueden ocultar ideas en lugar de revelarlas.
Un buen ejemplo de ello es el siguiente gráfico circular. La leyenda y los valores son ilegibles porque hay demasiadas entradas únicas (estados) para el tipo de gráfico utilizado. A veces, cambiar el tipo de gráfico que utilizamos ayuda, pero no siempre.
Fuente: Agencia Europea de Medio Ambiente
Imagina un gráfico de barras que represente la actividad de los clientes de una plataforma de comercio electrónico por ID de sesión. Con miles o millones de ID únicos, el gráfico se convierte en un lío de barras ilegibles, y es poco probable que cambiar el tipo de gráfico que utilizamos para trazar estos datos suponga una diferencia.
Vale, entonces ¿por qué no agregamos simplemente los datos para obtener patrones y relaciones de nuestros gráficos? Podemos, pero hay que hacerlo con cuidado. La agregación de datos de alta cardinalidad puede hacernos perder la granularidad que necesitamos para obtener información. Por ejemplo, agrupar los datos IoT por ubicación podría ocultar variaciones sutiles pero críticas a nivel de sensor individual. Las técnicas para solucionar este problema pueden ser sutiles. Recomiendo nuestro curso Intermediate Data Modeling in Power BI para obtener experiencia práctica con relaciones uno a uno y uno a muchos.
Relevancia para el aprendizaje automático
Una cardinalidad alta puede plantear retos importantes en el aprendizaje automático, sobre todo en lo que se refiere a la ingeniería de características, la complejidad del modelo y la interpretabilidad. Los modelos de aprendizaje automático prosperan con entradas estructuradas y significativas, pero las características de alta cardinalidad a menudo rompen este equilibrio, provocando complicaciones:
- Aumento de la dispersión: Las características de alta cardinalidad suelen dar lugar a conjuntos de datos dispersos. Por ejemplo, la codificación de una sola vez de un rasgo categórico de alta cardinalidad, como los códigos postales, crea una matriz con un gran número de dimensiones, la mayoría de las cualesestán vacías. Esta dispersión dificulta que los modelos, sobre todo los basados en la distancia, como k-vecinos más próximos o los algoritmos de agrupación, encuentren relaciones significativas en los datos.
- La sobreadaptación entraña riesgos: Las características de cardinalidad alta pueden provocar un ajuste excesivo en los modelos que dividen los datos en categorías de grano fino, como los árboles de decisión o los bosques aleatorios. Cuando cada categoría sólo está representada por unas pocas muestras, el modelo puede aprender ruido en lugar de patrones genuinos, lo que da lugar a una mala generalización a datos no vistos.
Por ejemplo, en el comercio electrónico, un modelo de aprendizaje automático que prediga la pérdida de clientes podría incluir una característica de alta cardinalidad como "ID de usuario" o "ID de producto". Si no se gestiona adecuadamente, el modelo podría sobreajustarse a clientes o productos específicos en los datos de entrenamiento. Esto lo haría menos eficaz cuando se aplica para predecir la pérdida de nuevos usuarios, ya que aprende patrones exclusivos del conjunto de datos de entrenamiento en lugar de tendencias generalizables.
Estrategias para gestionar la alta cardinalidad
Gestionar eficazmente la alta cardinalidad requiere una mezcla de estrategias específicas del dominio y técnicas generales de optimización de datos. Estos enfoques no sólo mejoran el rendimiento del sistema, sino que también hacen que los datos sean más interpretables y procesables.
Aprovechar la tecnología y las herramientas
Afortunadamente, los retos que plantean los conjuntos de datos de alta cardinalidad están lo suficientemente extendidos como para que se hayan creado y perfeccionado diversas técnicas y herramientas específicamente para afrontarlos.
Optimización de la base de datos
La gestión de la alta cardinalidad en las bases de datos suele empezar por optimizar la forma en que se almacenan y consultan los datos, más allá de la simple eliminación de duplicados. Las técnicas más utilizadas son:
- Agrupamiento (o binning): Agrupar los datos de alta cardinalidad en categorías más amplias para reducir el número de valores únicos. Por ejemplo, agrupar los códigos postales por regiones en lugar de almacenar cada uno individualmente.
- Partición: Estructurar tablas por particiones basadas en campos de consulta frecuente. Por ejemplo, particionar los datos de los clientes por países puede mejorar el rendimiento de las consultas en sistemas distribuidos geográficamente.
- Indexación: El uso de índices diseñados específicamente para campos de alta cardinalidad, como los índices de mapa de bits o compuestos, puede mejorar la velocidad de consulta, equilibrando al mismo tiempo la eficiencia del almacenamiento.
Software especializado
Si se trata de una cardinalidad extremadamente alta, existen herramientas y plataformas especializadas que pueden ayudarte:
- Bases de datos columnares: Estas bases de datos, como Apache Parquet o Amazon Redshift, están diseñadas para consultas analíticas y pueden almacenar y procesar eficazmente columnas de alta cardinalidad.
- Bases de datos NoSQL: En algunos casos, las bases de datos NoSQL como MongoDB o Elasticsearch pueden manejar mejor la variabilidad y el tamaño de los conjuntos de datos de alta cardinalidad, especialmente cuando se combinan con diseños sin esquema.
- Bases de datos de series temporales: Para los conjuntos de datos dominados por marcas de tiempo y eventos, como los datos de sensores IoT o las transacciones bursátiles, las bases de datos de series temporales como InfluxDB o TimescaleDB son superútiles. Están optimizados específicamente para almacenar de forma eficiente dimensiones de alta cardinalidad y utilizan técnicas avanzadas de compresión para minimizar los costes de almacenamiento, sin dejar de tener un alto rendimiento. He trabajado en algunos proyectos con enormes cantidades de datos de IoT, y las bases de datos de series temporales supusieron una gran diferencia a la hora de deducir tendencias y predicciones. Escribí esta guía sobre las bases de datos de series temporales, ¡por si te interesa saber más!
- Herramientas de perfilado de datos: Herramientas como Talend, OpenRefine o incluso scripts personalizados en Python pueden identificar rápidamente los campos de alta cardinalidad y ayudar a determinar la mejor estrategia de preprocesamiento o almacenamiento.
Técnicas de preprocesamiento de datos
El preprocesamiento en la ciencia de datos y el aprendizaje automático se refiere a los pasos que se dan para limpiar, transformar y organizar los datos brutos en un formato adecuado para el análisis o el modelado.
Es un tema bastante carnoso, y si tienes pocos o ningún conocimiento de ingeniería o ciencia de datos, la información de esta sección puede ser un poco difícil de seguir. Dicho esto, ¡he incluido enlaces y ejemplos relevantes para ayudarte a seguir adelante!
El preprocesamiento de datos es un paso esencial para gestionar una cardinalidad elevada, ya que reduce la complejidad, mejora el rendimiento y garantiza que la calidad de los datos sea suficiente para las tareas de análisis o aprendizaje automático. Transformando los datos brutos en formas más manejables, podemos afrontar retos como la dispersión, las ineficiencias de almacenamiento y los cuellos de botella computacionales.
Reducción de la dimensionalidad
Las técnicas de reducción de la dimensionalidad son especialmente valiosas cuando la alta cardinalidad da lugar a conjuntos de datos con numerosas características o matrices dispersas. Estos métodos comprimen los datos en menos dimensiones, pero conservando la información crítica.
Análisis de Componentes Principales (ACP)
Imagina que tienes un conjunto de datos de comportamientos de clientes de comercio electrónico, con un montón de características como el número de veces que un cliente ha visto un producto, su interacción con diferentes categorías de productos, el tiempo que ha pasado en el sitio web, etc. Cada una de estas características puede ser muy cardinal, sobre todo si haces el seguimiento de un gran número de productos. El ACP puede utilizarse para combinar estas características en menos componentes que sigan captando los patrones más significativos de los datos, como el compromiso general de los clientes o el interés por determinados tipos de productos. Piensa en ello como la Marie Kondo de los datos: Conserva los rasgos que provocan alegría y descarta suavemente el resto.
t-SNE y UMAP
El t-SNE y el UMAP son técnicas especialmente útiles para visualizar datos de alta dimensión, mapeándolos en dos o tres dimensiones y conservando su estructura. Por ejemplo, en los conjuntos de datos de registros sanitarios, la UMAP podría ayudar agrupando a los pacientes con enfermedades o regímenes de tratamiento similares. Esto ayudará a detectar tendencias, como enfermedades concurrentes comunes o resultados del tratamiento.
Selección de características
Si estás construyendo un modelo de aprendizaje automático para predecir el rendimiento de las ventas de una plataforma de comercio electrónico, y tu conjunto de datos incluye características como el número de veces que un cliente ha hecho clic en un anuncio, el número de productos que ha visto y el número de días transcurridos desde su última compra, descubrirás que muchas de estas características pueden estar correlacionadas entre sí, lo que crea una alta cardinalidad y redundancia.
Utilizando técnicas de selección de características como la información mutua o la eliminación recursiva de características, podrías identificar qué características tienen el poder predictivo más significativo (por ejemplo, "tiempo transcurrido desde la última compra" podría ser más importante que "clics en el anuncio") y excluir las irrelevantes, mejorando en última instancia el rendimiento de tu modelo.
Si te interesa aprender más sobre este tema, prueba este curso de Preprocesamiento para el Aprendizaje Automático. Utilizarás Python para limpiar y preparar tus datos antes de introducirlos en tus modelos.
Métodos de codificación
La codificación es un paso crítico del preprocesamiento para manejar datos categóricos, sobre todo cuando se trata de rasgos de alta cardinalidad. La elección del método de codificación depende del caso de uso concreto y del nivel de cardinalidad del conjunto de datos.
- Codificación en caliente: La codificación en una sola columna crea una columna binaria para cada categoría única de un conjunto de datos. Aunque es sencillo y eficaz para los datos de baja cardinalidad, puede dar lugar a matrices extremadamente dispersas cuando se aplica a características de alta cardinalidad. Por ejemplo, codificar 1.000 códigos postales únicos produciría 1.000 columnas binarias, que pueden saturar la memoria y los recursos informáticos. Créeme, lo aprendí por las malas...
- Codificación del objetivo (codificación media): En este método, los valores categóricos se sustituyen por la media de la variable objetivo para cada categoría. Por ejemplo, si estás prediciendo la pérdida de clientes, la codificación de objetivos podría sustituir cada código postal por la tasa media de pérdida de clientes de esa zona. Este enfoque reduce la dimensionalidad, pero puede introducir sesgos y requiere una validación cuidadosa para evitar la fuga de datos.
- Codificación de frecuencia: La codificación de frecuencia asigna la frecuencia de una categoría como su valor, reduciendo el número de valores únicos. Por ejemplo, en un conjunto de datos de comercio electrónico, los ID de los productos podrían sustituirse por su frecuencia de compra. Esta técnica consume pocos recursos y a menudo se correlaciona con la importancia del rasgo.
- Codificación Hashing: La codificación hash asigna categorías a números enteros mediante una función hash, que agrupa algunas categorías. Este método es eficiente en memoria y funciona bien para datos en flujo o cardinalidad extremadamente alta, pero introduce el riesgo de colisiones hash. ¿Te has preguntado alguna vez por qué tu sitio web de compras en línea te recomienda leche de fórmula para bebés cuando buscas aceite para el coche? Eso son colisiones de hash.
- Capas de incrustación: Para los modelos de aprendizaje automático, como las redes neuronales, las capas de incrustación pueden transformar los rasgos categóricos de alta cardinalidad en representaciones densas de baja dimensión. Este enfoque se utiliza mucho en sistemas de recomendación, como la codificación de millones de ID de productos o ID de usuarios en plataformas de comercio electrónico.
Conclusión
Los conjuntos de datos de alta cardinalidad pueden resultar a veces abrumadores, y extraer información valiosa de ellos puede ser todo un reto. La próxima vez que te encuentres con un conjunto de datos de alta cardinalidad, recuerda que no es culpa de los datos: simplemente están llenos de potencial esperando a ser desbloqueados. Ya sea mediante la reducción de la dimensionalidad, técnicas de codificación inteligentes o herramientas como las bases de datos de series temporales, puedes gestionar tus conjuntos de datos con eficacia y convertirlos en activos superpotentes.
Y ahora que sabes cómo trabajar con datos de alta cardinalidad en teoría, es hora de ponerlo en práctica:
- Ponte manos a la obra con la reducción de la dimensionalidad y las técnicas de codificación: empieza poco a poco y ve avanzando. Nuestra Reducción de la Dimensionalidad en Python es una gran elección.
- Prueba algunas de las herramientas mencionadas aquí (¡sí, las bases de datos de series temporales son tan geniales como suenan!).
Y lo más importante, acepta el reto. La alta cardinalidad puede ser complicada, ¡pero también es una oportunidad para aprender mucho sobre ingeniería y análisis de datos!
Ingeniero superior de software, redactor técnico y asesor con formación en física. Comprometidos a ayudar a las startups en fase inicial a alcanzar su potencial y a hacer que los conceptos complejos sean accesibles a todo el mundo.
Preguntas frecuentes
¿Cómo puedo identificar la cardinalidad alta en mis propios conjuntos de datos?
La cardinalidad alta puede identificarse comprobando si hay columnas con un gran número de valores únicos en relación con el número de filas. Por ejemplo, en un conjunto de datos de clientes, una columna como "ID de cliente" tendría probablemente una cardinalidad alta porque cada entrada es única. Herramientas como pandas en Python pueden ayudarte fácilmente a comprobar el número de valores únicos de una columna con comandos como df['column_name'].nunique()
.
¿Cuáles son algunas consecuencias en el mundo real si se ignora la cardinalidad alta en el análisis de datos?
Ignorar una cardinalidad elevada puede provocar varios problemas, como problemas de rendimiento (tiempos de consulta más lentos), dificultades para dar sentido a los datos (visualizaciones demasiado complejas) y dificultades en los modelos de aprendizaje automático (sobreajuste o entrenamiento ineficaz). Si no tienes en cuenta la alta cardinalidad, tu análisis de datos puede resultar desordenado, impreciso o simplemente inmanejable.
¿Puede la cardinalidad alta ser alguna vez beneficiosa en el análisis de datos, o es algo que hay que evitar?
Aunque la cardinalidad elevada suele considerarse un reto, puede proporcionar información valiosa en determinados contextos. Por ejemplo, en los sistemas de recomendación, las características de alta cardinalidad (como el ID de usuario o el ID de producto) ayudan al sistema a personalizar las recomendaciones. Sin embargo, es importante gestionar cuidadosamente cómo se utilizan estas características en los modelos para evitar el sobreajuste y la degradación del rendimiento.
¿La cardinalidad alta es más un problema en los datos estructurados o en los no estructurados?
La cardinalidad alta puede ser un problema tanto en datos estructurados como no estructurados, pero suele ser más difícil en conjuntos de datos estructurados (por ejemplo, bases de datos relacionales), donde la cardinalidad suele estar vinculada a columnas específicas como identificadores o marcas de tiempo. En los datos no estructurados, como los de texto o imágenes, los problemas de cardinalidad pueden surgir de formas más sutiles, como demasiadas palabras o píxeles únicos, lo que hace que el procesamiento sea más complejo.
Aprende con DataCamp
curso
Understanding Data Science
curso
Data Modeling in Power BI

blog
La maldición de la dimensionalidad en el aprendizaje automático: Retos, repercusiones y soluciones
blog
Procesamiento por lotes frente a procesamiento por flujos: Cuándo utilizar cada uno y por qué es importante

Tim Lu
21 min
blog
5 competencias esenciales en ingeniería de datos
blog
¿Qué es la gestión de datos? Guía práctica con ejemplos

Tim Lu
12 min

blog
¿Qué es el análisis de datos? Una guía experta con ejemplos
blog
Contratos de datos desmitificados: Todo lo que necesitas saber

Mike Shakhomirov
24 min