Pular para o conteúdo principal

Entendendo a cardinalidade: Desafios e soluções para fluxos de trabalho com muitos dados

Descubra o que significa cardinalidade e como ela afeta o processamento de dados, a análise e o aprendizado de máquina. Aprenda sobre estratégias e técnicas práticas para gerenciar a alta cardinalidade, desde o pré-processamento de dados até ferramentas avançadas de otimização.
Actualizado 13 de jan. de 2025  · 8 min de leitura

Conheci o conceito de cardinalidade em uma aula de Mecânica Quântica, durante meu curso de Física. Naquela aula, a cardinalidade se referia ao tamanho de um conjunto, seja ele finito ou infinito, e estava ligada a conceitos abstratos como contagem e infinitos. Ao fazer a transição para a engenharia de software, percebi que, para um engenheiro ou cientista de dados, a cardinalidade assume um significado muito mais prático: a distinção de valores em um conjunto de dados.

Em um dos meus primeiros projetos de análise de dados do mundo real, aprendi o quanto a alta cardinalidade pode ser desafiadora. Isso reduziu a velocidade das minhas consultas ao banco de dados e transformou o que deveria ser uma visão clara em uma bagunça confusa. Desde então, tenho tido alguma prática e compilei este guia na esperança de que ele possa ajudar outras pessoas na mesma situação. Você está no lugar certo se quiser saber o que é alta cardinalidade, quais são os desafios que ela apresenta e como superá-los de maneira prática e eficaz!

O que é cardinalidade e o que é alta cardinalidade?

Os conceitos de cardinalidade e alta cardinalidade podem soar um pouco abstratos, portanto, vamos explicar melhor.

Definição e exemplos

A cardinalidade refere-se ao número de valores exclusivos em uma coluna do conjunto de dados. Uma coluna com alta cardinalidade contém um grande número de valores exclusivos, enquanto as colunas com baixa cardinalidade contêm menos entradas exclusivas.

A alta cardinalidade é especialmente comum em conjuntos de dados que envolvem identificadores exclusivos, como:

  • Carimbos de data e hora: Quase todos os valores são exclusivos quando os dados são registrados no nível de milissegundos ou nanossegundos.
  • IDs de clientes: Cada cliente tem um identificador distinto para rastrear sua atividade.
  • IDs de transação: Os conjuntos de dados financeiros geralmente incluem códigos exclusivos para cada transação.

Esses valores exclusivos são importantes para rastrear, agregar ou personalizar dados. No entanto, seu grande número pode representar desafios significativos em termos de armazenamento, desempenho e visualização, que veremos em breve.

Casos comuns da vida real

A alta cardinalidade pode se manifestar em todos os domínios e setores. Descrevi alguns exemplos abaixo, para ajudar você a entender o que significa alta cardinalidade em termos mais práticos.

Comércio eletrônico e dados de clientes

As plataformas de comércio eletrônico geram enormes quantidades de dados de alta cardinalidade diariamente:

  • IDs de clientes: Cada usuário recebe um identificador exclusivo para rastrear o comportamento, as compras e as preferências.
  • IDs de sessão: Cada sessão de navegação é registrada de forma exclusiva, o que resulta em um grande número de valores distintos nos conjuntos de dados de rastreamento de sessão.
  • SKUs de produtos: As Stock Keeping Units são exclusivas para cada variação de produto, criando uma coluna de alta cardinalidade nos dados de estoque e vendas.

Esses conjuntos de dados são essenciais para entender o comportamento do usuário, rastrear o estoque e otimizar as estratégias de vendas, mas o grande número de entradas exclusivas geralmente torna a análise complexa.

Registros de saúde e de pacientes

No setor de saúde, a necessidade de rastreamento e identificação precisos resulta naturalmente em dados de alta cardinalidade. Por exemplo, podemos encontrar:

  • IDs de pacientes: Cada paciente tem um identificador exclusivo, para garantir a manutenção de registros precisos e seguros.
  • Carimbos de data e hora de compromissos: Você pode criar registros de data e hora exclusivos para cada interação com o paciente, desde consultas médicas até exames laboratoriais.
  • Números de reclamações de seguro: Cada sinistro processado pelas seguradoras recebe um código distinto para fins de manutenção de registros e auditoria.

