Ana içeriğe geç

Orta13 dk

Topluluk (ensemble) yöntemleri

Önkoşul:Entropi, Gini, bilgi kazancı

Kanca

18 dersttir hep TEK bir model kuruyoruz. Ama 17. derste karar ağaçlarının veri setindeki küçük değişikliklere karşı KARARSIZ olduğunu söylemiştik. Bu kararsızlığı bir SORUN olarak değil, bir FIRSAT olarak kullanabilir miyiz?

Sezgi

Topluluk (ensemble) yöntemleri, birden fazla modelin tahminlerini BİRLEŞTİREREK, herhangi birinin tek başına yapacağından daha güvenilir bir sonuç elde eder. Fikir, gerçek hayattaki “kalabalığın bilgeliği” (wisdom of the crowds) prensibine benziyor: birçok kişinin (kısmen hatalı) tahminlerinin ortalaması, genelde tek bir kişinin tahmininden daha isabetlidir.

İki temel strateji var:

  • Bagging (bootstrap aggregating): AYNI algoritmanın birden fazla kopyasını, verinin FARKLI rastgele alt örneklemleriyle eğit, sonra oylarını topla.
  • Oy birliği (voting): FARKLI algoritma türlerini (lojistik regresyon, ağaç, KNN gibi) aynı veriyle eğit, tahminlerini birleştir.

Mekanizma

Önce tek bir ağacın ne kadar “kararsız” olduğunu somut olarak görelim:

Müşteri verisi

n = 150
yas = rng.uniform(18, 65, n)
gelir = rng.uniform(3, 25, n)
skor = (yas - 40) / 15 + (gelir - 12) / 8 + rng.normal(0, 0.6, n)
satin_aldi = (skor > 0).astype(int)
X = np.column_stack([yas, gelir])
print(f"{n} müşteri, {satin_aldi.sum()} tanesi satın aldı")
150 müşteri, 95 tanesi satın aldı

Tek ağaçların kararsızlığı

# Aynı VERİYE, farklı bootstrap örneklemleriyle (yerine koyarak yeniden örnekleme) kurulan
# tek ağaçların ne kadar FARKLI kararlar verdiğini görelim.
agac_tahminleri = []
yeni_musteri = np.array([[45, 8]])
for tekrar in range(8):
    indeksler = rng.integers(0, n, n)  # bootstrap örneklem
    agac = DecisionTreeClassifier(max_depth=4, random_state=tekrar)
    agac.fit(X[indeksler], satin_aldi[indeksler])
    tahmin = agac.predict(yeni_musteri)[0]
    agac_tahminleri.append(tahmin)
    print(f"Ağaç {tekrar + 1} (farklı bootstrap örneklem): tahmin = {tahmin}")
print(f"\n8 farklı ağaç, aynı yeni müşteri için {len(set(agac_tahminleri))} farklı tahmin üretti -- tek bir ağaç KARARSIZ.")
Ağaç 1 (farklı bootstrap örneklem): tahmin = 0
Ağaç 2 (farklı bootstrap örneklem): tahmin = 0
Ağaç 3 (farklı bootstrap örneklem): tahmin = 0
Ağaç 4 (farklı bootstrap örneklem): tahmin = 0
Ağaç 5 (farklı bootstrap örneklem): tahmin = 0
Ağaç 6 (farklı bootstrap örneklem): tahmin = 0
Ağaç 7 (farklı bootstrap örneklem): tahmin = 0
Ağaç 8 (farklı bootstrap örneklem): tahmin = 1

8 farklı ağaç, aynı yeni müşteri için 2 farklı tahmin üretti -- tek bir ağaç KARARSIZ.

Aynı temel veriye, sadece farklı bootstrap örneklemleriyle (rastgele, yerine koyarak yeniden örnekleme) kurulan 8 ağaç, AYNI yeni müşteri için 2 farklı tahmin üretti! Şimdi bu “kararsız” ağaçların oy birliğini deneyelim:

Bagging: oy birliğinin gücü

# Bu 8 "kararsız" ağacın ÇOĞUNLUK OYUNU alırsak ne olur? (Random Forest'ın temel fikri -- 20. derste detaylandıracağız)
cogunluk_oyu = int(np.round(np.mean(agac_tahminleri)))
print(f"8 ağacın çoğunluk oyu: {cogunluk_oyu}")

skor_tek_agac = cross_val_score(DecisionTreeClassifier(max_depth=4, random_state=0), X, satin_aldi, cv=5).mean()

