İçeriğe geç
academia.sh

Ders 09 / 13

Hipotez Testi Uygulaması

İki dönemde de okunan 1.101 abonede gözlenen fark 0,957 m³ ve bu tek fark iki ayrı p değeri veriyor: bağımsız sayımda 2.000 karıştırmanın 24'ü farkı aşıyor ve p 0,01249 çıkıyor, eşleştirilmiş sayımda 5'i aşıyor ve p 0,00300 oluyor. Varsayım denetimi eşleştirmenin gerçek olduğunu 0,213'lük korelasyonla gösteriyor; eşleştirme bozulduğunda p 0,01099'a geri dönüyor. Etki büyüklüğü 0,112 ve 0,089 olarak p'nin yanında duruyor. Aynı kümenin 275 çiftlik dörtte birinde fark 1,132 m³ ile daha büyük, p ise 0,10695 ile on yedi kat büyük çıkıyor.

İçindekiler

Önceki ders farkın kendi aralığını hesapladı ve sıfırın aralığın dışında kaldığını gördü. Bu bir karara yakın duruyordu ama bir sınama değildi. Sınamanın sorduğu soru başkadır: hiçbir fark yokken, gözlenen büyüklükte bir fark kaç koşumda bir ortaya çıkar.

Bu sorunun cevabı bu kursta tablodan okunmaz, koşumla sayılır. Keşifsel analiz konusunun ilk dersi bölge etiketlerini rastgele yeniden dağıtıp doğu ile kuzey arasındaki farkın kaç koşumda bir göründüğünü saymıştı; burada aynı yöntem bir sınama olarak adlandırılır ve asıl ölçü şudur: sınama seçimi bir varsayımdır ve varsayım değişince p değeri oynar. Aynı iki grup, aynı gözlenen fark, iki p değeri.

  • UI19. Sıfır hipotezi bir cümle değil bir işlemdir. “İki grup arasında fark yok” varsayımı, etiketlerin gözlemler arasında değiştirilebilir olduğu anlamına gelir; yeniden karıştırma sınaması tam olarak bunu yapar ve farkı her karıştırmada yeniden hesaplar.
  • UI20. p değeri, karıştırılmış kümelerin kaçının gözlenen fark kadar ya da ondan büyük bir fark ürettiğidir. Gözlenen koşum da sayıya katılır, bu yüzden pay ve payda birer artırılır.
  • UI21. Anlamlılık düzeyi sınamadan önce yazılan bir eşiktir. Sonuç görüldükten sonra seçilen eşik, eşik değil bir sonuçtur.
  • UI22. Sınama seçimi bir varsayımdır ve varsayım denetlenebilir. Eşleştirmenin gerçek olup olmadığı eşli okumaların korelasyonuyla ölçülür.
  • UI23. Aynı gözlenen fark iki varsayımda iki p değeri verir. Fark değişmez, p değişir.
  • UI24. p değeri etkinin büyüklüğü değildir. Etki büyüklüğü, farkın standart sapmaya bölünmüş hali, p’nin yanında ayrı bir sayı olarak yazılır.
  • UI25. p değeri sıfır hipotezinin olasılığı da değildir. Ayrıca çözünürlüğü koşum sayısına bağlıdır: 2.000 karıştırmayla yazılabilecek en küçük p değeri 0,00050’dir.

Sıfır Hipotezi Bir İşlemdir

# kume.py — MODELDIR: K03-K04'un kurgu olcum agi ayni tohumla yeniden uretilir.
# 3.199 satirlik uzun bicimli okuma tablosu, 1.329 abone, uc donem, bes bolge.
import math

TOHUM, HAM, M32 = 20260218, 1400, 0xFFFFFFFF
DONEM = ["2026-01", "2026-02", "2026-03"]
BOLGE = [("kuzey", 0.28, 21), ("guney", 0.22, 17), ("dogu", 0.18, 26),
         ("bati", 0.14, 14), ("merkez", 0.18, 23)]


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


