Detecção de Anomalias

O que é detecção de anomalias?

Detecção de anomalias (anomaly detection) (também chamada de detecção de valores atípicos (outlier detection) ou detecção de novidade (novelty detection)) é a tarefa de identificar pontos de dados, eventos ou padrões que se desviam do comportamento esperado. As anomalias frequentemente são raras, mas nem sempre: às vezes o comportamento anômalo é sutil, gradual ou apenas anômalo em um contexto específico.

Objetivos típicos incluem:

  • Sinalizar eventos suspeitos (fraudes, intrusões, violações de políticas)
  • Detectar falhas cedo (mau funcionamento de equipamentos, degradação de serviço)
  • Melhorar a qualidade dos dados (falhas de sensores, problemas no pipeline de dados (pipeline))
  • Descobrir novos fenômenos (novo comportamento de usuários, ameaças emergentes)

Um desafio central é que as anomalias normalmente são pouco rotuladas (under-labeled): você pode ter muitos exemplos “normais”, poucas anomalias confirmadas e muitos casos ambíguos.

Tipos de anomalias

É útil distinguir anomalias por estrutura:

  • Anomalias pontuais: uma única observação é incomum (por exemplo, uma transação 100× maior que o normal).
  • Anomalias contextuais: incomuns apenas no contexto (por exemplo, alto consumo de eletricidade é normal no inverno e anômalo no verão). Isso é comum em séries temporais.
  • Anomalias coletivas: um grupo de pontos é anômalo em conjunto (por exemplo, uma sequência de tentativas de login formando um padrão de ataque), mesmo que pontos individuais pareçam normais.

E por enquadramento do problema:

  • Detecção de anomalias não supervisionada (unsupervised anomaly detection): sem rótulos; assume que a maior parte dos dados é normal e aprende a estrutura “típica”.
  • Detecção de anomalias semi-supervisionada (semi-supervised anomaly detection) (detecção de novidade): treina usando apenas dados normais (ou majoritariamente normais); detecta desvios no tempo de inferência (inference time).
  • Detecção de anomalias supervisionada (supervised anomaly detection): trata anomalias como uma classe com exemplos rotulados. Isso frequentemente é irrealista, mas pode funcionar bem quando existem rótulos (por exemplo, fraude confirmada).

Este artigo foca em abordagens não supervisionadas e semi-supervisionadas.

Por que detecção de anomalias é difícil

Vários fatores tornam o problema distinto de classificação (classification) padrão:

  • Desbalanceamento extremo de classes (extreme class imbalance): anomalias podem ser 0,01% dos eventos.
  • Não estacionariedade (non-stationarity): o “normal” muda ao longo do tempo (mudanças no produto, sazonalidade, novas coortes de usuários).
  • Verdade de referência ambígua (ambiguous ground truth): o que conta como anomalia pode ser subjetivo ou definido por políticas.
  • Adversários (adversaries): em fraude/segurança, anomalias podem se adaptar ao seu detector.
  • Assimetria de custo (cost asymmetry): falsos negativos (false negatives) podem ser caros (falha não detectada), mas falsos positivos (false positives) geram fadiga de alertas (alert fatigue).

Por causa disso, detecção de anomalias é tanto sobre desenho operacional (operational design) (definição de limiares (thresholding), triagem (triage), monitoramento (monitoring)) quanto sobre modelagem.

Ideia central: definir “normal” e então medir desvio

A maioria dos detectores de anomalias implementa uma destas ideias:

  1. Baseada em distância (distance-based): anomalias estão longe de pontos típicos (distância de k-vizinhos mais próximos (k-NN), distância ao centróide).
  2. Baseada em densidade (density-based): anomalias ficam em regiões de baixa densidade (modelos de mistura gaussiana, densidade por kernel).
  3. Baseada em fronteira (boundary-based): aprender a fronteira dos dados normais (SVM de uma classe).
  4. Baseada em isolamento (isolation-based): anomalias são mais fáceis de isolar via divisões aleatórias (Floresta de Isolamento (Isolation Forest)).
  5. Erro de reconstrução/predição (reconstruction/prediction error): anomalias são difíceis de reconstruir/predizer (autoencodificadores, resíduos de previsão).
  6. Pontuação probabilística (probabilistic scoring): anomalias têm baixa verossimilhança (likelihood) sob um modelo generativo (generative model) (Modelos Bayesianos, modelos gaussianos).