from sklearn.ensemble import BaggingClassifier
skor_topluluk = cross_val_score(
    BaggingClassifier(DecisionTreeClassifier(max_depth=4), n_estimators=50, random_state=0),
    X, satin_aldi, cv=5,
).mean()
print(f"\nTek ağaç, çapraz doğrulama doğruluğu: {skor_tek_agac:.3f}")
print(f"50 ağacın topluluğu (bagging), çapraz doğrulama doğruluğu: {skor_topluluk:.3f}")
8 ağacın çoğunluk oyu: 0

Tek ağaç, çapraz doğrulama doğruluğu: 0.800
50 ağacın topluluğu (bagging), çapraz doğrulama doğruluğu: 0.833

50 ağacın oy birliği (bagging), tek bir ağaçtan (0.800) daha iyi bir çapraz doğrulama skoru (0.833) veriyor. Çoğu kişi “birden fazla model kurmak, sadece hesaplama maliyetini artırır, doğruluğu değil” sanır. Değil, çünkü her ağaç farklı bir bootstrap örneklemde eğitildiği için farklı HATALAR yapar — bu hatalar birbirinden BAĞIMSIZ olduğunda, çoğunluk oyu bu hataları “ortalayarak” iptal eder.

Matematik

Neden çoğunluk oyu işe yarar?
P(c¸og˘unluk yanlıs¸)=k>n/2(nk)εk(1ε)nkP(\text{çoğunluk yanlış}) = \sum_{k > n/2} \binom{n}{k} \varepsilon^k (1-\varepsilon)^{n-k}
SembolAnlamı
nnTopluluktaki model sayısı
ε\varepsilonHer bir modelin (bağımsız) hata oranı
P(c¸og˘unluk yanlıs¸)P(\text{çoğunluk yanlış})Çoğunluğun da yanlış olma olasılığı

Eğer her model rastgeleden biraz daha iyiyse (ε<0.5\varepsilon < 0.5) ve hataları birbirinden BAĞIMSIZSA, nn arttıkça çoğunluğun yanlış olma olasılığı hızla küçülür. Örneğin ε=0.35\varepsilon=0.35 olan 11 bağımsız modelin çoğunluğu yanlış olma olasılığı ε\varepsilon‘dan çok daha düşüktür. Bağımsızlık kritik varsayımdır — modeller birbirine çok benzer hatalar yaparsa (örn. aynı veri, aynı algoritma, hiç çeşitlilik yok), bu avantaj kaybolur.

Kod

Topluluklar, aynı algoritmanın kopyalarıyla sınırlı değil — farklı algoritma türlerini de birleştirebiliriz:

Farklı model türlerinin oy birliği

# Topluluk sadece AYNI algoritmanın kopyalarıyla değil, FARKLI algoritma türleriyle de kurulabilir.
lojistik = LogisticRegression()
agac = DecisionTreeClassifier(max_depth=4, random_state=0)
knn = KNeighborsClassifier(n_neighbors=7)

for isim, model in [("Lojistik regresyon", lojistik), ("Karar ağacı", agac), ("KNN", knn)]:
    skor = cross_val_score(model, X, satin_aldi, cv=5).mean()
    print(f"{isim:<20} tek başına: {skor:.3f}")

oy_birligi = VotingClassifier(estimators=[("lr", lojistik), ("dt", agac), ("knn", knn)], voting="hard")
skor_oy_birligi = cross_val_score(oy_birligi, X, satin_aldi, cv=5).mean()
print(f"{'Üç modelin oy birliği':<20} : {skor_oy_birligi:.3f}")
print("Oy birliği, en zayıf modeli (karar ağacı) belirgin şekilde geride bırakıyor ama en güçlü modeli")
print("(lojistik regresyon) geçemiyor -- topluluk 'en iyi tek modeli her zaman yener' garantisi vermez,")
print("asıl faydası HANGİ modelin en iyi olacağını ÖNCEDEN bilmeden dengeli/dayanıklı bir sonuç almaktır.")
Lojistik regresyon   tek başına: 0.887
Karar ağacı          tek başına: 0.800
KNN                  tek başına: 0.860
Üç modelin oy birliği : 0.853
Oy birliği, en zayıf modeli (karar ağacı) belirgin şekilde geride bırakıyor ama en güçlü modeli
(lojistik regresyon) geçemiyor -- topluluk 'en iyi tek modeli her zaman yener' garantisi vermez,
asıl faydası HANGİ modelin en iyi olacağını ÖNCEDEN bilmeden dengeli/dayanıklı bir sonuç almaktır.

Dikkat çekici bir nüans: oy birliği (0.853), en zayıf modeli (karar ağacı, 0.800) belirgin şekilde geride bırakıyor ama en güçlü modeli (lojistik regresyon, 0.887) GEÇEMİYOR. Topluluğun asıl faydası “her zaman en iyi tek modeli yenmek” değil — hangi modelin en iyi olacağını ÖNCEDEN bilmeden, dengeli ve güvenilir bir sonuç almaktır.

