---
title: 'Katsayı Yorumu'
source: 'https://academia.sh/tr/kurslar/denetimli-ogrenme/katsayi-yorumu'
course: 'Denetimli Öğrenme'
language: tr
updated: '2026-08-17T18:10:20+00:00'
license: 'CC BY-SA 4.0'
---

# Katsayı Yorumu

Okunabilirliğin bir övgü değil bir sayı olarak ele alınması: sekiz aday arasından doğrulama kümesinden seçilen okunabilir model on iki katsayı taşır ve sınamada 0,8016 verir, aynı kümeden seçilen en iyi aile 33 sütunla 0,8056 verir, yorumlanabilirliğin bedeli 0,0040 yani tek bir abonedir. On iki katsayı kurgudaki üretici yapının sırasını doğru veriyor. Aynı katsayılar sabit değildir: kişi başına tüketim sütunu çıkarıldığında ortalama tüketimin katsayısı 0,772'den 0,808'e çıkar ve sınama sayısı hiç değişmez, ortalama tüketim çıkarıldığında kişi başına tüketimin katsayısı 0,071'den 0,442'ye, yani altı katına fırlar. Karesel ceza katsayıları 0,772'den 0,326'ya indirirken sınama sayısı yalnız 0,0079 düşer.

Önceki dersin modeli on iki katsayı taşıyordu ve o katsayılar okunabilir: her biri bir sütuna
aittir, bir işareti ve bir büyüklüğü vardır. Doğrusal modellerin en çok anılan üstünlüğü budur ve
genellikle bir övgü olarak yazılır. Bu ders onu bir övgü olarak değil **bir sayı** olarak ele
alır: okunabilir katsayılı bir modelin ayrılmış kümedeki sayısı ile bu konudaki en iyi ailenin
sayısı arasındaki fark kaç abonedir.

İkinci soru birincisinden ayrılır ve daha zordur. Katsayı okunduğunda ne söylenmiş olur. M26'nın
Keşifsel Analiz kursundaki Uygulamalı İstatistik konusu bu sorunun **nedensel** yüzünü ölçmüştü:
tek değişkenli bir katsayının karıştırıcı bir değişken eklendiğinde işaret değiştirmesi ve grup
içi eğimlerin toplulaştırılmış eğimin tersine dönmesi orada sayıyla gösterildi. Burada
tekrarlanmaz. Buradaki soru kestirim hedefine özgüdür: **aynı ayrılmış küme sayısını veren kaç
farklı katsayı kümesi var**, ve bir katsayının değeri o kümenin hangisinin seçildiğine ne kadar
bağlı.

- **DM36.** Küme, bölme, tohum, hedef ve on iki sütunluk sabit öznitelik kümesi önceki dersteki
  gibidir; taban çizgisi sınama kümesinde 0,7579.
- **DM37.** Bütün adaylar **aynı eğitim ayarıyla** öğrenilir: öğrenme adımı 0,3, tur 300.
  Önceki dersin ayar süpürmesi tekrarlanmaz; bu derste değişen tek şey **sütun kümesidir**.
- **DM38.** Okunabilir aday, katsayıları tek tek listelenip yorumlanabilecek modeldir: bir, iki,
  dört ve on iki sütunlu adaylar.
- **DM39.** Genişletilmiş aday, altı sayısal sütunun ikili çarpımları ve kareleriyle 33 sütuna
  çıkarılmış modeldir. Katsayıları listelenebilir ama tek tek okunamaz, çünkü aynı büyüklük
  birden çok sütuna dağılmıştır.
- **DM40.** Genişletilmiş adaya dört düzeyde karesel ceza uygulanır. Ceza biçimleri arasındaki
  fark önceki derste ölçüldü; burada yalnız karesel ceza kullanılır.
- **DM41.** Denenen aday sayısı **8**'dir: dört okunabilir aday ve dört cezalı genişletilmiş
  aday. Seçim doğrulama kümesinden okunur.
- **DM42.** Katsayılar **ölçekli sütunlar** üzerinde okunur, dolayısıyla birbiriyle
  karşılaştırılabilir. Ham birimdeki katsayı bir metreküp başına düşen değişimdir ve sütunların
  birimleri farklı olduğu için sıralanamaz.
