Relatório Técnico Executivo: Engenharia de Recursos, Pré-processamento e Arquitetura de Dados com Python 3

A engenharia de recursos (feature engineering) e o pré-processamento de dados constituem a espinha dorsal de qualquer sistema preditivo de alta performance. Em aprendizado de máquina, a qualidade, a representação estrutural e a integridade estatística dos dados de entrada determinam o teto de desempenho que um algoritmo pode atingir. Como estabelecido na obra de Oswald Campesato sobre engenharia de recursos com Python 3, este relatório apresenta uma síntese analítica e exaustiva dos métodos, pipelines e algoritmos de pré-processamento, seleção de atributos, tratamento de anomalias e redução de dimensionalidade.


1. Fundamentos de Dados e Análise Exploratória (EDA)

A Análise Exploratória de Dados (Exploratory Data Analysis - EDA) é o estágio investigativo inicial que visa resumir as características centrais de um conjunto de dados por meio de métodos quantitativos e representações gráficas. Conforme documentado nos fundamentos da ciência de dados, a EDA busca identificar padrões latentes, detectar anomalias ou observações discrepantes (outliers) e testar premissas estatísticas fundamentais sobre a distribuição subjacente das variáveis.

Os conjuntos de dados organizam-se tipicamente em estruturas matriciais compostas por observações (linhas ou data points) e atributos (colunas ou features). As fontes originais variam desde arquivos relacionais e não relacionais (CSV, TSV, planilhas Excel, tabelas RDBMS e documentos NoSQL) até retornos de APIs e streamings de serviços web.

Classificação Tipológica dos Dados: O Escopo NOIR

Para selecionar a transformação matemática apropriada na engenharia de recursos, é essencial reconhecer a taxonomia e o nível de mensuração das variáveis. A classificação estatística clássica é resumida pelo acrônimo NOIR (Nominal, Ordinal, Interval, Ratio):

  • Dados Bino-Booleano: Variáveis lógicas que assumem exatamente dois estados distintos, como 0 e 1, Sim e Não, ou verdadeiro e falso.
  • Dados Nominais: Rótulos categóricos sem ordem, hierarquia ou relação quantitativa entre si. Exemplos incluem cores ({"Vermelho", "Verde", "Azul"}), gêneros ou nomes de cidades. Operações matemáticas como média ou ordenação não possuem significado biunívoco nesses dados.
  • Dados Ordinais: Variáveis categóricas que possuem uma ordenação intrínseca ou hierarquia explícita, embora a distância absoluta entre os níveis não seja necessariamente uniforme. Exemplos incluem níveis de escolaridade ou cargos funcionais ({"Interno", "Júnior", "Pleno", "Sênior", "Gerente"}).
  • Dados Intervalares (Interval): Dados numéricos ordenados organizados em intervalos constantes, nos quais a diferença entre valores é mensurável, mas não existe um ponto zero absoluto (o zero é arbitrário). Exemplos incluem temperatura em graus Celsius ou Fahrenheit e anos do calendário. Como o zero não indica ausência da grandeza, operações de multiplicação ou razão não são aplicáveis.
  • Dados de Razão (Ratio): Dados numéricos que possuem todas as propriedades dos dados intervalares acrescidos de um zero absoluto real (que indica ausência completa da quantidade medida). Exemplos incluem massa, altura, volume, pressão barométrica e valores monetários. Nesses dados, é correto afirmar que 10 kg representa o dobro de 5 kg.

A tabela a seguir contrasta as características operacionais e matemáticas da escala NOIR:

Escala / Tipo Ordenação Intrínseca? Zero Absoluto? Operações Permitidas Exemplo Típico
Nominal Não Não Igualdade (\(=\) / \(\neq\)), Frequência / Moda Cor dos olhos, Estado civil
Ordinal Sim Não Comparação (\(>\), \(<\) / \(\leq\), \(\geq\)), Mediana Nível de satisfação, Classe social
Intervalar Sim Não Adição e Subtração (\(+\), \(-\)), Média Temperatura (\(^\circ\text{C}\)), Ano calendário
Razão Sim Sim Multiplicação e Divisão (\(\times\), \(\div\)), Média Geométrica Salário, Peso, Altura

