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

# Yeniden Üretilebilirlik

Aynı sayının ikinci kez üretilmesi için sabitlenmesi gereken kalemin sayılması ve sabitlenmemiş tek kalemin ne kadar oynattığı: değerlendirmenin kendi 9 kaleminin 6'sı tek başına sınama sayısını oynatıyor, en büyük oynama 0,0370 ile 7 abone; aynı kalemlerin 8'i alt grup açıklığını oynatıyor ve en büyük oynama 0,0989 ile bütünde okunanın 2,7 katı. Alt grup en az boyu serbest bırakıldığında iki başlık sayısı da hiç değişmiyor ama ölçülen alt grup 12'den 11'e iniyor. M26/K03'ün 39, M26/K04'ün 9, M26/K06'nın 11, M27/K02'nin 4 ve M27/K05'in 8 kaleminin üstüne değerlendirmenin 9 kalemi eklenir ve M27'nin tam listesi 80 olur. Kurs kapanışı on beş dersi bütünde ve en kötü alt grupta, müfredat kapanışı M27'nin sekiz kursunu ve 121 dersini tek tabloda toplar.

Önceki ders bir beyanın yirmi iki sorudan on sekizini kapattığını saydı. Beyanın taşıdığı sayı tek
bir koşumdan geldi: bir tohum, bir bölme, bir derinlik, bir eşik. O koşum ikinci kez yapıldığında
aynı sayının çıkacağı hiçbir yerde gösterilmedi.

Bu ders iki sayı basar. Birincisi **toplam kalem sayısıdır**: aynı sınama sayısının yeniden
üretilmesi için kaç karar yazılı olmalı. İkincisi **sabitlenmemiş tek kalemin oynattığı sayıdır**.
Kalem sayısı M26/K03, M26/K04, M26/K06, M27/K02 ve M27/K05'ten **devralınır**; bu ders yalnız
**değerlendirmenin kendi** kalemlerini ekler ve toplamı verir.

- **ME38.** Küme, etiket ve model M27/K01–K07'den devralınır ve **kurgudur**; hazırlama kalemleri
  M26/K03'te sabitlendi ve bu derste sabit kalır.
- **ME39.** Bir kalemi **serbest bırakmak** onu silmek değil, **eşit ölçüde savunulabilir** başka
  bir değere geçirmektir. Alternatifler kurgudur ve hiçbiri yanlış değildir.
- **ME40.** Her koşumda iki sayı okunur: sınama kümesinde bütünde ölçülen doğruluk ve önceki dersin
  dört ekseninde ölçülen **alt grup açıklığı**.
- **ME41.** Kalemler tek tek serbest bırakılır; biri serbestken öbür sekizi sabit kalır.
- **ME42.** Oynama abone sayısına çevrilirken o koşumun **kendi** sınama kümesi boyu kullanılır,
  çünkü bölme kalemi serbest kaldığında küme boyu da değişir.
- **ME43.** Kayan noktalı karşılaştırma `1e-9` eşiğiyle yapılır; bu eşik dört basamağa yuvarlanmış
  bir doğruluk farkının çok altındadır.

## Değerlendirmenin Kendi Kalemleri