- **DM43.** Bu ders katsayının **kim için** okunduğunu, hangi alt grupta ne olduğunu ve
  yorumlanabilirliğin bir yöntem olarak nasıl kurulacağını ele almaz; o sorular M27/K08'e aittir.
  Burada yorumlanabilirlik yalnız verilen puandır.

## Yorumlanabilirliğin Bedeli

Kurulum önceki dersin kurulumudur.

```python
# yorum.py — MODELDIR. Ayni KURGU abone tablosu, ayni tohum, ayni bolme ve
# ayni on iki sutunluk oznitelik kumesi; hedef supheli etiketidir.
import math
import statistics

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, 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, v = uretec(TOHUM + 7000 + k["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(
            k["bolge"][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 + 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 = {"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)}
    x["kisi_basi"] = round(x["ort_tuketim"] / x["hane"], 3)
    for b in BOLGE:
        x["b_" + b[0]] = int(k["bolge"][0] == b[0])
    VERI.append(x)


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]


K = karistir(VERI, TOHUM + 90000)
EGT, DOG, SIN = K[:756], K[756:1008], K[1008:]
ALAN = ["ort_tuketim", "oynaklik", "hane", "memnuniyet", "donem", "sifir_okuma",
        "kisi_basi", "b_kuzey", "b_guney", "b_dogu", "b_bati", "b_merkez"]
TABAN = sum(x["supheli"] == 0 for x in SIN) / len(SIN)
print(f"egitim {len(EGT)}, dogrulama {len(DOG)}, sinama {len(SIN)}, "
      f"taban cizgisi {TABAN:.4f}")
```

```
egitim 756, dogrulama 252, sinama 252, taban cizgisi 0.7579
```

Sekiz aday tek bir merdivende sıralanır: bir sütundan on iki sütuna okunabilir modeller, sonra
33 sütunlu genişletilmiş model dört ceza düzeyinde.

```python
import itertools


def sikistir(z):
    if z >= 0:
        return 1.0 / (1.0 + math.exp(-z)) if z < 700 else 1.0
    e = math.exp(z) if z > -700 else 0.0
    return e / (1.0 + e)


CARPIM = ["ort_tuketim", "oynaklik", "hane", "memnuniyet", "donem", "kisi_basi"]


def genislet(x):
    d = dict(x)
    for a, b in itertools.combinations(CARPIM, 2):
        d[a + "*" + b] = x[a] * x[b]
    for a in CARPIM:
        d[a + "^2"] = x[a] * x[a]
    return d


GENIS = ALAN + [a + "*" + b for a, b in itertools.combinations(CARPIM, 2)] \
        + [a + "^2" for a in CARPIM]
GE, GD, GS = [[genislet(x) for x in s] for s in (EGT, DOG, SIN)]


def olcek(egt, alan):
    return ({a: statistics.fmean(x[a] for x in egt) for a in alan},
            {a: max(1e-9, statistics.pstdev([x[a] for x in egt])) for a in alan})


def egit(egt, alan, o, s, adim=0.3, tur=300, ceza=0.0):   # MODELDIR: lojistik baglanim
    X = [[1.0] + [(x[a] - o[a]) / s[a] for a in alan] for x in egt]
    Y = [x["supheli"] for x in egt]
    w = [0.0] * len(X[0])
    for _ in range(tur):
        g = [0.0] * len(w)
        for i in range(len(X)):
            h = sikistir(sum(w[j] * X[i][j] for j in range(len(w)))) - Y[i]
            for j in range(len(w)):
                g[j] += h * X[i][j]
        for j in range(len(w)):
            w[j] -= adim * (g[j] / len(X) + (ceza * w[j] if j else 0.0))
    return w


def puan(w, alan, o, s, x):
    return w[0] + sum(w[j + 1] * (x[a] - o[a]) / s[a] for j, a in enumerate(alan))


def dogruluk(w, alan, o, s, st):
    return sum((sikistir(puan(w, alan, o, s, x)) > 0.5) == x["supheli"]
               for x in st) / len(st)


MERDIVEN = [("1 sutun", ["ort_tuketim"]),
            ("2 sutun", ["ort_tuketim", "sifir_okuma"]),
            ("4 sutun", ["ort_tuketim", "sifir_okuma", "hane", "memnuniyet"]),
            ("12 sutun", ALAN)]
SONUC, aday = [], 0
print(f"{'model':<12} {'katsayi':>8} {'dogrulama':>10} {'sinama':>8}")
for ad, alan in MERDIVEN:
    o, s = olcek(EGT, alan)
    w = egit(EGT, alan, o, s)
    aday += 1
    SONUC.append((ad, len(alan), dogruluk(w, alan, o, s, DOG),
                  dogruluk(w, alan, o, s, SIN)))
    print(f"{ad:<12} {len(alan):>8} {SONUC[-1][2]:>10.4f} {SONUC[-1][3]:>8.4f}")
og, os_ = olcek(GE, GENIS)
for ceza in (0.0, 0.01, 0.05, 0.2):
    w = egit(GE, GENIS, og, os_, ceza=ceza)
    aday += 1
    SONUC.append((f"33 sutun ceza {ceza}", len(GENIS),
                  dogruluk(w, GENIS, og, os_, GD), dogruluk(w, GENIS, og, os_, GS)))
    print(f"{SONUC[-1][0]:<12} {len(GENIS):>8} {SONUC[-1][2]:>10.4f} "
          f"{SONUC[-1][3]:>8.4f}")
print(f"\ntaban cizgisi {TABAN:.4f}, denenen aday sayisi {aday}")
oku = max(SONUC[:4], key=lambda t: t[2])
tum = max(SONUC, key=lambda t: t[2])
print(f"okunabilir aday icinde dogrulamadan secilen: {oku[0]}, sinama {oku[3]:.4f}")
print(f"butun adaylar icinde dogrulamadan secilen: {tum[0]}, sinama {tum[3]:.4f}")
print(f"yorumlanabilirligin bedeli {tum[3] - oku[3]:.4f}, yani "
      f"{round((tum[3] - oku[3]) * len(SIN))} abone")
```

