Data

15 nov, 2018

Exploração de conjuntos de dados por meio de projeções multidimensionais

Publicidade

Todos os dias nos deparamos com uma imensidão de dados, das mais variadas fontes: documentos, planilhas, conjuntos de imagens, músicas e vídeos são apenas alguns exemplos. Quando temos a tarefa de analisá-los e identificar informações úteis a partir deles, necessitamos de ferramentas adequadas.

Não é à toa que os termos Ciência de Dados e Mineração de Dados andam tão em evidência, pois abordam o estudo de métodos para preparação dos dados e aplicação de técnicas para identificar padrões de forma automática. Então podemos usar essa informação para a tomada de decisões estratégicas.

Nesse contexto, podemos destacar o papel de visualizações para auxiliar no entendimento dos dados. Existe uma grande variedade de representações visuais disponíveis, desde simples gráficos de linhas e barras até redes complexas que conectam milhões de elementos. Cada visualização é focada em um determinado contexto para ressaltar características particulares dos dados.

No entanto, a grande maioria das visualizações não é adequada para trabalhar com dados multidimensionais, como planilhas, tabelas ou documentos, nos quais o número de dimensões (colunas) pode facilmente chegar às centenas ou milhares. Isso limita muito a utilidade de visualizações quando trabalhamos com esse tipo de dados. Para exemplificar, vamos analisar a Figura 1.

Na Figura 1a, podemos visualizar um gráfico de linha, em que uma dimensão da nossa tabela é utilizada no eixo y, e o eixo x representa os vários registros existentes. Dessa forma, é possível ver facilmente como essa dimensão varia ao longo do conjunto, e podemos identificar o valor máximo, o mínimo, se muitos elementos possuem valores similares, a amplitude etc. Mas e se quisermos analisar várias dimensões ao mesmo tempo?

Como podemos verificar na Figura 1b, que ilustra o caso de seis dimensões, ficou muito mais difícil fazer comparações e responder às mesmas perguntas do exemplo anterior. Se quisermos ir além e verificar se existem grupos de elementos similares (e quão similares eles são), para entender a estrutura dos dados em um nível mais geral, o problema se torna ainda mais complexo.

Figura 1 – Comparativo entre gráfico de linhas de uma dimensão e várias dimensões.

Projeções multidimensionais

Uma boa estratégia para contornar esse problema é empregar uma família de técnicas chamadas projeções multidimensionais. Podemos descrever uma projeção multidimensional, de uma forma bastante simplista, como uma técnica capaz de criar uma versão bastante simplificada do conjunto de dados, em que é feita uma transformação que reduz as dimensões originais (normalmente para apenas duas), preservando a noção de similaridade entre os elementos.

Dessa forma, podemos visualizar nossa tabela como um conjunto de pontos espalhados na tela 2D do computador. Cada ponto representa uma linha da tabela, e a posição dos pontos indica o quão similar eles são: pontos localizados em uma mesma vizinhança indicam alta similaridade, e vice-versa. Essa representação é capaz de indicar facilmente grupos de elementos similares, outliers (pontos muito distantes dos demais), fronteiras entre grupos, etc.

Como exemplos de técnicas de projeção temos MDS (Multidimensional Scaling), t-SNE (t-Distributed Stochastic Neighbor Embedding) e LAMP (Local Affine Multidimensional Projection) – esta última desenvolvida no Instituto de Ciências Matemáticas e de Computação da USP de São Carlos.

Cada técnica possui suas particularidades, como velocidade de execução, capacidade de lidar com grandes conjuntos de dados, precisão, flexibilidade para permitir interação do usuário para guiar o resultado final, capacidade de lidar com fluxos de dados etc. As pesquisas nessa área contam com uma comunidade bastante ativa, e novas técnicas são desenvolvidas frequentemente.

Exemplo de aplicação

Para exemplificar uma aplicação de projeções, iremos estudar o conjunto de dados Relatório Anual de Felicidade 2017. Trata-se de um relatório publicado pela ONU para medir o índice de felicidade de 155 países considerando uma série de medidas, como produção econômica, generosidade, índices de corrupção, liberdade etc. Queremos verificar como esses países estão relacionados de acordo com os valores das medidas, quais países são similares e possíveis outliers.

Vamos trabalhar em um exemplo de aplicação utilizando a MDS, uma das técnicas mais tradicionais. Utilizaremos a linguagem Python com os pacotes scikit-learn (que já implementa a MDS), o pacote Pandas para manipular o conjunto de dados e o pacote Bokeh para visualizar e interagir. Todos eles já vêm previamente instalados na distribuição Python Anaconda.

Após fazer o download do arquivo de dados (world_happiness_2017.csv), incluí manualmente na tabela uma coluna para indicar a que continente pertence cada país, pois usaremos essa informação para colorir a projeção.

Vamos iniciar utilizando o Pandas para carregar o arquivo na estrutura tabular DataFrame. Em seguida, removemos algumas colunas para deixar o DataFrame com apenas os atributos relevantes para comparar os países, ou seja, as métricas.

