İçeriğe geç
academia.sh

Ders 04 / 15

İstatistiksel Anlamlılık

İki modelin farkının payının ölçülmesi ve eşleştirilmiş karşılaştırmanın bağımsız karşılaştırmadan ne kadar dar bir pay verdiğinin sayılması: derinlik 6 karar ağacının dört rakibiyle arasındaki farkların hepsinin payı sıfırı içeriyor ve yalnız 0,5357'lik fark dışarıda bırakıyor. Aynı 252 abonede eşleştirilmiş pay 0,0476 ile 0,0794 arasında, bağımsız pay 0,1190 ile 0,1310 arasında; iki model ne kadar çok anlaşırsa pay o kadar daralıyor. Küme 63'ten 504'e çıkarken eşleştirilmiş pay 0,1111'den 0,0556'ya iniyor. Alt gruplarda on üç farkın yalnız dördünün payı sıfırı dışarıda bırakıyor ve kursun en büyük alt grup katkısı olan +0,1389 bunlardan biri değil.

İçindekiler

Üç derste on dört ayrı sayı çifti karşılaştırıldı ve hepsinde fark doğrudan okundu: bir yerde +0,0198, başka bir yerde −0,0119, bir alt grupta +0,1702. Hiçbirinde sorulmayan şey, bu farkların 252 abonelik bir kümenin gürültüsünden ayırt edilip edilemeyeceğidir. Otuz altı aboneden okunan 0,1389’luk bir katkı, birkaç abonenin sınıfı ters dönseydi kaybolabilir.

Hipotez sınaması, yeniden karıştırma, geri koyarak örnekleme ve oynama payı M26/K05’te ölçüldü; sınama kuramı burada tekrarlanmaz ve aynı araç yalnız model başarımına uygulanır. Bu ders üç şey ölçer: iki modelin farkının payı, aynı örneklerde ölçmenin (eşleştirilmiş karşılaştırma) o payı ne kadar daralttığı, ve ayrılmış kümenin büyüklüğünün payı nasıl belirlediği.

  • DT23. Kurgu, bölme (756/252/252), tohum, ölçüt (doğruluk) ve alt grup tanımları önceki derslerden aynen sürer: dört eksen, 13 alt grup.
  • DT24. Karşılaştırılan model derinlik 6 karar ağacıdır (sınamada 0,7778). Rakipler: en sık sınıf, derinlik 2 ağaç, derinlik 8 ağaç, bölge ve basamak arama tablosu, ve hepsini şüpheli saymak. Hepsi önceki derslerde kurulmuştur.
  • DT25. Pay geri koyarak örneklemeyle hesaplanır: 400 tekrar, yüzde 5 ve yüzde 95 noktaları. Yöntem M26/K05’te ölçüldü ve burada gerekçelendirilmez.
  • DT26. Eşleştirilmiş karşılaştırmada yeniden örneklenen şey abone başına fark göstergesidir: aynı abone iki modelde de doğru ya da yanlıştır, ve ortak hata payı düşer.
  • DT27. Bağımsız karşılaştırmada iki modelin sayıları ayrı ayrı yeniden örneklenir; bu, iki modelin iki ayrı kümede ölçülmüş olması durumuna karşılık gelir.
  • DT28. Payın sıfırı içermesi “iki model aynıdır” demek değildir; bu kümede bu farkın ölçülemediği demektir. Ölçüm eksiği ile eşitlik ayrı şeylerdir.
  • DT29. Küme büyüklüğü süpürmesinde 504’lük satır doğrulama ve sınama kümelerinin birleştirilmesiyle kurulur ve yalnız payın büyüklükle nasıl daraldığını göstermek içindir; raporlanabilir bir başarım sayısı değildir, çünkü doğrulama kümesine daha önce bakılmıştır.
  • DT30. Alt grup payları aynı yordamla hesaplanır. Küçük alt grupta pay geniştir ve bu bir kusur değil, örneklem büyüklüğünün doğrudan sonucudur.

İki Modelin Farkı ve Payı

İlk blok kurguyu kurar, beş rakibi aynı sınama kümesinde ağaçla karşılaştırır ve her fark için iki pay basar.

# 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 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))
CS = int(sum(x["supheli"] for x in EGT) * 2 > len(EGT))
A, D2, D8 = agac(EGT, 6, ALAN), agac(EGT, 2, ALAN), agac(EGT, 8, ALAN)
TEKRAR = 400
c = {}
for x in EGT:                      # bolge+basamak arama tablosu tabani, 03'ten surer
    k = (x["bolge"], dict(gruplar(x))["tarife"])
    c.setdefault(k, [0, 0])[x["supheli"]] += 1
