Isolation Forest construye muchos arboles aleatorios y asigna un puntaje de anomalia segun que tan rapido se aisla una muestra. Funciona con buena velocidad incluso en datos de alta dimension.
1. Como funciona #
- Se toman submuestras aleatorias de los datos.
- Se crean Isolation Trees dividiendo con caracteristicas y umbrales elegidos al azar.
- Las muestras con un camino promedio mas corto se aislan mas facil, por lo tanto tienen mayor probabilidad de ser anomalias.
El puntaje se normaliza con la longitud esperada del camino de un arbol binario aleatorio, \(c(n)\).
2. Ejemplo en 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 = anomalia
plt.figure(figsize=(6, 5))
plt.scatter(X[:, 0], X[:, 1], c=scores, cmap="magma", s=30)
plt.colorbar(label="anomaly score")
plt.title("Puntajes de Isolation Forest")
plt.tight_layout()
plt.show()
print("Anomalias detectadas:", np.sum(labels == -1))
3. Hiperparametros #
n_estimators: Numero de arboles. Mas arboles da resultados mas estables.max_samples: Muestras por arbol. Por defectomin(256, n_samples).contamination: Proporcion estimada de anomalias; define el umbral.max_features: Numero de caracteristicas usadas por division.
4. Ventajas y desventajas #
| Ventajas | Desventajas |
|---|---|
| Rapido incluso en alta dimension | El resultado puede variar con la semilla |
| No requiere escalado (aunque se recomienda) | Puede pasar por alto anomalias locales |
| Entrenamiento e inferencia simples | contamination puede ser dificil de ajustar |
5. Resumen #
- Isolation Forest es un metodo basado en arboles que usa caminos cortos de aislamiento como señal de anomalia.
- En scikit-learn es facil de usar y se ajusta principalmente con el numero de arboles y el tamaño de la muestra.
- Es util para filtrar rapidamente candidatos anormales en logs o datos de sensores.