---
title: 'Temel Model'
source: 'https://academia.sh/tr/kurslar/model-etik-ve-yorum/temel-model'
course: 'Model Değerlendirme, Yorumlanabilirlik ve Etik'
language: tr
updated: '2026-08-17T18:10:13+00:00'
license: 'CC BY-SA 4.0'
---

# Temel Model

Taban çizgisinin bir araç değil bir tasarım nesnesi olduğunun ölçülmesi: aynı derinlik 6 karar ağacı sekiz ayrı taban adayına karşı -0,0119 ile +0,5357 arasında okunuyor ve seçim tek başına 0,5476 oynatıyor. Arama tablosu tabanı kendi kapasitesine sahiptir — beş hücrede 0,7579, on beş hücrede 0,7897 ile modeli geçiyor, otuz dokuz hücrede 0,7500'e düşüyor. Taban seçimi alt gruplarda da yön değiştiriyor: en sık sınıfa göre on iki alt grubun dördünde tabanın altında kalan model, bölge ve basamak arama tablosuna göre sekizinde altında kalıyor ve fark açıklığı 0,2173'ten 0,1351'e iniyor. M27'nin yedi kursunda seçilmiş taban çizgileri tek tabloda toplanıyor.

Önceki ders taban çizgisini ikinci kez kendi başına bir soruya dönüştürdü. Bedel yapısı değişince
taban da değişti: bir yapıda hiç kimseyi işaretlememek, öbüründe herkesi işaretlemek. Alt gruplarda
ise her grubun kendi tabanı çıktı ve bir grupta 0,0000, başkasında 0,7882 oldu. Yedi kurs boyunca
taban çizgisi bir **araçtı** — modelin sayısını okunur kılan, seçildikten sonra bir daha
tartışılmayan sabit bir işaret.

Bu ders onun sabit olmadığını ölçer. Bir problemde kaç taban vardır, aralarında nasıl seçim
yapılır, seçim aynı modeli hangi iki ayrı biçimde okutur. Taban çizgisi burada bir araç değil bir
**tasarım nesnesidir**: kendi kapasitesi, kendi aşırı uyumu ve kendi alt grup davranışı olan bir
yordamdır. Dersin sonunda M27'nin yedi kursunda fiilen seçilmiş tabanlar tek bir tabloda toplanır.

- **DT16.** Kurgu, bölme (**756/252/252**), tohum, ölçüt (**doğruluk**) ve alt grup tanımları
  önceki iki dersten aynen sürer: dört eksen, **13 alt grup**, **n < 25 olan grup açıklığa girmez**.
- **DT17.** Karşılaştırılan model **derinlik 6 karar ağacıdır** ve sınama kümesinde **0,7778**
  verir. Bu sayı ders boyunca hiç değişmez; değişen tek şey karşısına konan tabandır.
- **DT18.** Taban adayı, eğitim kümesinden öğrenilmiş olsa bile modelin kullandığı özniteliklerin
  tamamına bakmayan ve kendisi bir ayar araması yapmayan yordamdır. Sınır bir karardır.
- **DT19.** Sekiz aday sınanır: hepsini şüpheli saymak, sınıf oranına göre rastgele atamak, en sık
  sınıfı söylemek, tek bölmeli bir kural, ve dört **arama tablosu** — bölge; bölge ve basamak;
  bunlara hane; dört eksenin tamamı. Arama tablosu bir hücredeki eğitim çoğunluğunu söyler,
  görülmemiş hücrede en sık sınıfı; **hücre sayısı yazılır**, çünkü ölçülen şey odur.
- **DT20.** Rastgele atama **yirmi koşumun ortalamasıdır**; tek koşum basılsaydı sayı koşumdan
  koşuma oynardı.
- **DT21.** Adaylar arasında seçim bu derste **yapılmaz**. Ölçülen şey seçimin sonucu değil,
  seçimin aynı modeli ne kadar oynatabildiğidir.
- **DT22.** Son bölümdeki kurs tablosunun her sayısı kaynak dersten okunmuştur; birimler kurslar
  arasında ortak değildir ve satırlar birbiriyle toplanmaz.

