Algorytm isolation forrest - wykrywanie anomalii





Algorytm isolation forrest stosowany jest do wykrywania naomalii.

Ten kod pokazuje:
Generowanie przykładowych danych (normalne + anomalie),
Trening modelu IsolationForest,
Wykrywanie anomalii,
Wizualizację wyników.

Isolation Forest "izoluje" punkty, które wyglądają inaczej niż większość – im łatwiej dany punkt odizolować, tym bardziej podejrzany.
contamination=0.1 zakłada, że 10% danych to anomalie – to ważny parametr.
Predykcja:
1 – normalny punkt
-1 – anomalia

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

# 1. Generowanie danych - 100 normalnych punktów + 10 anomalii
rng = np.random.RandomState(42)

# Dane "normalne"
X_normal = 0.3 * rng.randn(100, 2)
X_normal = np.r_[X_normal + 2, X_normal - 2]  # wokół (2,2) i (-2,-2)

# Anomalie
X_outliers = rng.uniform(low=-4, high=4, size=(10, 2))

# Połączenie danych
X = np.r_[X_normal, X_outliers]

# 2. Model Isolation Forest
model = IsolationForest(contamination=0.1, random_state=42)
model.fit(X)

# 3. Predykcja: -1 = anomalia, 1 = normalny punkt
y_pred = model.predict(X)
df = pd.DataFrame(X, columns=["x1", "x2"])
df["label"] = y_pred

# 4. Wizualizacja
plt.figure(figsize=(8, 6))
plt.title("Isolation Forest – Wykrywanie anomalii")

# Punkty normalne
normal = df[df["label"] == 1]
plt.scatter(normal["x1"], normal["x2"], c='blue', label="Normalne", alpha=0.6)

# Anomalie
outliers = df[df["label"] == -1]
plt.scatter(outliers["x1"], outliers["x2"], c='red', label="Anomalie", edgecolors='k')

plt.legend()
plt.xlabel("x1")
plt.ylabel("x2")
plt.grid(True)
plt.tight_layout()
plt.show()
	
:)