```
model         katsayi  dogrulama   sinama
1 sutun             1     0.8254   0.7976
2 sutun             2     0.8095   0.7976
4 sutun             4     0.8095   0.7897
12 sutun           12     0.8333   0.8016
33 sutun ceza 0.0       33     0.8333   0.8056
33 sutun ceza 0.01       33     0.8373   0.7976
33 sutun ceza 0.05       33     0.8492   0.8056
33 sutun ceza 0.2       33     0.8214   0.7937

taban cizgisi 0.7579, denenen aday sayisi 8
okunabilir aday icinde dogrulamadan secilen: 12 sutun, sinama 0.8016
butun adaylar icinde dogrulamadan secilen: 33 sutun ceza 0.05, sinama 0.8056
yorumlanabilirligin bedeli 0.0040, yani 1 abone
```

Son satır dersin başlığını taşıyan sayıdır. Okunabilir modeller arasından doğrulama kümesine
bakarak seçmek on iki sütunlu modeli veriyor ve sınamada 0,8016 okunuyor. Bütün adaylar arasından
aynı kümeye bakarak seçmek 33 sütunlu, cezalı modeli veriyor ve sınamada 0,8056 okunuyor.
Yorumlanabilirliğin bedeli 0,0040, yani **252 abonenin biri**.

Bu sayının küçüklüğü bu kümeye özgüdür ve genel bir yasa değildir; ama okunması gereken şey
büyüklüğü değil, **ölçülmüş olmasıdır**. Yorumlanabilirlik uğruna başarımdan vazgeçildiği
söylenirken vazgeçilen miktar yazılmıyorsa, o cümle bir ölçüm değil bir tercih beyanıdır. Burada
miktar yazıldı ve yanına bütçesi kondu: sekiz aday.

Merdivenin kendisi ayrı bir şey söylüyor. Tek sütunlu model doğrulamada 0,8254 ile dört sütunlu
modeli geçiyor, sınamada ikisi de on iki sütunlunun altında kalıyor. Sütun eklemek tek yönlü bir
iyileşme değildir ve bu, M27/K02'nin on iki dersinin bulgusuydu.