Além do escopo NOIR, os dados numéricos subdividem-se em discretos (valores finitos ou enumeráveis resultantes de contagens) e contínuos (valores numéricos de ponto flutuante em intervalos contínuos decorrentes de medições).

Na prática de Machine Learning, variáveis numéricas discretas com uma cardinalidade extremamente alta (como preços de ações expressos em centavos) são tratadas algoritmicamente como variáveis contínuas.

Análise Exploratória Programática em Python

A inspeção estrutural de um dataset exige a verificação de dimensões, contagem de valores não nulos, tipos de dados alocados em memória e métricas descritivas centrais (média, desvio padrão, quartis).

import numpy as np
import pandas as pd

# Carregamento e inspeção estrutural do dataset
df = pd.read_csv('titanic.csv')

# Exibição de dimensões e tipos de dados
print(f"Dimensões do Dataset: {df.shape[0]} linhas x {df.shape[1]} colunas\n")
print("=== Informações dos Tipos de Dados e Nulos ===")
print(df.info())

# Estatísticas descritivas das colunas numéricas
print("\n=== Resumo Estatístico Descritivo ===")
print(df.describe())

# Verificação de dados ausentes por feature
print("\n=== Contagem de Valores Ausentes ===")
null_counts = df.isnull().sum()
print(null_counts[null_counts > 0])

2. Pré-processamento, Inconsistências e Integridade do Pipeline

O pré-processamento limpa e prepara os dados brutos para consumo pelos modelos. A presença de ruídos, colunas redundantes ou dados formatados de forma inconsistente degrada a capacidade dos estimadores.

Eliminação de Recursos Dependentes e Inconsistências

  • Colunas Dependentes: Atributos que podem ser derivados diretamente de uma combinação linear ou multiplicativa de outras colunas devem ser removidos para evitar redundância pura. Por exemplo, em um dataset imobiliário contendo largura e comprimento, a coluna area é uma dependência direta (\(\text{área} = \text{largura} \times \text{comprimento}\)).
  • Inconsistências Categóricas e de Texto: Erros de digitação, diferenças de caixa (case sensitivity) e espaços em branco (whitespaces) criam categorias duplicadas indevidas. Mapeamentos explícitos via dicionários no Pandas unificam essas representações (por exemplo, consolidando 'M', 'male', 'Male' em um único rótulo).
  • Internacionalização (i18n) e Localização (L10n): Tratamento de variações regionais como formatos de moeda (troca do separador decimal de vírgula para ponto) e padronização de datas para o formato ISO 8601 (YYYY-MM-DD).

O Risco Crítico do Data Leakage (Vazamento de Dados)

O Data Leakage ocorre quando informações do conjunto de teste ou de fontes externas ao conjunto de treinamento são acidentalmente introduzidas durante o processo de construção e ajuste do modelo. Como alertado na literatura técnica, o vazamento gera métricas de desempenho artificialmente otimistas durante o desenvolvimento, mas o modelo falha drasticamente ao ser implantado em produção.

As principais causas de Data Leakage e as estratégias de prevenção incluem:

  1. Escalonamento ou Imputação Global: Calcular a média, mediana ou desvio padrão de todo o dataset antes da divisão entre treino e teste faz com que o modelo “conheça” a distribuição futura dos dados de teste. Regra de Ouro: A divisão (split) deve ser feita estritamente antes de qualquer normalização, padronização ou imputação.
  2. Pré-processamento Fora das Dobras de Validação Cruzada: Realizar engenharia de recursos ou seleção de variáveis no dataset completo antes da validação cruzada (k-fold cross-validation). A preparação deve ser executada individualmente em cada dobra de treino.
  3. Vazamento Temporal em Séries Temporais: Utilizar dados futuros para prever eventos passados. Em dados temporais, as divisões devem respeitar a ordem cronológica estrita.
  4. Privacidade Diferencial: Modelos treinados com dados altamente sensíveis podem vazar dados confidenciais através de predições. A privacidade diferencial e a agregação limitam a influência de observações individuais sobre os parâmetros ajustados do modelo.

Data Drift (Deriva de Dados)