Tek ağaç, 50 ağaçlık bagging topluluğu ve 3 farklı modelin oy birliğinin çapraz doğrulama doğruluğunu karşılaştıran çubuk grafik.
Bagging topluluğu (0.833), tek ağaçtan (0.800) belirgin şekilde daha iyi; farklı model türlerinin oy birliği (0.853) ise en zayıfı geride bırakıyor ama en güçlü tek modeli geçemiyor.

Nerede işe yarar

Topluluk yöntemleri, modern makine öğrenmesinin en güçlü ve en yaygın kullanılan araçlarından biridir:

  • Kararsız (yüksek varyanslı) modellerde en etkili. Karar ağaçları gibi veri değişikliklerine duyarlı modeller, bagging’den en çok fayda gören modellerdir (20. derste Random Forest’ta detaylandıracağız).
  • Yarışma çözümlerinin standart bileşeni. Kaggle gibi platformlardaki kazanan çözümlerin büyük çoğunluğu, bir şekilde topluluk yöntemi kullanır.
  • Belirsizliği azaltmak istediğinde. Tek bir modelin tahminine “ne kadar güvenmeli” sorusuna, topluluktaki modellerin ANLAŞMA derecesi de bir ipucu verebilir.

Bu 3 hatayı yaparsın:

  1. Topluluğun “her zaman en iyi tek modelden daha iyi olacağını” varsaymak — bu derste gördüğümüz gibi garanti değil.
  2. Çok BENZER modelleri bir araya getirmek — bağımsızlık/çeşitlilik olmadan, topluluğun avantajı büyük ölçüde kaybolur.
  3. Hesaplama maliyetini göz ardı etmek — 50 model eğitmek, 1 model eğitmekten çok daha pahalıdır; kazanç bu maliyete değip değmediğini düşünmek gerekir.

Kendini test et

1. Bagging (bootstrap aggregating) temel olarak ne yapar?
  1. Tek bir modeli daha uzun süre eğitir
  2. Aynı algoritmanın birden fazla kopyasını, verinin farklı rastgele alt örneklemleriyle eğitip tahminlerini birleştirir (doğru cevap)
  3. Sadece en iyi modeli seçer, diğerlerini atar
  4. Veriyi küçültür

Neden: Bagging, aynı algoritmayı farklı bootstrap (rastgele, yerine koyarak) örneklemlerle birden fazla kez eğitir, sonra bu modellerin tahminlerini (oylarını) birleştirir.

2. Notebook'ta 8 farklı ağacın aynı yeni müşteri için 2 farklı tahmin üretmesi neyi gösteriyor?
  1. Kod hatalıydı
  2. Tek bir karar ağacı, veri setindeki küçük değişikliklere (farklı bootstrap örneklemlere) karşı kararsızdır (doğru cevap)
  3. Veri seti çok küçüktü
  4. Ağaçlar birbirinden bağımsız değil

Neden: Karar ağaçları, 17. derste de değindiğimiz gibi, eğitim verisindeki küçük değişikliklere karşı yüksek varyanslıdır -- bu yüzden farklı bootstrap örneklemler farklı ağaç yapıları ve farklı tahminler üretebilir.

3. Notebook'ta 3 farklı modelin oy birliği (0.853), en güçlü tek modeli (lojistik regresyon, 0.887) neden GEÇEMEDİ?
  1. Oy birliği her zaman en kötü sonucu verir
  2. Topluluk yöntemleri 'her zaman en iyi tek modeli yenmek' garantisi vermez -- asıl faydası, hangi modelin en iyi olacağını önceden bilmeden dengeli bir sonuç almaktır (doğru cevap)
  3. Kod hatalıydı
  4. Lojistik regresyon her zaman en iyisidir

Neden: Oy birliği, zayıf modellerin hatalarını dengeleyerek genel bir sağlamlık sağlar, ama eğer bir model gerçekten çok daha güçlüyse, o modelin gücü diğerlerinin ortalamasıyla 'seyreltilebilir'.

Özet

Özet

  • Topluluk yöntemleri, birden fazla modelin tahminlerini birleştirerek tek bir modelden daha güvenilir sonuçlar elde etmeye çalışır.
  • Bagging, aynı algoritmayı farklı bootstrap örneklemlerle eğitip oylarını birleştirir.
  • Oy birliği (voting), farklı algoritma türlerinin tahminlerini birleştirir.
  • Topluluğun avantajı, modellerin hatalarının birbirinden BAĞIMSIZ olmasına dayanır.
  • Topluluk, en zayıf modeli geride bırakabilir ama en güçlü tek modeli her zaman geçeceği garanti edilemez.
Sonraki adım: Random Forest →