## Bir Problemde Kaç Taban Var

İlk blok kurguyu kurar, modeli eğitir ve sekiz taban adayını aynı sınama kümesinde ölçer.

```python
# MODELDIR. M26'nin KURGU olcum agi ayni tohumla uretilir, okumalar abone duzeyinde
# ozetlenir ve uzerine KURGU bir kacak/ariza suphesi etiketi eklenir.
import math

TOHUM, HAM, M32 = 20260218, 1400, 0xFFFFFFFF
BOLGE = [("kuzey", 0.28, 21, 0.00), ("guney", 0.22, 17, -0.10),
         ("dogu", 0.18, 26, 0.30), ("bati", 0.14, 14, -0.05),
         ("merkez", 0.18, 23, 0.05)]


def uretec(t):
    x = ((t ^ (t >> 16)) * 2246822507) & M32
    x = ((x ^ (x >> 13)) * 3266489909) & M32
    s = [(x ^ (x >> 16)) & M32]

    def sonraki():
        s[0] = (s[0] * 1664525 + 1013904223) & M32
        return s[0] / 4294967296
    return sonraki


def ayrik(u, w):
    t = 0.0
    for i, x in enumerate(w):
        t += x
        if u < t:
            return i
    return len(w) - 1


ABONE, OKUMA, VERI = [], {}, []
for i in range(HAM):
    r = uretec(TOHUM + i)
    b = BOLGE[ayrik(r(), [x[1] for x in BOLGE])]
    hane = 1 + ayrik(r(), [0.06, 0.24, 0.30, 0.24, 0.11, 0.05])
    memnun = 1 + ayrik(r(), [0.08, 0.14, 0.27, 0.34, 0.17])
    if r() >= 0.046:
        ABONE.append({"no": 10001 + i, "bolge": b, "hane": hane, "memnuniyet": memnun})
for k in ABONE:
    r = uretec(TOHUM + 7000 + k["no"])
    for d in range(ayrik(r(), [0.05, 0.12, 0.21, 0.62])):
        OKUMA.setdefault(k["no"], []).append(0.0 if r() < 0.038 else math.floor(
            k["bolge"][2] * math.exp((r() + r() + r() - 1.5) * 0.62)
            * (1 - d * 0.05) * 100 + 0.5) / 100)
        r()
    v = OKUMA.get(k["no"])
    if v is None:
        continue
    ort, oyn, r = sum(v) / len(v), max(v) - min(v), uretec(TOHUM + 51000 + k["no"])
    z = (0.052 * (ort - 20) + 0.85 * (min(v) == 0.0) + 0.026 * oyn
         + 0.24 * (k["hane"] >= 5) - 0.20 * (k["memnuniyet"] >= 4) + k["bolge"][3]
         + 0.9 * (k["no"] - 10001) / 1399 + (r() + r() + r() - 1.5) * 1.30)
    x = {"no": k["no"], "hane": k["hane"], "memnuniyet": k["memnuniyet"],
         "donem": len(v), "ort_tuketim": round(ort, 2), "oynaklik": round(oyn, 2),
         "sifir_okuma": int(min(v) == 0.0), "supheli": int(z > 1.35),
         "bolge": k["bolge"][0]}
    for b in BOLGE:
        x["b_" + b[0]] = int(k["bolge"][0] == b[0])
    VERI.append(x)

ALAN = ["ort_tuketim", "oynaklik", "hane", "memnuniyet", "donem", "sifir_okuma",
        "b_kuzey", "b_guney", "b_dogu", "b_bati", "b_merkez"]


def karistir(veri, tohum):
    r, s = uretec(tohum), list(range(len(veri)))
    for i in range(len(s) - 1, 0, -1):
        j = int(r() * (i + 1))
        s[i], s[j] = s[j], s[i]
    return [veri[i] for i in s]


def uce_bol(K):
    a, b = int(len(K) * 0.6), int(len(K) * 0.8)
    return K[:a], K[a:b], K[b:]


def safsizlik(s):
    p = sum(x["supheli"] for x in s) / len(s) if s else 0.0
    return 2 * p * (1 - p)


def agac(s, derinlik, alanlar, enaz=2):
    p, en = sum(x["supheli"] for x in s) / len(s), None
    if derinlik and len(s) >= 2 * enaz and 0.0 < p < 1.0:
        for a in alanlar:
            d = sorted({x[a] for x in s})
            for v in (d[1:] if len(d) < 10 else
                      [d[int(i * len(d) / 10)] for i in range(1, 10)]):
                sol = [x for x in s if x[a] < v]
                sag = [x for x in s if x[a] >= v]
                if min(len(sol), len(sag)) < enaz:
                    continue
                k = safsizlik(s) - (len(sol) * safsizlik(sol) + len(sag) * safsizlik(sag)) / len(s)
                if en is None or k > en[0]:
                    en = (k, a, v, sol, sag)
    if en is None or en[0] <= 1e-9:
        return {"tahmin": int(p > 0.5)}
    return {"alan": en[1], "esik": en[2], "sol": agac(en[3], derinlik - 1, alanlar),
            "sag": agac(en[4], derinlik - 1, alanlar)}


def tahmin(d, x):
    while "tahmin" not in d:
        d = d["sol"] if x[d["alan"]] < d["esik"] else d["sag"]
    return d["tahmin"]


def dogruluk(d, s):
    return sum(tahmin(d, x) == x["supheli"] for x in s) / len(s)


def gruplar(x):                    # dort eksen, on uc alt grup; 01'den aynen surer
    return [("bolge", x["bolge"]),
            ("tarife", "10" if x["ort_tuketim"] <= 10 else
             ("25" if x["ort_tuketim"] <= 25 else "40")),
            ("hane", "1-2" if x["hane"] <= 2 else ("3-4" if x["hane"] <= 4 else "5+")),
            ("okuma", "az" if x["donem"] <= 2 else "tam")]


ADLAR = sorted({g for x in VERI for g in gruplar(x)})
EGT, DOG, SIN = uce_bol(karistir(VERI, TOHUM + 90000))
M, TEK = agac(EGT, 6, ALAN), agac(EGT, 1, ALAN)
ORAN = sum(x["supheli"] for x in EGT) / len(EGT)
CS = int(ORAN > 0.5)


def gr(x):
    return dict(gruplar(x))


def arama(anahtar):                # arama tablosu tabani: hucrede egitim cogunlugu
    c = {}
    for x in EGT:
        c.setdefault(anahtar(x), [0, 0])[x["supheli"]] += 1
    c = {k: int(v[1] > v[0]) for k, v in c.items()}
    return lambda x: c.get(anahtar(x), CS)


def rast(s, n=20):                 # sinif oranina gore atama, yirmi kosumun ortalamasi
    t = 0.0
    for j in range(n):
        r = uretec(TOHUM + 61000 + j)
        t += sum((1 if r() < ORAN else 0) == x["supheli"] for x in s) / len(s)
    return t / n


def oran(f, s):
    return sum(f(x) == x["supheli"] for x in s) / len(s)


ANAHTAR = (("bolge", lambda x: x["bolge"]),
           ("bolge+basamak", lambda x: (x["bolge"], gr(x)["tarife"])),
           ("+hane", lambda x: (x["bolge"], gr(x)["tarife"], gr(x)["hane"])),
           ("dort eksen", lambda x: (x["bolge"], gr(x)["tarife"], gr(x)["hane"],
                                     gr(x)["okuma"])))
ADAY = [("hepsi supheli", 1, lambda x: 1), ("en sik sinif", 1, lambda x: CS),
        ("tek kural", 2, lambda x: tahmin(TEK, x))]
ADAY += [(ad, len({k(x) for x in EGT}), arama(k)) for ad, k in ANAHTAR]

mm = dogruluk(M, SIN)
print(f"model, derinlik 6 karar agaci: egitim {dogruluk(M, EGT):.4f} sinama {mm:.4f}\n\n"
      f"{'taban adayi':<16} {'hucre':>5} {'egitim':>7} {'sinama':>7} {'model farki':>12}")
print(f"{'rastgele atama':<16} {'--':>5} {rast(EGT):>7.4f} {rast(SIN):>7.4f} "
      f"{mm - rast(SIN):>+12.4f}")
fk = [mm - rast(SIN)]
for ad, n, f in ADAY:
    fk.append(mm - oran(f, SIN))
    print(f"{ad:<16} {n:>5} {oran(f, EGT):>7.4f} {oran(f, SIN):>7.4f} {fk[-1]:>+12.4f}")
print(f"\ntaban secimi ayni modeli {min(fk):+.4f} ile {max(fk):+.4f} arasinda okutuyor:"
      f" aralik {max(fk) - min(fk):.4f}")
```

