Isolation Forest merupakan algoritma deteksi anomali tanpa label yang bekerja dengan memisahkan titik data menggunakan pohon binari acak. Sampel yang cepat “terisolasi” (butuh sedikit pemisahan) dianggap sebagai outlier.
Menyusun data contoh #
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
rng = np.random.default_rng(42)
X, _ = make_moons(n_samples=1_000, noise=0.08, random_state=42)
anomaly_index = np.arange(0, 1_000, 60)
X[anomaly_index] *= 2.5 # memperbesar sebagian titik agar menjadi outlier
plt.figure(figsize=(6, 6))
plt.scatter(X[:, 0], X[:, 1], s=10, alpha=0.6, label="observasi")
plt.scatter(X[anomaly_index, 0], X[anomaly_index, 1], marker="x", s=80, c="red", label="anomali yang disisipkan")
plt.legend()
plt.title("Data dua dimensi dengan anomali")
plt.tight_layout()
plt.show()

Melatih Isolation Forest #
from sklearn.ensemble import IsolationForest
detector = IsolationForest(
n_estimators=200,
max_samples=256,
contamination=0.02,
random_state=42,
)
detector.fit(X)
scores = detector.decision_function(X)
pred = detector.predict(X) # -1 berarti outlier
detected_index = np.where(pred < 0)[0]
Parameter contamination mengontrol perkiraan proporsi outlier di dataset. Jika tidak yakin, mulai dari nilai kecil lalu tingkatkan secara bertahap.
Memvisualisasikan hasilnya #
plt.figure(figsize=(6, 6))
plt.scatter(X[:, 0], X[:, 1], s=10, alpha=0.5, label="observasi")
plt.scatter(
X[detected_index, 0],
X[detected_index, 1],
facecolor="none",
edgecolor="crimson",
s=90,
label="anomali terdeteksi",
)
plt.title("Deteksi anomali dengan Isolation Forest")
plt.legend()
plt.tight_layout()
plt.show()

Tips praktis #
- Jangan membuat
contaminationterlalu besar—nilai tinggi akan menyebabkan banyak false positive. Untuk log produksi, nilai 0.01 atau lebih kecil biasanya aman. max_samplesmenentukan ukuran subsample setiap pohon. Jika dataset sangat besar, gunakan nilai tetap (misalnya 512) agar pelatihan tetap cepat.- Gunakan
decision_functionbila Anda perlu mengurutkan anomali berdasarkan skor. Threshold dapat disesuaikan belakangan tanpa melatih ulang model. - Kombinasikan dengan scaler (StandardScaler atau RobustScaler) jika tiap fitur memiliki skala yang sangat berbeda.