1. Data
Atividade: Preparação e Análise de Dados para Redes Neurais
Esta atividade é projetada para testar suas habilidades em geração e manipulação de datasets sintéticos, no tratamento de desafios de dados do mundo real e na preparação de dados para serem alimentados em redes neurais.
O fio condutor da atividade é o espalhamento dos dados: quanto uma nuvem de pontos se espalha, em que direção ela se espalha, e como isso muda a dificuldade do problema de classificação.
Regras técnicas (valem para toda a atividade)
- Fixe a semente aleatória —
rng = np.random.default_rng(42)— e use o mesmorngem todo o relatório. Resultados que não podem ser reproduzidos não pontuam; - Todo gráfico deve ter título, rótulos nos eixos e legenda das classes;
- Bibliotecas liberadas:
numpy,pandas,matplotlib/seaborn,scikit-learn— este último apenas para PCA e pré-processamento; nesta atividade nenhum modelo é treinado; - Sempre que o enunciado pedir um número (taxa de mistura, variância explicada, contagem de faltantes), reporte o número no texto — não apenas no output do código;
- Organize o relatório com um título por exercício e um subtítulo por item (
Exercício 1,A,B, …), na mesma ordem do enunciado, e numere as figuras como indicado. A última seção do relatório deve ser o Resumo dos resultados descrito no fim desta página.
Exercício 1
Nuvens de Pontos: Geometria e Espalhamento em 2D
Entender como os dados estão distribuídos é o primeiro passo antes de projetar uma arquitetura de rede. Neste exercício você vai gerar e medir nuvens de pontos bidimensionais, observando como a distribuição afeta a complexidade das fronteiras de decisão que uma rede neural precisaria aprender.
A — Gere as nuvens
Crie um dataset sintético com 400 amostras no total, divididas igualmente entre 4 classes (100 amostras cada). Use uma distribuição gaussiana para gerar os pontos de cada classe com os seguintes parâmetros:
- Classe 0: Média = \([2, 3]\), Desvio Padrão = \([0.8, 2.5]\)
- Classe 1: Média = \([5, 6]\), Desvio Padrão = \([1.2, 1.9]\)
- Classe 2: Média = \([8, 1]\), Desvio Padrão = \([0.9, 0.9]\)
- Classe 3: Média = \([15, 4]\), Desvio Padrão = \([0.5, 2.0]\)
Produza a Figura 1: scatter plot 2D com todos os pontos, uma cor por classe, com o centro de cada nuvem (a média) marcado sobre o gráfico.
B — Mais ou menos espalhado
O desvio padrão controla o quanto cada nuvem se espalha em torno do seu centro. Gere as mesmas 4 classes do item A, quatro vezes, multiplicando todos os desvios padrão por um fator de escala \(s\) — as médias nunca mudam, apenas o espalhamento:
São, portanto, 4 datasets de 4 classes cada — e não um dataset de 4 escalas com classes diferentes.
- Produza a Figura 2: 4 subplots (um por valor de \(s\)), compartilhando os mesmos limites de eixos, para que a comparação seja honesta.
-
Calcule, apenas para \(s = 1\), a razão de separação de cada par de classes \((i, j)\):
\[ r_{ij} = \frac{\lVert \mu_i - \mu_j \rVert}{\bar{\sigma}_i + \bar{\sigma}_j}, \qquad \bar{\sigma}_k = \frac{\sigma_{k,x} + \sigma_{k,y}}{2} \]Valores altos indicam nuvens bem separadas; valores baixos, nuvens que se misturam. São 6 pares — reporte-os em uma tabela e diga qual é o menor. Como as médias não mudam, \(r_{ij}\) escala com \(1/s\): diga quanto vale esse menor \(r_{ij}\) em \(s = 2\) sem precisar gerar nada de novo. 1. Calcule, para cada \(s\), a taxa de mistura: a fração de pontos cujo centro de classe mais próximo não é o da sua própria classe. Com NumPy, é comparar cada ponto às 4 médias — medida puramente geométrica, sem treinar nada. 1. Produza a Figura 3: gráfico de taxa de mistura \(\times\) \(s\). Responda: a partir de qual fator de escala as nuvens deixam de poder ser separadas por retas? O que acontece com o menor \(r_{ij}\) nesse ponto?
C — Análise
- Descreva a sobreposição das quatro classes no dataset original (\(s = 1\)). Uma única fronteira linear separaria todas as classes? E um conjunto de fronteiras lineares?
- Esboce sobre a Figura 1 as fronteiras de decisão que você acha que uma rede neural treinada poderia aprender.
- Relacione o esboço com o item B: quanto mais espalhadas as nuvens, o que acontece com a região onde a rede necessariamente erra?
Exercício 2
Não-Linearidade em Dimensões Maiores
Redes neurais simples (como um Perceptron) só conseguem aprender fronteiras lineares. Redes profundas se destacam quando os dados não são linearmente separáveis. Este exercício contrasta dois datasets de mesma dimensão para deixar essa diferença explícita.
A — Dataset I: gaussianas deslocadas
Gere 500 amostras para a Classe A e 500 para a Classe B, usando uma distribuição normal multivariada com os parâmetros abaixo.
-
Classe A:
Vetor médio:
\[\mu_A = [0, 0, 0, 0, 0]\]Matriz de covariância:
\[ \Sigma_A = \begin{pmatrix} 1.0 & 0.8 & 0.1 & 0.0 & 0.0 \\ 0.8 & 1.0 & 0.3 & 0.0 & 0.0 \\ 0.1 & 0.3 & 1.0 & 0.5 & 0.0 \\ 0.0 & 0.0 & 0.5 & 1.0 & 0.2 \\ 0.0 & 0.0 & 0.0 & 0.2 & 1.0 \end{pmatrix} \] -
Classe B:
Vetor médio:
\[\mu_B = [1.5, 1.5, 1.5, 1.5, 1.5]\]Matriz de covariância:
\[ \Sigma_B = \begin{pmatrix} 1.5 & -0.7 & 0.2 & 0.0 & 0.0 \\ -0.7 & 1.5 & 0.4 & 0.0 & 0.0 \\ 0.2 & 0.4 & 1.5 & 0.6 & 0.0 \\ 0.0 & 0.0 & 0.6 & 1.5 & 0.3 \\ 0.0 & 0.0 & 0.0 & 0.3 & 1.5 \end{pmatrix} \]
Note que as duas classes têm espalhamentos diferentes: \(\Sigma_B\) tem variâncias maiores e uma correlação negativa entre as duas primeiras features, enquanto \(\Sigma_A\) tem correlação positiva.
B — Dataset II: cascas concêntricas
Gere um segundo dataset, também com 500 amostras por classe e também em 5 dimensões, mas com estrutura radial:
- Sorteie direções uniformemente na esfera unitária de \(\mathbb{R}^5\) — sorteie \(v \sim \mathcal{N}(0, I_5)\) e normalize, \(u = v / \lVert v \rVert\);
- Classe C (núcleo): raio \(\rho \sim \mathcal{N}(2.0,\ 0.4)\);
- Classe D (casca): raio \(\rho \sim \mathcal{N}(5.0,\ 0.4)\);
- Cada ponto é \(x = \rho \cdot u\).
C — Visualize e compare
Você não pode plotar diretamente um gráfico 5D, então reduza a dimensionalidade.
- Produza a Figura 4: aplique PCA para projetar cada dataset em 2 dimensões e plote os dois scatter plots lado a lado, coloridos por classe;
- Reporte a variância explicada pelos dois primeiros componentes em cada caso. Em qual dos datasets a projeção 2D preserva melhor a informação relevante para a classificação?
- Para cada dataset, calcule em 5D e reporte:
- a distância entre os centros das duas classes, \(\lVert \mu_1 - \mu_2 \rVert\);
- a Figura 5: histograma do raio \(\lVert x \rVert\) de cada ponto, com as duas classes sobrepostas no mesmo eixo.
D — Análise
- No Dataset II, a distância entre os centros é próxima de zero, mas os histogramas de raio ficam bem separados. O que essa combinação diz sobre a possibilidade de separar as classes com um hiperplano?
- Explique por que a estrutura do Dataset II não pode ser resolvida por uma fronteira linear, por mais dados que se colete.
- A PCA é uma transformação linear. Discuta: uma projeção 2D em que as classes parecem misturadas prova que elas são inseparáveis no espaço original? Justifique com os seus próprios resultados, e escreva uma função simples das entradas que separe o Dataset II (dica: olhe para \(\lVert x \rVert^2 = \sum_i x_i^2\)).
Exercício 3
Preparando Dados do Mundo Real para uma Rede Neural
Este exercício usa um dataset real do Kaggle. Sua tarefa é realizar o pré-processamento necessário para torná-lo adequado para uma rede neural que usa a função de ativação tangente hiperbólica (tanh) em suas camadas ocultas.
A — Conheça os dados
- Baixe o dataset Spaceship Titanic (use o arquivo
train.csv, o único com rótulos). - Descreva o objetivo do dataset: o que a coluna
Transportedrepresenta? Qual é o balanceamento entre as duas classes? - Liste as features separando numéricas (ex:
Age,RoomService) de categóricas (ex:HomePlanet,Destination). - Monte uma tabela de valores faltantes por coluna, em contagem absoluta e em percentual.
- Para as colunas de gasto (
RoomService,FoodCourt,ShoppingMall,Spa,VRDeck), reporte média, mediana e máximo. Compare média e mediana: o que essa diferença indica sobre o espalhamento e a assimetria dessas distribuições?
B — Separe antes de transformar
Vazamento de dados
Toda estatística usada na transformação — média, desvio, mediana, categorias vistas — deve ser calculada apenas no conjunto de treino. Calcular no dataset inteiro e depois separar é vazamento de dados (data leakage), e o desempenho reportado deixa de ser confiável.
- Separe treino e teste em 80/20, de forma estratificada pelo alvo, com semente fixa;
- Explique, em duas ou três frases, por que essa separação vem antes da imputação e do escalonamento.
C — Pré-processe
A ativação tanh produz saídas no intervalo \([-1, 1]\), então as entradas devem estar em uma escala compatível.
- Dados faltantes: defina e implemente uma estratégia por tipo de coluna (numérica × categórica) e justifique cada escolha. Ajuste o imputador no treino e aplique no teste;
- Features categóricas: converta
HomePlanet,CryoSleep,DestinationeVIPpara formato numérico (one-hot é uma boa escolha). Explique como o seu código trata uma categoria que aparece no teste mas não no treino; - Engenharia de features: crie a feature
TotalSpend, a soma das cinco colunas de gasto (descarteCabin,NameePassengerId); - Cauda pesada: aplique \(\log(1 + x)\) às colunas de gasto e mostre o histograma de uma delas antes e depois. Por que essa transformação ajuda uma rede com
tanh? - Escalonamento: escale as colunas numéricas com Padronização (média 0, desvio 1) ou Normalização para \([-1, 1]\). Implemente uma das duas, explique a escolha e reporte os valores mínimo e máximo resultantes.
D — Verifique e visualize
- Figura 6: histograma de uma feature de cauda pesada (
FoodCourt, por exemplo) antes e depois do pré-processamento; - Checagens finais, reportadas explicitamente: não há
NaNremanescente; o formato final da matriz de features (shape); o intervalo de valores está compatível comtanh; - Em um parágrafo: quais das suas decisões de pré-processamento você considera que mais afetariam o treinamento da rede, e por quê?
Resumo dos resultados
Encerre o relatório com esta tabela preenchida. Ela não substitui nenhuma análise — é o índice dos números que você já calculou, no mesmo lugar, para que a correção confira cada valor sem procurar.
| # | Item | Seu valor |
|---|---|---|
| 1 | Taxa de mistura em \(s = 0.5\) | |
| 2 | Taxa de mistura em \(s = 1.0\) | |
| 3 | Taxa de mistura em \(s = 2.0\) | |
| 4 | Taxa de mistura em \(s = 4.0\) | |
| 5 | Menor \(r_{ij}\) em \(s = 1.0\), e qual é o par | |
| 6 | Distância entre os centros — Dataset I | |
| 7 | Distância entre os centros — Dataset II | |
| 8 | Variância explicada PC1 + PC2 — Dataset I | |
| 9 | Variância explicada PC1 + PC2 — Dataset II | |
| 10 | Proporção da classe positiva em Transported | |
| 11 | Média e mediana de FoodCourt no treino, antes de transformar | |
| 12 | shape final da matriz de features de treino | |
| 13 | Mínimo e máximo do treino e do teste após o escalonamento |
Critérios de Avaliação
O entregável desta atividade consiste em um relatório que inclui:
- Uma breve descrição de sua abordagem a cada exercício.
- O código usado para gerar os datasets, pré-processar os dados e criar as visualizações, com comentários explicando cada etapa.
- Os plots e visualizações solicitados em cada exercício.
- Sua análise e respostas às perguntas colocadas em cada exercício.
Notas Importantes:
-
A entrega é um site no GitHub Pages apoiado em um repositório público — veja Formato de Entrega para a estrutura obrigatória, o front matter e o checklist;
-
Há uma política estrita contra plágio. Qualquer forma de plágio resultará em nota zero para a atividade;
-
O prazo para cada atividade não é estendido — NENHUMA EXCEÇÃO será feita para entregas atrasadas.
-
Colaboração com IA é permitida, mas cada aluno DEVE ENTENDER e ser capaz de explicar todas as partes do código e análise enviados. Qualquer uso de ferramentas de IA deve ser citado adequadamente. PROVAS ORAIS podem ser realizadas.
Critérios de Nota:
Cada linha vale a pontuação indicada, atribuída de forma integral, parcial (metade) ou zero: integral quando o item está completo e correto; parcial quando está implementado mas sem a análise pedida, ou com a análise sem o resultado numérico que a sustenta; zero quando ausente ou incorreto.
Exercício 1 — Nuvens de pontos (3 pontos):
| Pontos | Critério | O que caracteriza pontuação integral |
|---|---|---|
| 0,5 | Geração das 4 nuvens (A) | Parâmetros corretos, 100 amostras por classe, semente fixa, Figura 1 legível com os centros marcados. |
| 1,5 | Estudo do espalhamento (B) | Os 4 datasets gerados (as mesmas 4 classes, 4 escalas), Figura 2 com eixos compartilhados, tabela de \(r_{ij}\) em \(s = 1\), as 4 taxas de mistura e a Figura 3. |
| 1,0 | Análise (C) | Identifica o fator de escala em que a separabilidade linear se perde, conecta esse ponto a \(r_{ij}\), e o esboço das fronteiras é coerente com os dados plotados. |
Exercício 2 — Não-linearidade em 5D (3 pontos):
| Pontos | Critério | O que caracteriza pontuação integral |
|---|---|---|
| 0,5 | Dataset I (A) | Gaussianas multivariadas geradas com as médias e covariâncias especificadas. |
| 0,5 | Dataset II (B) | Cascas concêntricas corretas, com as direções normalizadas na esfera unitária. |
| 0,5 | Projeção PCA (C) | PCA aplicada aos dois datasets, scatter plots comparáveis e variância explicada reportada. |
| 0,5 | Medidas geométricas (C) | Distância entre os centros e histogramas de raio por classe, calculados em 5D nos dois datasets. |
| 1,0 | Análise (D) | Usa centros coincidentes × raios separados para concluir corretamente sobre o hiperplano, responde que uma projeção linear ruim não prova inseparabilidade, e propõe uma função das entradas que separa o Dataset II. |
Exercício 3 — Dados reais (4 pontos):
| Pontos | Critério | O que caracteriza pontuação integral |
|---|---|---|
| 0,75 | Descrição dos dados (A) | Objetivo, balanceamento do alvo, tipos de feature, tabela de faltantes e média/mediana/máximo dos gastos, com a leitura de média × mediana. |
| 0,75 | Separação sem vazamento (B) | Split estratificado com semente fixa antes de qualquer estatística, com justificativa correta. |
| 1,5 | Pré-processamento (C) | Imputação, codificação, TotalSpend, \(\log(1+x)\) e escalonamento — todos ajustados no treino e aplicados no teste, cada escolha justificada. |
| 0,5 | Visualização (D) | Figura 6 antes/depois evidenciando o efeito da transformação, com eixos rotulados. |
| 0,5 | Verificação final e reflexão (D) | Ausência de NaN, shape e intervalo reportados explicitamente, mais o parágrafo de reflexão. |