```python
# uretilebilirlik.py — MODELDIR. Kurgu abone tablosu ayni tohumla (20260218)
# uretilir; hazirlama kalemleri M26/K03'te sabitlenmisti ve burada sabit kalir.
# Degerlendirmenin kendi kalemleri tek bir sozlukte toplanir, kosum onu okur.
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)]
ALAN = ["ort_tuketim", "oynaklik", "hane", "memnuniyet", "donem", "sifir_okuma",
        "b_kuzey", "b_guney", "b_dogu", "b_bati", "b_merkez"]
VARSAYILAN = {"bolme_tohum": 90000, "egitim_payi": 0.60, "derinlik": 6,
              "yaprak_enaz": 2, "yaprak_esigi": 0.5, "aday_esik": 10,
              "altgrup_enaz": 20, "basamak": (10, 25, 40), "alan_sirasi": "dogal"}


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


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:
        continue
    no = 10001 + i
    r, v = uretec(TOHUM + 7000 + no), []
    for d in range(ayrik(r(), [0.05, 0.12, 0.21, 0.62])):
        v.append(0.0 if r() < 0.038 else math.floor(
            b[2] * math.exp((r() + r() + r() - 1.5) * 0.62)
            * (1 - d * 0.05) * 100 + 0.5) / 100)
        r()
    if not v:
        continue
    ort, oyn, r = sum(v) / len(v), max(v) - min(v), uretec(TOHUM + 51000 + no)
    z = (0.052 * (ort - 20) + 0.85 * (min(v) == 0.0) + 0.026 * oyn
         + 0.24 * (hane >= 5) - 0.20 * (memnun >= 4) + b[3]
         + 0.9 * (no - 10001) / 1399 + (r() + r() + r() - 1.5) * 1.30)
    x = {"hane": hane, "memnuniyet": memnun, "donem": len(v), "bolge": b[0],
         "ort_tuketim": round(ort, 2), "oynaklik": round(oyn, 2),
         "sifir_okuma": int(min(v) == 0.0), "supheli": int(z > 1.35)}
    for q in BOLGE:
        x["b_" + q[0]] = int(b[0] == q[0])
    VERI.append(x)


def kos(**serbest):
    """Kalem sozlugunu okuyup sinama dogrulugunu ve alt grup acikligini verir."""
    a = dict(VARSAYILAN, **serbest)
    r, s = uretec(TOHUM + a["bolme_tohum"]), list(VERI)
    for i in range(len(s) - 1, 0, -1):
        j = int(r() * (i + 1))
        s[i], s[j] = s[j], s[i]
    n = int(len(s) * a["egitim_payi"])
    egt, sin = s[:n], s[n + (len(s) - n) // 2:]
    alanlar = ALAN if a["alan_sirasi"] == "dogal" else ALAN[::-1]

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

    M = agac(egt, a["derinlik"])

    def dogruluk(u):
        d = 0
        for x in u:
            k = M
            while "tahmin" not in k:
                k = k["sol"] if x[k["alan"]] < k["esik"] else k["sag"]
            d += k["tahmin"] == x["supheli"]
        return d / len(u)

    b1, b2, b3 = a["basamak"]
    eksen = [lambda x: x["bolge"],
             lambda x: "basamak %d" % (1 + (x["ort_tuketim"] >= b1)
                                       + (x["ort_tuketim"] >= b2)
                                       + (x["ort_tuketim"] >= b3)),
             lambda x: "1-2" if x["hane"] <= 2 else
             ("3-4" if x["hane"] <= 4 else "5+"),
             lambda x: "az" if x["donem"] <= 1 else "tam"]
    olculen = []
    for f in eksen:
        for g in sorted({f(x) for x in sin}):
            alt = [x for x in sin if f(x) == g]
            if len(alt) >= a["altgrup_enaz"]:
                olculen.append(dogruluk(alt))
    return (dogruluk(sin), max(olculen) - min(olculen), len(olculen),
            len(sin))


TEMEL, ACIK, SAYI, N = kos()
print(f"butun kalemler sabitken sinama {TEMEL:.4f}, alt grup acikligi {ACIK:.4f}; "
      f"{N} abonelik sinama kumesinde olculen alt grup {SAYI}")
```

```
butun kalemler sabitken sinama 0.7778, alt grup acikligi 0.3576; 252 abonelik sinama kumesinde olculen alt grup 12
```

Dokuz kalemin hiçbiri kod satırının içinde gizli değil; hepsi koşum işlevinin okuduğu tek bir
sözlükte duruyor. Sabitlemenin ilk koşulu budur: koda gömülü bir kalemin sabit mi serbest mi olduğu
sorulamaz.

## Sabitlenmemiş Tek Kalem

