Pular para o conteúdo principal

Uma introdução abrangente à detecção de anomalias

Um tutorial sobre como dominar os fundamentos da detecção de anomalias - os conceitos, a terminologia e o código.
Actualizado 16 de jan. de 2025  · 14 min de leitura

Todo mundo gosta de se destacar, de ser diferente. Mas essa não é a qualidade que você deseja em seus pontos de dados como cientista de dados. Pontos de dados divergentes ou anomalias em um conjunto de dados são um dos problemas de qualidade de dados mais perigosos que afetam quase todos os projetos de dados.

Essa última frase pode surpreendê-lo se você tiver trabalhado apenas com conjuntos de dados de código aberto polidos que geralmente vêm sem outliers. No entanto, os conjuntos de dados do mundo real sempre apresentam algumas diferenças em relação às amostras normais. É seu trabalho detectar e lidar com eles adequadamente.

Neste artigo, você aprenderá as ideias fundamentais desse processo, que geralmente é chamado de detecção de anomalias:

  1. O efeito prejudicial que as anomalias têm em seu projeto.
  2. A importância da detecção de anomalias.
  3. Aplicativos de detecção de anomalias no mundo real.
  4. A diferença entre anomalias, outliers e novidades.
  5. Tipos de anomalias e métodos de detecção de anomalias.
  6. Como criar algoritmos de detecção de anomalias em Python.
  7. Como lidar com os desafios da detecção de anomalias.

Ao final, você dominará os fundamentos da detecção de anomalias e ganhará confiança para atenuar a influência perturbadora dos outliers em seus projetos.

O que é detecção de anomalias?

A detecção de anomalias, às vezes chamada de detecção de outlier, é um processo de encontrar padrões ou instâncias em um conjunto de dados que se desviam significativamente do comportamento esperado ou "normal".

A definição de dados "normais" e anômalos varia significativamente, dependendo do contexto. Abaixo estão alguns exemplos de detecção de anomalias em ação.

1. Transações financeiras

Normal: Compras de rotina e gastos consistentes de um indivíduo em Londres.

Excedente: Uma retirada maciça da Irlanda da mesma conta, sugerindo uma possível fraude.

2. Tráfego de rede em segurança cibernética

Normal: Comunicação regular, transferência constante de dados e adesão ao protocolo.

Excedente: Aumento abrupto na transferência de dados ou uso de protocolos desconhecidos, sinalizando uma possível violação ou malware.

3. Monitoramento dos sinais vitais do paciente

Normal: Frequência cardíaca estável e pressão arterial consistente

Excedente: Aumento repentino da frequência cardíaca e diminuição da pressão arterial, indicando uma possível emergência ou falha no equipamento.

A detecção de anomalias inclui muitos tipos de métodos não supervisionados para identificar amostras divergentes. Os especialistas em dados os escolhem com base no tipo de anomalia, no contexto, na estrutura e nas características do conjunto de dados em questão. Vamos abordá-los nas próximas seções.

Aplicações reais de detecção de anomalias

Embora tenhamos visto alguns exemplos acima, vamos dar uma olhada em uma história real de como a detecção de anomalias funciona em finanças.

Shaq O'Neal, quatro vezes campeão da NBA, é trocado do Miami Heat para o Phoenix Suns. Quando Shaq chega ao apartamento vazio fornecido pelo Phoenix Suns, ele quer mobiliar seu apartamento imediatamente no meio da noite. Então, ele vai ao Walmart e faz a maior compra da história do Walmart por US$ 70.000. Ou, pelo menos, ele tenta; seu cartão é recusado.

Ele se pergunta o que poderia ser o problema (ele não pode estar falido!). Às 2h da manhã, a segurança da American Express liga para ele e diz que seu cartão era suspeito de ter sido roubado porque alguém estava tentando fazer uma compra de US$ 70.000 no Walmart em Phoenix (assista à anedota para ouvir a história completa).

Há muitas outras aplicações do mundo real da detecção de anomalias além da detecção de fraudes e finanças:

  • Segurança cibernética
  • Cuidados com a saúde
  • Monitoramento de equipamentos industriais
  • Detecção de intrusão de rede
  • Monitoramento da rede de energia
  • Comércio eletrônico e análise do comportamento do usuário
  • Controle de qualidade na fabricação

A detecção de anomalias está profundamente integrada aos serviços diários que usamos e, muitas vezes, nem percebemos isso.