O Data Drift (também denominado covariate shift ou feature drift) refere-se à mudança no padrão de distribuição estatística das variáveis de entrada ao longo do tempo após a implantação do modelo em produção. Diferente de um outlier isolado, o Data Drift representa uma alteração estrutural no comportamento dos dados (como mudanças no comportamento de consumo ou inflação), o que reduz a precisão preditiva do modelo e exige o seu monitoramento e retreinamento periódico com novos dados.


3. Dependências de Recursos, Binning e Escalonamento

Dependências entre Atributos: Colinearidade e Multicolinearidade

A presença de dependências lineares entre as variáveis preditoras compromete a estabilidade e a interpretabilidade de modelos de regressão e modelos lineares:

  • Homocedasticidade: Premissa estatística de que a variância dos resíduos (erros de predição) permanece constante ao longo de todos os níveis da variável preditora.
  • Heterocedasticidade: Ocorre quando a variância dos erros não é constante, expandindo-se ou contraindo-se em formato de leque (funnel shape). A heterocedasticidade invalida os testes de significância estatística da regressão por Mínimos Quadrados Ordinários (OLS).
  • Colinearidade e Multicolinearidade: Situação em que duas (colinearidade) ou mais (multicolinearidade) variáveis preditoras estão fortemente correlacionadas entre si. Isso infla a variância dos coeficientes da regressão, tornando-os instáveis.
  • Fator de Inflação da Variância (VIF - Variance Inflation Factor): Métrica utilizada para quantificar a intensidade da multicolinearidade. Um valor de \(\text{VIF} = 1\) indica ausência de colinearidade; valores entre 5 e 10 indicam colinearidade moderada; e valores superiores a 10 sinalizam multicolinearidade severa que exige a remoção ou combinação das variáveis envolvidas.

\[\text{VIF}_i = \frac{1}{1 - R_i^2}\]

Onde \(R_i^2\) é o coeficiente de determinação obtido ao aplicar a regressão da variável \(X_i\) contra todas as outras variáveis preditoras.

Agrupamento Discreto (Binning) de Dados Contínuos

O binning (ou discretização) transforma variáveis numéricas contínuas em intervalos discretos (bins). Embora reduza o ruído em dados contínuos, o binning inadequado pode introduzir erros de classificação e perda de informação.

Regras estatísticas programáticas para determinar o número ideal de bins (\(k\)) com base em \(n\) observações:

  1. Regra de Sturges (indicada para distribuições Gaussianas): \[k = 1 + 3.322 \times \log_{10}(n)\]

  2. Fórmula de Doane (ajustada para distribuições assimétricas incorporando a curtose): \[k = 1 + \log_2(n) + \log_2\left(1 + \frac{|\text{curtose}|}{\sigma_k}\right)\]

  3. Escolha de Freedman-Diaconis (baseada no Intervalo Interquartil - IQR, resistente a outliers): \[\text{Largura do Bin} = 2 \times \frac{\text{IQR}(x)}{\sqrt[3]{n}}\]

# Exemplo de Binning com KBinsDiscretizer do Scikit-Learn
from sklearn.preprocessing import KBinsDiscretizer

# Instancia o discretizador baseado em quantis
discretizer = KBinsDiscretizer(n_bins=4, encode='ordinal', strategy='quantile')
idade_binned = discretizer.fit_transform(df[['age']].dropna())

Escalonamento de Recursos Numéricos: Normalização vs. Padronização

Algoritmos baseados em métricas de distância (como kNN, k-Means, SVM) ou otimização por gradiente (Regressão Logística, Redes Neurais) exigem que as variáveis numéricas estejam na mesma escala. Algoritmos baseados em árvores de decisão (Decision Trees, Random Forest, XGBoost) são invariantes à escala.

1. Normalização Min-Max (MinMaxScaler)

Reajusta os valores numéricos para um intervalo fixo, tipicamente \([0, 1]\). É indicada para distribuições que não seguem uma curva Gaussiana e quando os limites do domínio são conhecidos.

\[x_{\text{norm}} = \frac{x - x_{\min}}{x_{\max} - x_{\min}}\]

Para reescalar para um intervalo genérico \([a, b]\):

