A Maldição da Dimensionalidade assombra os cientistas de dados, saiba o porquê

Nem sempre ter mais atributos implica em ter um algoritmo com melhor desempenho.

João Guilherme Araujo
Porto
4 min readOct 30, 2020

--

Feliz dia das bruxas! Imagem criada por starline e modificada pelo autor.

Neste artigo vamos explorar um fenômeno que acontece quando se tem muitos atributos (variáveis explicativas) para criar modelos de ML/DL. Esse fenômeno pode impactar todos os algoritmos disponíveis, principalmente os que usam distância como, por exemplo, o kNN.

Sumário

  • A Maldição da Dimensionalidade (o que é).
  • Como quebrar a maldição (minimizando seus efeitos).

A Maldição da Dimensionalidade

O dia das bruxas (halloween) chegou! Uma das datas comemorativas mais divertidas e assustadoras do ano não poderia passar despercebida. Hoje vamos falar sobre um fenômeno muito importante para quem trabalha com dados.

A Maldição da Dimensionalidade (em inglês, Curse of Dimensionality) é um fenômeno que impacta os times de ciência de dados mundo afora e isso não é diferente aqui na Porto Seguro. Esse fenômeno ocorre quando um conjunto de dados tem muitos atributos ou dimensões (normalmente centenas ou milhares).

Exemplos clássicos da presença da Maldição da Dimensionalidade são aplicações que envolvem imagem, áudio ou sequenciamento de DNA.

O principal problema que esse fenômeno causa é a esparsidade exponencial do hiperespaço de representatividade (sentiu um calafrio?). Conforme a dimensionalidade aumenta, mais provável é que numa vizinhança de um ponto não haja nenhum outro ponto distinto, ou seja, causando um isolamento dos pontos.

Uma forma simples de entender a esparsidade é imaginar um conjunto de atributos que tem 10 valores distintos cada. Exemplos práticos seriam 10 faixas de renda, 10 faixas de idades, 10 estrelas na avaliação de satisfação dos clientes…

Na imagem a seguir é possível ver como o espaço cresce rapidamente. E não precisa ir muito longe para ver isso, para N=6, temos 1.000.000 de combinações possíveis. Uma regra comum é de ter pelo menos 5 registros para cada uma dessas combinações, nesse caso você precisaria de um conjunto de 5.000.000 de registros.

Exemplo gráfico do efeito exponencial. Quanto mais dimensões, mais o espaço ganha volume e mais difícil é preenchê-lo. Imagem criada pelo autor.

Contudo, sabemos que muitos dos atributos de um conjunto de dados reais são correlacionados e talvez não haja a necessidade dessa grande quantidade de registros, pois o espaço não precisa ser totalmente preenchido.

Exemplo de preenchimento do espaço com variáveis colineares. O pontos vermelhos representam os possíveis valores das duas variáveis. É possível que exista outliers.

Mesmo assim, a multicolinearidade é um outro problema da Maldição da Dimensionalidade. Quando temos muitos atributos e muitos deles são correlacionados, podemos diminuir o desempenho dos algoritmos, mesmo os mais robustos. A seguinte imagem traz a ideia geral de como é esse impacto no desempenho:

Existe uma quantidade de dimensões ótima e que, ao acrescentar mais dimensões, faz com o que o modelo piore nas medidas de desempenho. Imagem criada pelo autor.

Resumindo, a Maldição da Dimensionalidade pode causar:

  • distorções na ideia de distância, os pontos estarão mais distantes um do outro, onde antes era proximidade pode dar lugar à extrema distância;
  • sobreajuste (em inglês, overfitting), pois os pontos tendem a estar mais sozinhos no hiperespaço;
  • multicolinearidade, principalmente em conjuntos de dados com poucos registros implicando numa redução de desempenho;
  • redução da representatividade do hiperespaço, para usar mais atributos é importante ter mais registros.

Como quebrar a maldição

Até aqui só terror, né? Não tenha medo, saiba que essa maldição pode ser quebrada! Vamos explicar como.

Para diminuir os impactos desse fenômeno, alguns algoritmos utilizam hiperparâmetros como, por exemplo, o min_child_weight do XGBoost ou os pesos das regularizações L1 e L2 em Redes Neurais. Contudo, eles não resolvem o problema como um todo e você pode perder desempenho nos seus algoritmos.

Existem duas abordagens comumente utilizadas para tentar eliminar esses impactos de forma mais assertiva:

  • seleção de atributos (em inglês, feature selection);
  • redução de dimensionalidade.

Seleção de atributos

Esse é um problema que pode ser bem complicado de resolver: “encontrar o conjunto de atributos que tem o melhor desempenho”. Suponha que tenhamos 10 atributos e cada atributo pode ou não estar no conjunto selecionado, temos que treinar 2¹⁰=1024 modelos para encontrar exatamente o subconjunto ótimo.

Existem várias formas de fazer essa seleção de atributos, uma das mais usadas é fazer uma rodada de treinamento com todos os atributos e uma segunda onde você elimina os atributos mais irrelevantes da primeira rodada. O resultado dessa técnica tende a ser bom.

Redução de dimensionalidade

Os algoritmos de redução de dimensionalidade são muito importantes para lidar com a maldição que descrevemos, pois o objetivo deles é condensar toda a informação disponível nas altas dimensões, em dimensões menores e mais tranquilas de trabalhar, tanto computacionalmente quanto analiticamente.

Para redução de dimensionalidade também existe uma gama de algoritmos:

Agora, qual desses algoritmos usar? Isso vai ser assunto dos nossos próximos artigos. Fique atento e não deixe de assinar nossa página aqui no Medium.

Agradecimentos

Renan Butkeraites (Colaboração, Revisão)
Catarina Pröglhöf (Colaboração, Revisão)
Fernanda Ribeiro (Revisão)
Adriano Moala (Revisão)
Comunicação Institucional Porto Seguro (Revisão)

--

--

João Guilherme Araujo
Porto

Araujo here! I am a math/computer/statistics lover and I'm always looking for theory applications. In the free time, eventually, I'll put some stuff here.