_k, _e = [], []
for i in range(HAM):
    r = uretec(TOHUM + i)
    b = BOLGE[ayrik(r(), [x[1] for x in BOLGE])]
    ayrik(r(), [0.06, 0.24, 0.30, 0.24, 0.11, 0.05])
    ayrik(r(), [0.08, 0.14, 0.27, 0.34, 0.17])
    (_e if r() < 0.046 else _k).append(
        {"abone_no": 10001 + i, "bolge": b[0], "taban": b[2]})
GECERLI = {a["abone_no"] for a in _k}

OKUMA = []
for a in _k + _e:
    r = uretec(TOHUM + 7000 + a["abone_no"])
    for d in range(ayrik(r(), [0.05, 0.12, 0.21, 0.62])):
        t = 0.0 if r() < 0.038 else math.floor(
            a["taban"] * math.exp((r() + r() + r() - 1.5) * 0.62)
            * (1 - d * 0.05) * 100 + 0.5) / 100
        if a["abone_no"] not in GECERLI:
            r()
            continue
        OKUMA.append({"abone_no": a["abone_no"], "bolge": a["bolge"],
                      "donem": DONEM[d], "tuketim_m3": t})
        r()


def ortalama(v):
    return sum(v) / len(v)


KARISTIRMA = 2000
ikili = {}
for o in OKUMA:
    ikili.setdefault(o["abone_no"], {})[o["donem"]] = o["tuketim_m3"]
CIFT = [(v["2026-01"], v["2026-02"]) for v in ikili.values()
        if "2026-01" in v and "2026-02" in v]
ilk = [x for x, _ in CIFT]
son = [y for _, y in CIFT]
fark = [x - y for x, y in CIFT]
GOZLENEN = ortalama(fark)
print(f"iki donemde de okunan abone: {len(CIFT)}")
print(f"2026-01 ortalamasi {ortalama(ilk):.3f} m3, 2026-02 ortalamasi {ortalama(son):.3f} m3")
print(f"gozlenen fark {GOZLENEN:.3f} m3")


def karistir(v, sec):
    h = v[:]
    for i in range(len(h) - 1, 0, -1):
        j = int(sec() * (i + 1))
        h[i], h[j] = h[j], h[i]
    return h


sec = uretec(TOHUM + 401)
hepsi, n1 = ilk + son, len(ilk)
asan = 0
for _ in range(KARISTIRMA):
    h = karistir(hepsi, sec)
    if abs(ortalama(h[:n1]) - ortalama(h[n1:])) >= abs(GOZLENEN):
        asan += 1
p_bagimsiz = (asan + 1) / (KARISTIRMA + 1)
print(f"bagimsiz sayim: {KARISTIRMA} karistirmanin {asan} tanesi gozlenen farki asti, "
      f"p = {p_bagimsiz:.5f}")
iki donemde de okunan abone: 1101
2026-01 ortalamasi 20.638 m3, 2026-02 ortalamasi 19.681 m3
gozlenen fark 0.957 m3
bagimsiz sayim: 2000 karistirmanin 24 tanesi gozlenen farki asti, p = 0.01249

Soru bir rapor sorusudur: ilk dönemden ikinci döneme tüketim düştü mü. İki dönemde de okunabilmiş 1.101 abone var, ortalamalar 20,638 ve 19,681 m³ ve gözlenen fark 0,957 m³. Küme kurgudur ve K03–K04’ün ölçüm ağından aynı tohumla yeniden üretilmiştir; 1.329 abonenin 1.101’inin iki dönemde de okunabilmiş olması kümenin kendi eksikliğidir, bir seçim değil.

Sıfır hipotezi burada bir cümle olarak değil, bir işlem olarak kurulur. “Dönem etiketinin hiçbir etkisi yok” demek, 2.202 okumanın hangisinin hangi döneme ait olduğunun rastgele olduğunu kabul etmektir. Kod tam bunu yapar: bütün okumaları tek torbaya koyar, karıştırır, ilk 1.101’ini birinci dönem sayar ve farkı yeniden hesaplar. Bu 2.000 kez tekrarlanır.

