2.6.4
Isolation Forest
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
contaminatione 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))
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ós | Contras |
|---|---|
| Relativamente rápido mesmo em alta dimensão | Os 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 simples | A 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.