Um tema muito comum em livros e cursos de Ciências de Dados e que gera grandes dúvidas, especialmente para aqueles que são iniciantes na área de dados, é o tão comentado EDA.
Afinal “What is the EDA?” (inspirei-me no filme The Matrix, na cena em que o protagonista Neo pergunta pela primeira vez à personagem Trinity: What is the Matrix?).
O objetivo desse artigo é desmistificar o EDA e “entregar” para o leitor uma abordagem prática e simples, baseando-se em 2 técnicas que desenvolvi, denominadas de EDA Local e EDA Global, para tirar o máximo proveito desse método riquíssimo dentro de um projeto profissional ou acadêmico no mundo de dados.
A sigla significa Exploratory Data Analysis e trata-se de uma abordagem na análise de dados que emprega uma abundância de técnicas, principalmente gráficas, com intuito de:
Ambas as metodologias, EDA Local e EDA Global, permitem ao responsável pelo estudo dos dados ter maior controle e entendimento da(s) base(s) de dados do seu projeto.
Para começar, vamos explorar o EDA Local.
O EDA Local é uma sistemática que permite pressupor a HISTÓRIA DOS DADOS, sem depender de um dicionário de dados, conectando fatos ou situações. Essa técnica permite levantar hipóteses e perguntas que deverão ser sanadas junto à Área de Dados ou à Área de Negócios da empresa e, desta maneira, ter a compreensão verdadeira da HISTÓRIA DOS DADOS.
E como essa técnica funciona na prática?
Na base de dados, procure uma coluna (geralmente definida como ‘ID’) para identificar todas as informações daquele registro na base de dados; o ‘ID’ é a coluna mais comum que pode ser usada como exemplo, mas é possível que exista outra que faça tal papel.
Através desse ‘ID’, “navegue” e procure entender qual a história dele em cada base de dados. Com o tempo, você perceberá que, conforme for percorrendo cada base de dados, a compreensão se tornará cada vez mais natural. É importante ter em mente que os escopos do EDA Local são:
Por exemplo: vamos imaginar um projeto profissional de Ciência de Dados englobando 5 bases de dados (A, B, C, D e E) de clientes solicitantes de crédito. Para iniciarmos nossa jornada no EDA Local, sugiro que selecione aleatoriamente um ‘ID’ da sua base de dados. No exemplo, utilizaremos o ‘ID’ 445 que será nossa referência em cada conjunto de dados. Agora é hora de se divertir e adivinhar o que está acontecendo, tentando responder a pergunta: “O que podemos supor em cada base de dados com o ‘ID’ 445?”
NOTA: por mais óbvias que algumas colunas sejam, é fundamental esclarecer as dúvidas em todas as suposições levantadas. O importante é ter 100% de certeza por mais evidente que seja.
Com base nos dados podemos imaginar que:
Estas considerações soam coerentes com o que pudemos analisar nas bases de dados. Agora que já temos uma “história para contar” vamos começar as confirmações.
Como fazer isso?
Você deve perguntar e esclarecer toda e qualquer dúvida junto à Área de Dados ou à Área de Negócios da empresa. Só assim, teremos certeza do significado de cada coluna para então confirmar e/ou ajustar nossas hipóteses para ter uma HISTÓRIAS DOS DADOS verdadeira.
Uma vez entendido o EDA Local, partimos agora para a técnica chamada de EDA Global.
Trata-se de uma visão puramente matemática dos dados; aqui teremos que utilizar abordagens estatísticas para “mergulhar” na análise descritiva de cada coluna da(s) base(s) de dados.
Uma ferramenta interessante para ser aplicada no EDA Global é a biblioteca do Python chamada pandas profiling, que proporciona um excelente resumo das principais medidas descritivas, disponibiliza gráficos e detecta inconsistências nos dados, como por exemplo, duplicidades, dados negativos, valores faltantes ou nulos etc.
Antes de conduzirmos o exemplo prático, é oportuno elencar os objetivos do EDA Global:
Para ilustrar o EDA Global na prática, usaremos apenas funções da linguagem Python para calcular as medidas descritivas e plotar os gráficos pertinentes; deixarei o pandas profiling como convite para que testem em algum momento no projeto de vocês, vale muito a pena conferir tal ferramenta.
Variável dependente (target)
Como estamos focados em um problema de crédito, geralmente o ponto de partida costuma ser a plotagem do gráfico em barras da variável target a fim de visualizar sua proporção entre classes.
Reparem no Gráfico 1 que a target apresenta desbalanceamento nos dados e, portanto, tornar-se necessário reservar algum tipo de tratamento na etapa de modelagem (sugestão: Oversampling ou Undersampling).
Variáveis independentes (features)
Antes de partimos para o exemplo prático, é importante sabermos a definição de Estatística Descrita, pois será o alicerce para o EDA Global. Trata-se de um ramo da estatística que possibilita resumir, descrever e compreender uma base de dados utilizando 4 medidas estatísticas, a saber:
Assimetria
A partir do cálculo do coeficiente de assimetria, basta acessar o quadro para classificar o tipo de simetria.
O formato da curva possibilita ao leitor “enxergar” também que tipo de modificação pode ser aplicada nos dados: transformações lineares ou não lineares (Data Transformation)
(*) apenas traduzi os termos para o português.
Curtose
Uma vez calculado o coeficiente de curtose, basta acessar o quadro para classificar o tipo de curtose.
Dependendo do formato da curva de densidade e dos valores obtidos podemos ter:
Neste estágio, as medidas descritivas e a plotagem dos gráficos (histograma, dispersão e boxplot) serão os holofotes centrais para que possamos ter a percepção estatística dos dados.
Para que o assunto não se prolongue tanto, utilizaremos 3 features: idade, salário mensal e linhas de crédito em aberto; os respectivos comentários estarão pontuados logo em seguida. Não se preocupe: esta amostra não comprometerá a conclusão do estudo e servirá como uma “bússola” para que você consiga aplicar no seu projeto, seja ele qual for.
IDADE
Q1 nos mostra que 25% dos dados tem até 41 anos e o restante (75%) tem a idade superior a 41 anos.
Q2 nos mostra que 50% dos dados tem até 52 anos e a outra metade (50%) está acima dessa idade.
Q3 nos mostra que 75% tem até 63 anos e o restante (25%) possui idade superior a isso.
SALÁRIO_MÊS
Q1 nos mostra que 25% dos dados possui um salário de até $3.400/mês e o restante (75%) dos dados tem uma remuneração acima desse montante.
Q2 nos mostra que 50% dos dados ganha mensalmente até $5.400 e a outra metade (50%) dos registros está acima desse valor.
Q3 nos mostra que 75% recebe um pagamento por mês de até $8.225 e o restante (25%) das linhas ganha um salário mensal superior a esta quantia.
LINHAS_CRÉDITO_ABERTO
Q1 nos mostra que 25% dos dados tem até 5 linhas de crédito em aberto e o restante (75%) tem uma quantidade superior.
Q2 nos mostra que 50% dos dados tem até 52 anos e a outra metade (50%) está acima dessa idade.
Q3 nos mostra que 75% tem até 63 anos e o restante (25%) possui idade superior.
NOTA: não deixe de anotar toda e qualquer dúvida para esclarecê-las com a Área de Dados ou a Área de Negócios da empresa, principalmente as possíveis inconsistências nos dados destacadas nessa investigação.
Histograma
Também conhecido como distribuição de frequências, o histograma representa graficamente uma base de dados dividida em classes ou categorias (uniformes ou não uniformes) no formato de barras retangulares. Esse gráfico serve para nos mostrar 5 aspectos:
Agora que sabemos o conceito e como usá-lo, empregamos os códigos abaixo para plotar os histogramas de cada feature previamente selecionada: IDADE, SALÁRIO_MÊS e LINHAS_CRÉDITO_ABERTO.
Para complementar nosso estudo, vamos calcular as medidas de distribuição que permitem entender ainda mais o formato da curva de densidade da base de dados:
IDADE
SALÁRIO_MÊS
LINHAS_CRÉDITO_ABERTO
Para fecharmos este artigo com chave de ouro, vamos pôr em pauta nosso último tópico: seleção de variáveis independentes. Isso mesmo, a análise exploratória de dados também permite selecionar features que podem ser importantes para prever a target em nosso projeto.
Como em qualquer laboratório de química, devemos SEMPRE testar tais palpites, durante o processo de modelagem, para termos segurança que as features pré-escolhidas sejam adequadas para o modelo.
Pode até parecer um pouco abstrato de início, mas o “cardápio” das possíveis features será obtido por meio de um artifício visual, atentando-se para a percepção de “movimento” nos gráficos (explicarei isso já já). A segunda forma baseia-se em um estudo matemático: análise de correlação entre as variáveis.
Visualizando os gráficos
Antes de iniciarmos a explicação, vamos para uma rápida definição de cada gráfico.
O gráfico de dispersão é uma representação gráfica da associação entre pares de dados com foco no seu “comportamento”. Ele serve para mensurar e visualizar a relação entre duas variáveis numéricas a fim de verificar se há uma associação linear entre os pares. Caso seja uma associação não linear, o gráfico terá o comportamento quadrático, cúbico, e assim por diante. Procure visualizar essa “conduta”, buscando notar padrões nos dados, isto é: dados dispersos, dados agrupados, dados em movimento crescente, dados em movimento decrescente e assim por diante.
Já o diagrama de caixa, ou boxplot, é um gráfico que avalia diferentes aspectos dos dados. Por isso, ele pode ser intitulado como um histograma sofisticado. E quais seriam estes aspectos? Podemos citar por exemplo a assimetria (é a posição da linha central que está dentro da ‘caixa’), o comprimento das caudas (a partir da extremidade da caixa até os pontos extremos), a dispersão (simbolizada pelo tamanho da ‘caixa’), a localização (representada pela linha central da ‘caixa’; é a própria mediana) e os outliers (indicados pelos extremos, a partir do Limite Superior ou Inferior).
Agora que temos o contexto do que é e para que serve cada gráfico, vamos entender como aplicá-los na prática para a seleção de features.
O que podemos notar em cada gráfico de dispersão plotado a seguir? Fizemos um resumo para ajudá-los.
Se olharmos o “comportamento” da variável IDADE, o gráfico parece espelhado, não se notando “movimento” nele. A conclusão que podemos ter é que a variação da idade não parece fazer diferença ao definir se a pessoa é boa ou má pagadora. Aparentemente, a idade não parece ser uma variável interessante para a modelagem, porém é preciso olhar o boxplot para confirmar ou dar outra visão dessa feature.
Aqui no gráfico do salário mensal, percebemos que ele não está espelhado e, portanto, há “movimento” entre eles. A conclusão à qual se chega é que essa variável ajuda a separar o bom do mau pagador. A variável SALÁRIO_MÊS parece ser uma candidata para a modelagem. Novamente, é importante olhar o boxplot para obter outra percepção a respeito.
No último gráfico, assim como no primeiro, percebemos o espelhamento entre as classes. Portanto, não existe “movimento”. Podemos presumir que essa feature não auxilia a identificar o indivíduo como bom ou mau pagador. Provavelmente, a feature LINHAS_CRÉDITO_ABERTO não aparenta ser relevante para a modelagem; observar o boxplot é recomendado para este caso.
Ao visualizarmos a mediana (linha central do boxplot) de cada classe (0 ou 1), percebemos facilmente que ela possui valores diferentes e, desta forma, existe o tal “movimento” no gráfico que tanto buscamos. Aqui, a tendência revela que indivíduos mais jovens são propensos à inadimplência ao contrário de pessoas mais velhas. Diferentemente do gráfico de dispersão, o boxplot nos sugere outra visão: a variável IDADE é uma feature interessante para ser utilizada no modelo para prever y.
Ao observamos a mediana (linha central mais fina) de cada categoria (0 ou 1), notamos que ela possui exatamente o mesmo valor e, portanto, não há “movimento” neste gráfico. Um salário alto ou baixo não parece ajudar a separar bons de maus pagadores. Conclusão: o boxplot nos propõe que essa feature não é relevante para a modelagem.
Finalmente, no último gráfico, identificamos que, praticamente, as medianas de cada classe são iguais (ausência de “movimento”). Mais uma vez, a quantidade de linhas de crédito em aberto não parece influenciar se uma pessoa será classificada como boa ou má pagadora. Moral da história: exatamente como observado no gráfico de dispersão, essa variável não parece ser essencial para ajudar a predizer a target.
NOTA: qualquer que seja a conclusão obtida pela avaliação visual, seja pelo gráfico de dispersão e/ou pelo boxplot, o ideal é SEMPRE testar toda e qualquer hipótese levantada. Os testes vão garantir que o “caminho” escolhido é apropriado na etapa de seleção de variáveis.
Análise de correlação
A correlação é uma técnica estatística que mostra como os pares de variáveis numéricas estão relacionados entre si, em termos de direção, intensidade e força. Para exemplificarmos, plotamos um heatmap que possibilita analisar estes fatores: direção (observe o sinal de positivo ou negativo); intensidade (o próprio valor da correlação); e força (as cores do diagrama que indicam se tal relação é fraca, média ou forte).
A análise de correlação também pode ser um caminho a ser seguido para a seleção de variáveis. Aqui, deve ser definido um valor de corte para aplicar o recurso. Geralmente, correlações iguais ou acima de 0.70 são uma ótima pedida, entretanto sugerimos que faça testes com outros cortes: 0.8, 0.85, 0.9 etc. (os valores negativos também devem ser incluídos nesse corte; foque no valor da correlação e deixe de lado o sinal para não confundir).
E agora, como fazer a seleção de variáveis independentes?
Sugiro plotar uma tabela com a função .corr() do Pandas e analisar no próprio Jupyter notebook ou framework que preferir. Neste artigo, escolhemos o Excel por uma questão didática. O corte da análise de correlação desse exemplo será de 0.70. Reparem que a tabela de correlação é espelhada e separada por uma diagonal principal de 1s. Foquem apenas em uma das metades e sigam o passo a passo descrito a seguir.
Passo a passo:
1) Selecione e destaque todas as correlações com corte igual ou acima de 0.70 (ou outro valor de sua preferência).
2) Observe cada par de variáveis e escolha aquela que tiver o maior valor de correlação com a target. Exemplo: os pares v3-v1 apresentam correlação de 0.770787263; para saber qual dos pares comporá a lista de features para o modelo, observe qual possui a correlação mais forte com a target (lembre-se que valores próximos de 1 ou valores próximos de -1 indicam forte correlação). As setas vermelhas indicam o valor de correlação dos pares: target-v1 e target-v3. Portanto, nessa primeira rodada, a coluna v1 será a variável escolhida.
3) Anote em uma tabela o resultado de cada rodada.
4) Repita o mesmo procedimento para o restante dos pares e não se esqueça de contabilizar.
5) Agora, basta contar cada rodada para selecionar aquela que entrará na lista final (sugiro fazer uma nova tabela). Em caso de empate, incluir a variável. Exemplo:
Finalmente, para encerrarmos a análise da correlação, basta olhar a tabela construída no passo 5) e fazer a seleção das variáveis. Neste caso, as features candidatas seriam: v1, v6 e v9.
Sugerimos a aplicação de diversos testes, com diferentes cortes, e a apuração dos resultados de cada modelo testado comparando as mesmas métricas de desempenho que você optar utilizar; esta experimentação comprovará toda e qualquer hipótese levantada.
Fui indagado com essa pergunta por um conhecido e acabei respondendo de volta com um: “DEPENDE”.
O EDA Local é sim uma abordagem que costuma ser usada com frequência em projetos profissionais de Data Science, pois ajuda o cientista de dados, ou a pessoa responsável pelo estudo, a supor a HISTÓRIA DOS DADOS para, em seguida, confirmar a versão final com a Área de Dados ou a Área de Negócios da empresa.
Já o EDA Global é feito, na prática, de forma mais resumida e direta, observando principalmente inconsistências nos dados como outliers, duplicidades, valores faltantes etc. Esta abordagem mais focada se deve pela grande quantidade de colunas na base de dados que acaba sendo um fator limitante de sua aplicação, especialmente em projetos de consultoria que envolvem prazos e respostas rápidas para o cliente: “Time is Money”.
Como estamos interessados em selecionar as melhores variáveis para o modelo, existem tantas técnicas no mundo de Machine Learning (RFE, Feature Importance, Regularization, entre outras) que o uso do EDA como selecionador de variáveis acaba não sendo tão praticado, apesar de ser uma das técnicas disponíveis.
Tratamos de duas abordagens práticas de como “enxergar” mais profundamente o “poder” do EDA na análise de dados. Lembre-se que este artigo objetivou ajudar o leitor a ter mais uma ferramenta no “Kit Machine Learning”; nunca se esqueça do mantra do cientista de dados de testar qualquer hipótese na condução de um projeto de Ciência de Dados para obter o melhor resultado para o modelo: “Teste -Teste-Teste”.
A criatividade também deve ser uma aliada, especialmente para a técnica de Feature Engineering, a fim de refinar o desempenho do modelo.
Espero que tenha gostado do artigo!
|REFERÊNCIAS BIBLIOGRÁFICAS
Thanks to Felipe Sassi