Machine Learning · Insper

Análise Exploratória de Dados

Olhar os dados antes de modelá-los

Primeiro contato, estatísticas à mão, gráficos, valores faltantes, outliers e tetos

Por que olhar primeiro?

"O maior valor de uma figura é quando ela nos força a perceber o que nunca esperávamos ver." — Tukey (1977)
  • Análise Exploratória de Dados (EDA, do inglês Exploratory Data Analysis): gráficos, resumos e anomalias antes de qualquer modelo.
  • É o passo 2 do fluxo de trabalho de machine learning (ML). Pulá-la é a fonte mais comum de falha silenciosa: dados mal compreendidos dão absurdos com confiança.
  • O objetivo: sair com uma lista curta de fatos, de problemas a corrigir e de perguntas a testar.

O caminho desta aula

  1. Conhecer os dadostamanho, o que é uma linha, tipos das colunas, describe()
  2. Resumir à mãocentro, dispersão e forma de uma coluna
  3. Olhar a formaAnscombe, histogramas, densidade, escala log
  4. Duas variáveisdispersão, Pearson e Spearman, Simpson, grupos
  5. Problemas a corrigirfaltantes, outliers, tetos; dividir antes de explorar
Cada etapa responde a uma pergunta: o que é uma linha desta tabela? → o que poucos números dizem sobre uma coluna? → o que os números escondem? → o que liga duas variáveis? → o que corrigir antes de qualquer modelo?
Etapa 1 · o que é uma linha desta tabela?

O exemplo da aula: California Housing

  • 20.640 linhas do censo americano de 1990, 10 colunas: 9 numéricas e 1 de texto (ocean_proximity).
  • O alvo: median_house_value.
  • ocean_proximity tem 5 níveis; ISLAND tem só 5 linhas, <1H OCEAN tem 9.136.
Preveja. Uma linha tem total_rooms = 39.320. O que é uma linha desta tabela: uma casa?

Uma linha não é uma casa

É um block group do censo (um "distrito"), tipicamente com 600 a 3.000 habitantes. Toda coluna descreve o distrito como um todo.

colunasignificadonota
total_rooms, population, …somados no distritomedem o seu tamanho
housing_median_ageidade mediana das casasteto em 52
median_incomedezenas de milhares de US$ (3,87 = US$ 38.700)teto em 15,0001
median_house_valueo alvo, em US$ de 1990teto em 500.001
39.320 cômodos é um distrito muito populoso, não uma mansão. Contagens só se comparam entre distritos quando divididas por algo (cômodos por domicílio).

describe(): três pistas

count

20.433

em total_bedrooms, 20.640 nas demais: 207 faltando

média vs mediana

2.636 / 2.127

cômodos: a média bem acima da mediana, uma cauda longa à direita

mín. e máx.

52 · 15,0 · 500.001

máximos suspeitamente redondos: tetos

O resto da aula explica como ler cada pista direito.

Etapa 2 · o que poucos números dizem sobre uma coluna?

Primeiro à mão: os salários de um escritório pequeno

Nove pessoas, em R$ mil por mês: oito funcionários e o dono.

2 · 2 · 3 · 3 · 3 · 4 · 5 · 6 · 26
Preveja. Qual é o "salário típico" aqui? Calcule a média e a mediana. Qual delas descreve o escritório?

O centro: média e mediana

média

\(\frac{2+2+3+3+3+4+5+6+26}{9} = \frac{54}{9}\)

6
sem o dono: 28/8 = 3,5

mediana

o 5º dos 9 valores ordenados

3
sem o dono: continua 3
  • Uma pessoa levou a média de 3,5 para 6; sete das nove ganham menos que 6.
  • A média é puxada por uma cauda longa; a mediana só conta posições.
Média bem acima da mediana = cauda longa à direita. total_rooms: 2.635,8 contra 2.127,0.

A dispersão: desvio padrão, à mão

\(x_i\)2233345626soma
\(x_i - \bar x\)−4−4−3−3−3−2−10200
\((x_i - \bar x)^2\)1616999410400464
\[ s = \sqrt{\tfrac{1}{n-1}\textstyle\sum (x_i - \bar x)^2} = \sqrt{464/8} = \sqrt{58} = 7{,}62 \]
Só o dono contribui com 400 dos 464: como a média, o desvio padrão é dominado pelos valores extremos.

Quantis e IQR: uma dispersão robusta

Ordenados: 2 2 3 3 3 4 5 6 26 — o pandas usa a posição \(p\,(n-1)\), contando a partir de 0.