```
model, derinlik 6 karar agaci: egitim 0.8466 sinama 0.7778

taban adayi      hucre  egitim  sinama  model farki
rastgele atama      --  0.6522  0.6450      +0.1327
hepsi supheli        1  0.2222  0.2421      +0.5357
en sik sinif         1  0.7778  0.7579      +0.0198
tek kural            2  0.7778  0.7579      +0.0198
bolge                5  0.7778  0.7579      +0.0198
bolge+basamak       15  0.7897  0.7897      -0.0119
+hane               39  0.7976  0.7500      +0.0278
dort eksen          66  0.8095  0.7738      +0.0040

taban secimi ayni modeli -0.0119 ile +0.5357 arasinda okutuyor: aralik 0.5476
```

Son sütun tek bir modelin sekiz ayrı okunuşudur. Model hiç değişmedi: sınama kümesinde 0,7778. Ama
"hepsini şüpheli say" tabanına göre modelin katkısı **+0,5357**, "bölge ve basamak arama tablosu"
tabanına göre **−0,0119**. Aradaki **0,5476**, verinin ya da modelin değil yalnızca **taban
seçiminin** ürettiği bir sayıdır. Aynı çalışma iki ayrı raporla anlatılabilir ve ikisi de doğru
hesaplanmıştır.

