Random Forest Nedir? Kapsamlı Rehber
Makine öğrenmesinde en yaygın kullanılan ve güvenilir algoritmalardan biri olan Random Forest, birden fazla karar ağacını bir araya getirerek tek bir ağacın zayıflıklarını ortadan kaldırır. Bu kapsamlı rehberde karar ağacı temelinden bagging mantığına, Out-of-Bag hata tahmininden feature importance'ın gizli tuzaklarına, hiperparametre optimizasyonundan XGBoost karşılaştırmasına kadar Random Forest'ın tüm boyutlarını ele alıyoruz.
1. Karar Ağacı (Decision Tree) Nedir?
Karar ağacı, veriyi ardışık evet/hayır sorularıyla bölerek sınıflandırma ya da regresyon yapan bir modeldir. Her iç düğüm bir özelliğe göre bölünme kriteri, her yaprak düğüm ise bir tahmin değeri içerir. Karar ağaçları yorumlanabilirliği yüksek, eğitimi hızlı modellerdir; ancak eğitim verisine aşırı uyum (overfitting) sağlama eğilimleri nedeniyle tek başlarına kullanıldığında genelleme performansları sınırlı kalır — bkz. Overfitting ve Underfitting yazımız.
2. Bölünme Kriterleri: Gini Safsızlığı vs Entropi
Bir karar ağacı her düğümde "hangi özellik, hangi eşik değeriyle bölünmeli?" sorusuna, düğümün safsızlığını (impurity) en çok azaltan bölünmeyi seçerek yanıt verir. İki yaygın ölçüt:
Entropi: H = −Σᵢ pᵢ log₂(pᵢ)
Burada pᵢ, düğümdeki gözlemlerin i sınıfına ait olma oranıdır. Her iki ölçüt de bir düğüm tamamen "saf" (tek sınıf) olduğunda 0, sınıflar eşit dağıldığında maksimum değere ulaşır. Pratikte ikisi de çok benzer ağaçlar üretir; Gini hesaplama olarak biraz daha hızlıdır (logaritma içermez) ve scikit-learn'de varsayılandır.
3. Ensemble Learning ve Bagging Yöntemi
Ensemble learning, birden fazla modelin tahminlerini birleştirerek daha güçlü ve kararlı bir model elde etme yaklaşımıdır. Bu yaklaşımın iki temel yöntemi vardır: bagging (Bootstrap Aggregating) ve boosting (bkz. XGBoost Nedir? yazımız).
Bagging yönteminde eğitim verisi yerine koyarak örnekleme (bootstrap) ile birden fazla alt kümeye bölünür, her alt küme üzerinde ayrı bir model eğitilir ve tahminler çoğunluk oylaması (sınıflandırma) ya da ortalama alma (regresyon) ile birleştirilir. Bu süreç varyansı düşürür, overfitting riskini azaltır ve modeli daha kararlı hale getirir.
4. Random Forest Algoritması: Adım Adım
Random Forest, bagging yönteminin üstüne bir de rastgele özellik seçimi ekleyerek karar ağaçları arasındaki korelasyonu kırar. Algoritma şu adımları izler:
- Eğitim verisinden bootstrap örneklemesi ile B adet alt küme oluşturulur.
- Her alt küme üzerinde bir karar ağacı büyütülür; ancak her bölünme noktasında tüm özellikler değil, rastgele seçilen m özellik aday olarak değerlendirilir (genellikle m = √p, p toplam özellik sayısı).
- Ağaçlar budanmadan tam derinliğe kadar büyütülür.
- Tahmin aşamasında tüm ağaçların çıktıları birleştirilir: sınıflandırmada çoğunluk oyu, regresyonda aritmetik ortalama alınır.
İpucu: Rastgele özellik seçimi, ağaçların birbirinden bağımsız hatalar yapmasını sağlar. Böylece birleştirme adımında hatalar büyük ölçüde birbirini götürür ve genel doğruluk artar. Bu ilke "wisdom of crowds" olarak da bilinir.
5. Out-of-Bag (OOB) Hata Tahmini
Bootstrap örneklemesinin ilginç bir matematiksel özelliği vardır: her ağaç, eğitim verisinin ortalama olarak yalnızca ~%63'ünü kullanır (n→∞ için 1−1/e ≈ 0.632); kalan ~%37'lik kısım (Out-of-Bag — OOB örnekler) o ağaç için hiç görülmemiştir.
Bu özellik ücretsiz bir doğrulama mekanizması sağlar: her gözlem, yalnızca kendisini eğitiminde görmemiş ağaçlarla tahmin edilir ve bu tahminlerin gerçek değerle karşılaştırılması, ayrı bir test seti veya çapraz doğrulama olmadan yansız bir genelleme hata tahmini (OOB error) verir.
scikit-learn'de oob_score=True parametresiyle otomatik hesaplanır. Özellikle küçük veri setlerinde, veriyi ayrıca bir doğrulama setine ayırmak zorunda kalmadan hızlı bir model kalitesi göstergesi sunar.
6. Feature Importance: Gini vs Permutation
Random Forest, her özelliğin tahmin gücüne ne kadar katkıda bulunduğunu hesaplayan yerleşik bir feature importance mekanizmasına sahiptir. İki farklı yaklaşım vardır:
| Yöntem | Nasıl Hesaplanır | Bilinen Sorun |
|---|---|---|
| Gini Importance (MDI) | Bir özellik kullanılarak yapılan bölünmelerdeki safsızlık azalmasının tüm ağaçlar üzerindeki ortalaması | Yüksek kardinaliteli (çok kategorili/sürekli) değişkenleri yapay olarak şişirir; hesaplaması hızlıdır (scikit-learn varsayılanı) |
| Permutation Importance | Bir özelliğin değerleri rastgele karıştırılır (permute edilir) ve model performansındaki düşüş ölçülür | Daha güvenilir ama hesaplama maliyeti yüksektir; korelasyonlu özelliklerde önemi paylaştırabilir |
Kritik uyarı: Gini importance, sürekli veya çok kategorili değişkenleri (örn. müşteri ID, tarih) yapay olarak "önemli" gösterme eğilimindedir çünkü bu tür değişkenler daha fazla olası bölünme noktası sunar. Karar raporlarında yalnızca Gini importance'a güvenmek yanıltıcı olabilir; sklearn.inspection.permutation_importance ile çapraz kontrol önerilir.
7. Temel Hiperparametreler
- n_estimators: Ormandaki ağaç sayısı. Daha fazla ağaç genellikle daha kararlı sonuç verir; ancak hesaplama maliyeti artar. 100–500 arası yaygın başlangıç değeridir.
- max_depth: Her ağacın maksimum derinliği. Sınırlandırılmazsa overfitting riski artar; çok kısıtlanırsa underfitting oluşur.
- max_features: Her bölünmede değerlendirilen özellik sayısı. Sınıflandırmada varsayılan √p, regresyonda p/3'tür.
- min_samples_split / min_samples_leaf: Bölünme için gereken minimum örnek sayısı; küçük değerler overfitting'e yol açabilir.
- bootstrap: Alt küme oluşturma yöntemi; True ile bootstrap örneklemesi uygulanır.
8. Hiperparametre Optimizasyonu
Hiperparametreleri manuel denemek yerine sistematik arama yöntemleri kullanılmalıdır:
- GridSearchCV: Tanımlanan tüm hiperparametre kombinasyonlarını dener; kapsamlı ama yavaş.
- RandomizedSearchCV: Belirli bir bütçe dahilinde rastgele kombinasyonlar dener; büyük arama uzaylarında GridSearch'e göre çok daha verimlidir.
- Bayesian Optimization (Optuna, scikit-optimize): Önceki denemelerin sonuçlarına göre bir sonraki denemeyi akıllıca seçer; en verimli ama ek kütüphane gerektirir.
9. Random Forest ile Tek Karar Ağacı Karşılaştırması
| Özellik | Tek Karar Ağacı | Random Forest |
|---|---|---|
| Overfitting Riski | Yüksek | Düşük |
| Yorumlanabilirlik | Yüksek | Orta |
| Doğruluk | Orta | Yüksek |
| Eğitim Süresi | Çok Hızlı | Orta |
| Gürültüye Dayanıklılık | Düşük | Yüksek |
| Feature Importance | Var (sınırlı) | Var (güvenilir, bkz. Bölüm 6) |
| Hiperparametre Sayısı | Az | Orta |
10. Random Forest vs Gradient Boosting (XGBoost)
Her ikisi de ağaç tabanlı ensemble yöntemleridir ama temel felsefeleri farklıdır: Random Forest ağaçları bağımsız ve paralel eğitir (bagging); Gradient Boosting (XGBoost, LightGBM) ise ağaçları ardışık eğitir, her yeni ağaç bir öncekinin hatalarını düzeltmeye odaklanır (bkz. XGBoost Nedir?).
🔷 Random Forest kullanın, eğer…
- Hızlı, sağlam bir başlangıç modeli istiyorsanız
- Hiperparametre ayarına az zaman ayırmak istiyorsanız (varsayılanlar bile iyi çalışır)
- Paralel eğitim (n_jobs=-1) ile hız önemliyse
- Aşırı öğrenmeye karşı doğal dirence ihtiyacınız varsa
🟩 XGBoost/LightGBM kullanın, eğer…
- Son %1-2'lik doğruluk farkı önemliyse (Kaggle yarışmaları, üretim sistemleri)
- Kategorik değişken/eksik veri native desteği istiyorsanız
- Hiperparametre ayarına zaman ayırabiliyorsanız
- Çok büyük veri setinde bellek verimliliği kritikse
11. Sınıf Dengesizliği ile Başa Çıkma
Nadir olay tahmininde (dolandırıcılık tespiti, nadir hastalık teşhisi gibi %1-5 pozitif sınıf oranı olan problemlerde) Random Forest çoğunluk sınıfına yanlı tahminler üretebilir. Çözümler:
- class_weight='balanced': scikit-learn'de azınlık sınıfına otomatik daha yüksek ağırlık verir.
- SMOTE (Synthetic Minority Oversampling): Azınlık sınıfı için sentetik örnekler üretir.
- Eşik (threshold) ayarı: Varsayılan 0.5 olasılık eşiğini, iş problemine göre (örn. 0.3) kaydırmak.
- Uygun metrik seçimi: Dengesiz sınıflarda accuracy yanıltıcıdır; precision/recall, F1-skoru veya ROC-AUC/PR-AUC tercih edilmelidir.
12. Python ile Random Forest Uygulaması
13. Avantajlar ve Dezavantajlar
Avantajlar: Overfitting'e karşı dirençlidir; eksik veriye ve aykırı değerlere dayanıklıdır; ön işleme gerektirmez (ölçekleme zorunlu değildir); hem sınıflandırma hem regresyon görevlerinde kullanılır; yerleşik feature importance ve OOB doğrulama sağlar; paralel eğitime uygundur.
Dezavantajlar: Tek bir karar ağacına kıyasla yorumlanması güçtür; büyük n_estimators değerlerinde bellek ve işlem süresi artar; gerçek zamanlı düşük gecikme gerektiren uygulamalarda yavaş kalabilir; çok boyutlu seyrek verilerle (örn. metin verisi) performansı sınırlı olabilir; genellikle XGBoost/LightGBM'e göre son doğruluk noktasında geride kalır.
14. Yaygın Hatalar
- Yalnızca Gini importance'a bakıp permutation importance ile doğrulamamak: Yüksek kardinaliteli değişkenlerin yapay şişirilmiş önemi yanlış karar aldırabilir.
- OOB skorunu görmezden gelip her zaman ayrı test seti ayırmak: Küçük veri setlerinde OOB, veriyi boşa harcamadan güvenilir bir tahmin sunar.
- Dengesiz sınıflarda accuracy'ye güvenmek: %95 çoğunluk sınıfı olan bir problemde her şeyi çoğunluk sınıfı tahmin eden bir model bile %95 accuracy verir; F1/ROC-AUC kullanılmalıdır.
- Hiperparametre aramasını train seti yerine test setinde yapmak: Bu, veri sızıntısına (data leakage) yol açar; arama yalnızca eğitim verisi + çapraz doğrulama üzerinde yapılmalıdır.
- Kategorik değişkenleri sıra bilgisi taşıyormuş gibi (ordinal) kodlamak: Nominal kategorileri 1,2,3... olarak kodlamak yapay sıralama ilişkisi katar; one-hot encoding tercih edilmelidir.
Kaynaklar
- Breiman, L. (2001). Random Forests. Machine Learning, 45(1), 5–32.
- Hastie, T., Tibshirani, R., & Friedman, J. (2009). The Elements of Statistical Learning (2nd ed.). Springer.
- Strobl, C., Boulesteix, A. L., Zeileis, A., & Hothorn, T. (2007). Bias in random forest variable importance measures. BMC Bioinformatics, 8(1), 25.
Random Forest Modelinizi Birlikte Kuralım
Verinize özel Random Forest modeli kurulumu, hiperparametre optimizasyonu ve yorumlama desteği için uzman ekibimizle iletişime geçin.
Ücretsiz Danışmanlık Al