p değeri bu koşumdan bir sayımdır: karıştırmaların 24 tanesi, gözlenen 0,957 m³ kadar ya da daha büyük bir fark üretti. Pay ve paydaya birer eklenir, çünkü gözlenen düzenlemenin kendisi de olası düzenlemelerden biridir; p 0,01249 çıkar. Yüzde beşlik bir anlamlılık düzeyi sınamadan önce yazılmışsa bu sonuç eşiğin altındadır.

Anlamlılık düzeyinin önce yazılması bu cümlenin taşıyıcı kısmıdır. Eşik sonuçtan sonra seçildiğinde bir karar kuralı olmaktan çıkar ve sonucun kendisini tekrar eden bir etikete dönüşür; o durumda sınama hiçbir şey elemiş olmaz. Eşiğin sayısı da bir gelenektir, bir ölçüm değildir: bu kümede yüzde beş ile yüzde bir arasındaki seçim, aşağıdaki iki sayımın hangisine bakıldığından daha fazla iş görür.

Eşleştirme Varsayımı

# esli.py — ayni kume, baska bir varsayim: her satir bir abonenin iki okumasidir.
# Sifir hipotezi bu kez "her cift icinde farkin isareti rastgele" demektir.
sec = uretec(TOHUM + 403)
asan2 = 0
for _ in range(KARISTIRMA):
    t = sum(f if sec() < 0.5 else -f for f in fark) / len(fark)
    if abs(t) >= abs(GOZLENEN):
        asan2 += 1
p_esli = (asan2 + 1) / (KARISTIRMA + 1)


def sapma(v):
    m = ortalama(v)
    return math.sqrt(sum((x - m) ** 2 for x in v) / (len(v) - 1))


havuz = math.sqrt((sapma(ilk) ** 2 + sapma(son) ** 2) / 2)
ma, mb = ortalama(ilk), ortalama(son)
kov = sum((x - ma) * (y - mb) for x, y in CIFT) / (len(CIFT) - 1)
print(f"eslestirilmis sayim: {asan2} karistirma gozlenen farki asti, p = {p_esli:.5f}")
print(f"varsayim denetimi: esli okumalarin korelasyonu {kov / (sapma(ilk) * sapma(son)):.3f}")
print(f"fark ikisinde de {GOZLENEN:.3f} m3; etki buyuklugu "
      f"{GOZLENEN / havuz:.3f} (bagimsiz) ve {GOZLENEN / sapma(fark):.3f} (eslestirilmis)")
print(f"p orani {p_bagimsiz / p_esli:.2f} kat")
eslestirilmis sayim: 5 karistirma gozlenen farki asti, p = 0.00300
varsayim denetimi: esli okumalarin korelasyonu 0.213
fark ikisinde de 0.957 m3; etki buyuklugu 0.112 (bagimsiz) ve 0.089 (eslestirilmis)
p orani 4.17 kat

Aynı 2.202 okuma, ikinci bir varsayımla sayıldı. Bu kez her satır bir abonenin iki okumasıdır ve sıfır hipotezi “her çift içinde farkın işareti rastgele” biçimini alır. Karıştırma da ona göre değişir: etiketler gruplar arasında değil, her çiftin içinde yer değiştirir. Sonuç p 0,00300’dür.

Gözlenen fark iki sayımda da 0,957 m³’tür ve tek bir metreküp bile oynamamıştır. Oynayan tek sayı p değeridir ve 4,17 kat küçülmüştür. Aradaki bütün fark, sınamayı seçerken alınan varsayımdan gelir. İki sayım da yüzde beş eşiğinin altında kalır, ama yüzde bir eşiğinde kararlar ayrılır.

Varsayım denetimi ikinci satırdadır. Eşleştirmenin bir kazanç sağlaması için aynı abonenin iki okumasının birbiriyle ilişkili olması gerekir; ölçülen korelasyon 0,213’tür. Bu, abonelerin tüketim düzeyinin dönemler arasında kısmen korunduğu anlamına gelir ve eşleştirilmiş sayımın neden daha küçük bir p verdiğini açıklar: abone ile abone arasındaki değişkenlik hesaptan düşer.