Ortadaki üç satır ikinci sonucu veriyor. En sık sınıf, tek bölmeli bir kural ve bölgeye bakan bir
arama tablosu **aynı sayıyı** üretiyor: 0,7579. Şüphelilik oranı hiçbir bölgede yarıyı geçmediği
için bölge tablosunun beş hücresi de aynı yanıtı söylüyor. Bir tabanı karmaşıklaştırmak onu
güçlendirmez; ancak hücrelerde çoğunluk **değişirse** güçlenir.

Asıl bulgu iki satır aşağıdadır. Bölge ile tarife basamağı birlikte alındığında on beş hücreden
bazılarında çoğunluk dönüyor ve tablo 0,7897 okuyor — **derinlik 6 karar ağacının üstünde**. On bir
öznitelikle eğitilmiş, yüzlerce bölme adayı denemiş bir ağaç, iki sütunlu bir arama tablosuna
kaybediyor. Hane eklendiğinde hücre sayısı 39'a çıkıyor: eğitim sayısı 0,7976'ya yükselirken sınama
sayısı 0,7500'e düşüyor. Dört eksenin tamamında 66 hücre, eğitim 0,8095, sınama 0,7738. **Taban
çizgisinin de bir kapasitesi vardır ve o kapasite aşıldığında taban da aşırı uyum gösterir.** Bu,
tabanı bir araçtan çıkarıp bir tasarım nesnesine çeviren şeydir: seçilirken model seçerken sorulan
sorular sorulur.

## Taban Seçimi Alt Gruplarda Yön Değiştiriyor

İki tabanın bütündeki farkı yalnız 0,0318'dir. Alt gruplara inildiğinde ikisi aynı şeyi
söylemiyor.