## Katsayı Ne Söyler, Ne Söylemez

Seçilen okunabilir modelin on iki katsayısı ölçekli sütunlar üzerinde okunur ve bu haliyle
birbiriyle karşılaştırılabilir.

```python
o, s = olcek(EGT, ALAN)
W = egit(EGT, ALAN, o, s)
print(f"{'sutun':<13} {'katsayi':>8}   (olcekli sutunlar, sabit terim "
      f"{W[0]:+.3f})")
for j in sorted(range(len(ALAN)), key=lambda j: -abs(W[j + 1])):
    print(f"{ALAN[j]:<13} {W[j + 1]:>+8.3f}")
print()
IKIZ = [("tam 12 sutun", ALAN),
        ("kisi_basi cikarildi", [a for a in ALAN if a != "kisi_basi"]),
        ("ort_tuketim cikarildi", [a for a in ALAN if a != "ort_tuketim"])]
print(f"{'model':<22} {'ort_tuketim':>12} {'kisi_basi':>10} {'sinama':>8}")
for ad, alan in IKIZ:
    oo, ss = olcek(EGT, alan)
    w = egit(EGT, alan, oo, ss)
    k = {a: w[j + 1] for j, a in enumerate(alan)}
    print(f"{ad:<22} {k.get('ort_tuketim', 0.0):>+12.3f} "
          f"{k.get('kisi_basi', 0.0):>+10.3f} {dogruluk(w, alan, oo, ss, SIN):>8.4f}")
print()
print(f"{'karesel ceza':>13} {'ort_tuketim':>12} {'oynaklik':>9} "
      f"{'sifir_okuma':>12} {'sinama':>8}")
for ceza in (0.0, 0.02, 0.1, 0.5):
    w = egit(EGT, ALAN, o, s, ceza=ceza)
    k = {a: w[j + 1] for j, a in enumerate(ALAN)}
    print(f"{ceza:>13} {k['ort_tuketim']:>+12.3f} {k['oynaklik']:>+9.3f} "
          f"{k['sifir_okuma']:>+12.3f} {dogruluk(w, ALAN, o, s, SIN):>8.4f}")
```

```
sutun          katsayi   (olcekli sutunlar, sabit terim -1.643)
ort_tuketim     +0.772
sifir_okuma     +0.684
oynaklik        +0.380
b_dogu          +0.306
memnuniyet      -0.273
hane            +0.156
donem           +0.148
b_bati          -0.147
b_guney         -0.109
kisi_basi       +0.071
b_merkez        -0.048
b_kuzey         -0.005

model                   ort_tuketim  kisi_basi   sinama
tam 12 sutun                 +0.772     +0.071   0.8016
kisi_basi cikarildi          +0.808     +0.000   0.8016
ort_tuketim cikarildi        +0.000     +0.442   0.7778

 karesel ceza  ort_tuketim  oynaklik  sifir_okuma   sinama
          0.0       +0.772    +0.380       +0.684   0.8016
         0.02       +0.573    +0.397       +0.523   0.7937
          0.1       +0.326    +0.342       +0.310   0.7937
          0.5       +0.133    +0.178       +0.127   0.7619
```

İlk tablo katsayının ne söylediğini gösteriyor ve söylediği şey doğrudur. Ortalama tüketim,
sıfır okuma göstergesi ve oynaklık ilk üç sırada; kurgunun etiketi üretirken kullandığı en
ağır üç terim tam olarak bunlardır. Memnuniyetin işareti eksi, hane büyüklüğününki artı ve
bölgeler arasında doğu en yüksek. Kuzeyin katsayısı -0,005 ile sıfıra oturuyor; kurguda kuzeyin
bölge katkısı da tam olarak sıfırdır. On iki sayı, üreten yapının sırasını okunur biçimde
veriyor.