```python

# supurme.py — her kalem TEK BASINA serbest birakilir: esit olcude savunulabilir
# baska bir degere gecirilir, oburleri sabit kalir. Iki sayi birden okunur:
# butunde olculen sinama dogrulugu ve alt grup acikligi.
SERBEST = [("bolme tohumu", "bolme_tohum", 90001),
           ("egitim payi", "egitim_payi", 0.70),
           ("agac derinligi", "derinlik", 5),
           ("yaprakta en az abone", "yaprak_enaz", 5),
           ("yaprak esigi", "yaprak_esigi", 0.45),
           ("aday esik sayisi", "aday_esik", 8),
           ("alt grup en az boyu", "altgrup_enaz", 30),
           ("tarife basamagi siniri", "basamak", (12, 28, 45)),
           ("oznitelik listesi sirasi", "alan_sirasi", "ters")]

print(f"{'serbest birakilan kalem':<26}{'yeni deger':<14}{'sinama':>8}"
      f"{'abone':>7}{'aciklik':>9}{'oynama':>9}{'alt grup':>10}")
OYNAMA = []
for ad, anahtar, deger in SERBEST:
    s, c, k, n = kos(**{anahtar: deger})
    OYNAMA.append((ad, abs(s - TEMEL), abs(c - ACIK), n))
    print(f"{ad:<26}{str(deger):<14}{s:>8.4f}{round(abs(s - TEMEL) * n):>7}"
          f"{c:>9.4f}{c - ACIK:>+9.4f}{k:>10}")
oyn = sum(1 for _, u, _, _ in OYNAMA if u > 1e-9)
en_s = max(OYNAMA, key=lambda t: t[1])
en_c = max(OYNAMA, key=lambda t: t[2])
print(f"\n{len(SERBEST)} kalemin {oyn} tanesi tek basina sinama sayisini oynatiyor; "
      f"en buyuk oynama {en_s[1]:.4f} ({en_s[0]}), {round(en_s[1] * en_s[3])} abone")
print(f"ayni kalemlerin {sum(1 for _, _, u, _ in OYNAMA if u > 1e-9)} tanesi alt grup "
      f"acikligini oynatiyor; en buyuk oynama {en_c[2]:.4f} ({en_c[0]}), "
      f"butunde okunan en buyuk oynamanin {en_c[2] / en_s[1]:.1f} kati")
```

```
serbest birakilan kalem   yeni deger      sinama  abone  aciklik   oynama  alt grup
bolme tohumu              90001           0.8056      7   0.3373  -0.0204        12
egitim payi               0.7             0.8148      7   0.4286  +0.0709        11
agac derinligi            5               0.7897      3   0.4565  +0.0989        12
yaprakta en az abone      5               0.7778      0   0.3601  +0.0024        12
yaprak esigi              0.45            0.7817      1   0.3723  +0.0146        12
aday esik sayisi          8               0.7579      5   0.4470  +0.0894        12
alt grup en az boyu       30              0.7778      0   0.3576  +0.0000        11
tarife basamagi siniri    (12, 28, 45)    0.7778      0   0.3854  +0.0278        13
oznitelik listesi sirasi  ters            0.7817      1   0.3601  +0.0024        12

9 kalemin 6 tanesi tek basina sinama sayisini oynatiyor; en buyuk oynama 0.0370 (egitim payi), 7 abone
ayni kalemlerin 8 tanesi alt grup acikligini oynatiyor; en buyuk oynama 0.0989 (agac derinligi), butunde okunan en buyuk oynamanin 2.7 kati
```

Dokuz kalemin altısı tek başına sınama sayısını oynatıyor ve en büyük oynama yedi abone ediyor.
Yedi abone az görünür; oysa modelin taban çizgisi üstündeki bütün farkı beş abonedir. Altıncı satır
bunu en sert biçimde yazıyor: aday eşik sayısı 10 yerine 8 olduğunda sınama doğruluğu **0,7579**,
yani taban çizgisinin tam kendisi çıkıyor. Tek bir gerekçesiz kalem, tabanı geçen bir modeli
geçmeyen bir modele çeviriyor.

Sağdaki iki sütun kursun kendi ölçüsüdür ve daha sert. Açıklıktaki en büyük oynama 0,0989, bütünde
okunanın **2,7 katı**. Alt grup açıklığı daha kırılgandır, çünkü küçük kümelerde ölçülür ve
uçlardan okunur.

Son sütun sabitlemenin görünmeyen yüzüdür. "Alt grup en az boyu" satırında iki başlık sayısı da
hiç oynamıyor, ama ölçülen alt grup 12'den 11'e iniyor; tarife basamağı sınırı serbest kaldığında
13'e çıkıyor. Bir kalem, rapor edilen sayıyı değiştirmeden **neyin ölçüldüğünü** değiştirebiliyor
ve önceki ders bunun kararı nasıl bozduğunu saymıştı.

## M27'nin Tam Kalem Listesi