```python
AB = arama(lambda x: (x["bolge"], gr(x)["tarife"]))
print(f"{'alt grup':<14} {'n':>4} {'model':>7} {'A taban':>8} {'A fark':>8} "
      f"{'B taban':>8} {'B fark':>8}")
fa, fb = [], []
for g in ADLAR:
    s = [x for x in SIN if g in gruplar(x)]
    a, b, d = oran(lambda x: CS, s), oran(AB, s), dogruluk(M, s)
    if len(s) >= 25:
        fa.append(d - a)
        fb.append(d - b)
    print(f"{' '.join(g):<14} {len(s):>4} {d:>7.4f} {a:>8.4f} {d - a:>+8.4f} "
          f"{b:>8.4f} {d - b:>+8.4f}{'  n<25' if len(s) < 25 else ''}")
print(f"\nA en sik sinif   : fark {min(fa):+.4f} .. {max(fa):+.4f}, aciklik "
      f"{max(fa) - min(fa):.4f}, tabanin altinda {sum(1 for v in fa if v < 0)}/{len(fa)}")
print(f"B bolge+basamak  : fark {min(fb):+.4f} .. {max(fb):+.4f}, aciklik "
      f"{max(fb) - min(fb):.4f}, tabanin altinda {sum(1 for v in fb if v < 0)}/{len(fb)}")
```

```
alt grup          n   model  A taban   A fark  B taban   B fark
bolge bati       32  0.9688   1.0000  -0.0312   1.0000  -0.0312
bolge dogu       36  0.6111   0.4722  +0.1389   0.6944  -0.0833
bolge guney      58  0.8793   0.8276  +0.0517   0.8276  +0.0517
bolge kuzey      68  0.7794   0.8235  -0.0441   0.8235  -0.0441
bolge merkez     58  0.6724   0.6552  +0.0172   0.6552  +0.0172
hane 1-2         73  0.7945   0.7534  +0.0411   0.8219  -0.0274
hane 3-4        143  0.7762   0.7692  +0.0070   0.7832  -0.0070
hane 5+          36  0.7500   0.7222  +0.0278   0.7500  +0.0000
okuma az         85  0.7412   0.7882  -0.0471   0.7647  -0.0235
okuma tam       167  0.7964   0.7425  +0.0539   0.8024  -0.0060
tarife 10        12  0.5833   0.6667  -0.0833   0.6667  -0.0833  n<25
tarife 25       193  0.8290   0.8394  -0.0104   0.8394  -0.0104
tarife 40        47  0.6170   0.4468  +0.1702   0.6170  +0.0000

A en sik sinif   : fark -0.0471 .. +0.1702, aciklik 0.2173, tabanin altinda 4/12
B bolge+basamak  : fark -0.0833 .. +0.0517, aciklik 0.1351, tabanin altinda 8/12
```

Doğu bölgesi iki tabanın ayrıldığı yerdir. En sık sınıfa göre model orada tabanı **0,1389**
geçiyor ve kursun en iyi katkılarından birini veriyor; bölge ve basamak tablosuna göre tabanın
**0,0833 altında** kalıyor. Tarife 40 basamağında da aynı şey oluyor: +0,1702 yerine 0,0000. İki
sayı da doğru. Fark, birinci tabanın doğu bölgesinin yüksek şüphe oranından habersiz olması,
ikincisinin ise o oranı zaten biliyor olmasıdır. Model bir alt grupta ne kattığını, ancak o alt
grubu **zaten bilen** bir tabanla karşılaştırıldığında söyler.

İki özet satırı sonucu veriyor. En sık sınıf tabanına göre model on iki alt grubun **dördünde**
tabanın altında; arama tablosu tabanına göre **sekizinde**. Fark açıklığı da 0,2173'ten 0,1351'e
iniyor. Güçlü taban modelin katkısını hem küçültüyor hem de alt gruplar arasında düzleştiriyor; bu
bir kusur değil, tabanın alt grubu zaten hesaba katmasının sonucudur. Hangi tabanın raporlanacağı
bu yüzden çalışmanın ne iddia ettiğini belirleyen karardır.

## M27'nin Yedi Kursunda Seçilmiş Tabanlar

Yedi kurs boyunca her ders bir taban seçti ve gerekçesini yazdı. Aşağıdaki tablo o seçimleri
kaynak derslerden toplar. Birimler ortak değildir ve satırlar birbiriyle toplanmaz.