A importância da detecção de anomalias na ciência de dados

Os dados são o bem mais precioso da ciência de dados, e as anomalias são as ameaças mais perturbadoras à sua qualidade. A má qualidade dos dados é ruim:

  • Testes estatísticos
  • Painéis
  • Modelos de aprendizado de máquina
  • Decisões

e, por fim, uma base comprometida para a tomada de decisões informadas.

As anomalias distorcem as análises estatísticas ao introduzir padrões inexistentes, levando a conclusões erradas e previsões não confiáveis. Como geralmente são os valores extremos em um conjunto de dados, as anomalias costumam distorcer as duas características mais importantes das distribuições: a média e o desvio padrão.

Como os componentes internos de quase todos os modelos de aprendizado de máquina dependem muito dessas duas métricas, a detecção oportuna de anomalias é crucial.

Tipos de anomalias

A detecção de anomalias engloba duas práticas amplas: detecção de exceções e detecção de novidades.

Os outliers são pontos de dados anormais ou extremos que existem apenas nos dados de treinamento. Por outro lado, as novidades são instâncias novas ou não vistas anteriormente em comparação com os dados originais (de treinamento).

Por exemplo, considere um conjunto de dados de temperaturas diárias em uma cidade. Na maioria dos dias, as temperaturas variam entre 20°C e 30°C. No entanto, em um dia, há um pico de 40°C. Essa temperatura extrema é uma exceção, pois se desvia significativamente da faixa de temperatura diária normal.

Agora, imagine que a cidade instale uma nova estação de monitoramento meteorológico mais precisa. Como resultado, o conjunto de dados começa a registrar consistentemente temperaturas um pouco mais altas, variando de 25°C a 35°C. Esse aumento contínuo das temperaturas é uma novidade, representando um novo padrão introduzido pelo sistema de monitoramento aprimorado.

Anomalias, por outro lado, é um termo amplo que engloba tanto as exceções quanto as novidades. Ele pode ser usado para definir qualquer instância anormal em qualquer contexto.

Identificar o tipo de anomalias é fundamental, pois permite que você escolha o algoritmo correto para detectá-las.

Tipos de outliers

Como há dois tipos de anomalias, também há dois tipos de outliers: univariados e multivariados. Dependendo do tipo, usaremos diferentes algoritmos de detecção.

  1. Os outliers univariados existem em uma única variável ou característica isolada. Os outliers univariados são valores extremos ou anormais que se desviam do intervalo típico de valores para esse recurso específico.
  2. Os outliers multivariados são encontrados combinando os valores de várias variáveis ao mesmo tempo.

Por exemplo, considere um conjunto de dados de preços de imóveis em um bairro. A maioria das casas custa entre US$ 200.000 e US$ 400.000, mas há a Casa A com um preço excepcionalmente alto de US$ 1.000.000. Quando analisamos apenas o preço, a Casa A é claramente uma exceção.

Agora, vamos adicionar mais duas variáveis ao nosso conjunto de dados: a metragem quadrada e o número de quartos. Quando consideramos a metragem quadrada, o número de quartos e o preço, é a Casa B que parece estranha:

  • Ela tem metade da metragem quadrada do preço médio da casa.
  • Ele tem apenas um quarto.
  • Custa no máximo US$ 380.000.

Quando analisamos essas variáveis individualmente, elas parecem comuns. Somente quando as colocamos juntas é que descobrimos que a Casa B é claramente um outlier multivariado.

Métodos de detecção de anomalias e quando usar cada um deles

Os algoritmos de detecção de anomalias diferem de acordo com o tipo de outliers e a estrutura do conjunto de dados.

Para a detecção univariada de outlier, os métodos mais populares são:

  1. Pontuação Z (pontuação padrão): a pontuação z mede quantos desvios padrão um ponto de dados está afastado da média. Em geral, as instâncias com um escore z superior a 3 são escolhidas como discrepantes.
  2. Intervalo interquartil (IQR): O IQR é o intervalo entre o primeiro quartil (Q1) e o terceiro quartil (Q3) de uma distribuição. Quando uma instância está além de Q1 ou Q3 para algum multiplicador de IQR, ela é considerada atípica. O multiplicador mais comum é 1,5, fazendo com que o intervalo de outliers seja [Q1-1,5 * IQR, Q3 + 1,5 * IQR].
  3. Escores z modificados: semelhantes aos escores z, mas os escores z modificados usam a mediana e uma medida chamada Desvio Absoluto da Mediana (MAD) para encontrar exceções. Como a média e o desvio padrão são facilmente distorcidos por outliers, os escores z modificados são geralmente considerados mais robustos.