```python

# toplam.py — M27'nin tam kalem listesi. Ilk bes kaynak ONCEKI KURSLARDA sayildi
# ve burada yeniden hesaplanmaz; bu ders yalniz degerlendirmenin kalemlerini
# ekler ve toplami verir.
KAYNAK = [("hazirlama defteri (M26/K03)", 39),
          ("calisma ortami (M26/K04)", 9),
          ("raporun kendisi (M26/K06)", 11),
          ("hazirlama zinciri (M27/K02)", 4),
          ("egitimin kendisi (M27/K05)", 8),
          ("degerlendirmenin kendisi (bu ders)", len(SERBEST))]
for ad, n in KAYNAK:
    print(f"  {ad:<36}{n:>3} kalem")
print(f"  {'toplam':<36}{sum(n for _, n in KAYNAK):>3} kalem")
print(f"seksen kalemin biri sabitlenmedigi anda butunde okunan sayi "
      f"{round(en_s[1] * en_s[3])} abone, alt grup acikligi {en_c[2]:.4f} kayabiliyor")
```

```
  hazirlama defteri (M26/K03)          39 kalem
  calisma ortami (M26/K04)              9 kalem
  raporun kendisi (M26/K06)            11 kalem
  hazirlama zinciri (M27/K02)           4 kalem
  egitimin kendisi (M27/K05)            8 kalem
  degerlendirmenin kendisi (bu ders)    9 kalem
  toplam                               80 kalem
seksen kalemin biri sabitlenmedigi anda butunde okunan sayi 7 abone, alt grup acikligi 0.0989 kayabiliyor
```

Seksen kalem tek bir listedir ve altı ayrı kursta parça parça sayılmıştır. Uzunluğu bir kusur
değil bir ölçüdür ve bu kararların hiçbiri kendiliğinden yazılmaz.

## Özet

- Değerlendirmenin kendi kalemleri dokuzdur ve hepsi tek bir sözlükte durur; koda gömülü bir
  kalemin sabit mi serbest mi olduğu sorulamaz.
- Dokuz kalemin altısı tek başına sınama sayısını oynatıyor; en büyük oynama 0,0370 ile yedi abone
  ve bu, modelin taban çizgisi üstündeki beş abonelik farkından büyük. Aday eşik sayısı 8 olduğunda
  sınama doğruluğu taban çizgisinin tam kendisine, 0,7579'a iniyor.
- Aynı kalemlerin sekizi alt grup açıklığını oynatıyor; en büyük oynama 0,0989 ile bütünde
  okunanın 2,7 katı, çünkü açıklık küçük kümelerde ve uçlardan okunur.
- Alt grup en az boyu serbest bırakıldığında iki başlık sayısı da oynamıyor ama ölçülen alt grup
  12'den 11'e iniyor: bir kalem, rapor edilen sayıyı değiştirmeden neyin ölçüldüğünü
  değiştirebiliyor.
- M26/K03'ün 39, M26/K04'ün 9, M26/K06'nın 11, M27/K02'nin 4 ve M27/K05'in 8 kaleminin üstüne
  değerlendirmenin 9 kalemi eklenir ve M27'nin tam listesi 80 olur.

## Kurs Kapanışı

On beş dersin her birinde aynı sayı iki kez okundu: bir kez bütünde, bir kez alt gruplarda.
Satırlar ortak birim taşımadığı için hücrelerde hangi ölçütle okunduğu yazılıdır ve her sayı kendi
dersinden alınmıştır.