| Kurs | Seçilen öğrenmeyen yordam | Birim | Örnek sayı |
|---|---|---|---|
| K01 Makine Öğrenmesine Giriş | eğitim kümesinin en sık sınıfı | doğruluk | sınamada 0,7579 |
| K02 Veri Hazırlama ve Öznitelik Mühendisliği | hazırlık kararı uygulanmamış aynı kurulum | doğruluk | 0,7302 ile 0,8294 arası |
| K03 Denetimli Öğrenme | en sık sınıf; bağlanımda ortalamayı söylemek | doğruluk, m³ hata | karşılaştırma çizgileri 0,7857 ve 0,8016 |
| K04 Denetimsiz Öğrenme | rastgele atama, sütun ortalaması, tek küme | küme içi uzaklık, geri kurma hatası | rastgele atama 5,9790 |
| K05 Derin Öğrenme | her veri kümesi için ayrı en sık sınıf | doğruluk | abone 0,7579; ızgara 0,5850; dizi 0,7100 |
| K06 Doğal Dil İşleme ve Bilgisayarla Görme | alana özgü taban | doğruluk, örtüşme, sözlük boyu | oran birimli on iki taban 0,0400 ile 0,8731 arası |
| K07 Pekiştirmeli Öğrenme ve Öneri Sistemleri | rastgele eylem; en çok seçilen kalem | getiri; ilk beş isabeti | 10,432 ve 0,6527 |

Tablodan iki şey okunur. Birincisi, taban çizgisi kurstan kursa **tür değiştiriyor**: bir sınıfı
söylemek, bir ortalamayı söylemek, rastgele davranmak, en çok seçileni önermek, ya da bir kararın
uygulanmadığı hâli koymak. İkincisi, K05 ve K06 satırları aynı kurs içinde bile tek bir taban
olmadığını gösteriyor: dört ayrı veri kümesi dört ayrı taban. "Taban çizgisini geçti" cümlesi
yazıldığında geçilen şey her seferinde başka bir yordamdı, ve bu dersin tablosu o farkın
büyüklüğünü veriyor.

## Özet

- Taban çizgisi bir araç değil bir tasarım nesnesidir. Aynı derinlik 6 karar ağacı, sekiz taban
  adayına karşı **−0,0119 ile +0,5357** arasında okunuyor; seçimin tek başına oynattığı **0,5476**.
- Bir tabanı karmaşıklaştırmak onu güçlendirmez: en sık sınıf, tek bölmeli kural ve bölge arama
  tablosu aynı 0,7579'u veriyor, çünkü hiçbir bölgede çoğunluk dönmüyor.
- Taban çizgisinin de kapasitesi vardır. Arama tablosu 15 hücrede 0,7897 ile **modeli geçiyor**,
  39 hücrede eğitimde 0,7976'ya çıkarken sınamada 0,7500'e düşüyor: taban da aşırı uyum gösterir.
- Alt gruplarda taban seçimi yön değiştiriyor. Doğu bölgesinde model bir tabana göre +0,1389,
  öbürüne göre −0,0833. En sık sınıfa göre 12 alt grubun 4'ünde tabanın altında olan model, arama
  tablosuna göre **8'inde** altında; fark açıklığı 0,2173'ten 0,1351'e iniyor.
- M27'nin yedi kursunda taban çizgisi tür değiştirdi ve tek bir kursta bile birden çok taban
  kullanıldı; "tabanı geçti" cümlesinde geçilen şey her seferinde başka bir yordamdır.

## Sonraki Adım

Üç derste on dört ayrı sayı çifti karşılaştırıldı ve hepsinde fark doğrudan okundu: 0,0198,
−0,0119, +0,1702. Hiçbirinde sorulmayan şey, bu farkların **252 abonelik bir kümenin
gürültüsünden** ayırt edilip edilemeyeceğidir. Bir alt grupta 36 aboneden okunan 0,1389'luk bir
katkı, birkaç abonenin sınıfı ters dönseydi kaybolabilir. Hipotez sınaması, yeniden karıştırma ve
geri koyarak örnekleme M26/K05'te ölçüldü ve tekrarlanmayacak. Sonraki ders yalnız şunu ölçer: iki
modelin **farkının payı** ne kadardır, aynı örneklerde ölçülen **eşleştirilmiş karşılaştırma**
bağımsız karşılaştırmadan ne kadar dar bir pay verir, ve ayrılmış kümenin büyüklüğü o payı nasıl
belirler.