İkinci tablo aynı katsayıların **ne söylemediğini** gösteriyor. Kişi başına tüketim on iki
sütunlu modelde +0,071 ile listenin sonlarında duruyor; bu sayıya bakan biri sütunun neredeyse
işe yaramadığı sonucunu çıkarır. Sütun modelden çıkarıldığında sınama sayısı **hiç değişmiyor**,
0,8016'da kalıyor; buraya kadar okuma doğru. Ama ortalama tüketim çıkarıldığında aynı sütunun
katsayısı +0,071'den +0,442'ye, yani altı katına fırlıyor. Kişi başına tüketim işe yaramaz bir
sütun değildi; **yanında ortalama tüketim varken** işe yaramaz görünüyordu, çünkü ikisi aynı
niceliğin iki biçimidir ve model o niceliğe ait ağırlığı ikisi arasında istediği gibi bölüştürür.

Üçüncü tablo aynı belirsizliği ceza üzerinden ölçüyor. Ortalama tüketimin katsayısı 0,772'den
0,326'ya, yani üçte birine iniyor; sıfır okuma göstergesi 0,684'ten 0,310'a iniyor. Sınama sayısı
ise 0,8016'dan 0,7937'ye, yani yalnız iki abone düşüyor. **Bu üç model kestirim olarak neredeyse
aynıdır ve katsayıları neredeyse hiç benzemez.** Ayrılmış küme sayısı, hangi katsayı kümesinin
seçildiğini belirlemeye yetmiyor.

Buradan çıkan kural sınırlıdır ve tam olarak yazılmalıdır. Bir katsayının **sıralamadaki yeri**,
sütunlar birbirinden bağımsız olduğu ölçüde okunabilir bir bilgidir. Bir katsayının **değeri**
ise ancak yanındaki sütun kümesiyle ve uygulanan cezayla birlikte anlamlıdır. Bir katsayının
**nedensel** yorumu ise bu tabloların hiçbirinden çıkmaz; M26'nın Uygulamalı İstatistik konusu
o sınırı ayrıca ölçmüştü.

## Özet

- Yorumlanabilirliğin bedeli bu kümede 0,0040, yani 252 abonenin biridir: doğrulamadan seçilen
  okunabilir model sınamada 0,8016, aynı kümeden seçilen en iyi aile 0,8056 veriyor ve denenen
  aday sayısı 8'dir.
- Merdiven tek yönlü değildir: tek sütunlu model doğrulamada dört sütunluyu geçiyor, sınamada
  ikisi de on iki sütunlunun altında kalıyor.
- On iki ölçekli katsayı kurgudaki üretici yapının sırasını doğru veriyor; ilk üç sıra ortalama
  tüketim, sıfır okuma ve oynaklıktır ve kuzeyin katsayısı -0,005 ile sıfıra oturuyor.
- Katsayının değeri yanındaki sütunlara bağlıdır: kişi başına tüketim +0,071 iken ortalama tüketim
  çıkarıldığında +0,442'ye fırlıyor, yani altı katına çıkıyor.
- Karesel ceza katsayıları üçte birine indirirken sınama sayısı yalnız 0,0079 düşüyor; kestirim
  olarak neredeyse aynı olan modellerin katsayıları neredeyse hiç benzemiyor.

## Sonraki Adım

Beş derste model ailesi değişti ama modelin **biçimi** hiç değişmedi. En küçük kareler bir
düzlemdi; polinom bağlanım sütunları eğdi ama karar yine sütunların doğrusal birleşimiydi; üç
ceza yalnız o birleşimin katsayılarını küçülttü; lojistik bağlanım düzlemin çıktısını sıkıştırdı
ama sıkıştırma tek yönlü ve artan bir işlevdir, dolayısıyla karar sınırı hâlâ bir düzlemdir. Beş
dersin tamamında sınıflandırılan abone, on iki sayının tek bir ağırlıklı toplamına göre bir
tarafa ya da öbür tarafa düştü.

Bu bir sınırdır ve hiç sınanmadı. Sınırın kendisinin **eğri** olduğu bir kümede — iki sütunun
belirli bir aralığında şüphe yükselip aralığın iki yanında da düştüğü bir kümede — hiçbir düzlem
işe yaramaz ve polinom sütunları o eğriyi ancak biçimini önceden bilirsek yakalar. Sonraki konu
kararı düzlemle kurmayan ailelerle açılır: kararı komşularına bakarak veren örnek tabanlı bir
yordamla, ve o yordamın sütun sayısı arttıkça uzaklık ölçütünün kendisine ne olduğuyla.