\[x_{[a,b]} = a + \frac{(x - x_{\min})(b - a)}{x_{\max} - x_{\min}}\]

2. Padronização (StandardScaler)

Modifica os dados para que tenham média 0 (\(\mu = 0\)) e desvio padrão 1 (\(\sigma = 1\)), aproximando-os de uma distribuição normal padrão. Não limita os dados a um intervalo fixo e é menos sensível a outliers extremos do que o MinMaxScaler.

\[z = \frac{x - \mu}{\sigma}\]

3. Padronização Robusta (RobustScaler)

Utiliza a mediana (\(Q_2\)) e o Intervalo Interquartil (\(\text{IQR} = Q_3 - Q_1\)) no lugar da média e do desvio padrão. É a escolha ideal para dados que contêm muitos outliers.

\[x_{\text{robust}} = \frac{x - \text{Mediana}}{Q_3 - Q_1}\]


4. Detecção e Tratamento de Outliers e Anomalias

Um outlier é uma observação numérica anormal que se afasta substancialmente do padrão geral dos outros pontos de dados. Outliers resultam de variabilidade natural, erros de medição ou falhas na coleta de dados. Uma anomalia é um outlier que possui um significado crítico e potencial nocivo (como fraude bancária ou falha de sistema).

Métodos Estatísticos para Detecção de Outliers

1. Regra do Escore-Z (Z-Score)

Avalia a distância de um ponto em relação à média em termos de desvios padrões. Pontos com \(|Z| > 3.0\) (ou \(|Z| > 2.5\)) são classificados como outliers. Pressupõe que os dados seguem uma distribuição aproximadamente Gaussiana.

\[Z = \frac{x - \bar{x}}{s}\]

2. Regra do Intervalo Interquartil (IQR / Regra de Tukey)

Não assume distribuição normal. Calcula o primeiro (\(Q_1\)) e o terceiro (\(Q_3\)) quartis. O limite inferior e superior são definidos por:

\[\text{Limite Inferior} = Q_1 - 1.5 \times \text{IQR}\] \[\text{Limite Superior} = Q_3 + 1.5 \times \text{IQR}\]

Onde \(\text{IQR} = Q_3 - Q_1\).

3. Desvio Absoluto da Mediana (MAD - Median Absolute Deviation)

Substitui a média pela mediana, sendo resistente a valores extremos.

\[\text{MAD} = \text{Mediana}(|x_i - \text{Mediana}(x)|)\]

Técnicas de Tratamento: Trimming vs. Winsorizing

  • Trimming (Corte): Elimina completamente do dataset as linhas contendo valores situados nos percentis extremos (por exemplo, abaixo do percentil 5 ou acima do percentil 95).
  • Winsorizing (Winsorização): Substitui os valores extremos das caudas pelos limites do percentil estabelecido. Pontos acima do percentil 95 recebem exatamente o valor do percentil 95, preservando o tamanho do dataset sem descartar linhas.

Algoritmos Multidimensionais e Baseados em Densidade

Para datasets de alta dimensionalidade, métodos univariados falham. Utilizam-se algoritmos avançados:

from sklearn.covariance import EllipticEnvelope
from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor

# 1. Isolation Forest (Baseado em Árvores de Isolamento)
iso_forest = IsolationForest(contamination=0.05, random_state=42)
outliers_iso = iso_forest.fit_predict(X)  # Retorna -1 para outliers e 1 para inliers

# 2. Local Outlier Factor (LOF - Densidade Local baseada em kNN)
lof = LocalOutlierFactor(n_neighbors=20, contamination=0.05)
outliers_lof = lof.fit_predict(X)

# 3. Elliptic Envelope (Envelope Elíptico via Minimum Covariance Determinant - MCD)
elliptic = EllipticEnvelope(contamination=0.05, random_state=42)
outliers_elliptic = elliptic.fit(X).predict(X)

Tabela comparativa dos métodos de detecção de anomalias:

Método / Algoritmo Pressupõe Distribuição Normal? Sensibilidade a Outliers Extremos Tipo de Aplicação
Z-Score Sim (Gaussiana) Alta (Média distorcida por outliers) Univariado
IQR (Tukey) Não Baixa (Robusto via Quartis) Univariado
MAD Não Muito Baixa (Robusto via Mediana) Univariado
Isolation Forest Não Baixa Multidimensional / Grandes Datasets
LOF (Local Outlier Factor) Não Baixa Multidimensional / Anomalias Locais
Elliptic Envelope Sim (Gaussiana Multivariada) Moderada Multidimensional com MCD

5. Seleção de Recursos (Feature Selection) e Reamostragem

A Seleção de Recursos consiste em identificar e reter o subconjunto de variáveis mais relevantes para a previsão da variável alvo. Benefícios: reduz o overfitting, melhora a acurácia do modelo e diminui o tempo e custo computacional de treinamento.

Os métodos de seleção dividem-se em três grandes categorias:

                          ┌──────────────────────────┐
                          │ Métodos de Seleção de    │
                          │        Recursos          │
                          └────────────┬─────────────┘
                                       │
        ┌──────────────────────────────┼──────────────────────────────┐
        │                              │                              │
┌───────┴───────┐              ┌───────┴───────┐              ┌───────┴───────┐
│ Filter        │              │ Wrapper       │              │ Embedded      │
│ (Estatísticos)│              │ (Algorítmicos)│              │ (Integrados)  │
└───────┬───────┘              └───────┬───────┘              └───────┬───────┘
        │                              │                              │
        ├── VarianceThreshold          ├── RFE / RFECV                ├── L1 (Lasso)
        ├── Chi-Squared (χ²)           ├── SFS / SBS                  ├── ElasticNet
        ├── ANOVA F-test               └── Boruta                     ├── Feature Importance
        └── Mutual Information                                        └── LightGBM

1. Métodos do Tipo Filtro (Filter Methods)

Avaliam a relevância das variáveis com base em propriedades estatísticas independentemente do algoritmo de aprendizado utilizado. São computacionalmente rápidos:

  • Threshold de Variância (VarianceThreshold): Descarta variáveis cuja variância é inferior a um limite fixado.
  • Teste Qui-Quadrado (\(\chi^2\)): Avalia a dependência entre variáveis categóricas de entrada e uma variável alvo categórica.
  • Teste ANOVA F (f_classif / f_regression): Mede a dependência linear entre variáveis numéricas de entrada e um alvo categórico.
  • Informação Mútua (mutual_info_classif): Mede a quantidade de informação compartilhada entre variáveis, capturando relações não lineares.

2. Métodos do Tipo Wrapper (Wrapper Methods)

Utilizam um algoritmo de Machine Learning como um “envolto” para avaliar iterativamente o desempenho de diferentes combinações de recursos. Exigem alto custo computacional:

  • Eliminação Recursiva de Recursos (RFE / RFECV): Remove iterativamente os recursos menos importantes com base nos coeficientes do modelo até atingir o número desejado, utilizando validação cruzada no RFECV.
  • Seleção Sequencial de Recursos (SFS / SBS): Adiciona (Forward Selection) ou remove (Backward Elimination) atributos incrementalmente com base no ganho de desempenho.
  • Boruta: Algoritmo que compara a importância das variáveis originais contra variáveis aleatórias duplicadas (shadow features).

3. Métodos Embutidos (Embedded Methods)

Realizam a seleção de atributos como parte integrante do processo de treinamento do algoritmo:

  • Regularização L1 (Lasso): Adiciona uma penalidade proporcional aos coeficientes absolutos dos atributos (\(\lambda \sum |\beta_j|\)), reduzindo a zero os coeficientes de atributos irrelevantes.
  • Importância via Árvores de Decisão (Random Forest Feature Importance): Avalia a redução média na impureza de Gini ou entropia trazida por cada variável nos nós das árvores.
from sklearn.feature_selection import RFE, SelectKBest, VarianceThreshold, chi2
from sklearn.linear_model import LogisticRegression

# Exemplo de Filter: Seleciona as 2 melhores variáveis via Chi-Squared
X_chi2 = SelectKBest(score_func=chi2, k=2).fit_transform(X_cat, y)