Para outliers multivariados, geralmente usamos algoritmos de aprendizado de máquina. Devido à sua profundidade e força, eles são capazes de encontrar padrões intrincados em conjuntos de dados complexos:

  1. Isolation Forest: usa uma coleção de árvores de isolamento (semelhantes a árvores de decisão) que dividem recursivamente conjuntos de dados complexos até que cada instância seja isolada. As instâncias que são isoladas mais rapidamente são consideradas discrepantes.
  2. Fator local de outlier (LOF): O LOF mede o desvio da densidade local de uma amostra em comparação com suas vizinhas. Os pontos com densidade significativamente menor são escolhidos como discrepantes.
  3. Técnicas de clustering: técnicas como k-means ou clustering hierárquico dividem o conjunto de dados em grupos. Os pontos que não pertencem a nenhum grupo ou que estão em seus próprios agrupamentos são considerados discrepantes.
  4. Detecção de outlier baseada em ângulo (ABOD): O ABOD mede os ângulos entre pontos individuais. As instâncias com ângulos estranhos podem ser consideradas discrepantes.

Além do tipo de anomalias, você deve considerar as características do conjunto de dados e as restrições do projeto. Por exemplo, o Isolation Forest funciona bem em quase todos os conjuntos de dados, mas é mais lento e exige muita computação, pois é um método de conjunto. Em comparação, o LOF é muito rápido no treinamento, mas pode não ter um desempenho tão bom quanto o Isolation Forest.

Você pode ver uma comparação dos algoritmos de detecção de anomalias mais comuns em 55 conjuntos de dados do pacote Python Outlier Detection (PyOD).

Criação de um modelo de detecção de anomalias em Python

Como praticamente qualquer tarefa, há muitas bibliotecas em Python para realizar a detecção de anomalias. Os melhores candidatos são:

  • Detecção de outlier em Python (PyOD)
  • Scikit-learn

Enquanto o scikit-learn oferece cinco algoritmos clássicos de aprendizado de máquina (você pode usá-los para outliers univariados e multivariados), o PyOD inclui mais de 30 algoritmos, desde métodos simples, como MAD, até modelos complexos de aprendizado profundo. Você também pode usar o TensorFlow ou o PyTorch para modelos personalizados, mas eles estão além do escopo deste artigo.

Detecção de anomalias univariadas

Prefiro o pyod por sua rica biblioteca de algoritmos e uma API consistente com o sklearn. Você precisará de apenas algumas linhas de código para localizar e extrair outliers de um conjunto de dados usando o PyOD. Aqui está um exemplo de uso do MAD em um conjunto de dados univariados:

import pandas as pd
import seaborn as sns
from pyod.models.mad import MAD

# Load a sample dataset
diamonds = sns.load_dataset("diamonds")
# Extract the feature we want
X = diamonds[["price"]]

# Initialize and fit a model
mad = MAD().fit(X)

# Extract the outlier labels
labels = mad.labels_

>>> pd.Series(labels).value_counts()
0    49708
1     4232
Name: count, dtype: int64

Vamos examinar o código linha por linha. Primeiro, carregamos as bibliotecas necessárias para a manipulação de dados, carregando um conjunto de dados e o site pyod para o modelo de detecção de outlier. Em seguida, após carregar o conjunto de dados de diamantes incorporado ao Seaborn, extraímos os preços dos diamantes.

Em seguida, inicializamos e ajustamos um modelo de Desvio Absoluto Mediano (MAD) para X em uma única linha. Em seguida, extraímos os rótulos de inlier e outlier usando o atributo labels_ de mad em labels.

Quando imprimimos as contagens de valores de labels no final, vemos que 49708 pertencem à categoria 0 (inliers), enquanto 4232 pertencem à 1 (outliers). Se quisermos remover os valores discrepantes do conjunto de dados original, podemos usar o subconjunto do pandas em diamonds:

outlier_free = diamonds[labels == 0]

>>> len(outlier_free)
49708

labels == 0 cria uma matriz de valores True/False (matriz booleana) em que True denota um inlier.

