Ders 12 / 18
Veriyle Anlatı Kurma
Bulgudan öneriye giden beş adımlık zincirden bir adım çıkarıldığında okuyucunun kendisinin tamamlamak zorunda kaldığı önerme sayılır: bulgu çıkarılınca 4, karşılaştırma çıkarılınca 3, sebep adayı çıkarılınca 2, belirsizlik çıkarılınca 3, öneri çıkarılınca 3 çıkarım açıkta kalır. Zincirin taşıdığı on bir yanlış varsayılandan dokuzu öneriyi güçlendirir, ikisi zayıflatır — boşluklar rastgele dolmaz. K05'in oynama payının yeri karara bağlanır: pay hiç yazılmazsa 4 çıkarım ve 3 yanlış varsayılan, yalnız sonda bir kısıtlar paragrafında yazılırsa 1 çıkarım ve 1 yanlış varsayılan kalır, bulgunun yanında ve belirsizlik adımında yazıldığında ikisi de sıfırlanır.
İçindekiler
Önceki üç ders sayıyı düzeltti: düzen kararı destekleyecek biçimde bölündü, ölçütün tanımı oynatılamaz hâle getirildi, sayının yanına veri kesme anı ile yenileme gecikmesi yazıldı. Okuyucunun elinde duran şey hâlâ bir sayı. Bir sayının karara dönüşmesi için bir zincire oturması gerekir ve zincirin halkaları eksikse okuyucu onları kendisi tamamlar.
Bu dersin ölçüsü atlanan adımın bıraktığı boşluktur: bir halka çıkarıldığında okuyucunun yapmak zorunda kaldığı çıkarım sayısı. Yanına ikinci bir sayı yazılır — bu çıkarımların kaçının varsayılanı kümeye göre yanlıştır ve o yanlış varsayılanların kaçı öneriyi güçlendirir.
- RP19. Küme K03’ten devralınır ve kurgudur: 3.199 satırlık okuma tablosu, 1.329 abone, üç dönem, beş bölge. Tohum koda yazılıdır.
- RP20. Bulgu K05’ten gelir: doğu ortalaması 24,674 m³ (557 okuma), kuzey 20,210 m³ (921 okuma), fark 4,463 m³. Sınama hesabı burada tekrarlanmaz, sayılar oradan okunur.
- RP21. Payın iki sayısı da K05’ten okunur: bölge etiketleri 2.000 kez yeniden karıştırıldığında gözlenen fark hiçbir koşumda aşılmadı; kütle, örneklem, sıfır okuma ve dönem sayısı üzerine verilen dört savunulabilir kararın açıklığı 0,206 m³’tür.
- RP22. Anlatı zinciri kurgudur: beş adım, on altı önerme, on beşi önerinin savunulması için gerekli.
- RP23. Bir adım çıkarıldığında okuyucunun o adımın önermelerini kendisi tamamladığı varsayılır. Her önermenin varsayılanı ve varsayılanın yönü ders içinde yazılıdır.
- RP24. Öneri de kurgudur: doğu bölgesinde tarife basamağı sınırının gözden geçirilmesi.
Zincir
# anlati.py — MODELDIR. K03'un kurgu kumesi ayni tohumla uretilir; uzerine bulgudan # oneriye giden bes adimlik bir anlati zinciri kurulur. import math TOHUM, HAM, M32 = 20260218, 1400, 0xFFFFFFFF 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 ABONE, ELENEN = [], [] 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]) (ELENEN if r() < 0.046 else ABONE).append( {"abone_no": 10001 + i, "bolge": b[0], "taban": b[2]}) GECERLI = {k["abone_no"] for k in ABONE} OKUMA = {} for k in ABONE + ELENEN: r = uretec(TOHUM + 7000 + k["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( k["taban"] * math.exp((r() + r() + r() - 1.5) * 0.62) * (1 - d * 0.05) * 100 + 0.5) / 100 if k["abone_no"] in GECERLI: OKUMA.setdefault(k["abone_no"], {})[d + 1] = t r() ORT = {} for b, _, _ in BOLGE: v = [t for k in ABONE if k["bolge"] == b for t in OKUMA.get(k["abone_no"], {}).values()] ORT[b] = (sum(v) / len(v), len(v)) FARK = ORT["dogu"][0] - ORT["kuzey"][0] EN_GENIS = max(ORT.values())[0] - min(ORT.values())[0] UC = sorted(ORT, key=lambda b: -ORT[b][0]) # Anlati zinciri: her adim bir onerme kumesi tasir. Onerme alanlari: kod, adim, # icerik, adim yoksa okuyucunun dustugu varsayilan, varsayilan kumeye gore yanlis mi, # onerinin savunulmasi icin gerekli mi, varsayilan oneriyi guclendiriyor mu (+1/-1). ONERME = [ ("O1", "bulgu", f"dogu ortalamasi {ORT['dogu'][0]:.3f} m3", "sayi bilinmiyor", False, True, 0), ("O2", "bulgu", f"kuzey ortalamasi {ORT['kuzey'][0]:.3f} m3", "sayi bilinmiyor", False, True, 0), ("O3", "bulgu", f"sayilar {ORT['dogu'][1]} ve {ORT['kuzey'][1]} okumaya dayaniyor", "gozlem sayisi buyuktur", True, True, 1), ("O4", "bulgu", "bulgudaki sayi payiyla birlikte yazildi", "sayi kesindir", True, True, 1), ("O5", "karsilastirma", f"fark {FARK:.3f} m3", "fark bilinmiyor", False, True, 0), ("O6", "karsilastirma", f"fark kuzeyin yuzde {FARK / ORT['kuzey'][0] * 100:.1f}'i", "fark kucuktur", True, True, -1), ("O7", "karsilastirma", f"bes bolgenin en genis farki {EN_GENIS:.3f} m3 ({UC[0]}-{UC[-1]})", "fark tek onemli farktir", True, True, 1), ("O8", "sebep adayi", "aday: dogu taban tuketimi daha yuksek", "sebep yoktur", False, True, 0), ("O9", "sebep adayi", "rakip aday: okuma kapsamasi farki", "tek sebep vardir", True, True, 1), ("O10", "sebep adayi", "rakip aday: tarife basamagi dagilimi", "tek sebep vardir", True, False, 1), ("O11", "belirsizlik", "K05: 2.000 karistirmada asilmadi", "pay olculmedi", False, True, 0), ("O12", "belirsizlik", "K05: dort kararin acikligi 0,206 m3", "pay sifirdir", True, True, 1), ("O13", "belirsizlik", "payin kapsamadigi adlandirildi", "pay her seyi kapsar", True, True, 1), ("O14", "oneri", "onerilen eylem yazildi", "eylem okuyucunun secimidir", True, True, -1), ("O15", "oneri", "eylemin geri alinabilirligi yazildi", "eylem geri alinabilir", True, True, 1), ("O16", "oneri", "eylem hangi olcutle olculecek", "olcum yapilmayacak", True, True, 1), ] ADIM = ["bulgu", "karsilastirma", "sebep adayi", "belirsizlik", "oneri"] print(f"kurgu kume (tohum {TOHUM}): {len(ABONE)} abone, " f"{sum(len(v) for v in OKUMA.values())} okuma") print(f"bulgu: dogu {ORT['dogu'][0]:.3f} m3 ({ORT['dogu'][1]} okuma), " f"kuzey {ORT['kuzey'][0]:.3f} m3 ({ORT['kuzey'][1]} okuma), fark {FARK:.3f} m3") print(f"zincir: {len(ADIM)} adim, {len(ONERME)} onerme, " f"{sum(1 for o in ONERME if o[5])} tanesi onerinin savunulmasi icin gerekli") for a in ADIM: print(f" {a:<15} " + ", ".join(o[0] for o in ONERME if o[1] == a))
kurgu kume (tohum 20260218): 1329 abone, 3199 okuma bulgu: dogu 24.674 m3 (557 okuma), kuzey 20.210 m3 (921 okuma), fark 4.463 m3 zincir: 5 adim, 16 onerme, 15 tanesi onerinin savunulmasi icin gerekli bulgu O1, O2, O3, O4 karsilastirma O5, O6, O7 sebep adayi O8, O9, O10 belirsizlik O11, O12, O13 oneri O14, O15, O16
Anlatı burada bir üslup değil bir önerme kümesidir. Öneri savunulabilir olacaksa arkasında duran önermelerin okuyucuya verilmiş olması gerekir; verilmeyen her önermeyi okuyucu kendisi üretir. Modelin yaptığı iş bu üretimi saymaktır.
Üçüncü adımın adı da bilerek “sebep” değil sebep adayıdır. Rapor doğu bölgesinin taban tüketiminin daha yüksek olduğunu bir aday olarak yazar, iki rakip adayı da yanına koyar ve aralarında karar vermez; kümede bu kararı verecek bir düzenek yoktur. Adayları yazmak bir kaçamak değil, okuyucunun tek adaya düşmesini engelleyen tek yoldur.
Atlanan Adım
# Zincirden bir adim cikarilir ve okuyucunun kendisinin tamamlamasi gereken # gerekli onerme sayilir. Yanlis varsayilan: kumeye gore dogru olmayan tamamlama. def bosluk(cikan=None, elenen=frozenset()): eksik = [o for o in ONERME if o[5] and (o[1] == cikan or o[0] in elenen)] yanlis = [o for o in eksik if o[4]] return eksik, yanlis, sum(1 for o in yanlis if o[6] > 0) print(f"{'cikarilan adim':<22}{'okuyucunun cikarimi':>20}{'yanlis varsayilan':>19}" f"{'oneriyi guclendiren':>21}") for a in [None] + ADIM: e, y, g = bosluk(a) print(f"{a or 'hicbiri (tam zincir)':<22}{len(e):>20}{len(y):>19}{g:>21}") print(f"\ntum zincirdeki yanlis varsayilanlar ve yonleri") for o in ONERME: if o[4]: print(f" {o[0]:<4} {o[1]:<14} okuyucu su varsayilana duser: {o[3]:<28}" f"{'oneriyi guclendirir' if o[6] > 0 else 'oneriyi zayiflatir'}") tumu = [o for o in ONERME if o[4]] print(f"toplam {len(tumu)} yanlis varsayilandan {sum(1 for o in tumu if o[6] > 0)} tanesi " f"oneriyi guclendiriyor, {sum(1 for o in tumu if o[6] < 0)} tanesi zayiflatiyor")
cikarilan adim okuyucunun cikarimi yanlis varsayilan oneriyi guclendiren hicbiri (tam zincir) 0 0 0 bulgu 4 2 2 karsilastirma 3 2 1 sebep adayi 2 1 1 belirsizlik 3 2 2 oneri 3 3 2 tum zincirdeki yanlis varsayilanlar ve yonleri O3 bulgu okuyucu su varsayilana duser: gozlem sayisi buyuktur oneriyi guclendirir O4 bulgu okuyucu su varsayilana duser: sayi kesindir oneriyi guclendirir O6 karsilastirma okuyucu su varsayilana duser: fark kucuktur oneriyi zayiflatir O7 karsilastirma okuyucu su varsayilana duser: fark tek onemli farktir oneriyi guclendirir O9 sebep adayi okuyucu su varsayilana duser: tek sebep vardir oneriyi guclendirir O10 sebep adayi okuyucu su varsayilana duser: tek sebep vardir oneriyi guclendirir O12 belirsizlik okuyucu su varsayilana duser: pay sifirdir oneriyi guclendirir O13 belirsizlik okuyucu su varsayilana duser: pay her seyi kapsar oneriyi guclendirir O14 oneri okuyucu su varsayilana duser: eylem okuyucunun secimidir oneriyi zayiflatir O15 oneri okuyucu su varsayilana duser: eylem geri alinabilir oneriyi guclendirir O16 oneri okuyucu su varsayilana duser: olcum yapilmayacak oneriyi guclendirir toplam 11 yanlis varsayilandan 9 tanesi oneriyi guclendiriyor, 2 tanesi zayiflatiyor
Tablonun ilk satırı zincirin tanımını doğruluyor: tam zincirde okuyucuya hiçbir çıkarım kalmıyor, çünkü önerinin savunulması için gereken on beş önermenin on beşi de yazılmış durumda. Bu satır bir başarı ölçüsü değil, ölçüm aracının kendi sıfır noktasıdır; geri kalan beş satır ona göre okunur.
Beş adımın hiçbiri ücretsiz değil. Bulgu çıkarıldığında dört, belirsizlik ve öneri çıkarıldığında üçer, karşılaştırma çıkarıldığında üç, sebep adayı çıkarıldığında iki çıkarım okuyucuya kalıyor. Sayılar birbirine yakın ve tek başına okunduğunda hangi adımın atlanmasının daha pahalı olduğunu söylemiyor.
Ayrımı ikinci ve üçüncü sütun yapıyor. On bir yanlış varsayılanın dokuzu öneriyi güçlendiriyor, yalnız ikisi zayıflatıyor. Boşluklar rastgele dolmuyor: okuyucu bir sayının yanında pay göremediğinde payı sıfır sayıyor, rakip bir sebep adayı göremediğinde tek sebep olduğunu varsayıyor, gözlem sayısı yazılmadığında sayının büyük bir kümeden geldiğini kabul ediyor. Üçü de öneriyi olduğundan sağlam gösteriyor.
Bunun sonucu yöntemsel bir kuraldır. Bir anlatı adımını atlamak, öneriyi savunmayı kolaylaştırır ve bu kolaylık yazarın niyetinden bağımsızdır. Zayıflatan iki varsayılan da bu kuralı bozmuyor, tersine açıklıyor: okuyucu farkın büyüklüğünü görmediğinde onu küçük sayar, önerilen eylem yazılmadığında eylemi kendisi seçer. Bu ikisi yazarın işine yaramadığı için atlanmaz; atlanan adımlar, atlanınca işe yarayan adımlardır.
Payın Yeri
Bu noktada K05’in oynama payının zincirin neresinde duracağı karara bağlanabilir. Üç yerleşim denenir.
# Payin anlatidaki yeri uc yerlesimle denenir. Pay K05'te olculdu ve burada # yeniden hesaplanmaz; sorulan sey payin zincirin hangi adiminda durdugudur. YERLESIM = [("pay hic yazilmaz", {"O4", "O11", "O12", "O13"}), ("pay yalniz sonda, kisitlar paragrafinda", {"O4"}), ("pay bulgunun yaninda ve belirsizlik adiminda", set())] print(f"{'payin yerlesimi':<46}{'cikarim':>9}{'yanlis':>8}{'guclendiren':>13}") for ad, el in YERLESIM: e, y, g = bosluk(elenen=el) print(f"{ad:<46}{len(e):>9}{len(y):>8}{g:>13}") print("\n--- ucuncu yerlesimin zinciri ---------------------------------") for a in ADIM: print(f" [{a}]") for o in ONERME: if o[1] == a: print(f" {o[0]:<4} {o[2]}{'' if o[5] else ' (gerekli degil)'}")
payin yerlesimi cikarim yanlis guclendiren
pay hic yazilmaz 4 3 3
pay yalniz sonda, kisitlar paragrafinda 1 1 1
pay bulgunun yaninda ve belirsizlik adiminda 0 0 0
--- ucuncu yerlesimin zinciri ---------------------------------
[bulgu]
O1 dogu ortalamasi 24.674 m3
O2 kuzey ortalamasi 20.210 m3
O3 sayilar 557 ve 921 okumaya dayaniyor
O4 bulgudaki sayi payiyla birlikte yazildi
[karsilastirma]
O5 fark 4.463 m3
O6 fark kuzeyin yuzde 22.1'i
O7 bes bolgenin en genis farki 10.896 m3 (dogu-bati)
[sebep adayi]
O8 aday: dogu taban tuketimi daha yuksek
O9 rakip aday: okuma kapsamasi farki
O10 rakip aday: tarife basamagi dagilimi (gerekli degil)
[belirsizlik]
O11 K05: 2.000 karistirmada asilmadi
O12 K05: dort kararin acikligi 0,206 m3
O13 payin kapsamadigi adlandirildi
[oneri]
O14 onerilen eylem yazildi
O15 eylemin geri alinabilirligi yazildi
O16 eylem hangi olcutle olculecek
İkinci yerleşim yaygın olanıdır ve bir çıkarım açık bırakıyor. Pay yazılmıştır, ama sonda yazılmıştır: okuyucu bulguyu okurken sayının yanında hiçbir aralık görmemiş ve “sayı kesindir” varsayılanını çoktan kurmuştur. Sonda gelen kısıtlar paragrafı bu varsayılanı geri almaz; yalnız yazarın kaydını temizler. Payın bir yeri değil iki yeri vardır ve birincisi bulgudaki sayının yanıdır.
İkincisi belirsizlik adımıdır ve orada pay iki farklı şey söyler. K05’in 2.000 yeniden karıştırmada aşılmayan farkı tek bir soruyu kapatır: bölge etiketleri rastgele dağılsaydı bu fark çıkar mıydı. Dört savunulabilir kararın 0,206 m³’lük açıklığı bambaşka bir belirsizliktir ve karıştırma payı onu hiç ölçmez. Bu yüzden zincirde üçüncü bir önerme duruyor: payın kapsamadığı adlandırılır. Adlandırılmadığında okuyucunun düştüğü varsayılan “pay her şeyi kapsar” olur ve bu varsayılan da öneriyi güçlendirenler arasındadır.
Zincirin son üç önermesi öneriyi bir eyleme bağlar: eylem yazılır, geri alınabilir olup olmadığı yazılır, hangi ölçütle ölçüleceği yazılır. Sonuncusu önceki iki dersi buraya bağlar. Ölçüt yazılmazsa öneri hiç sınanmaz; ölçüt yazılırsa tanımının sıkı olması gerekir, yoksa öneriyi değerlendiren sayı ölçtüğü şeyi oynatmadan oynatılabilir.
Özet
- Anlatı bir üslup değil beş adımlık bir önerme zinciridir: bulgu, karşılaştırma, sebep adayı, belirsizlik, öneri. Zincir on altı önerme taşır ve on beşi önerinin savunulması için gereklidir.
- Bir adım çıkarıldığında okuyucuya kalan çıkarım sayısı 2 ile 4 arasındadır; tek başına bu sayı hangi adımın daha pahalı olduğunu söylemez.
- Zincirin on bir yanlış varsayılanından dokuzu öneriyi güçlendirir, ikisi zayıflatır; bir adımı atlamak öneriyi savunmayı kolaylaştırır ve bu kolaylık yazarın niyetinden bağımsızdır.
- Oynama payının bir değil iki yeri vardır: bulgudaki sayının yanı ve belirsizlik adımı. Sonda ayrı bir kısıtlar paragrafı 1 çıkarım açık bırakır ve o çıkarım “sayı kesindir” varsayılanıdır.
- Belirsizlik adımı payın kapsamadığını da adlandırır: K05’in 2.000 karıştırmalık payı yalnız etiketlerin rastgele dağılması sorusunu kapatır, dört kararın 0,206 m³’lük açıklığını ölçmez.
- Üçüncü adım sebebi değil sebep adaylarını yazar; zincirin son üç önermesi öneriyi bir eyleme, eylemin geri alınabilirliğine ve onu sınayacak ölçüte bağlar.
Sonraki Adım
Rapor artık bir zincir üzerinde duruyor: sayılar geri okunabilen bir düzende, ölçütlerin tanımı sıkı, kaynağın kesme anı yazılı, anlatının halkaları tam. Bunların hepsi tek bir raporun bir kez üretilmesiyle ilgili. Aynı raporun üç ay sonra, başka bir kişi tarafından, aynı sayıları verecek biçimde yeniden üretilmesi hiç sorulmadı. Sonraki ders bunu sayar: aynı raporu ikinci kez üretmek için kaç kalem sabit olmalı, biri eksik kaldığında sayı ne kadar oynuyor ve M26/K03 ile M26/K04’ün saydığı kalemlerin üstüne raporun eklediği kaç kalem var.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.