Esses dados são necessários para manter os históricos dos pacientes e garantir a conformidade com as normas de privacidade.

Sensores de IoT e dados de streaming

A proliferação de dispositivos de IoT criou um aumento nos conjuntos de dados de alta cardinalidade:

  • IDs de sensores: Cada dispositivo de IoT tem um identificador exclusivo para rastrear sua atividade e localização.
  • Dados de registro de data e hora: Os fluxos de dados contínuos geralmente registram eventos em intervalos de milissegundos ou nanossegundos, resultando em valores quase totalmente exclusivos.
  • IDs de eventos: Cada evento registrado em um sistema, desde leituras de temperatura até detecções de movimento, recebe um identificador exclusivo.

Na IoT, a alta cardinalidade surge devido à necessidade de processar dados refinados e em tempo real de vários dispositivos. Isso é vital para a análise e o monitoramento, mas é um desafio armazenar e consultar de forma eficiente - mais sobre isso adiante!

Desafios da alta cardinalidade

A alta cardinalidade apresenta vários desafios no processamento de dados, na engenharia, na análise e no aprendizado de máquina. Os conjuntos de dados com alta cardinalidade fornecem uma grande quantidade de informações úteis, mas muitas vezes podem se tornar um gargalo e prejudicar o desempenho, a interpretabilidade e a escalabilidade.

Problemas de armazenamento de dados e desempenho

Um dos maiores desafios da alta cardinalidade é seu impacto no armazenamento de dados e no desempenho do sistema.

  • Armazenamento de sobrecarga: Colunas de alta cardinalidade, como identificadores exclusivos ou registros de data e hora, resultam em conjuntos de dados maiores. Por exemplo, o registro de milhões de interações de usuários em uma plataforma de comércio eletrônico cria uma imensa sobrecarga de armazenamento devido à exclusividade dos IDs de sessão ou dos carimbos de data/hora das transações.
  • Diminuição do desempenho da consulta: Ao consultar colunas de alta cardinalidade, os bancos de dados enfrentam dificuldades com o aumento da complexidade da indexação e da varredura. As consultas que envolvem filtragem ou união de colunas de alta cardinalidade tendem a ser mais demoradas, pois o banco de dados precisa examinar um grande número de valores distintos.
  • Desafios de indexação: Os índices, que são essenciais para acelerar as consultas ao banco de dados, tornam-se inchados e menos eficientes com colunas de alta cardinalidade. Isso pode resultar em pesquisas mais lentas e desempenho prejudicado.

Tomemos como exemplo um banco de dados que armazena dados de sensores de IoT com IDs de sensores exclusivos e registros de data e hora precisos. As consultas que filtram por um sensor específico e por um intervalo de tempo podem exigir que o banco de dados processe milhões de entradas exclusivas, o que leva a tempos de resposta muito lentos e a operações com uso intensivo de recursos.

Dificuldades de visualização de dados

O desafio aqui é apresentar um grande número de valores distintos de uma forma que seja compreensível e significativa. Sem uma reflexão cuidadosa, os dados de alta cardinalidade podem, na verdade, ocultar insights em vez de revelá-los.

Um bom exemplo disso é o gráfico de pizza abaixo. A legenda e os valores não são legíveis porque há muitas entradas exclusivas (estados) para o tipo de gráfico usado. Às vezes, mudar o tipo de gráfico que usamos ajuda, mas nem sempre. 

Gráfico de pizza ilegível com uma fatia e um valor para cada estado dos EUA.

Fonte: Agência Europeia do Meio Ambiente

Imagine um gráfico de barras representando a atividade do cliente de uma plataforma de comércio eletrônico por ID de sessão. Com milhares ou milhões de IDs exclusivos, o gráfico se torna uma bagunça de barras ilegíveis, e mudar o tipo de gráfico que usamos para plotar esses dados provavelmente não fará diferença. 

Então, por que não simplesmente agregamos os dados para obter padrões e relacionamentos em nossos gráficos? Podemos, mas isso deve ser feito com cuidado. A agregação de dados de alta cardinalidade pode nos levar a perder a granularidade de que precisamos para obter insights. Por exemplo, o agrupamento de dados de IoT por local pode ocultar variações sutis, mas críticas, no nível do sensor individual. As técnicas para corrigir esse problema podem ser sutis. Recomendo nosso curso Intermediate Data Modeling in Power BI (Modelagem de dados intermediária no Power BI ) para que você obtenha experiência prática com relacionamentos um-para-um e um-para-muitos. 

Relevância para o aprendizado de máquina

A alta cardinalidade pode representar desafios significativos no aprendizado de máquina, principalmente quando se trata de engenharia de recursos, complexidade de modelos e interpretabilidade. Os modelos de aprendizado de máquina prosperam com entradas estruturadas e significativas, mas os recursos de alta cardinalidade muitas vezes perturbam esse equilíbrio, levando a complicações:

  • Aumento da esparsidade: Os recursos de alta cardinalidade geralmente resultam em conjuntos de dados esparsos. Por exemplo, a codificação de uma característica categórica de alta cardinalidade, como códigos postais, cria uma matriz com um grande número de dimensões, a maioria das quais está vazia. Essa dispersão torna mais difícil para os modelos, especialmente os baseados em distância, como os algoritmos k-nearest neighbors ou de agrupamento, encontrarem relações significativas nos dados.
  • Riscos de superajuste: Os recursos de alta cardinalidade podem levar a um ajuste excessivo em modelos que dividem os dados em categorias refinadas, como árvores de decisão ou florestas aleatórias. Quando cada categoria é representada por apenas algumas amostras, o modelo pode aprender ruído em vez de padrões genuínos, resultando em uma generalização ruim para dados não vistos.

Por exemplo, no comércio eletrônico, um modelo de aprendizado de máquina que prevê a rotatividade de clientes pode incluir um recurso de alta cardinalidade, como "ID do usuário" ou "ID do produto". Se não for gerenciado adequadamente, o modelo poderá se ajustar excessivamente a clientes ou produtos específicos nos dados de treinamento. Isso o tornaria menos eficaz quando aplicado para prever a rotatividade de novos usuários, pois ele aprende padrões exclusivos do conjunto de dados de treinamento em vez de tendências generalizáveis.

Estratégias para gerenciar a alta cardinalidade

O gerenciamento eficaz da alta cardinalidade requer uma combinação de estratégias específicas de domínio e técnicas gerais de otimização de dados. Essas abordagens não apenas melhoram o desempenho do sistema, mas também tornam os dados mais interpretáveis e acionáveis.

Aproveitamento da tecnologia e das ferramentas

Felizmente, os desafios apresentados pelos conjuntos de dados de alta cardinalidade são suficientemente amplos para que várias técnicas e ferramentas tenham sido criadas e aperfeiçoadas especificamente para lidar com eles.

Otimização do banco de dados

O gerenciamento de alta cardinalidade em bancos de dados geralmente começa com a otimização de como os dados são armazenados e consultados, além da simples remoção de duplicatas. As técnicas mais comuns usadas são:

  • Bucketing (ou binning): Agrupamento de dados de alta cardinalidade em categorias mais amplas para reduzir o número de valores exclusivos. Por exemplo, agrupar códigos postais por região em vez de armazenar cada um deles individualmente.
  • Particionamento: Estruturação de tabelas por partições com base em campos frequentemente consultados. Por exemplo, o particionamento dos dados do cliente por país pode melhorar o desempenho da consulta em sistemas geograficamente distribuídos.
  • Indexação: O uso de índices projetados especificamente para campos de alta cardinalidade, como índices de bitmap ou compostos, pode aumentar a velocidade da consulta e, ao mesmo tempo, equilibrar a eficiência do armazenamento.

Software especializado

Se você estiver lidando com uma cardinalidade extremamente alta, há ferramentas e plataformas especializadas que podem ajudá-lo:

  • Bancos de dados colunares: Esses bancos de dados, como o Apache Parquet ou o Amazon Redshift, foram projetados para consultas analíticas e podem armazenar e processar com eficiência colunas de alta cardinalidade.
  • Bancos de dados NoSQL: Em alguns casos, os bancos de dados NoSQL, como o MongoDB ou o Elasticsearch, podem lidar melhor com a variabilidade e o tamanho dos conjuntos de dados de alta cardinalidade, especialmente quando combinados com projetos sem esquema.
  • Bancos de dados de séries temporais: Para conjuntos de dados dominados por registros de data e hora e eventos, como dados de sensores de IoT ou transações do mercado de ações, os bancos de dados de séries temporais, como o InfluxDB ou o TimescaleDB, são muito úteis. Eles são especificamente otimizados para armazenar com eficiência dimensões de alta cardinalidade e usar técnicas avançadas de compactação para minimizar os custos de armazenamento e, ao mesmo tempo, manter o alto desempenho. Trabalhei em alguns projetos que envolviam grandes quantidades de dados de IoT, e os bancos de dados de séries temporais fizeram uma grande diferença quando se tratava de derivar tendências e previsões. Escrevi este guia sobre bancos de dados de séries temporais, se você estiver interessado em saber mais! 
  • Ferramentas de perfil de dados: Ferramentas como Talend, OpenRefine ou até mesmo scripts Python personalizados podem identificar rapidamente campos de alta cardinalidade e ajudar a determinar a melhor estratégia de pré-processamento ou armazenamento.

Técnicas de pré-processamento de dados

O pré-processamento em ciência de dados e aprendizado de máquina refere-se às etapas realizadas para limpar, transformar e organizar dados brutos em um formato adequado para análise ou modelagem.

É um tópico bastante complexo e, se você tiver pouco ou nenhum conhecimento de engenharia de dados ou ciência de dados, as informações desta seção podem ser um pouco difíceis de acompanhar. Dito isso, incluí links e exemplos relevantes para ajudar você a acompanhar o processo!

O pré-processamento de dados é uma etapa essencial para gerenciar a alta cardinalidade, pois reduz a complexidade, melhora o desempenho e garante que a qualidade dos dados seja suficiente para as tarefas de análise ou aprendizado de máquina. Ao transformar dados brutos em formas mais gerenciáveis, podemos enfrentar desafios como esparsidade, ineficiências de armazenamento e gargalos computacionais.

Redução da dimensionalidade

As técnicas de redução de dimensionalidade são particularmente valiosas quando a alta cardinalidade resulta em conjuntos de dados com vários recursos ou matrizes esparsas. Esses métodos comprimem os dados em menos dimensões e, ao mesmo tempo, retêm informações essenciais.

Análise de componentes principais (PCA)

Imagine que você tenha um conjunto de dados de comportamentos de clientes de comércio eletrônico, com muitos recursos, como o número de vezes que um cliente visualizou um produto, sua interação com diferentes categorias de produtos, o tempo gasto no site e assim por diante. Cada um desses recursos pode ser altamente importante, especialmente se você estiver rastreando um grande número de produtos. O PCA pode ser usado para combinar esses recursos em menos componentes que ainda capturam os padrões mais significativos nos dados, como o envolvimento geral do cliente ou o interesse em determinados tipos de produtos. Pense nisso como a Marie Kondo dos dados: Ele mantém os recursos que despertam alegria e descarta gentilmente o restante!

t-SNE e UMAP

O t-SNE e o UMAP são técnicas especialmente úteis para visualizar dados de alta dimensão, mapeando-os em duas ou três dimensões e preservando sua estrutura. Por exemplo, em conjuntos de dados de registros de saúde, o UMAP pode ajudar a agrupar pacientes com condições médicas ou regimes de tratamento semelhantes. Isso ajudará a identificar tendências, como doenças concomitantes comuns ou resultados de tratamentos.

Seleção de recursos

Se você estiver criando um modelo de aprendizado de máquina para prever o desempenho de vendas de uma plataforma de comércio eletrônico e seu conjunto de dados incluir recursos como o número de vezes que um cliente clicou em um anúncio, o número de produtos que ele visualizou e o número de dias desde a última compra, você descobrirá que muitos desses recursos podem estar correlacionados entre si, o que cria alta cardinalidade e redundância. 

Usando técnicas de seleção de recursos, como informações mútuas ou eliminação recursiva de recursos, você pode identificar quais recursos têm o poder preditivo mais significativo (por exemplo, "tempo desde a última compra" pode ser mais importante do que "cliques no anúncio") e excluir os irrelevantes, melhorando o desempenho do modelo.

Se você estiver interessado em aprender mais sobre esse tópico, experimente este curso de pré-processamento para aprendizado de máquina. Você usará o Python para limpar e preparar os dados antes de alimentá-los nos modelos.

Métodos de codificação

A codificação é uma etapa crítica de pré-processamento para lidar com dados categóricos, especialmente quando se trata de recursos de alta cardinalidade. A escolha do método de codificação depende do caso de uso específico e do nível de cardinalidade do conjunto de dados.

  • Codificação One-Hot: A codificação one-hot cria uma coluna binária para cada categoria exclusiva em um conjunto de dados. Embora seja simples e eficaz para dados de baixa cardinalidade, ele pode levar a matrizes extremamente esparsas quando aplicado a recursos de alta cardinalidade. Por exemplo, a codificação de 1.000 códigos postais exclusivos produziria 1.000 colunas binárias, o que pode sobrecarregar a memória e os recursos computacionais. Acredite, eu aprendi isso da maneira mais difícil...
  • Codificação do alvo (codificação média): Nesse método, os valores categóricos são substituídos pela média da variável-alvo para cada categoria. Por exemplo, se você estiver prevendo a rotatividade de clientes, a codificação de destino poderá substituir cada código postal pela taxa média de rotatividade de clientes nessa área. Essa abordagem reduz a dimensionalidade, mas pode introduzir distorções e exige uma validação cuidadosa para evitar o vazamento de dados.
  • Codificação de frequência: A codificação de frequência atribui a frequência de uma categoria como seu valor, reduzindo o número de valores exclusivos. Por exemplo, em um conjunto de dados de comércio eletrônico, os IDs de produtos podem ser substituídos pela frequência de compra. Essa técnica é eficiente em termos de recursos e geralmente se correlaciona com a importância do recurso.
  • Codificação de hashing: A codificação de hash mapeia categorias para inteiros usando uma função de hash, que agrupa algumas categorias. Esse método é eficiente em termos de memória e funciona bem para dados de streaming ou cardinalidade extremamente alta, mas apresenta o risco de colisões de hash. Você já se perguntou por que o seu site de compras on-line está recomendando fórmula para bebês quando você procurou por óleo para carro? Bem, isso são colisões de hash para você.
  • Camadas de incorporação: Para modelos de aprendizado de máquina, como redes neurais, as camadas de incorporação podem transformar recursos categóricos de alta cardinalidade em representações densas e de baixa dimensão. Essa abordagem é amplamente usada em sistemas de recomendação, como a codificação de milhões de IDs de produtos ou IDs de usuários em plataformas de comércio eletrônico.

Conclusão

Os conjuntos de dados de alta cardinalidade podem parecer esmagadores às vezes, e a extração de insights valiosos desses conjuntos de dados pode ser definitivamente um desafio. Da próxima vez que você encontrar um conjunto de dados com alta cardinalidade, lembre-se de que não é culpa dos dados - eles simplesmente estão cheios de potencial esperando para serem desbloqueados. Seja por meio de redução de dimensionalidade, técnicas inteligentes de codificação ou ferramentas como bancos de dados de séries temporais, você pode gerenciar seus conjuntos de dados com eficiência e transformá-los em ativos superpoderosos.

E agora que você sabe como trabalhar com dados de alta cardinalidade na teoria, é hora de colocá-la em prática:

  • Você pode começar a trabalhar com redução de dimensionalidade e técnicas de codificação - comece aos poucos e vá aumentando. Nossa Redução de Dimensionalidade em Python é uma ótima opção.
  • Teste algumas das ferramentas mencionadas aqui (sim, os bancos de dados de séries temporais são tão legais quanto parecem!)

E, o mais importante, aceite o desafio. A alta cardinalidade pode ser complicada, mas também é uma chance de você aprender muito sobre engenharia e análise de dados!


Marie Fayard's photo
Author
Marie Fayard

Engenheiro de software sênior, redator técnico e consultor com formação em física. Comprometida em ajudar as startups em estágio inicial a atingir seu potencial e tornar conceitos complexos acessíveis a todos.

Perguntas frequentes

Como posso identificar a alta cardinalidade em meus próprios conjuntos de dados?