c = {k: int(v[1] > v[0]) for k, v in c.items()}
AB = (lambda x: c.get((x["bolge"], dict(gruplar(x))["tarife"]), CS))


def ikili(s, f, tohum):
    # geri koyarak ornekleme M26/K05'te olculdu; burada yalniz FARKA uygulanir
    dA = [int(tahmin(A, x) == x["supheli"]) for x in s]
    dB = [int(f(x) == x["supheli"]) for x in s]
    fark, n, esl, bag = [a - b for a, b in zip(dA, dB)], len(s), [], []
    for j in range(TEKRAR):
        r, r1, r2 = uretec(tohum + j), uretec(tohum + 5000 + j), uretec(tohum + 9000 + j)
        esl.append(sum(fark[int(r() * n)] for _ in range(n)) / n)
        bag.append(sum(dA[int(r1() * n)] for _ in range(n)) / n
                   - sum(dB[int(r2() * n)] for _ in range(n)) / n)
    esl.sort()
    bag.sort()
    a5, a95 = int(0.05 * TEKRAR), int(0.95 * TEKRAR) - 1
    return (sum(fark) / n, esl[a5], esl[a95], bag[a5], bag[a95],
            sum(1 for v in fark if v))


RAKIP = (("en sik sinif", lambda x: CS), ("derinlik 2", lambda x: tahmin(D2, x)),
         ("derinlik 8", lambda x: tahmin(D8, x)), ("arama tablosu", AB),
         ("hepsi supheli", lambda x: 1))
print(f"{'rakip':<15} {'uyusmaz':>8} {'fark':>8} | {'eslestirilmis':>21} {'gen':>7}"
      f" | {'bagimsiz':>21} {'gen':>7} | sifir")
for ad, f in RAKIP:
    d, lo, hi, blo, bhi, u = ikili(SIN, f, 71000)
    print(f"{ad:<15} {u:>8} {d:>+8.4f} | [{lo:>+8.4f}, {hi:>+8.4f}] {hi - lo:>7.4f}"
          f" | [{blo:>+8.4f}, {bhi:>+8.4f}] {bhi - blo:>7.4f} | "
          f"{'disinda' if lo > 0 or hi < 0 else 'icinde'}")
rakip            uyusmaz     fark |         eslestirilmis     gen |              bagimsiz     gen | sifir
en sik sinif          37  +0.0198 | [ -0.0198,  +0.0556]  0.0754 | [ -0.0516,  +0.0794]  0.1310 | icinde
derinlik 2            24  -0.0079 | [ -0.0437,  +0.0238]  0.0675 | [ -0.0714,  +0.0516]  0.1230 | icinde
derinlik 8            12  +0.0159 | [ -0.0079,  +0.0397]  0.0476 | [ -0.0437,  +0.0754]  0.1190 | icinde
arama tablosu         33  -0.0119 | [ -0.0556,  +0.0238]  0.0794 | [ -0.0754,  +0.0476]  0.1230 | icinde
hepsi supheli        215  +0.5357 | [ +0.4603,  +0.6190]  0.1587 | [ +0.4683,  +0.5992]  0.1310 | disinda

Son sütun dersin ilk sonucudur. Beş karşılaştırmanın dördünde payın içinde sıfır var. Modelin en sık sınıfı 0,0198 geçmesi, arama tablosuna 0,0119 kaybetmesi, derinlik 2 ile arasındaki 0,0079, derinlik 8 ile arasındaki 0,0159 — dördü de 252 abonelik bu kümede ölçülemiyor. Yalnız “hepsini şüpheli say” farkı, 0,5357 ile payın dışında kalıyor. Önceki üç dersin tablolarındaki sayılar yanlış hesaplanmış değil; ölçüm eşiğinin altındalar ve bu iki ayrı şeydir.

İkinci sonuç iki pay sütununun karşılaştırılmasıdır. Eşleştirilmiş pay her satırda daha dar: 0,0754’e karşı 0,1310, 0,0675’e karşı 0,1230, 0,0476’ya karşı 0,1190. Neden uyuşmazlık sütununda duruyor. Derinlik 8 ağacı ile derinlik 6 ağacı 252 abonenin yalnız 12’sinde ayrılıyor; geri kalan 240 abonede ikisi de aynı yanıtı veriyor ve o abonelerin zorluğu farkın hesabından tamamen çıkıyor. Bağımsız ölçümde çıkmıyor, çünkü orada iki modelin ayrı kümelerde ölçüldüğü varsayılıyor ve her kümenin kendi zorluk değişkenliği paya giriyor. İki modeli aynı örneklerde ölçmek, veri toplamadan payı iki buçuk kata kadar daraltıyor.

Son satır ters yönde okunur: “hepsini şüpheli say” ile ağaç 215 abonede ayrıldığı için eşleştirilmiş pay orada bağımsız paydan geniş. Eşleştirme her zaman daraltmaz; iki model ne kadar çok anlaşırsa o kadar daraltır.

Payı Belirleyen Küme Büyüklüğüdür

Payın genişliği modelden değil kümeden gelir. Aynı karşılaştırma, kümenin baş tarafından alınan farklı büyüklüklerde yinelenir.

HAVUZ = DOG + SIN
print(f"{'kume':>6} | {'fark':>8} {'eslestirilmis':>21} {'gen':>7} | {'bagimsiz gen':>13}")
for n in (63, 126, 189, 252, 504):
    d, lo, hi, blo, bhi, u = ikili(HAVUZ[:n] if n > 252 else SIN[:n], AB, 74000)
    print(f"{n:>6} | {d:>+8.4f} [{lo:>+8.4f}, {hi:>+8.4f}] {hi - lo:>7.4f} | "
          f"{bhi - blo:>13.4f}")
  kume |     fark         eslestirilmis     gen |  bagimsiz gen
    63 |  +0.0000 [ -0.0635,  +0.0476]  0.1111 |        0.2540
   126 |  +0.0079 [ -0.0397,  +0.0556]  0.0952 |        0.1667
   189 |  -0.0106 [ -0.0529,  +0.0317]  0.0847 |        0.1376
   252 |  -0.0119 [ -0.0476,  +0.0278]  0.0754 |        0.1270
   504 |  -0.0159 [ -0.0437,  +0.0119]  0.0556 |        0.0794

Fark sütunu kararsız: 63 aboneden 0,0000, 126’dan +0,0079, 504’ten −0,0159. İşaret bile değişiyor. Pay sütunu ise düzenli daralıyor — 0,1111’den 0,0556’ya, yani küme sekiz katına çıkarken pay yarıya iniyor. Bu, ölçülebilecek en küçük farkın küme büyüklüğüne bağlı olduğu anlamına gelir: 252 abonede 0,04’ün altındaki hiçbir fark okunamaz, ve M27 boyunca raporlanan model farklarının çoğu bu eşiğin altındadır.

Son satır bir uyarı taşır. 504’lük küme doğrulama ile sınamanın birleşimidir ve doğrulama kümesine model seçilirken zaten bakılmıştır; oradaki −0,0159 raporlanabilir bir başarım sayısı değildir. Satır yalnız payın büyüklükle nasıl daraldığını göstermek için durur. Ayrılmış kümenin büyüklüğü bu yüzden bir bölme oranı değil, ölçülmek istenen en küçük farkın bir sonucudur.

Alt Grupta Fark Payın İçinde Kayboluyor

Alt grup açıklığı üç derste ölçüldü. Şimdi her alt gruptaki farkın kendi payı hesaplanır.

print(f"{'alt grup':<14} {'n':>4} {'uyusmaz':>8} {'fark':>8} "
      f"{'eslestirilmis pay':>22} {'sifir':>8}")
dis = 0
for g in ADLAR:
    s = [x for x in SIN if g in gruplar(x)]
    d, lo, hi, blo, bhi, u = ikili(s, lambda x: CS, 76000)
    dis += lo > 0 or hi < 0
    print(f"{' '.join(g):<14} {len(s):>4} {u:>8} {d:>+8.4f} [{lo:>+8.4f}, {hi:>+8.4f}]"
          f" {'disinda' if lo > 0 or hi < 0 else 'icinde':>8}")
