Análise de Componentes Principais (PCA)
Visão geral
Análise de Componentes Principais (Principal Component Analysis, PCA) é um método clássico linear de Redução de Dimensionalidade (dimensionality reduction). Dado um conjunto de dados com muitas características correlacionadas, a ACP encontra um novo conjunto de características — chamadas componentes principais (principal components) — que:
- são ortogonais (orthogonal) (direções não correlacionadas no espaço transformado),
- são ordenadas pela quantidade de variância (variance) que explicam nos dados,
- fornecem uma representação compacta ao manter apenas os primeiros k componentes.
Na prática, a ACP é comumente usada para:
- Visualização (projetar dados de alta dimensionalidade em 2D/3D),
- Compressão (compression) e remoção de ruído (denoising),
- Mitigar multicolinearidade (multicollinearity) antes de modelagem linear (ex.: regressão por componentes principais),
- Acelerar modelos posteriores ao reduzir o número de características.
A ACP é normalmente computada via decomposição em autovalores da covariância (covariance eigendecomposition) ou, de forma equivalente, via a decomposição em valores singulares (Singular Value Decomposition, SVD) da matriz de dados centrada.
Intuição: “direções de máxima variância”
Imagine uma nuvem de pontos em 2D:
- Se a nuvem está alongada ao longo de uma diagonal, essa direção diagonal captura a maior parte da variação.
- A ACP encontra essa direção como o primeiro componente principal.
- O segundo componente principal é a direção ortogonal que captura a variância restante, e assim por diante.
Manter apenas o primeiro componente (ou os primeiros poucos) frequentemente preserva a maior parte da estrutura, especialmente quando as características são correlacionadas e a dimensionalidade intrínseca é menor do que a contagem bruta de características.
Fundamentação matemática
Matriz de dados e centralização
Seja o conjunto de dados uma matriz (n \times d) (X), onde:
- (n) = número de amostras,
- (d) = número de características.
A ACP é definida sobre dados centrados (centered):
[ X_c = X - \mathbf{1}\mu^\top ]
onde (\mu) é o vetor de médias das características e (\mathbf{1}) é um vetor de uns de tamanho (n).
Centralizar é essencial: sem isso, o primeiro componente da ACP pode simplesmente apontar na direção da média, em vez de capturar a variância ao redor dela.
Covariância e decomposição em autovalores
A matriz de covariância empírica dos dados centrados é:
[ S = \frac{1}{n-1} X_c^\top X_c \quad (d \times d) ]
A ACP encontra autovalores (eigenvalues) e autovetores (eigenvectors):
[ S v_i = \lambda_i v_i ]
- (v_i) são os eixos principais (principal axes) (direções no espaço original de características),
- (\lambda_i) são as variâncias explicadas ao longo desses eixos.
Os autovalores são ordenados (\lambda_1 \ge \lambda_2 \ge \cdots \ge \lambda_d). O primeiro autovetor (v_1) é a direção de máxima variância; (v_2) é a próxima melhor direção ortogonal; etc.
De componentes a escores (as coordenadas transformadas)
As coordenadas de cada amostra no espaço de componentes principais são chamadas de escores (scores):
[ Z = X_c V ]
onde (V = [v_1, \dots, v_k]) ao manter (k) componentes, e (Z) é (n \times k).
Proporção de variância explicada
A fração da variância total explicada pelo (i)-ésimo componente é:
[ \text{EVR}i = \frac{\lambda_i}{\sum{j=1}^d \lambda_j} ]
A variância explicada acumulada é usada para decidir quantos componentes manter.
Visão via decomposição em valores singulares (SVD) (frequentemente usada na prática)
Em vez de fazer a decomposição em autovalores de (S), muitas implementações calculam a ACP usando Decomposição em Valores Singulares:
[ X_c = U \Sigma V^\top ]
- As colunas de (V) são os eixos principais (os mesmos que os autovetores de (S)),
- Os valores singulares (\sigma_i) se relacionam aos autovalores:
[ \lambda_i = \frac{\sigma_i^2}{n-1} ]
A decomposição em valores singulares é numericamente estável e funciona bem mesmo quando (d) é grande.
Reconstrução e “melhor aproximação de posto k”
Se você mantiver apenas os primeiros (k) componentes:
[ Z = X_c V_k ]
Você pode reconstruir uma aproximação dos dados originais:
[ \hat{X} = Z V_k^\top + \mu ]
Um resultado teórico importante (teorema de Eckart–Young–Mirsky) é que essa reconstrução de posto (k) é a melhor aproximação possível de (X) em erro de mínimos quadrados dentre todas as projeções lineares de posto (k). Isso dá à ACP uma segunda interpretação: ela não apenas preserva variância, como também minimiza o erro de reconstrução.
Fluxo de trabalho prático para ACP
1) Preparar as características
A ACP espera características numéricas e finitas.
Etapas comuns de pré-processamento:
- Lidar com valores ausentes (imputação).
- Codificar variáveis categóricas (codificação one-hot (one-hot encoding), target encoding), embora a ACP em características one-hot possa ser difícil de interpretar.
- Considerar transformações para características com caudas pesadas (log, Box-Cox), quando apropriado.
- Remover ou limitar outliers extremos (a ACP é sensível a outliers).
2) Centralização (sempre) e escalonamento (às vezes)
- Centralização: quase sempre necessária.
- Escalonamento/padronização (scaling/standardization): depende das unidades das características.
Se as características estiverem em unidades diferentes (ex.: idade em anos, renda em dólares), as características com maior escala dominarão a variância. Nesses casos, padronize:
[ x' = \frac{x - \mu}{s} ]
Isso é frequentemente chamado de padronização z (z-scoring) e faz parte de Escalonamento de Características (feature scaling) / Padronização (standardization).
Uma regra prática:
- Use ACP padronizada quando as características têm unidades diferentes ou variâncias muito distintas.
- Use ACP sem escalonamento quando as unidades originais e as magnitudes naturais de variância são significativas (ex.: pixels com a mesma escala).
3) Ajuste a ACP apenas nos dados de treino (evite vazamento)
Em pipelines preditivos, calcule médias/desvios padrão e componentes da ACP apenas no conjunto de treino. Caso contrário, você introduz vazamento de dados (data leakage) porque informações da distribuição de teste influenciam a projeção.
4) Escolha o número de componentes \(k\)
Estratégias comuns:
- Limite de variância explicada: escolha o menor (k) tal que a variância explicada acumulada ≥ 90%, 95%, 99% (dependente do domínio).
- Gráfico scree (scree plot) com “cotovelo (elbow)”: plote os autovalores; escolha (k) no ponto de retornos decrescentes.
- Validação no modelo posterior: escolha (k) que maximiza o desempenho em validação cruzada (cross-validation) na tarefa-alvo (frequentemente melhor para aprendizado supervisionado).
- Dimensão fixa para visualização: (k=2) ou (k=3).
Observação: “95% de variância explicada” é conveniente, mas não é universalmente ótimo; às vezes os 5% restantes contêm sinal preditivo importante.
5) Interpretar resultados: escores, cargas e variância
Termos-chave:
- Escores: os dados projetados (Z); cada coluna é uma coordenada do componente por amostra.
- Cargas (loadings): como as características originais contribuem para cada componente. Em muitas convenções, as cargas são as entradas de (V) (ou (V) escalado por (\sqrt{\lambda})). Verifique a definição da sua biblioteca.
Como interpretar as cargas:
- Magnitude alta (positiva ou negativa) indica contribuição forte.
- Os sinais são arbitrários: inverter o sinal de um componente não muda nada. Interprete sinais relativos dentro de um componente, não a direção absoluta.
- Componentes frequentemente representam fatores latentes (ex.: “tamanho geral”, “brilho”, “status socioeconômico”), mas o significado pode ser específico do domínio e às vezes ambíguo.
6) Transformar novos dados (e possivelmente inverter a transformação)
Uma vez ajustada, você pode:
- Projetar novas amostras no espaço da ACP (para modelagem/visualização),
- Opcionalmente aplicar a transformação inversa para aproximar as características originais (útil para compressão/remoção de ruído).
Exemplo trabalhado (Python, scikit-learn)
Abaixo está um fluxo de trabalho típico de ACP com escalonamento, inspeção de variância e interpretação de cargas.
import numpy as np
import pandas as pd
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
# Data: wine chemical measurements (features have different scales)
X, y = load_wine(return_X_y=True, as_frame=True)
X_train, X_test = train_test_split(X, test_size=0.25, random_state=0, stratify=y)
pipe = Pipeline([
("scaler", StandardScaler()),
("pca", PCA(n_components=0.95, random_state=0)) # keep enough PCs for 95% variance
])
pipe.fit(X_train)
pca = pipe.named_steps["pca"]
print("Chosen components:", pca.n_components_)
print("Explained variance ratio:", pca.explained_variance_ratio_)
print("Cumulative explained variance:", pca.explained_variance_ratio_.cumsum()[-1])
# Transform data
Z_train = pipe.transform(X_train)
Z_test = pipe.transform(X_test)
print("Transformed shape:", Z_train.shape)
Inspecionando as cargas (contribuições das características por componente):
# In sklearn, components_ rows correspond to PCs; columns correspond to original features
loadings = pd.DataFrame(
pca.components_.T,
index=X.columns,
columns=[f"PC{i+1}" for i in range(pca.n_components_)]
)
# Top contributors to the first component
print(loadings["PC1"].sort_values(key=np.abs, ascending=False).head(8))
Dicas práticas de interpretação:
- Se o PC1 tiver grandes cargas positivas em várias características de “tamanho/intensidade”, ele pode representar um fator geral de “magnitude”.
- Se o PC2 contrastar dois grupos de características (algumas positivas, outras negativas), ele pode representar um eixo de trade-off.
Aplicações comuns em IA/ML
Visualização de dados de alta dimensionalidade
Projetar em 2D/3D pode revelar clusters, tendências e outliers:
- A ACP frequentemente funciona bem quando a estrutura é aproximadamente linear.
- Para variedades não lineares (nonlinear manifolds), métodos como t-SNE ou UMAP podem separar clusters com mais clareza, mas são menos diretamente interpretáveis geometricamente e não preservam a variância global da mesma forma.
Mitigar multicolinearidade em modelos lineares
Características correlacionadas podem desestabilizar os coeficientes de modelos lineares (estimativas com alta variância). A ACP transforma características correlacionadas em componentes ortogonais, o que pode ajudar.
Uma abordagem comum é a Regressão por Componentes Principais (Principal Component Regression, PCR):
- Rodar a ACP nas características.
- Regrar o alvo nos primeiros (k) componentes usando Regressão Linear (Linear Regression).
A regressão por componentes principais pode reduzir variância e melhorar generalização quando a multicolinearidade é forte, embora ela não use o alvo para escolher componentes (diferentemente da redução de dimensionalidade supervisionada). Em muitos casos, a Regressão Ridge (Ridge Regression) (uma forma de Regularização (regularization)) é uma alternativa forte que mantém as características originais e melhora a estabilidade diretamente.
Compressão e remoção de ruído
A ACP fornece uma representação compacta:
- Armazenar apenas (k) escores de componentes por amostra em vez das (d) características originais.
- Reconstruir entradas aproximadas via transformação inversa.
Isso é útil para:
- compressão de imagens (ex.: manter os principais componentes do espaço de pixels),
- redução de ruído (descartar componentes dominados por ruído).
Uma intuição simples para remoção de ruído: se o ruído estiver espalhado por muitas direções, ele tende a aparecer em componentes de baixa variância; ao descartar esses componentes, é possível suprimir ruído.
Acelerar modelos posteriores
Reduzir a dimensão das características pode:
- diminuir o tempo de treinamento,
- reduzir o uso de memória,
- melhorar o condicionamento para alguns algoritmos.
No entanto, a ACP não garante melhorar a acurácia — especialmente se direções de baixa variância contiverem informação preditiva essencial.
Pré-processamento para clustering ou detecção de anomalias
Como a ACP pode remover redundância e reduzir ruído, ela é frequentemente usada antes de clustering (ex.: k-means) ou métodos de detecção de anomalias (anomaly detection), especialmente em cenários de alta dimensionalidade.
Variantes e técnicas relacionadas
- Branqueamento (whitening): escala componentes para variância unitária (útil para alguns algoritmos, mas pode amplificar ruído).
- PCA esparsa (Sparse PCA): incentiva cargas com muitos zeros para interpretabilidade (ao custo de ortogonalidade/otimalidade).
- PCA incremental (Incremental PCA): processa dados em lotes para grandes conjuntos de dados.
- PCA com kernel (Kernel PCA): extensão não linear usando kernels (veja PCA com Kernel).
Armadilhas e boas práticas
A ACP é sensível a escalonamento e outliers
- Sempre decida o escalonamento com base nas unidades e no objetivo de modelagem.
- Escalonamento robusto ou tratamento de outliers pode ser importante; alguns poucos outliers podem dominar os primeiros componentes.
Componentes nem sempre são “significativos”
A ACP maximiza variância, não interpretabilidade. Um componente pode misturar muitas características, especialmente quando as correlações são complexas.
Método linear: pode perder estrutura não linear
Se os dados estiverem sobre uma variedade curva, a ACP pode precisar de muitos componentes para representá-los bem. Considere métodos não lineares (ex.: UMAP) para visualização, ou aprendizado de representações não lineares quando apropriado.
Não vaze informação do teste
Ajuste escalonamento e ACP apenas nos dados de treino dentro de um pipeline. Essa é uma fonte comum de vazamento de dados sutil (Vazamento de Dados).
Cuidado: baixa variância ≠ baixa importância
Em tarefas supervisionadas, uma direção com baixa variância ainda pode ser altamente preditiva. Valide (k) usando desempenho no modelo posterior quando o objetivo for predição.
Resumo
A ACP é uma técnica fundamental de redução de dimensionalidade linear. Ela encontra direções ortogonais de máxima variância via decomposição em autovalores da covariância ou decomposição em valores singulares, viabilizando representações compactas de dados de alta dimensionalidade. Na prática, uma ACP eficaz depende de centralização cuidadosa, escalonamento bem pensado, seleção criteriosa do número de componentes (via variância explicada e/ou validação) e interpretação correta de escores e cargas. Ela continua sendo uma ferramenta amplamente usada para visualização, compressão, redução de ruído e tratamento de multicolinearidade em pipelines de ML.