Detecção de anomalias multivariadas

O processo de criação de um modelo multivariado de detecção de anomalias também é o mesmo. Mas a detecção multivariada de outlier requer etapas adicionais de processamento se houver recursos categóricos:

>>> diamonds.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 53940 entries, 0 to 53939
Data columns (total 10 columns):
#   Column   Non-Null Count  Dtype  
---  ------   --------------  -----  
0   carat    53940 non-null  float64
1   cut      53940 non-null  category
2   color    53940 non-null  category
3   clarity  53940 non-null  category
4   depth    53940 non-null  float64
5   table    53940 non-null  float64
6   price    53940 non-null  int64  
7   x        53940 non-null  float64
8   y        53940 non-null  float64
9   z        53940 non-null  float64
dtypes: category(3), float64(6), int64(1)
memory usage: 3.0 MB

Como o site pyod espera que todos os recursos sejam numéricos, precisamos codificar as variáveis categóricas. Para isso, usaremos o Sklearn:

from sklearn.preprocessing import OrdinalEncoder

# Initialize the encoder
oe = OrdinalEncoder()

# Extract the categorical feature names
cats = diamonds.select_dtypes(include="category").columns.tolist()

# Encode the categorical features
cats_encoded = oe.fit_transform(diamonds[cats])

# Replace the old values with encoded values
diamonds.loc[:, cats] = cats_encoded

>>> diamonds.head()

Conjunto de dados de diamante

Vamos examinar o código linha por linha novamente. Primeiro, importamos a classe OrdinalEncoder que codifica os recursos categóricos ordinais e a inicializamos. Os recursos ordinais são variáveis que têm categorias naturais e ordenadas, como no caso das medições de qualidade de diamantes. O corte e a claridade são ordinais, enquanto a cor não. Mas, para não complicar as coisas, vamos considerá-lo ordinal por enquanto.

Em seguida, extraímos os nomes dos recursos categóricos usando o método select_dtypes do Pandas DataFrames. Encadeamos os atributos .columns e .tolist() para obter os nomes das colunas em uma lista chamada cats.

Em seguida, usaremos a lista para transformar os recursos que desejamos com oe. Por fim, usando um truque simples do Pandas com .loc, substituímos os valores de texto antigos por valores numéricos.

Antes de ajustar um modelo multivariado, extrairemos a matriz de recursos X. O objetivo do conjunto de dados diamonds é prever os preços dos diamantes de acordo com suas características. Portanto, X conterá todas as colunas, exceto price:

X = diamonds.drop("price", axis=1)
y = diamonds[["price"]]
Now, let’s build and fit the model:
from pyod.models.iforest import IForest

# Create a model with 10000 trees
iforest = IForest(n_estimators=10000)
iforest.fit(X)  # This will take a minute

# Extract the labels
labels = iforest.labels_

Quanto mais árvores o estimador IForest tiver, mais tempo você levará para ajustar o modelo ao conjunto de dados.

Depois de obtermos os rótulos, podemos remover os outliers dos dados originais:

X_outlier_free = X[labels == 0]
y_outlier_free = X[labels == 0]

>>> len(X_outlier_free)
48546

>>> # The length of the original dataset
>>> len(diamonds)
53940

O modelo encontrou mais de 5.000 outliers!

Desafios na detecção de anomalias

A detecção de anomalias pode representar desafios maiores do que outras tarefas de aprendizado de máquina devido à sua natureza não supervisionada. No entanto, a maioria desses desafios pode ser atenuada com vários métodos (consulte a próxima seção para obter recursos).

Na detecção de outliers, precisamos fazer essas duas perguntas:

  • Os valores discrepantes encontrados são realmente discrepantes?
  • O modelo encontrou todos os outliers nos dados?

No aprendizado supervisionado, podemos verificar facilmente se o modelo está funcionando bem, comparando suas previsões nos dados de teste com os rótulos reais. Porém, não podemos fazer o mesmo na detecção de outliers, pois não há rótulos prontos que nos digam quais amostras são inliers e quais são outliers.

Portanto, alguns ou a maioria dos +5000 outliers encontrados no conjunto de dados de diamantes podem não ser realmente outliers! Não há como saber com certeza. Você pode ter rotulado alguns valores discrepantes como discrepantes e não ter percebido alguns valores realmente discrepantes.