\(Q_1\) (posição 2)

3

mediana (posição 4)

3

\(Q_3\) (posição 6)

5
\(\text{IQR} = Q_3 - Q_1 = 2\) (amplitude interquartil): a largura da metade central dos dados. O dono não a afeta em nada.

A forma: assimetria

\[ \text{assimetria} = \frac{1}{n}\sum_{i=1}^{n}\left(\frac{x_i - \bar{x}}{\sigma}\right)^3 \]
  • O cubo mantém o sinal: valores muito acima da média a puxam para cima. Simétrica → 0.
  • Salários: 2,34 pela fórmula; o pandas imprime 2,83 (multiplica por uma correção de amostra pequena, 1,21 para \(n = 9\)).

\(|\text{assim.}| < 0{,}5\)

mais ou menos simétrica

de 0,5 a 1

moderada

acima de 1

forte

Etapa 3 · o que os números escondem?

Por que estatísticas não bastam

Preveja. Quatro conjuntos têm as mesmas médias, variâncias, correlação (0,82) e reta de mínimos quadrados (3,0 + 0,5x). Eles se parecem?
O quarteto de Anscombe: uma reta com ruído, uma curva suave, uma reta perfeita com um outlier e uma pilha vertical com um ponto distante

O quarteto de Anscombe, lido

II

uma curva suave: uma reta é o resumo errado

III

uma reta perfeita, exceto por um outlier, que inclina o ajuste

IV

um ponto cria a correlação inteira; sem ele, \(x\) nem varia

Um dinossauro, uma estrela, um alvo e um X com as mesmas estatísticas
O Datasaurus: um dinossauro, uma estrela, um alvo e um X com as mesmas médias, desvios e correlação. Sempre faça o gráfico.

Histogramas: a largura do bin muda a história

Preveja. O mesmo alvo, com 10 bins e com 50 bins. O número de bins pode esconder um defeito dos dados?
O alvo com 10 bins, 50 bins e como KDE

O que os 50 bins revelaram

10 bins

a última barra, 1.243 distritos, é um calombo modesto: 30% da mais alta. Uma cauda um pouco gorda?

50 bins

a última barra, 1.030, é a mais alta de todas, 22 vezes a vizinha (47)

O valor mais frequente da coluna é exatamente 500.001, em 965 distritos: o teto.

  • Tente mais de um número de bins (30–50 para alguns milhares de linhas); bins='fd' (Freedman–Diaconis) escolhe 46 aqui.
  • Uma estimativa de densidade por kernel (KDE) é suave, mas transforma o pico num calombo e põe 2,5% da área acima de 500.001, onde não existe distrito.

Contagens assimétricas e a escala log

median_income vai de assimetria +1,65 a -0,15 depois do log; population de +4,94 a -1,07

median_income: assimetria 1,65 → −0,15. Funciona como prometido.

population: 4,94 → −1,07. Passa do ponto: os 104 distritos com menos de 50 pessoas viram uma nova cauda à esquerda (o menor tem 3).

Uma transformação é uma hipótese: confira o que ela fez, coluna por coluna.
Etapa 4 · o que liga duas variáveis?

20.640 pontos: sobreposição

Renda contra valor: dispersão simples, com alpha 0,08 e um hexbin
  • Transparência (alpha=0.08) revela o núcleo, a linha do teto com 965 distritos e linhas em valores redondos (137.500 aparece 122 vezes).
  • Hexbin conta pontos por célula. O valor sobe com a renda e a dispersão também cresce com ela.

Pearson e Spearman, à mão

\(x\)\(y\)\(x-\bar x\)\(y-\bar y\)produtoposto \(x\)posto \(y\)
11−2−51011
22−1−4422
330−3033
441−2−244
5202142855
Preveja. \(y\) sempre cresce com \(x\). A correlação é 1?

Pearson: \(r = \frac{40}{\sqrt{10 \times 250}} = 0{,}8\)

Spearman (Pearson nos postos): 1

28 dos 40 vêm do ponto distante.

Nos dados de imóveis, contra o alvo

atributoPearsonSpearman
median_income0,6880,677
total_rooms0,1340,206
housing_median_age0,1060,075
population−0,0250,004
latitude−0,144−0,166
  • a renda domina, quase linearmente (ambos ≈ 0,68);
  • cômodos: Spearman acima de Pearson, uma relação monótona distorcida pela cauda;
  • a latitude parece fraca, mas o valor mediano oscila de 84.500 a 236.500 entre faixas, sobe e desce duas vezes: não é monótona.
\(r \approx 0\) quer dizer "nenhuma associação linear (ou monótona)", nunca "nenhuma relação".

Simulador: Pearson lê a reta, Spearman a ordem

Preveja. Carregue com um outlier e arraste o ponto vermelho ainda mais para cima. Qual coeficiente continua se mexendo e qual para?

Atributos redundantes

  • As quatro contagens (cômodos, quartos, população, domicílios) se correlacionam entre 0,86 e 0,98: todas medem o tamanho do distrito.
  • Iris: comprimento e largura da pétala, \(r = 0{,}963\).
  • Não é um erro, mas vale registrar: modelos lineares ficam com coeficientes instáveis; a redução de dimensionalidade explora isso; para as contagens, divida pelo tamanho.
Um atributo suspeitamente bom em prever o alvo pode ser o alvo disfarçado: uma coluna vazada. Se um modelo depois sair perfeito, desconfie primeiro disso.

Correlação não é causalidade

  • Renda e valor do imóvel: \(r = 0{,}69\). Aumentar a renda de um distrito não aumenta os preços nem o contrário.
  • As duas respondem a uma terceira coisa: a demanda por morar ali (empregos, litoral, escolas).
  • Vendas de sorvete e afogamentos se correlacionam por causa do verão.
Sempre que ler uma correlação, pergunte que terceira variável poderia estar movendo as duas.

O paradoxo de Simpson: cálculos renais

taxa de sucessotratamento Atratamento B
cálculos pequenos0,9310,867
cálculos grandes0,7300,688
Preveja. A vence nos cálculos pequenos e nos grandes. A vence no total?

No total: A 0,780, B 0,826. A perde: \(273/350\) para A.

A foi dado sobretudo a cálculos grandes (263 de 350), mais difíceis de tratar. O tamanho do cálculo é um confundidor: influencia a escolha do tratamento e o sucesso.

A mesma armadilha nos dados de imóveis

No total r = -0,26 entre a fração de quartos e o valor; dentro das faixas de renda Q1 a Q4 a inclinação é positiva

Fração dos cômodos que são quartos vs valor:

no total \(r = -0{,}256\); dentro das faixas de renda Q1–Q4, +0,24 a +0,42.

A renda move as duas (\(r = -0{,}616\) com a fração de quartos).

Uma correlação nos dados agregados é uma hipótese, não um achado: condicione nas terceiras variáveis óbvias.

Categórica vs numérica: agrupe, com o \(n\)

Valor por ocean_proximity ordenado pela mediana
  • INLAND se destaca: mediana 108.500 contra 214.850–233.800 no litoral.
  • Os violinos incham no teto de 500.001 nos grupos do litoral.
  • ISLAND tem 5 distritos: a maior mediana (414.700) e a menos confiável.
  • INLAND também tem rendas menores (2,99 vs 3,65–3,88): parte da diferença é renda.
Nunca relate uma estatística de grupo sem o seu \(n\).
Etapa 5 · o que corrigir antes de qualquer modelo?

Valores faltantes: o porquê importa

total_bedrooms: 207 faltando (1,00%). A pergunta importante é por quê (Rubin, 1976).

mecanismoa chance de faltar depende de…exemplo
MCARnada: faltando completamente ao acaso (missing completely at random)um sensor perde pacotes ao acaso
MARoutras colunas observadas (missing at random)usuários mais jovens pulam o campo de renda
MNARo próprio valor que falta (missing not at random)rendas altas não são declaradas de propósito

Os três mecanismos em ação

10.000 pessoas simuladas, a renda cresce com a idade; esconda ~30% das rendas e preencha cada uma pela média da sua faixa de idade. Média verdadeira: 6,89.

Preveja. Em qual mecanismo preencher pela faixa de idade recupera a média verdadeira?
média do que vemosdepois de preencher pela idade
MCAR6,826,85
MAR: os jovens escondem mais7,486,88
MNAR: os ricos escondem mais5,916,11

O que fazer na EDA

Renda contra idade com 30% faltando sob MCAR, MAR e MNAR
  • Apagar linhas só é inofensivo sob MCAR. Dá para juntar evidência contra MCAR: compare as linhas com e sem o valor nas outras colunas.
  • MNAR é indetectável só pelos dados. Guarde uma coluna-indicador para que um modelo possa usar o fato de que o valor faltava.