Etki büyüklüğü aynı satırda p ile yan yana durur: 0,112 ve 0,089. İkisi de farkın bir standart sapmaya bölünmüş halidir ve ikisi de küçüktür. Ortalama tüketimin yüzde 4,6’sı kadar bir düşüşten söz edilmektedir; p değerinin küçüklüğü bu düşüşü büyütmez.

Eşleştirme Yordamdan Gelmez

# sahte.py — eslestirme bir yordam degil bir olgudur: ikinci donem okumalari
# baska abonelerle eslestirilirse fark ayni kalir, kazanc kaybolur.
sec = uretec(TOHUM + 404)
sahte = karistir(son, sec)
fs = [x - y for x, y in zip(ilk, sahte)]
sec = uretec(TOHUM + 405)
asan3 = 0
for _ in range(KARISTIRMA):
    t = sum(f if sec() < 0.5 else -f for f in fs) / len(fs)
    if abs(t) >= abs(ortalama(fs)):
        asan3 += 1
print(f"sahte eslestirme: ayni fark {ortalama(fs):.3f} m3, "
      f"p = {(asan3 + 1) / (KARISTIRMA + 1):.5f}")
print(f"farklarin standart sapmasi: gercek eslestirmede {sapma(fark):.3f}, "
      f"sahtede {sapma(fs):.3f} m3")
sahte eslestirme: ayni fark 0.957 m3, p = 0.01099
farklarin standart sapmasi: gercek eslestirmede 10.753, sahtede 12.275 m3

Eşleştirilmiş sınamanın küçük p değerini, sınamanın kendisinin ürettiği düşünülebilir. Bu koşum onu sınar: ikinci dönem okumaları karıştırılıp başka abonelerle eşleştirilir, sonra tam olarak aynı eşleştirilmiş sınama uygulanır.

Gözlenen fark değişmez, çünkü iki grubun ortalaması aynı kalmıştır: yine 0,957 m³. Ama p 0,01099’a çıkar ve bağımsız sayımın verdiği 0,01249 ile aynı bölgeye döner. Nedeni son satırdadır: farkların standart sapması 10,753’ten 12,275 m³’e yükselmiştir, yani gerçek eşleştirmenin düşürdüğü değişkenlik geri gelmiştir.

Sonuç, sınama seçimi hakkındaki kuralı verir. Eşleştirilmiş sınama daha güçlü bir yöntem değildir; eşleştirme gerçekse daha güçlüdür. Var olmayan bir eşleştirme uydurmak p değerini küçültmez, yalnız hesabı yanlış yere taşır. Bu yüzden varsayım denetimi sınamanın bir ekiyle değil, önkoşulu olarak yazılır. Denetimin kendisi de pahalı değildir: burada tek bir korelasyon sayısı ve tek bir standart sapma karşılaştırması yetti, ikisi de sınamanın maliyetinin yanında hesaba katılmayacak kadar küçüktür.

p Değerinin Ne Olmadığı