Um detector produz uma pontuação de anomalia (anomaly score) (s(x)) (maior = mais anômalo, ou às vezes menor), e você escolhe um limiar (threshold) para transformar pontuações em alertas.

Métodos não supervisionados (sem rótulos)

Estatística robusta e regras simples (linhas de base (baselines) fortes)

Antes de modelos complexos, comece com linhas de base que são fáceis de depurar:

  • Escore-z (Z-score): sinalize se (|x - \mu| / \sigma > k). Funciona apenas se as distribuições forem aproximadamente estáveis e unimodais.
  • Escore-z robusto usando mediana e desvio absoluto mediano (MAD):
    • ( \text{MAD} = \text{median}(|x - \text{median}(x)|) )
    • escore robusto ( \approx 0.6745 (x - \text{median}) / \text{MAD} )
  • Regra do intervalo interquartil (IQR): sinalize se estiver fora de ([Q1 - 1.5 \cdot IQR,; Q3 + 1.5 \cdot IQR])

Elas são melhores para monitoramento univariado ou como componentes em sistemas maiores.

Exemplo prático: monitorar a latência p95 de uma API. Use mediana móvel + MAD para detectar picos súbitos, mantendo robustez a valores atípicos ocasionais.

Métodos baseados em distância (k-NN e relacionados)

Uma abordagem comum de pontuação é a distância até o k-ésimo vizinho mais próximo:

  • Calcule (d_k(x)) = distância de (x) até seu k-ésimo vizinho mais próximo.
  • Um (d_k(x)) grande implica isolamento → anomalia.

Essa abordagem é intuitiva, mas:

  • Pode ser cara em escala (vizinhos mais próximos aproximados ajuda).
  • Depende fortemente do escalonamento de características e da escolha de distância.
  • Sofre em alta dimensionalidade (“maldição da dimensionalidade”), onde distâncias se concentram.

Relacionado: Fator de Valor Atípico Local (Local Outlier Factor, LOF) compara a densidade local ao redor de um ponto com as densidades ao redor de seus vizinhos.

Esses métodos se conectam naturalmente a Aprendizado de Métrica quando embeddings aprendidos tornam distância algo significativo.

Métodos baseados em agrupamento

Se dados normais formam agrupamentos, então anomalias podem estar:

  • Longe de qualquer centróide de agrupamento (distância ao k-médias (k-means))
  • Em agrupamentos minúsculos ou regiões de ruído (DBSCAN)
  • Com baixa probabilidade sob componentes de mistura (GMM)

Agrupamento é coberto com mais profundidade em Agrupamento, mas o enquadramento para anomalias é:

  • Ajustar agrupamentos em dados majoritariamente normais.
  • Pontuar pontos pela distância ao centro do agrupamento mais próximo ou pela verossimilhança do agrupamento.

Cuidado: agrupamento encontra estrutura, mas “agrupamento pequeno” ≠ “anomalia” em muitos domínios (por exemplo, um grupo minoritário legítimo de usuários).

Estimativa de densidade e modelos probabilísticos

Se você consegue estimar a densidade de probabilidade (p(x)), então baixa verossimilhança implica anomalia.

Abordagens comuns:

  • Modelo gaussiano: assumir que dados normais seguem uma gaussiana multivariada; pontuar pela distância de Mahalanobis
    (D_M(x) = \sqrt{(x-\mu)^T \Sigma^{-1} (x-\mu)})
  • Modelo de Mistura Gaussiana (Gaussian Mixture Model, GMM): dados normais multimodais; pontuar por (-\log p(x))
  • Estimativa de densidade por kernel (kernel density estimation, KDE): flexível, mas frequentemente cara e frágil em alta dimensionalidade