import pandas as pd
df = pd.read_csv('world_happiness_2017.csv') # Carrega os dados no DataFrame df
pais = df.pop('Country') # remove de df os nomes dos países
rank = df.pop('Happiness.Rank') # remove as posições no ranking
continente = df.pop('Continente') # remove os nomes do continente

O passo seguinte é normalizar o conjunto, de modo a ajustar as dimensões para uma escala comum. Dessa forma, as dimensões podem ser comparadas, e a distância entre os elementos pode ser calculada posteriormente.

from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
matriz_normalizada = min_max_scaler.fit_transform(df)
df_normalizado = pd.DataFrame(matriz_normalizada, columns=df.columns)

Agora projetamos os dados para um espaço de apenas duas dimensões.

from sklearn import manifold
mds = manifold.MDS(random_state=0)
df_2d = mds.fit_transform(df_normalizado) # Gera a projeção e armazena em df_2d 

O último passo é visualizar a projeção como um conjunto de pontos. O resultado final é exibido na Figura 2.

from bokeh.models import CategoricalColorMapper, ColumnDataSource, HoverTool
from bokeh.plotting import figure
from bokeh.io import show, output_file
from bokeh.transform import factor_cmap
source = ColumnDataSource(data=dict(nome=pais, x=df_2d[:,0], y=df_2d[:,1],  
                                                    label=continente))
# define a ferramenta HoverTool para permitir interação com o mouse
hover = HoverTool(tooltips=[('index', '$index'), ('nome', '@nome'), 
                                                    ('continente', '@label')])
# define a paleta de cores a ser aplicada nos pontos, de acordo com o continente
paleta = ['#80b1d3', '#bebada', '#d8b365', '#8ed28c', '#fb8072', '#9b856c']
mapper = factor_cmap('label', palette=paleta, factors=continente.unique().tolist())
# gera e exibe a figura da visualização
p = figure(plot_width=500, plot_height=500, tools=[hover], title='Relatorio 2017')
p.circle('x', 'y', size=10, source=source, color=mapper, legend='label', alpha=0.9)
output_file('projecao.html')
show(p)

A projeção exibe vários agrupamentos de países, e podemos interagir utilizando o cursor do mouse para identificar o nome do país, posição no ranking e continente. Após investigar por alguns instantes, podemos notar um grupo de países localizado na região superior que possui alta pontuação no ranking.

Esse grupo é formado majoritariamente por países europeus como Holanda, Alemanha, Noruega, Suécia, Islândia etc. Em contraste, na região inferior se concentram vários países com baixa pontuação, majoritariamente africanos. O único representante das Américas nesse grupo é o Haiti, país que enfrenta graves problemas econômicos e sociais.

O Brasil ocupa uma posição próxima ao grupo superior (21ª posição), e possui como vizinhos Japão, França, Argentina e México. Vale lembrar que esses países são considerados similares levando em consideração apenas os índices desenvolvidos pela ONU para esse conjunto de dados em particular.

Figura 2 – Projeção do Relatório Anual de Felicidade 2017

Considerações finais

Essa visualização permite que analisemos rapidamente o padrão de similaridade entre grupos de elementos, como o tamanho de cada grupo e a densidade. Também podemos verificar facilmente quais são os elementos de fronteira entre grupos, se existem outliers e quão distantes estão dos demais grupos.

Uma aplicação interessante dessa técnica é permitir a visualização do resultado de técnicas de classificação e de agrupamento de dados em conjuntos de alta dimensão.

Além disso, é possível interagir com o conjunto, de modo a selecionar elementos relevantes (de acordo com os critérios estabelecidos pelo analista) e criar um conjunto mais adequado para alimentar processos de mineração de dados. Isso pode tornar o modelo de mineração muito mais preciso para atender aos objetivos do projeto.

Os desafios em Ciência de Dados são muitos, mas com as ferramentas adequadas é possível contorná-los e encontrar padrões muito interessantes. As possibilidades são várias. Bons estudos!

Referências

  • L. G. Nonato, M. Aupetit, “Multidimensional Projection for Visual Analytics: Linking Techniques with Distortions, Tasks, and Layout Enrichment,” in IEEE Transactions on Visualization and Computer Graphics, 2018.
  • I. Borg, P. J. F. Groenen, “Modern Multidimensional Scaling: Theory and Applications”, Springer, 2018.
  • L. J. P. van der Maaten, G. Hinton, “Visualizing High-Dimensional Data Using t-SNE”, in Journal of Machine Learning Research, 2008.
  • P. Joia, D. Coimbra, J. A. Cuminato, F. V. Paulovich, L. G. Nonato, “Local Affine Multidimensional Projection,” in IEEE Transactions on Visualization and Computer Graphics, 2011.

***

Artigo publicado na revista iMasters, edição #28: https://issuu.com/imasters/docs/imasters_28_v5_issuu