# Exemplo de Wrapper: Eliminação Recursiva de Recursos (RFE)
estimator = LogisticRegression(max_iter=500)
selector_rfe = RFE(estimator=estimator, n_features_to_select=5, step=1)
X_rfe = selector_rfe.fit_transform(X_num, y)

Tratamento de Datasets Desbalanceados: Reamostragem e SMOTE

Datasets desbalanceados ocorrem quando a classe de interesse (minorítária) possui significativamente menos registros do que a classe majoritária. Treinar estimadores diretamente nesses dados faz com que o modelo seja viesado em favor da classe dominante.

Técnicas de reamostragem:

  • Undersampling Aleatório: Remove observações da classe majoritária. Pode causar perda de informações críticas.
  • Oversampling Aleatório: Duplica registros da classe minoritária. Pode levar ao overfitting.
  • SMOTE (Synthetic Minority Oversampling Technique): Sintetiza novas instâncias inéditas da classe minoritária por meio de interpolação linear no espaço de atributos utilizando os \(k\)-vizinhos mais próximos (\(k\text{NN}\)).

Algoritmo do SMOTE:

  1. Para cada ponto \(a\) da classe minoritária, calcula seus \(k\)-vizinhos mais próximos (da mesma classe).
  2. Seleciona aleatoriamente um vizinho \(b\).
  3. Cria uma nova amostra sintética \(c\) ao longo do segmento de reta conectando \(a\) e \(b\):

\[c = a + \text{rand}(0,1) \times (b - a)\]

from imblearn.over_sampling import SMOTE
from imblearn.pipeline import Pipeline as ImbPipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

# Separação prévia para evitar Data Leakage
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y
)

# Pipeline do imbalanced-learn aplicando SMOTE apenas no treino
pipeline_smote = ImbPipeline([
    ('smote', SMOTE(random_state=42)),
    ('classifier', RandomForestClassifier(random_state=42)),
])

# Ajusta o pipeline (SMOTE é aplicado estritamente na dobra de treino)
pipeline_smote.fit(X_train, y_train)

Transformações Matemáticas para Normalidade e Linearidade

Quando as variáveis numéricas possuem distribuições assimétricas (skewed), a aplicação de transformações matemáticas aproxima a distribuição de uma curva normal Gaussiana e estabiliza a variância:

  • Transformação Logarítmica: \(y = \log(x + 1)\) (comprime valores altos e reduz assimetria positiva).
  • Transformação de Raiz Cúbica: \(y = \sqrt[3]{x}\) (aplicável a valores negativos e nulos).
  • Transformação de Raiz Quadrada: \(y = \sqrt{x}\) (suaviza dados de contagem).
  • Transformação Hiperbólica: \(y = \tanh(x)\) (limita os dados ao intervalo \([-1, 1]\)).

6. Transformação de Atributos, Codificação e Hashing

Codificação Categórica: One-Hot Encoding e Mapeamento

Modelos de aprendizado exigem entradas numéricas. A conversão de variáveis categóricas utiliza estratégias distintas dependendo da escala:

  • Mapeamento Numérico Direto: Indicado para dados ordinais onde a ordem matemática deve ser preservada ({'Pequeno': 1, 'Médio': 2, 'Grande': 3}).
  • One-Hot Encoding: Converte dados nominais sem ordem em vetores binários (\(0\) e \(1\)). Se existirem \(n\) categorias, gera-se uma matriz de identidade \(n \times n\).

Atenção à Alta Cardinalidade: Se uma variável categórica tiver muitas categorias distintas, o One-Hot Encoding gerará uma matriz extremamente esparsa (preenchida predominantemente por zeros), aumentando o risco de overfitting e o consumo de memória. Para contornar esse problema, utiliza-se a junção de categorias infrequentes em um rótulo 'Outros' ou aplica-se o Feature Hashing.

# Exemplo de One-Hot Encoding com redução de multicolinearidade (drop='first')
from sklearn.preprocessing import OneHotEncoder

ohe = OneHotEncoder(drop='first', sparse_output=False, handle_unknown='ignore')
encoded_cats = ohe.fit_transform(df[['departamento', 'genero']])

Hashing de Atributos (Feature Hashing / Hashing Trick)