Modelagem probabilística é conceitualmente limpa e pode fornecer incerteza (uncertainty); veja Modelos Bayesianos e, para incerteza baseada em funções, Processos Gaussianos (frequentemente usados em cenários de regressão de baixa dimensionalidade).

Floresta de Isolamento (muitas vezes uma boa primeira escolha)

Floresta de Isolamento é um método não supervisionado amplamente usado:

  • Constrói muitas árvores aleatórias, dividindo repetidamente características em limiares aleatórios.
  • Pontos que ficam isolados em menos divisões (comprimento de caminho menor) são mais anômalos.

Pontos fortes:

  • Funciona bem em dados tabulares
  • Escala para conjuntos de dados grandes
  • Pré-processamento mínimo
  • Frequentemente forte “de fábrica” (out-of-the-box)

Pontos fracos:

  • Pode ter dificuldade com dependências contextuais/temporais fortes, a menos que você crie características
  • A escolha do limiar ainda exige calibração

Floresta de Isolamento é um método de conjunto (ensemble); seu espírito se relaciona a Árvores de Decisão e Conjuntos.

Semi-supervisionado (detecção de novidade): treinar apenas com “normal”

Em muitos sistemas reais, você pode curar um conjunto de dados que se acredita ser normal: por exemplo, “dispositivos durante testes de aceitação”, “transações de usuários verificados”, “tráfego de um segmento limpo da rede”.

Você então aprende uma fronteira ou representação de normalidade.

SVM de uma classe

Uma SVM de uma classe (One-Class SVM) aprende uma fronteira de decisão que envolve a maioria dos pontos normais no espaço de características. Com kernels, pode modelar fronteiras não lineares.

Principais ajustes:

  • nu: limite superior aproximado da fração de pontos de treino permitidos fora da fronteira (atua como contaminação)
  • kernel e gamma: controlam a complexidade da fronteira

Pode ser eficaz, mas pode ser:

  • Sensível a escalonamento
  • Mais difícil de ajustar do que Floresta de Isolamento
  • Cara em conjuntos de dados muito grandes

Veja SVMs para os fundamentos de margem e kernel.

Autoencodificadores (baseado em reconstrução)

Um autoencodificador (autoencoder) é uma rede neural treinada para reconstruir sua entrada:

  • O codificador (encoder) mapeia (x \to z) (representação comprimida)
  • O decodificador (decoder) mapeia (z \to \hat{x})
  • Treine em dados normais para minimizar a perda de reconstrução (L(x, \hat{x}))

Na inferência, anomalias tendem a ter maior erro de reconstrução porque diferem da distribuição de treino.

Variantes:

  • Autoencodificadores de remoção de ruído (denoising autoencoders): reconstroem a entrada limpa a partir de uma entrada corrompida; melhora a robustez
  • Autoencodificadores variacionais (variational autoencoders, VAEs): variáveis latentes (latent variables) probabilísticas; podem pontuar via reconstrução e termos semelhantes a verossimilhança
  • Autoencodificadores de sequência para séries temporais (baseados em redes neurais recorrentes (RNN)/Transformers (Transformer))

Autoencodificadores dependem do treinamento de Redes Neurais com Descida do Gradiente e exigem validação cuidadosa para evitar aprender a função identidade (identity function) bem demais.

Ressalva importante: autoencodificadores poderosos às vezes conseguem reconstruir anomalias bem demais, especialmente se as anomalias forem semelhantes aos dados normais ou aparecerem durante o treino.

Detecção de anomalias em séries temporais

Séries temporais adicionam contexto (tendência/sazonalidade) e dependência temporal. Abordagens comuns:

Detecção baseada em resíduos via previsão

  1. Ajuste um modelo de previsão (forecasting) em dados históricos normais.
  2. Calcule o resíduo (r_t = y_t - \hat{y}_t).
  3. Sinalize anomalias quando a magnitude ou a verossimilhança do resíduo for incomum.

