Random Forest
Rastgele Orman
Yüzlerce karar ağacını rastgelelikle eğitip oylarını birleştiren topluluk yöntemi — tek ağaca göre çok daha kararlı ve doğrudur.
Tek bir karar ağacı veriye aşırı duyarlıdır: birkaç örnek değişince ağacın yapısı tamamen değişebilir. Random forest bu zayıflığı çözmek için iki tür rastgelelik ekler. Bagging sayesinde her ağaç eğitim verisinin bootstrap (rastgele tekrarlı) örneğiyle eğitilir; her ağaç biraz farklı bir veriden öğrenir. Üstüne her bölme noktasında özelliklerin rastgele bir alt kümesi değerlendirilir; ağaçlar birbirine fazla benzemesin diye.
Tahmin sırasında her ağaç oy verir. Sınıflandırmada çoğunluk kazanır, regresyonda ortalama alınır. Yüzlerce ağacın "ortalaması" tek bir ağaca göre çok daha düşük varyanslıdır — yani yeni veriye daha iyi genellenir. Bu basit fikir, gerçek dünya tabular verisinde on yıllarca en iyi seçeneklerden biri olarak kaldı.
Random forest ayrıca neredeyse "ücretsiz" bir özellik önemi (feature importance) ölçüsü verir: bir özelliği rastgele karıştırırsanız modelin doğruluğu ne kadar düşer? Bu, hangi değişkenlerin gerçekten karar verdiğini hızlıca anlamak için çok değerlidir.
Tek bir uzmana danışmaktansa farklı uzmanlardan oluşan bir kurul toplamak gibi. Her uzman aynı veriyi görmemiş, herkes biraz farklı kaynaklardan öğrenmiş, dolayısıyla her birinin önyargısı da farklı. Karar zamanı geldiğinde herkes oy verir, çoğunluğun görüşü alınır. Tek bir uzmanın hatalı çıkma riski yüksektir; on kişilik bir kurulun aynı anda yanlış olması çok daha zordur.
Sigorta şirketi yeni başvuran müşteriler için hasar tahmini yapmak istiyor. Geçmiş 5 yılın 2 milyon poliçe verisi var: yaş, araç tipi, sürüş geçmişi, lokasyon, kullanım, kredi skoru, daha onlarca özellik.
500 ağaçlı bir random forest eğitildiğinde tek bir karar ağacının (max_depth=20) yaptığından %14 daha iyi MAE elde ediliyor. Üstelik feature importance çıktığında "geceleri park ettiği yer" özelliğinin "araç markası"ndan iki kat daha önemli olduğu ortaya çıkıyor — aktüer ekibi bunu öngörmemişti. Hem doğruluk hem içgörü kazanıldı.
from sklearn.ensemble import RandomForestClassifier
from sklearn.inspection import permutation_importance
import numpy as np
rf = RandomForestClassifier(
n_estimators=500,
max_depth=None, # her ağaç sona kadar büyür
min_samples_leaf=2,
max_features="sqrt", # her bölünmede özelliklerin √n'i
n_jobs=-1, # paralel çalış
random_state=42,
)
rf.fit(X_train, y_train)
# Permutasyon ile özellik önemi (eğitimden bağımsız, daha güvenilir)
result = permutation_importance(rf, X_test, y_test, n_repeats=10, random_state=42)
for i in result.importances_mean.argsort()[::-1][:10]:
print(f"{feature_names[i]:30s} {result.importances_mean[i]:+.4f}")- Tabular veride güçlü baseline gerekirse
- Açıklanabilirliği belli ölçüde korumak istersen (özellik önemi mevcut)
- Eksik değer ve aykırı değere toleranslı bir model lazımsa
- Hiperparametre ayarına çok zaman ayırmadan iyi sonuç gerekiyorsa
- Çok büyük veride hız kritikse — gradient boosting (XGBoost/LightGBM) genelde daha hızlı ve iyi
- Doğrusal ilişkilerin baskın olduğu yerde — basit doğrusal model yeter
- Çıkarsama (inference) zamanının çok düşük olması gerekiyorsa — 500 ağaç toplamı yavaşlayabilir
Çok fazla küçük ağaç
n_estimators sayısı kadar ağaç oylanır — fazla ağaç doğruluğu çok az artırırken inference süresini şişirir. Genelde 200-500 yeter.
Yanlı özellik önemi
Klasik impurity-based feature importance yüksek kardinalite (çok benzersiz değerli) özelliklere haksız avantaj verir. Mümkünse permutation importance kullan.
Aşırı öğrenmeden tamamen kurtulma yanılgısı
Random forest aşırı öğrenmeye dayanıklıdır ama bağışık değildir. Çok küçük veri kümelerinde hâlâ test başarısı düşer. Çapraz doğrulama ile kontrol et.