O Feature Hashing aplica uma função de hash determinística para mapear categorias de texto ou nomes de atributos para índices inteiros em um vetor de tamanho fixo retido em memória (n_features).

  • Vantagens: Eficiente em termos de memória e velocidade computacional; ideal para dados em streaming e conjuntos categóricos de altíssima cardinalidade sem necessidade de manter dicionários na memória.
  • Desvantagens: Permite colisões (duas categorias distintas mapeadas para o mesmo índice) e perde a interpretabilidade direta dos atributos.
from sklearn.feature_extraction import FeatureHasher

# Instancia o FeatureHasher com tamanho de vetor fixo
hasher = FeatureHasher(n_features=8, input_type='dict')
data_dicts = [{'dog': 1, 'cat': 2}, {'dog': 2, 'run': 5}]
hashed_features = hasher.fit_transform(data_dicts).toarray()

Necessidade de Escalonamento por Algoritmo

Tabela de referência dos algoritmos em relação à necessidade de escalonamento prévio de atributos:

Algoritmo Exige Escalonamento Numérico? Razão Técnica
kNN (k-Nearest Neighbors) Sim Baseado na Distância Euclidiana entre pontos
Regressão Logística / Linear Sim Otimização por Gradiente Descendente e Penalidades L1/L2
Redes Neurais (ANN) Sim Sensibilidade das Funções de Ativação e Gradientes
SVM (Support Vector Machines) Sim Cálculo do Hiperplano de Margem Máxima
PCA (Principal Component Analysis) Sim Algoritmo baseado na Variância do espaço de atributos
Árvores de Decisão (Decision Trees) Não Divisões invariantes à escala em nós com limiares
Random Forest / Gradient Boosting Não Ensembles de árvores invariantes à escala
Naive Bayes Não Baseado na probabilidade condicional de frequências

7. Redução de Dimensionalidade, Matrizes e Métricas de Distância

Quando o conjunto de dados possui um número excessivo de atributos (alta dimensionalidade), os pontos tornam-se esparsos no espaço vetorial, fenômeno conhecido como a Maldição da Dimensionalidade (Curse of Dimensionality). A redução de dimensionalidade projeta ou extrai componentes em um espaço de menor dimensão.

Matrizes de Covariância e Correlação

A covariância mede a direção da relação linear entre duas variáveis aleatórias \(X\) e \(Y\):

\[\text{Cov}(X, Y) = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{n}\]

A Matriz de Covariância \(C\) é uma matriz quadrada e simétrica \(n \times n\) cujos elementos da diagonal principal representam as variâncias das variáveis (\(\text{Cov}(X_i, X_i) = \text{Var}(X_i)\)) e os elementos fora da diagonal representam as covariâncias cruzadas.

Como a covariância é afetada pela escala de medição das variáveis, utiliza-se a Matriz de Correlação (que divide a covariância pelo produto dos desvios padrões), obtendo-se valores padronizados no intervalo \([-1, 1]\):

\[\text{Corr}(X, Y) = \frac{\text{Cov}(X, Y)}{\sigma_X \sigma_Y}\]

Análise de Componentes Principais (PCA)

O PCA é um algoritmo não supervisionado de redução linear de dimensionalidade. Ele identifica os eixos de maior variância nos dados e projeta o espaço vetorial original sobre esses novos eixos ortogonais, chamados de Componentes Principais.

Passos do Algoritmo PCA:

  1. Padronizar as variáveis do dataset para média \(0\) e variância \(1\).
  2. Calcular a Matriz de Covariância (ou Correlação) \(C\).
  3. Calcular os Autovalores (\(\lambda\)) e Autovetores (\(v\)) da matriz \(C\), que satisfazem a equação:

\[C v = \lambda v\]

  1. Ordenar os autovetores em ordem decrescente de autovalores. O autovetor associado ao maior autovalor representa o Primeiro Componente Principal (direção de máxima variância).
  2. Selecionar os primeiros \(k\) autovetores para formar a matriz de projeção e transformar os dados originais.
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# 1. Padronização prévia necessária para o PCA
X_scaled = StandardScaler().fit_transform(X)

# 2. Instanciação e ajuste do PCA mantendo 95% da variância explicada
pca = PCA(n_components=0.95)
X_pca = pca.fit_transform(X_scaled)