| Ders | Bütünde | En kötü alt grupta | Açıklık |
|---|---|---|---|
| Değerlendirme 01 doğrulama stratejileri | doğruluk 0,7778, taban +0,0198 | 0,6111 | 0,3576 |
| Değerlendirme 02 ölçüt seçimi | bedel kazancı +0,0198 ya da +0,1984 | −0,4468 | 0,8606 |
| Değerlendirme 03 temel model | sekiz tabana göre −0,0119 … +0,5357 | doğuda −0,0833 | seçimin oynattığı 0,5476 |
| Değerlendirme 04 istatistiksel anlamlılık | fark +0,0198, payı sıfırı içeriyor | az okumada −0,0471 | 13 farkın 4'ü sıfırı dışarıda |
| Değerlendirme 05 dağılım kayması | taban üstü fark 0,0198 → 0,0066 | hiçbiri taban altında değil | 0,3576 → 0,2573 |
| Yorum 01 yorumlanabilirlik ihtiyacı | kapanan soru 8,58/12 | 7,25 soru | 1,64 soru |
| Yorum 02 öznitelik önemi | 12 sütunun 10'unda sıra ayrışıyor | en önemli sütunda 0,0162 | 0,1720 |
| Yorum 03 yerel açıklama yöntemleri | sadakat 0,9417 | 0,9027 | 0,0637 |
| Yorum 04 kısmi bağımlılık ve etkileşim | hane eğimi −0,0069 (düz) | doğuda −0,1891 | 0,3192 |
| Yorum 05 doğası gereği yorumlanabilir modeller | kural listesi 0,7897, aileye 0,0159 | merkezde 0,0862 uzak | 6 alt grup 0,02 içine giremiyor |
| Etik 01 yanlılık kaynakları | doğruluk 0,8194, duyarlılık 0,3704 | doğuda 0,7108 | 0,2733 |
| Etik 02 adalet ölçütleri | en iyi deneme 0,2727 açıklık bırakıyor | doğuda taban oran 0,4578 | yakalama 0,4842, isabette 0,7038 |
| Etik 03 mahremiyet koruyan öğrenme | tek kaydın izi 0,0313 / 0,7778 | altıncı alanla tek kalan kayıt 0,9857 | gürültünün bedeli 0,0022'ye karşı 0,1669 |
| Etik 04 model belgeleme | doğruluk 0,7778; beyan 18/22 soru kapatıyor | 0,6111 (doğu) | 0,3576 |
| Etik 05 yeniden üretilebilirlik | 0,7778; tek kalem 7 abone oynatıyor | aday eşik 8'de 0,7579 | 0,3576; tek kalem 0,0989 oynatıyor |

Üçüncü sütun kursun kuralıdır: **bir sayı, kimin için ölçüldüğü yazılmadan okunamaz; alt grubu
yazılmayan başarım ölçülmemiş sayılır.** Hiçbir satırda açıklık sıfır çıkmadı.

M27'nin sekiz kursu aynı ekseni sekiz ayrı yerde okudu.

| Kurs | Ders | Ölçü ekseni | Birim |
|---|---|---|---|
| K01 Makine Öğrenmesine Giriş | 11 | ayrım | eğitimde ve ayrılmış kümede |
| K02 Veri Hazırlama ve Öznitelik Mühendisliği | 12 | özniteliğin kattığı fark | katkı |
| K03 Denetimli Öğrenme | 20 | ailenin kattığı ve bütçenin şişirdiği | denenen aday |
| K04 Denetimsiz Öğrenme | 11 | etiket yokken taban ne | kurulan taban |
| K05 Derin Öğrenme | 24 | kapasitenin kattığı ve eğitimin payı | ikinci koşum |
| K06 Doğal Dil İşleme ve Bilgisayarla Görme | 14 | alana özgü taban | alanın tabanı |
| K07 Pekiştirmeli Öğrenme ve Öneri Sistemleri | 14 | kararın kendi verisini değiştirmesi | toplanan veri |
| K08 Model Değerlendirme, Yorumlanabilirlik ve Etik | 15 | taban kim için | alt grup açıklığı |
| Toplam | 121 | | |

Yüz yirmi bir ders tek bir kuralı sekiz kez kurdu: **bir model, kendisinden daha aptal bir yordamı
ne kadar geçtiği kadar iyidir; taban çizgisi yazılmayan başarım ölçülmemiş sayılır.** Kural her
kursta aynı biçimde ödendi: modelin sayısının yanına daha aptal bir yordamın sayısı kondu ve farkın
nereden geldiği sorgulandı.

İkinci iddia da her kursta ödendi: **fark her zaman öğrenmeden gelmez.** Sızıntı, seçim payı, ayar
bütçesi, dengesiz sınıf ve son kursta alt grup tanımının kendisi de fark üretti.

Yüz yirmi bir derste bir model kuruldu, ölçüldü, açıklandı ve kime ne yaptığı sayıldı. Ama hepsi
**tek bir koşumda, tek bir makinede, bir defterin içinde** oldu. Modelin bir **sisteme** dönüşmesi
— sürüm alması, başkalarının çağırdığı bir yüz kazanması, bozulduğunda geri alınması ve maliyetinin
sayılması — hiç ele alınmadı. Sonraki müfredat, Yapay Zekâ Mühendisliği, bu soruyla açılır.
