Isolation Forest membangun banyak pohon acak dan memberi skor anomali berdasarkan seberapa cepat sebuah sampel bisa diisolasi. Metode ini tetap cepat bahkan untuk data berdimensi tinggi.
1. Cara kerja #
- Mengambil sub-sampel data secara acak.
- Membangun Isolation Tree dengan fitur dan ambang yang dipilih acak.
- Sampel dengan panjang jalur rata-rata yang lebih pendek lebih mudah terisolasi, sehingga lebih mungkin menjadi anomali.
Skor anomali dinormalisasi menggunakan panjang jalur harapan pohon biner acak, \(c(n)\).
2. Contoh 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 = anomali
plt.figure(figsize=(6, 5))
plt.scatter(X[:, 0], X[:, 1], c=scores, cmap="magma", s=30)
plt.colorbar(label="anomaly score")
plt.title("Skor Isolation Forest")
plt.tight_layout()
plt.show()
print("Anomali terdeteksi:", np.sum(labels == -1))
3. Hiperparameter #
n_estimators: Jumlah pohon. Lebih banyak biasanya lebih stabil.max_samples: Sampel per pohon. Defaultmin(256, n_samples).contamination: Perkiraan proporsi anomali; dipakai sebagai ambang.max_features: Jumlah fitur yang dipakai pada setiap split.
4. Kelebihan dan kekurangan #
| Kelebihan | Kekurangan |
|---|---|
| Relatif cepat pada dimensi tinggi | Hasil bisa berubah karena seed acak |
| Tidak wajib scaling (meski disarankan) | Anomali lokal kecil bisa terlewat |
| Training dan inferensi sederhana | contamination kadang sulit ditentukan |
5. Ringkasan #
- Isolation Forest adalah metode berbasis pohon yang memakai jalur isolasi yang pendek sebagai sinyal anomali.
- Mudah digunakan di scikit-learn, terutama mengatur jumlah pohon dan jumlah sampel.
- Cocok untuk menyaring kandidat anomali secara cepat pada log atau data sensor.