Modelos de previsão vão de clássicos (ARIMA, ETS) a ML/DL; veja Previsão de Séries Temporais. Melhorias práticas:

  • Use intervalos de predição (prediction intervals) (limiares conscientes de incerteza)
  • Modele sazonalidade explicitamente (dia da semana, hora do dia)
  • Detecte tanto picos quanto mudanças de nível (level shifts) (viés persistente nos resíduos)

Modelagem por janelas/sequências (anomalias coletivas)

Em vez de pontuar cada ponto independentemente, pontue janelas:

  • Transforme uma janela em um vetor de características (estatísticas, características de FFT)
  • Ou use um modelo de sequência e pontue o erro de reconstrução/predição ao longo de toda a janela

Isso é melhor para padrões como “deriva gradual” ou “interferência periódica”.

Detecção de pontos de mudança (relacionada, mas distinta)

Métodos de pontos de mudança (change-point) visam detectar mudanças de distribuição (mudança de média/variância/regime). Muitos sistemas operacionais de anomalias incluem detecção de pontos de mudança porque ela captura mudanças sustentadas de comportamento que métodos ponto a ponto deixam passar.

Redução de dimensionalidade e embeddings (ferramentas de apoio)

Dados de alta dimensionalidade (logs, texto, imagens) frequentemente precisam de aprendizado de representação:

  • PCA: anomalias têm grande erro de reconstrução ou grande resíduo de projeção
  • t-SNE/UMAP: principalmente para visualização (não são pontuadores robustos)
  • Representações vetoriais (embeddings) aprendidas: por aprendizado contrastivo ou modelos de domínio

Veja Redução de Dimensionalidade para detalhes. Na prática, a pontuação de anomalia frequentemente melhora quando feita em um espaço de representação vetorial bem estruturado (especialmente para imagens/áudio).

Escolhendo e calibrando limiares

Um modelo produz pontuações; produção exige convertê-las em ações.

Estratégias comuns de limiar:

  • Top-k / taxa fixa de alertas: alertar nos 0,1% eventos mais anômalos por dia. Bom quando você tem capacidade limitada de investigação.
  • Limiar de pontuação: alertar quando (s(x) > \tau). Requer distribuição de pontuações estável.
  • Limiar baseado em custo: escolher (\tau) para minimizar o custo esperado:
    (C(\tau)=c_{FP} \cdot FP(\tau) + c_{FN} \cdot FN(\tau))

Se você tiver mesmo um pequeno conjunto rotulado, calibre limiares nele. Caso contrário:

  • Use períodos conhecidos como limpos para estimar a distribuição de pontuações
  • Faça backtesting em incidentes históricos
  • Valide com revisão de especialistas (humano no loop (human-in-the-loop))

Considere também histerese (hysteresis) (disparar quando alto, limpar quando baixo) para sinais ruidosos.

Avaliação: como é “bom”

Quando anomalias são raras, acurácia não significa nada. Prefira:

  • Precisão (precision) / revocação (recall): precisão é crítica para evitar fadiga de alertas; revocação importa para segurança.
  • AUC-PR (PR-AUC): mais informativa do que AUC-ROC sob grande desbalanceamento.
  • AUC-ROC (ROC-AUC): pode ser otimista em cenários desbalanceados, mas ainda é útil para qualidade de ranqueamento.
  • Tempo até detectar (time-to-detect, TTD): para incidentes em séries temporais, detecção precoce importa.
  • Alertas falsos por unidade de tempo: métrica operacional alinhada à carga de trabalho.

Se os rótulos forem incompletos (comum), trate a avaliação como melhor esforço:

  • Meça em incidentes confirmados
  • Use rótulos proxy (chargebacks, tickets de falha)
  • Acompanhe métricas de estabilidade e deriva em produção

Fluxo de trabalho prático (ponta a ponta)

1) Defina a anomalia e a resposta