print(f"\npayi sifiri disarida birakan alt grup: {dis}/{len(ADLAR)}")
alt grup          n  uyusmaz     fark      eslestirilmis pay    sifir
bolge bati       32        1  -0.0312 [ -0.0938,  +0.0000]   icinde
bolge dogu       36       19  +0.1389 [ -0.0556,  +0.3611]   icinde
bolge guney      58        3  +0.0517 [ +0.0172,  +0.1034]  disinda
bolge kuzey      68        7  -0.0441 [ -0.1176,  +0.0147]   icinde
bolge merkez     58        7  +0.0172 [ -0.0690,  +0.1034]   icinde
hane 1-2         73        9  +0.0411 [ -0.0274,  +0.1096]   icinde
hane 3-4        143       21  +0.0070 [ -0.0420,  +0.0629]   icinde
hane 5+          36        7  +0.0278 [ -0.0833,  +0.1389]   icinde
okuma az         85        4  -0.0471 [ -0.0824,  -0.0118]  disinda
okuma tam       167       33  +0.0539 [ +0.0060,  +0.1018]  disinda
tarife 10        12        1  -0.0833 [ -0.2500,  +0.0000]   icinde
tarife 25       193       22  -0.0104 [ -0.0466,  +0.0311]   icinde
tarife 40        47       14  +0.1702 [ +0.0426,  +0.2766]  disinda

payi sifiri disarida birakan alt grup: 4/13

Doğu bölgesi satırı bu dersin en sert sonucudur. Modelin oradaki katkısı +0,1389 ve bu, kursun şimdiye kadar ölçtüğü en büyük alt grup katkılarından biriydi. Payı [−0,0556, +0,3611] ve sıfırı içeriyor. Otuz altı abonede on dokuz uyuşmazlık, farkı üçte bir puan genişliğinde bir aralığa yayıyor. Aynı sayı iki derste “modelin doğuda kattığı” diye okundu; burada okunamayacağı görülüyor.

Sıfırı dışarıda bırakan dört alt grup vardır ve biri ters yöndedir: az okuması olan 85 abonede fark −0,0471 ve payı [−0,0824, −0,0118]. Model o alt grupta en sık sınıfı söylemekten ölçülebilir biçimde kötüdür. Kalan üçü ileri yöndedir: güney +0,0517, tam okumalılar +0,0539, tarife 40 basamağı +0,1702.

Buradan iki kural çıkar. Alt grup açıklığı bir tasarım kararının sonucudur ve açıklığın kendisi ölçülebilir, ama açıklığı oluşturan tek tek farklar çoğu alt grupta ölçülemez. İkincisi, on üç alt gruba bakıp içlerinden en büyük farkı seçmek, M26/K05’te sayılan çoklu bakış payını yeniden üretir: on üç bağımsız sınamanın birinde payın dışına çıkmak, on üç kez bakıldığı yazılmadan bir bulgu değildir.

Özet

  • Beş karşılaştırmanın dördünde payın içinde sıfır var: modelin en sık sınıfı 0,0198 geçmesi, arama tablosuna 0,0119 kaybetmesi ve iki derinlik farkı 252 abonede ölçülemiyor. Payın sıfırı içermesi eşitlik değil, ölçüm eksiği demektir.
  • Eşleştirilmiş karşılaştırma bağımsızdan dar pay verir: 0,0754’e karşı 0,1310, 0,0476’ya karşı 0,1190. Daralma iki modelin uyuşma oranından gelir ve 215 abonede ayrışan bir çiftte eşleştirme payı genişletir.
  • Pay küme büyüklüğüyle daralıyor: 63 abonede 0,1111, 504’te 0,0556. Ayrılmış kümenin büyüklüğü bir bölme oranı değil, ölçülmek istenen en küçük farkın sonucudur.
  • Alt gruplarda 13 farkın yalnız 4’ünün payı sıfırı dışarıda bırakıyor. Kursun en büyük alt grup katkısı olan doğu bölgesindeki +0,1389 bunlardan biri değil: payı [−0,0556, +0,3611].
  • Sıfırı dışarıda bırakan dört farktan biri ters yönde: az okuması olan abonelerde model −0,0471 ile tabanın ölçülebilir biçimde altında.

Sonraki Adım

Dört derste ölçünün kendisi tasarlandı: küme kime göre ayrıldı, eşik hangi bedelden okundu, taban nasıl seçildi, fark hangi payla söylendi. Hepsinin ortak varsayımı, sınama kümesinin modelin karşılaşacağı veriyle aynı dağılımdan geldiğidir. Bir ölçüm ağı zamanla değişir: yeni bölgeler katılır, tarife basamakları kayar, sayaç değişimiyle sıfır okuma oranı düşer. Sonraki ders o varsayımı ölçer — eğitim ile üretim verisi arasındaki farkı tek bir sayıya indirir, bu sayıyı başarım düşüşüyle yan yana koyar, ve girdi kayması ile etiket kaymasını ayırarak ikisinin niçin farklı çözüm istediğini gösterir.

İ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