Esse problema de não conhecer o nível de contaminação (a porcentagem de outliers em um conjunto de dados) é o maior problema na detecção de anomalias. Por isso, não podemos medir de forma confiável o desempenho dos classificadores de outlier, nem verificar seus resultados.

Por esse motivo, todos os estimadores em pyod têm um parâmetro chamado contamination, que é definido como 0,1 por padrão. Como engenheiro de aprendizado de máquina, você precisa ajustar esse parâmetro por conta própria.

É claro que, às vezes, há alternativas. Por exemplo, o modelo IsolationForest oferecido pelo Sklearn tem um algoritmo interno para encontrar o nível de contaminação automaticamente. Mas o site IsolationForest não é uma solução milagrosa para todos os problemas de detecção de exceções.

Outro problema na detecção de anomalias é o desequilíbrio de dados. As anomalias geralmente são raras em comparação com as instâncias normais, o que faz com que os conjuntos de dados sejam desequilibrados. Esse desequilíbrio pode levar a dificuldades na distinção entre anomalias e irregularidades reais dentro da classe majoritária.

A solução desses problemas (e de muitos outros que não abordamos) envolve a escolha de algoritmos adequados, ajuste de hiperparâmetros, seleção de recursos, manipulação de desequilíbrio de classe e assim por diante.

Resumo e próximas etapas

Concluímos sua (provavelmente) primeira exposição ao fascinante mundo da detecção de anomalias. Os conceitos e as habilidades fundamentais deste tutorial podem ajudar muito você a explorar a detecção de anomalias.

Para aprofundar seu conhecimento, aqui estão alguns recursos que você deve consultar a seguir:


Bex Tuychiev's photo
Author
Bex Tuychiev
LinkedIn

Sou um criador de conteúdo de ciência de dados com mais de 2 anos de experiência e um dos maiores seguidores no Medium. Gosto de escrever artigos detalhados sobre IA e ML com um estilo um pouco sarcástico, porque você precisa fazer algo para torná-los um pouco menos monótonos. Produzi mais de 130 artigos e um curso DataCamp, e estou preparando outro. Meu conteúdo foi visto por mais de 5 milhões de pessoas, das quais 20 mil se tornaram seguidores no Medium e no LinkedIn. 

Temas

Aprofunde seu conhecimento sobre detecção de anomalias hoje mesmo!

curso

Anomaly Detection in Python

4 hr
4.6K
Detect anomalies in your data analysis and expand your Python statistical toolkit in this four-hour course.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

blog

O que é análise de dados? Um guia especializado com exemplos

Explore o mundo da análise de dados com nosso guia abrangente. Saiba mais sobre sua importância, processo, tipos, técnicas, ferramentas e as principais carreiras em 2023
Matt Crabtree's photo

Matt Crabtree

10 min

Data Analyst surfing on wave of data

blog

9 Habilidades essenciais do analista de dados: Um guia de carreira abrangente

Aprenda habilidades essenciais de analista de dados, tanto técnicas quanto interpessoais, desde programação em Python até comunicação eficaz, para avançar em sua carreira.
Matt Crabtree's photo

Matt Crabtree

9 min

blog

Como analisar dados para sua empresa em 5 etapas

Descubra as diferentes etapas para analisar dados e extrair valor deles, bem como os métodos e técnicas envolvidos no processo.
Javier Canales Luna's photo

Javier Canales Luna

14 min

blog

O que é o Data Wrangling? Um guia prático com exemplos

Aprenda os conceitos e as teorias fundamentais por trás da organização de dados, além de alguns exemplos práticos. Use essas habilidades em seu trabalho diário de ciência de dados para gerar dados limpos e úteis para seus modelos.
Tim Lu's photo

Tim Lu

12 min

tutorial

Guia do cientista de dados para processamento de sinais

Descubra insights acionáveis ocultos em dados de sinais complexos filtrando ruídos, escolhendo visualizações apropriadas, encontrando padrões no domínio do tempo e da frequência e muito mais usando o processamento de sinais.
Amberle McKee's photo

Amberle McKee

25 min

tutorial

Entendendo o desvio de dados e o desvio de modelo: Detecção de deriva em Python

Navegue pelos perigos do desvio de modelo e explore nosso guia prático para o monitoramento do desvio de dados.
Moez Ali's photo

Moez Ali

9 min

See MoreSee More