Escreva:

  • O que conta como anômalo?
  • Qual ação segue um alerta (bloquear, investigar, acionar plantão (on-call))?
  • Qual latência é necessária (tempo real vs batch)?
  • Qual é a taxa aceitável de falsos positivos?

Isso informa a escolha de modelo mais do que os algoritmos.

2) Construa características que expressem “comportamento normal”

Para eventos tabulares:

  • Normalizar/padronizar características numéricas
  • Codificar categorias (target encoding, embeddings, hashing)
  • Adicionar características de interação (razão, diferenças)

Para séries temporais:

  • Características sazonais (hora/dia da semana)
  • Estatísticas móveis (média, desvio padrão, quantis)
  • Características de defasagem e deltas

Para logs/texto:

  • Vetores de contagem de eventos, representações vetoriais aprendidas

3) Comece com um modelo de linha de base

Bons pontos de partida:

  • Floresta de Isolamento para dados tabulares
  • Regras univariadas robustas para métricas-chave
  • Previsão + limiares sobre resíduos para séries temporais

Depois, itere para modelos mais complexos se necessário.

4) Calibre limiares e valide com as partes interessadas

Use:

  • Backtesting
  • Rotulagem por especialistas de uma amostra de alertas
  • Orçamentos fixos de alertas

5) Faça deploy com monitoramento e retreinamento

Monitore:

  • Deriva da distribuição de pontuações
  • Deriva da distribuição de características
  • Volume de alertas
  • Estimativas de precisão a partir de alertas revisados

Retreine em um cronograma ou quando gatilhos de deriva dispararem.

Exemplo de código: Floresta de Isolamento em dados tabulares

import numpy as np
from sklearn.ensemble import IsolationForest
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline

# X: shape (n_samples, n_features), mostly normal
# In anomaly detection, it's common that training data includes some anomalies.
# The 'contamination' parameter expresses the expected anomaly fraction.
model = make_pipeline(
    StandardScaler(),
    IsolationForest(
        n_estimators=300,
        contamination=0.01,   # expected 1% anomalies (tune or set via alert budget)
        random_state=42
    )
)

model.fit(X_train)

# sklearn returns +1 for inliers, -1 for outliers in predict()
pred = model.predict(X_test)

# anomaly score: lower is more abnormal for IsolationForest.score_samples()
scores = model.named_steps["isolationforest"].score_samples(
    model.named_steps["standardscaler"].transform(X_test)
)

anomalies = np.where(pred == -1)[0]
print("flagged:", len(anomalies))

Notas:

  • Escalonamento ajuda quando características têm unidades diferentes.
  • Definir contamination é, na prática, escolher um limiar. Em produção, você pode sobrescrevê-lo com um limiar customizado baseado na capacidade de alertas.

Exemplo de código: SVM de uma classe (semi-supervisionado)

from sklearn.svm import OneClassSVM
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline

# Train on "normal-only" data if you can curate it
ocsvm = make_pipeline(
    StandardScaler(),
    OneClassSVM(kernel="rbf", gamma="scale", nu=0.01)
)

ocsvm.fit(X_normal_train)

# predict: +1 inlier, -1 outlier
pred = ocsvm.predict(X_test)

Dica: SVM de uma classe é sensível a nu e às configurações de kernel; costuma funcionar melhor em conjuntos de dados pequenos a médios, com ajuste cuidadoso.

Abordagens de deep learning na prática (quando usá-las)

Modelos profundos são úteis quando:

  • Os dados são de alta dimensionalidade (high-dimensional) (imagens, áudio, texto, telemetria complexa)
  • Você consegue aprender boas representações
  • Você tem dados normais suficientes para treinar com robustez

Padrões comuns:

  • Erro de reconstrução de autoencodificador para imagens (defeitos) ou sensores multivariados
  • Pré-treinamento auto-supervisionado (self-supervised pretraining) + pontuação de anomalia no espaço de representação vetorial
  • Modelos de sequência (sequence models) para fluxos de logs ou séries temporais