A alta cardinalidade pode ser identificada verificando se há colunas com um grande número de valores exclusivos em relação ao número de linhas. Por exemplo, em um conjunto de dados de clientes, uma coluna como "ID do cliente" provavelmente teria alta cardinalidade porque cada entrada é exclusiva. Ferramentas como o pandas em Python podem ajudar você a verificar facilmente o número de valores exclusivos em uma coluna com comandos como df['column_name'].nunique().

Quais são algumas das consequências no mundo real se a alta cardinalidade for ignorada na análise de dados?

Ignorar a alta cardinalidade pode levar a vários problemas, inclusive problemas de desempenho (tempos de consulta mais lentos), desafios para entender os dados (visualizações excessivamente complexas) e dificuldades nos modelos de aprendizado de máquina (ajuste excessivo ou treinamento ineficiente). Sem lidar com a alta cardinalidade, sua análise de dados pode se tornar confusa, imprecisa ou simplesmente impossível de gerenciar.

A alta cardinalidade pode ser benéfica na análise de dados ou é algo que você deve evitar?

Embora a alta cardinalidade seja frequentemente vista como um desafio, ela pode fornecer informações valiosas em determinados contextos. Por exemplo, em sistemas de recomendação, os recursos de alta cardinalidade (como ID de usuário ou ID de produto) ajudam o sistema a personalizar as recomendações. No entanto, é importante gerenciar cuidadosamente como esses recursos são usados nos modelos para evitar o excesso de ajuste e a degradação do desempenho.

A alta cardinalidade é um problema maior em dados estruturados ou não estruturados?

A alta cardinalidade pode ser um problema em dados estruturados e não estruturados, mas normalmente é mais desafiadora em conjuntos de dados estruturados (por exemplo, bancos de dados relacionais), em que a cardinalidade é frequentemente vinculada a colunas específicas, como identificadores ou registros de data e hora. Em dados não estruturados, como dados de texto ou imagem, os problemas de cardinalidade podem surgir de maneiras mais sutis, como muitas palavras ou pixels exclusivos, o que torna o processamento mais complexo.

Temas

Aprenda com a DataCamp

curso

Intermediate Data Modeling in Power BI

3 hr
28.4K
Master data modeling in Power BI.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

blog

A maldição da dimensionalidade no aprendizado de máquina: Desafios, impactos e soluções

Explore a maldição da dimensionalidade na análise de dados e no aprendizado de máquina, incluindo seus desafios, efeitos nos algoritmos e técnicas como PCA, LDA e t-SNE para combatê-la.
Abid Ali Awan's photo

Abid Ali Awan

7 min

blog

Processamento em lote versus processamento em fluxo: Quando usar cada um e por que é importante

Uma análise detalhada das diferenças entre o processamento em lote e em fluxo para pipelines de dados. Conheça as vantagens e desvantagens exclusivas de cada abordagem para aplicar as técnicas adequadas ao seu pipeline de dados.
Tim Lu's photo

Tim Lu

21 min

blog

O que é ciência de dados? Definição, exemplos, ferramentas e mais

A ciência de dados é um campo interdisciplinar que usa métodos científicos, processos, algoritmos e sistemas para extrair conhecimento e percepções de dados estruturados e não estruturados.
Matt Crabtree's photo

Matt Crabtree

15 min

blog

5 habilidades essenciais de engenharia de dados

Descubra as habilidades de engenharia de dados de que você precisa para prosperar no setor. Saiba mais sobre as funções e responsabilidades de um engenheiro de dados e como você pode desenvolver suas próprias habilidades.
Joleen Bothma's photo

Joleen Bothma

11 min

blog

O que é o Data Wrangling? Um guia prático com exemplos

Aprenda os conceitos e as teorias fundamentais por trás da organização de dados, além de alguns exemplos práticos. Use essas habilidades em seu trabalho diário de ciência de dados para gerar dados limpos e úteis para seus modelos.
Tim Lu's photo

Tim Lu

12 min

blog

O que é análise de dados? Um guia especializado com exemplos

Explore o mundo da análise de dados com nosso guia abrangente. Saiba mais sobre sua importância, processo, tipos, técnicas, ferramentas e as principais carreiras em 2023
Matt Crabtree's photo

Matt Crabtree

10 min

Ver maisVer mais