Outliers: duas regras, à mão

Preveja. De volta aos salários. A regra "\(|z| > 3\)" marca o 26 do dono?

regra do IQR

cercas \(Q_1 - 1{,}5\,\text{IQR} = 0\) e \(Q_3 + 1{,}5\,\text{IQR} = 8\)

26 marcado

regra do escore-z

\(z = (26 - 6)/7{,}62 = 2{,}63\)

não marcado

O outlier infla a média e o \(s\) usados para julgá-lo (masking). Além disso, com \(n = 9\) nenhum \(|z|\) passa de \((n-1)/\sqrt{n} = 2{,}67\). Os quartis não se mexem: a regra do IQR é o padrão usual.

Em dados reais as regras discordam

population, IQR

1.196

population, \(|z| > 3\)

342

log(population), IQR

847

Uma cauda longa à direita põe muitos distritos grandes e comuns além das cercas de 1,5 IQR.

As regras só marcam candidatos; não dizem o que fazer.

Erro ou raro-mas-real?

  • age = 190 numa tabela de clientes: erro de digitação → corrija ou marque como faltante.
  • O salário de 26 do dono: real → mantenha; prefira estatísticas robustas (mediana, quantis, log).
  • No meio: valores corretos que significam outra coisa.
Distrito típico: 2,82 pessoas por domicílio. Um distrito: 7.460 pessoas em 6 domicílios, 19 cômodos. Nenhuma família faz isso; uma instituição (presídio, base militar, alojamento) faz. Os números provavelmente estão certos; o significado muda.

Valores truncados (censurados)

valor em 500.001

965
4,7% dos distritos

idade em 52

1.273
6,2%

renda em 15,0001

49
0,2%

Top-coding: 500.001 quer dizer "pelo menos 500.000"; o valor verdadeiro se perdeu. Os distritos no teto não são aleatórios: renda média 7,83 contra 3,87 no total.

Um modelo treinado neles subestima os distritos caros. Manter e documentar, remover e restringir o modelo ou usar um modelo para dados censurados. A opção indefensável: não perceber.

Não bisbilhote: divida antes de explorar


from sklearn.model_selection import train_test_split
train, test = train_test_split(df, test_size=0.2, random_state=42)
# daqui em diante, explore só `train`; `test` espera até o fim
  
  • Fatos sobre como o arquivo foi produzido (unidades, tetos) são inofensivos de saber.
  • Tudo o que é estimado e alimenta uma decisão (um valor de imputação, um limiar de outlier, quais atributos se correlacionam melhor) vem só da parte de treino.
O conjunto de treino pode ser usado à vontade. O conjunto de teste é sagrado: mede o modelo final uma vez.

Um checklist de EDA

  1. Contexto: quem coletou, o que é uma linha, qual é o alvo?
  2. Divida primeiro.
  3. Formato e tipos.
  4. Integridade: faltantes (e por quê), duplicatas, valores impossíveis, tetos.
  1. Uma coluna por vez: vários números de bins, média vs mediana, assimetria, níveis raros.
  2. Pares: dispersão, Pearson e Spearman, boxplots por grupo.
  3. Terceiras variáveis: a relação sobrevive dentro dos grupos?
  4. Registre: todo gráfico merece uma frase.
Lab · California Housing, do jeito certo

Uma primeira EDA: passos 1 a 11

  • Divida primeiro, explore só a parte de treino e termine com uma lista escrita de achados. Não há modelos.
  • Passos: carregar → dividir → auditoria (faltantes, duplicatas) → estatísticas → distribuições e tetos → a coluna categórica → relações → o mapa → contagens e razões → outliers → achados.
  • Baixe o notebook do lab e abra no Jupyter ou no Colab; ele roda em poucos segundos.
A saída é uma ficha dos dados: fatos, problemas a corrigir no pré-processamento e hipóteses a testar com modelos.

Resumo

  1. Saiba o que é uma linha antes de qualquer coisa.
  2. Média e \(s\) seguem a cauda; mediana e IQR resistem a ela.
  3. Sempre faça o gráfico: estatísticas iguais escondem dados diferentes; tente vários números de bins.
  4. Pearson e Spearman juntos; correlação não é causalidade; condicione nas terceiras variáveis.
  5. Pergunte por que faltam valores; regras de outlier só marcam; tetos são valores censurados.
  6. Divida antes de explorar: o teste é sagrado.
Próxima: Pré-processamento de Dados, agir sobre os problemas que a EDA encontrou.