Mas eles aumentam a complexidade:

  • Mais parâmetros de ajuste (arquitetura, estabilidade de treinamento)
  • Mais difícil de interpretar
  • Risco de “normalizar” anomalias se os dados de treino estiverem contaminados

Uma abordagem pragmática é híbrida:

  • Usar representações profundas e, então, aplicar um detector mais simples (por exemplo, distância k-NN ou Floresta de Isolamento) sobre as representações.

Aplicações

Fraude e risco

  • Fraude em cartão de crédito ou pagamentos: valores incomuns, lojistas, sinais do dispositivo
  • Tomada de conta: padrões anômalos de login, viagem impossível
  • Lavagem de dinheiro: grafos de transações incomuns (frequentemente detecção de anomalias em grafos (graph anomaly detection))

Considerações operacionais:

  • Adaptação adversarial
  • Necessidade de explicação e auditabilidade

Cibersegurança e detecção de intrusão

  • Anomalias em tráfego de rede (portas raras, fluxos incomuns)
  • Telemetria de endpoints e comportamento de processos
  • Anomalias de autenticação (força bruta, credential stuffing)

Frequentemente usa métodos semi-supervisionados devido a poucos rótulos e ameaças em evolução.

Manufatura e manutenção preditiva

  • Anomalias em sensores indicando desgaste ou falha iminente
  • Detecção visual de defeitos em imagens de inspeção

Métodos de resíduos em séries temporais e autoencodificadores são comuns; a avaliação foca em detecção precoce e redução de downtime.

Observabilidade (observability): métricas, logs e traces

  • Detectar regressões em latência, taxas de erro, uso de recursos
  • Identificar padrões incomuns de logs após deploys

Frequentemente contextual e guiado por sazonalidade; linhas de base robustas mais detecção de pontos de mudança são fortes.

Monitoramento de qualidade de dados

  • Violações de esquema (schema), mudanças de distribuição (distribution shifts), bugs no pipeline
  • Mudanças súbitas em taxas de nulos ou faixas de valores de características

Aqui, “anomalia” pode significar “problema de dados”, e não comportamento do mundo real.

Armadilhas comuns e como evitá-las

  • Vazamento de anomalias para o conjunto de treino “normal” (semi-supervisionado):
    Use janelas conservadoras de curadoria e considere métodos robustos que tolerem alguma contaminação.
  • Ignorar sazonalidade e contexto (séries temporais):
    Adicione características temporais ou use resíduos de previsão.
  • Fadiga de alertas:
    Comece com um orçamento de alertas (top-k) e itere; meça precisão via amostragem e revisão.
  • Uso indevido de distância em alta dimensionalidade:
    Prefira aprendizado de representação ou redução de dimensionalidade; tenha cuidado com distância euclidiana (Euclidean distance) em espaços esparsos/de alta dimensão.
  • Assumir que anomalias são erros:
    Algumas anomalias são descobertas valiosas (novo comportamento de clientes). Encaminhe alertas para fluxos de trabalho apropriados.
  • Sem plano de retreinamento:
    O comportamento normal deriva. Monitore deriva e agende retreinamento.

Como detecção de anomalias se relaciona com outras famílias de modelos

Resumo

Detecção de anomalias é a prática de aprender como é o “normal” e sinalizar desvios, muitas vezes com pouco ou nenhum dado rotulado de anomalias. Na prática:

  • Comece com linhas de base robustas e detectores simples.
  • Prefira Floresta de Isolamento ou resíduos de previsão como primeiras escolhas fortes para dados tabulares/séries temporais.
  • Use treinamento semi-supervisionado apenas com dados normais quando possível (SVM de uma classe, autoencodificadores).
  • Trate definição de limiares, avaliação com rótulos incompletos e fluxos de trabalho operacionais como preocupações de primeira classe.

Um sistema de detecção de anomalias bem projetado não é apenas um modelo — é um pipeline de monitoramento e decisão que permanece confiável conforme o mundo muda.