Análise Exploratória de Dados
A Análise Exploratória de Dados (EDA, do inglês Exploratory Data Analysis) é a prática disciplinada de olhar para os seus dados antes de modelá-los. O termo foi cunhado por John Tukey (1977), que defendia que a análise de dados deveria começar com exploração sem preconceitos — gráficos, resumos, anomalias — em vez de saltar direto para testes de hipóteses ou modelos.
Tukey (1977)
O maior valor de uma figura é quando ela nos força a perceber o que nunca esperávamos ver.
A EDA é o passo 2 do fluxo de trabalho de ML, e pulá-la é a fonte mais comum de falha silenciosa: modelos treinados em dados mal compreendidos produzem absurdos com confiança.
O que procurar
Um checklist prático de EDA:
- Formato e tipos — quantas linhas e colunas? Quais são numéricas, categóricas, datas, texto, identificadores?
- Valores faltantes — quantos, em quais colunas e por que estão faltando?
- Distribuições — centro, dispersão, assimetria, multimodalidade de cada atributo;
- Outliers — extremos legítimos ou erros de digitação?
- Relações — correlações entre atributos e entre atributos e o alvo;
- Balanceamento de classes — para classificação, quão frequente é cada classe?
- Duplicatas e suspeitas de vazamento — linhas repetidas, colunas que "conhecem o futuro" (ver Validação & Vazamento de Dados).
Primeiro contato com um conjunto de dados
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris(as_frame=True)
df = iris.frame
df.shape # (150, 5) — linhas, colunas
df.head() # primeiras linhas: examine os valores
df.info() # dtypes e contagem de não nulos
df.describe() # contagem, média, desvio, mín, quartis, máx
df.isna().sum() # valores faltantes por coluna
df.duplicated().sum()
Estatísticas descritivas
Para um atributo numérico \(x_1, \dots, x_n\):
- Média: \(\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i\) — sensível a outliers;
- Mediana: o valor central — robusta a outliers;
- Desvio padrão: \(s = \sqrt{\frac{1}{n-1}\sum_{i=1}^{n}(x_i - \bar{x})^2}\) — distância típica em relação à média;
- Quartis / IQR: \( \text{IQR} = Q_3 - Q_1 \) — a amplitude dos 50% centrais, base do boxplot.
Uma grande diferença entre média e mediana é um alarme de assimetria — pense em dados de renda, em que alguns valores altos puxam a média para cima.
Por que estatísticas não bastam
Os quatro conjuntos de dados abaixo — o quarteto de Anscombe — têm médias, variâncias, correlações (\(r \approx 0.816\)) e retas de mínimos quadrados idênticas. Só um gráfico revela quão diferentes eles são:
O conjunto 2 é não linear, o conjunto 3 tem um outlier distorcendo a reta e o conjunto 4 tem um único ponto criando toda a correlação. Sempre faça gráficos.
Visualizações essenciais
| Pergunta | Gráfico |
|---|---|
| Como um atributo numérico está distribuído? | histograma, gráfico de densidade, boxplot |
| Como um atributo difere entre classes? | histogramas sobrepostos, boxplots lado a lado, violin plots |
| Como dois atributos numéricos se relacionam? | gráfico de dispersão |
| Como todos os atributos numéricos se relacionam? | heatmap de correlação, pair plot |
| Quão frequente é cada categoria? | gráfico de barras |
Um exemplo no conjunto iris — uma visão de distribuição e uma de correlação:
O painel da esquerda já conta uma história de modelagem: o comprimento da pétala sozinho quase separa as três espécies. O painel da direita alerta que comprimento e largura da pétala são altamente correlacionados (\(r = 0.96\)) — carregam quase a mesma informação, o que importará para a redução de dimensionalidade e para interpretar os coeficientes de modelos lineares.
Correlação, com cuidado
A correlação de Pearson entre os atributos \(x\) e \(y\):
Três avisos padrão:
- \(r\) mede apenas associação linear — o conjunto 2 de Anscombe tem estrutura forte e \(r\) enganoso;
- correlação não é causalidade — vendas de sorvete e afogamentos se correlacionam por meio de um confundidor (o verão);
- correlação em dados agregados pode se inverter no nível individual (paradoxo de Simpson).
Valores faltantes: o porquê importa
| Mecanismo | Significado | Exemplo | Correções seguras |
|---|---|---|---|
| MCAR | faltando completamente ao acaso | o sensor perde pacotes aleatoriamente | descartar ou imputar |
| MAR | falta explicada por outras colunas observadas | usuários mais jovens pulam o campo de renda | imputar usando essas colunas |
| MNAR | a falta depende do próprio valor faltante | rendas altas deliberadamente não informadas | perigoso — exige raciocínio de domínio |
Excluir todas as linhas com qualquer valor faltante só é inofensivo sob MCAR — caso contrário, enviesa o conjunto de dados. Estratégias de imputação são cobertas em Pré-processamento de Dados.
Outliers
A regra clássica do boxplot sinaliza pontos fora de \([Q_1 - 1.5\,\text{IQR},\; Q_3 + 1.5\,\text{IQR}]\). Mas a regra apenas sinaliza — a decisão exige julgamento:
- uma
idade = 190é um erro de digitação → corrigir ou remover; - uma
compra = R$ 500.000pode ser seu cliente mais importante → manter, e escolher modelos/métricas robustos.
Além de Pearson: medindo qualquer associação
O \(r\) de Pearson cobre apenas pares de variáveis contínuas. O kit completo para análise bivariada:
| Par de variáveis | Medida de associação | Visualização |
|---|---|---|
| contínua × contínua | correlação de Pearson / Spearman | gráfico de dispersão |
| categórica × categórica | V de Cramér (a partir da estatística χ²) | tabela de contingência / heatmap |
| contínua × categórica | teste de Kruskal–Wallis | boxplots da variável contínua por categoria |
Ao ler associações atributo–alvo, tenha em mente duas regras práticas:
- atributos fortemente associados entre si → provável redundância (temperatura em °C e °F; preço em R$ e US$) — considere descartar um;
- um atributo suspeitamente associado ao alvo → pode ser o alvo disfarçado — uma coluna vazada (ver Vazamento de Dados). Se seu modelo ficar de repente perfeito, desconfie dele primeiro.
Não bisbilhote: divida antes de explorar
Uma sutileza que o conjunto de dados da aula reforça: faça a divisão treino/teste antes da análise exploratória e rode a EDA apenas no conjunto de treino. Explorar o conjunto completo significa "espiar" o conjunto de teste — data snooping — e o que você aprende (quais atributos parecem promissores, onde estão os outliers, quais transformações aplicar) influencia silenciosamente decisões que o conjunto de teste deveria julgar de fora.
Os dois princípios
- O conjunto de treino pode ser usado livremente.
- O conjunto de teste é SAGRADO. Ele existe para exatamente um propósito: medir o modelo final uma única vez. Não olhe para ele, não chegue perto, não reconheça sua existência até o fim.
Prática: California Housing
O notebook da aula percorre uma EDA completa no conjunto California Housing (do Hands-On ML de Géron, capítulo 2): 20.640 distritos × 10 colunas — 9 atributos (localização, idade dos imóveis, cômodos, renda, ocean_proximity...) e o alvo de regressão median_house_value.
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/hsandmann/biblio/refs/heads/main/ml/aula02/housing.csv')
X = df.drop('median_house_value', axis=1).copy() # atributos (m × n)
y = df['median_house_value'].copy() # alvo (m,)
Exercícios guiados do notebook:
- Quantos exemplos e colunas? O que cada coluna significa — contínua ou categórica?
- Divida treino/teste (80/20) primeiro; explique o papel do
random_state; - Análise univariada no conjunto de treino: estatísticas descritivas e gráficos por atributo — cace anomalias (valores faltantes em
total_bedrooms, saturação emmedian_house_value= 500.001), distribuições assimétricas, categorias raras; - Análise bivariada: quais pares de atributos são fortemente associados? Quais atributos mais se associam ao alvo?
A EDA é iterativa
Você voltará à EDA depois de modelar: erros de previsão, importâncias de atributos surpreendentes e alertas de drift levam você de volta a olhar os dados novamente.
Material de aula
Notebook da aula (em português)
Notebook prático usado em sala — Aula 02 — Análise Exploratória de Dados: abrir no Colab