Isolation Forest

2.6.4

Isolation Forest

Atualizado 2020-03-11 Leitura 2 min
Resumo
  • O Isolation Forest isola pontos através de árvores de particionamento aleatório e usa caminhos curtos como evidência de anomalia.
  • Faz suposições fracas sobre a distribuição e escala bem para configurações de alta dimensão.
  • A contamination e as configurações das árvores controlam a sensibilidade da detecção e o volume prático de alertas.

Intuição #

Anomalias são mais fáceis de isolar do que pontos normais. O Isolation Forest quantifica isso calculando a média de quão rapidamente as amostras são separadas em muitas árvores aleatórias.

Explicação Detalhada #

1. Como funciona #

  • Sub-amostrar aleatoriamente os dados.
  • Construir árvores de isolamento (Isolation Trees) dividindo em características e limiares escolhidos aleatoriamente.
  • Amostras com comprimento médio de caminho mais curto são mais fáceis de isolar, portanto são mais propensas a serem anomalias.

A pontuação de anomalia é normalizada usando o comprimento de caminho esperado de uma árvore de busca binária aleatória, \(c(n)\), e o comprimento médio de caminho observado.


2. Exemplo em Python #

import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from sklearn.ensemble import IsolationForest

rng = np.random.default_rng(0)
X_inliers = 0.3 * rng.normal(size=(200, 2))
X_anom = rng.uniform(low=-4, high=4, size=(20, 2))
X = np.vstack([X_inliers, X_anom])

model = IsolationForest(n_estimators=200, contamination=0.1, random_state=0)
model.fit(X)
scores = -model.score_samples(X)
labels = model.predict(X)  # -1 = anomaly

plt.figure(figsize=(6, 5))
plt.scatter(X[:, 0], X[:, 1], c=scores, cmap="magma", s=30)
plt.colorbar(label="anomaly score")
plt.title("Isolation Forest scores")
plt.tight_layout()
plt.show()

print("Detected anomalies:", np.sum(labels == -1))

Gráfico do exemplo Python


3. Hiperparâmetros #

  • n_estimators: Número de árvores. Mais árvores fornecem resultados mais estáveis.
  • max_samples: Amostras usadas por árvore. Padrão é min(256, n_samples).
  • contamination: Fração estimada de anomalias; usada para definir o limiar.
  • max_features: Características usadas em cada divisão.

4. Prós e contras #

PrósContras
Relativamente rápido mesmo em alta dimensãoOs resultados podem variar com a semente aleatória
Escalonamento não é necessário (mas recomendado)Pequenas anomalias locais podem não ser detectadas
Treinamento e inferência simplesA contamination pode ser difícil de definir

5. Resumo #

  • O Isolation Forest é um detector de anomalias baseado em árvores que usa caminhos curtos de isolamento como sinal de anomalia.
  • É fácil de usar no scikit-learn, ajustando principalmente o número de árvores e amostras.
  • É adequado quando se precisa de filtragem rápida de candidatos para logs ou dados de sensores.