# olcek.py — ayni etki, farkli gozlem sayisi. Alt kumeler ic ice secilir ve
# ayni eslestirilmis sinama her birine uygulanir.
sec = uretec(TOHUM + 406)
dizin = karistir(list(range(len(CIFT))), sec)
for bolen in (4, 2, 1):
    alt = [fark[i] for i in sorted(dizin[:len(CIFT) // bolen])]
    s2 = uretec(TOHUM + 403)
    a4 = 0
    for _ in range(KARISTIRMA):
        t = sum(f if s2() < 0.5 else -f for f in alt) / len(alt)
        if abs(t) >= abs(ortalama(alt)):
            a4 += 1
    print(f"n={len(alt):4d} fark {ortalama(alt):6.3f} m3 etki {ortalama(alt) / sapma(alt):.3f} "
          f"p = {(a4 + 1) / (KARISTIRMA + 1):.5f}")
print(f"{KARISTIRMA} karistirmayla yazilabilecek en kucuk p = {1 / (KARISTIRMA + 1):.5f}")
n= 275 fark  1.132 m3 etki 0.099 p = 0.10695
n= 550 fark  1.192 m3 etki 0.110 p = 0.01149
n=1101 fark  0.957 m3 etki 0.089 p = 0.00300
2000 karistirmayla yazilabilecek en kucuk p = 0.00050

Üç satır p değerinin ne olmadığını doğrudan gösteriyor. Dörtte birlik alt kümede gözlenen fark 1,132 m³’tür — tam kümedeki 0,957 m³’ten büyük — ve etki büyüklüğü de 0,099 ile 0,089’un üstündedir. Buna rağmen p değeri 0,10695’tir, yani tam kümenin 0,00300’ünün otuz beş katı ve yüzde beşlik eşiğin üstünde.

Aynı üç satır ters yönde de okunur: p küçüldükçe etki büyümemiştir. En küçük p’yi veren satır, en küçük etkiyi veren satırdır. p değeri farkın büyüklüğünü değil, farkın gözlem sayısıyla birlikte rastlantıdan ne kadar uzaklaştığını ölçer. Bu yüzden p tek başına raporlanmaz; yanında gözlem sayısı ve etki büyüklüğü yazılır.

İkinci yanlış okuma da burada kapanır: p, sıfır hipotezinin doğru olma olasılığı değildir. Ölçtüğü şey, sıfır hipotezi doğruyken bu kadar büyük bir farkın ne sıklıkla üretildiğidir — 0,00300 sayısı “fark yok ihtimali binde üç” demek değil, “fark yokken bunun gibi bir sonuç 2.000 karıştırmanın 5’inde çıktı” demektir.

Son satır sayının kendi sınırını yazıyor: 2.000 karıştırmayla üretilebilecek en küçük p 0,00050’dir. Hiçbir karıştırmanın gözlenen farkı aşamadığı bir sınamada yazılabilecek şey “p sıfırdır” değil, “p 0,00050’den küçüktür”dür. Payın çözünürlüğünü koşum sayısı belirler.

Özet

  • Sıfır hipotezi yeniden karıştırma sınamasında bir işlemdir: dönem etiketleri 2.000 kez rastgele dağıtılır, fark her seferinde yeniden hesaplanır ve gözlenen farkı aşan koşumlar sayılır.
  • Aynı 1.101 çiftte gözlenen fark 0,957 m³’tür ve değişmez; p değeri bağımsız sayımda 0,01249, eşleştirilmiş sayımda 0,00300 çıkar, yani varsayım p’yi 4,17 kat oynatır.
  • Eşleştirme varsayımı denetlenir: eşli okumaların korelasyonu 0,213’tür. Eşleştirme bozulduğunda farkların standart sapması 10,753’ten 12,275 m³’e çıkar ve p 0,01099 ile bağımsız sayıma döner.
  • p değeri etki büyüklüğü değildir: 275 çiftlik alt kümede fark 1,132 m³ ve etki 0,099 ile daha büyükken p 0,10695’tir, tam kümenin otuz beş katı.
  • p değeri sıfır hipotezinin olasılığı da değildir ve çözünürlüğü koşum sayısına bağlıdır; 2.000 karıştırmayla yazılabilecek en küçük p 0,00050’dir.

Sonraki Adım

Bu derste tek bir soru soruldu ve tek bir p değeri yazıldı: iki dönem arasında fark var mı. Soru seçildikten sonra sınamanın kendisi düzenli bir iştir ve varsayım denetimiyle birlikte savunulabilir bir sonuç verir. Gerçek çözümlemede ise soru tek değildir. Aynı deney kümesinden hangi ölçütün sayılacağı, hangi kırılımın açılacağı, hangi gözlem penceresinin alınacağı ve dengesiz atamanın ne yapılacağı ayrı ayrı seçilir; her seçim yeni bir sınama demektir ve soruların sayısı payı büyütür. Sonraki ders aynı deney kümesinden kaç farklı kararın çıktığını sayar ve kararın deneyden önce yazılmasının bu payın ne kadarını kapattığını ölçer.

İ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