print(f"Número de componentes retidos: {pca.n_components_}")
print(f"Razão de variância explicada acumulada: {np.sum(pca.explained_variance_ratio_):.2%}")

Aprendizado de Variedades (Manifold Learning) e Métricas Não Lineares

Quando os dados possuem estruturas não lineares complexas (como o Swiss Roll), o PCA falha em capturar as relações. Utilizam-se algoritmos não lineares de Aprendizado de Variedades:

  • SVD (Singular Value Decomposition): Fatora qualquer matriz \(A_{m \times n}\) no produto \(A = U S V^T\). O Truncated SVD é amplamente aplicado no processamento de linguagem natural (LSA) e em matrizes esparsas.
  • LLE (Locally Linear Embedding): Preserva as relações lineares nos vizinhos locais de cada ponto de dados.
  • t-SNE (t-Distributed Stochastic Neighbor Embedding): Mapeia as proximidades entre pontos em alta dimensão para distribuições de probabilidade \(t\)-Student em baixa dimensão. É a técnica padrão para visualização de dados em 2D ou 3D.
  • UMAP (Uniform Manifold Approximation and Projection): Técnica não linear rápida e escalável baseada em geometria riemanniana que preserva melhor a estrutura global dos dados em comparação ao t-SNE.
  • PHATE: Algoritmo especializado para visualização de dados biológicos e sequenciais contínuos preservando trajetórias.
from sklearn.manifold import TSNE
import umap

# Projeção não linear para visualização 2D com t-SNE
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
X_tsne = tsne.fit_transform(X_scaled)

# Projeção escalável com UMAP
reducer = umap.UMAP(n_neighbors=15, min_dist=0.1, random_state=42)
X_umap = reducer.fit_transform(X_scaled)

Taxonomia das Métricas de Distância e Similaridade

A escolha da métrica de distância define como os pontos são comparados no espaço de atributos:

  1. Distância Euclidiana (Métrica L2 padrão no espaço \(n\)-dimensional): \[d(p, q) = \sqrt{\sum_{i=1}^{n} (p_i - q_i)^2}\]

  2. Distância de Manhattan / Taxicab (Métrica L1, soma das diferenças absolutas): \[d(p, q) = \sum_{i=1}^{n} |p_i - q_i|\]

  3. Distância de Mahalanobis: Mede a distância entre um ponto \(P\) e uma distribuição de probabilidade, considerando a covariância entre as variáveis.

  4. Similaridade de Cosseno: Mede o cosseno do ângulo entre dois vetores. Utilizada em PNL e espaço vetorial de palavras, sendo invariante à magnitude do vetor: \[\text{Simil}(A, B) = \frac{A \cdot B}{\|A\| \|B\|}\]

  5. Índice / Similaridade de Jaccard: Utilizado para conjuntos ou variáveis booleans. Mede a razão entre a interseção e a união dos conjuntos: \[J(A, B) = \frac{|A \cap B|}{|A \cup B|}\]

  6. Locality Sensitive Hashing (LSH): Algoritmo de redução de dimensionalidade que maximiza propositalmente as colisões de hash para agrupar pontos similares em vetores de alta dimensão em buckets de busca rápida em tempo constante.


8. Considerações Finais e Diretrizes de Implantação

A engenharia de recursos e o pré-processamento de dados constituem uma disciplina técnica que une rigor estatístico e pragmatismo algorítmico. A construção de pipelines robustos em Python exige o cumprimento estrito das seguintes diretrizes:

  1. Isolamento de Treino e Teste: Separe os conjuntos de dados antes de qualquer transformação para eliminar o risco de Data Leakage.
  2. Adequação ao Estimador: Combine transformações de escala e codificações categóricas com a sensibilidade específica do modelo selecionado (por exemplo, padronizando dados para estimadores baseados em distância e utilizando pipelines integrados com SMOTE para datasets desbalanceados).
  3. Redução Controlada: Aplique seleção de recursos e redução de dimensionalidade para mitigar a maldição da dimensionalidade, priorizando a retenção da variância explicada e a interpretabilidade do modelo em produção.