İçeriğe geç
academia.sh

Ders 05 / 20

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.

İçindekiler

Ö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.

# 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.

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.

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.

İlerlemeni kaydetmek ve not almak için Giriş yap

Notlarım

Not almak için giriş yapmalısın.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat