Ders 03 / 11
Ödünleşim Çözümlemesi
Alternatiflerin nitelik ekseninde puanlandığı tablonun kayda geçmiş halinin ölçülmesi: üçüncü bir kişinin kayıttaki tabloyla aynı sonuca varıp varamadığı sayılır, eksik ölçüt, yazılmamış ağırlık ve kaynağı belirsiz puan üç ayrı kusur olarak ayrılır, her kusur tek tek giderilerek yeniden üretilebilen karar oranı ölçülür ve tamamlamanın dakika cinsinden bedeli kazanılan çözümleme başına hesaplanır.
İçindekiler
Önceki ders bir değerlendirme turunun kararı çevirdiğini ölçtü ve geriye “şu bilgi yüzünden değişti” biçiminde tek satırlık bir gerekçe bıraktı. O satırın arkasında birden çok alternatif, birden çok nitelik ve her alternatifin her nitelikteki durumu vardı. Ödünleşim çözümlemesi bu tablonun adıdır.
Tablonun nasıl kurulacağı, ağırlıkların kazananı nasıl belirlediği ve ağırlık uzayının taranmasıyla kararın ne kadar dayanıklı olduğu önceki kursta ölçüldü. Burada tekrarlanmaz. Bu dersin sorusu başkadır: çözümleme yapıldıktan ve kayda geçtikten sonra, o kaydı okuyan üçüncü bir kişi aynı sonuca varabiliyor mu. Ölçülecek nicelik budur — yeniden üretilebilirlik.
Kayıttaki Tablo ve Üçüncü Kişi
Bir çözümlemenin yeniden üretilebilmesi için kayıtta dört şeyin bulunması gerekir: alternatifler, ölçütler, puanlar ve ağırlıklar. Pratikte üç kusur görülür ve üçü farklı biçimde bozar.
Eksik ölçüt. Kararda etkili olmuş bir nitelik tabloya hiç girmemiştir. Tablo eksiksiz görünür, çünkü eksik olan sütunun yeri boş kalmaz — sütun yoktur.
Yazılmamış ağırlık. Ölçütler yazılmıştır, ağırlıklar yazılmamıştır. Okuyan kişi bir varsayım yapmak zorunda kalır ve yapacağı varsayım eşit ağırlıktır; önceki kursta ölçüldüğü gibi eşit ağırlık da bir ağırlık kümesidir, yalnızca seçildiği söylenmemiştir.
Kaynağı belirsiz puan. Puan yazılıdır ama nereden geldiği yazılı değildir. Bu kusur kazananı değiştirmez, doğrulamayı engeller: okuyan kişi aynı sonuca varır, ama vardığı sonucun doğru olup olmadığını sınayamaz.
Aşağıdaki model beş çözümleme kaydı içerir. Her kaydın yanında modelin girdisi olarak kayda girmemiş olan gerçek bilgi durur: eksik ölçütün adı ve puanları ile kararın gerçekten dayandığı ağırlık vektörü (KK10). Üçüncü kişi bunları görmez; yalnızca kaydı okur. Kurgu bir modeldir.
// odun/tablo.mjs — kayda gecmis odunlesim cozumlemeleri; kurgu bir modeldir // Kayittaki tablo, eksik olan olcut ve gercek agirlik modelin girdisidir (KK10). export const COZUMLEME = [ { ad: "arama-dizini", alt: ["katalog-ici", "ayri-servis", "dis-hizmet"], olcut: ["yanit-suresi", "isletme-yuku", "maliyet"], puan: [[2, 2, 2], [5, 4, 3], [4, 5, 2]], agirlik: null, kaynaksiz: 2, eksik: { ad: "veri-tazeligi", puan: [5, 2, 2] }, gercek: [0.20, 0.15, 0.15, 0.50], kayitli: "katalog-ici" }, { ad: "rapor-uretimi", alt: ["merkez", "sube", "gece-toplu"], olcut: ["tazelik", "sunucu-yuku", "gelistirme-suresi"], puan: [[4, 2, 4], [5, 4, 2], [2, 5, 5]], agirlik: [0.50, 0.30, 0.20], kaynaksiz: 1, eksik: null, gercek: [0.50, 0.30, 0.20], kayitli: "sube" }, { ad: "uye-kimligi", alt: ["merkezi-servis", "sube-tablosu", "gunluk-kopya"], olcut: ["tutarlilik", "kesinti-dayanimi", "isletme-yuku"], puan: [[5, 2, 3], [2, 5, 4], [3, 4, 2]], agirlik: null, kaynaksiz: 0, eksik: null, gercek: [0.55, 0.25, 0.20], kayitli: "merkezi-servis" }, { ad: "ceza-motoru", alt: ["odunc-servisi", "katalog-modulu", "sube-ayari"], olcut: ["degistirilebilirlik", "kurulum-yuku"], puan: [[5, 3], [2, 5], [3, 4]], agirlik: [0.60, 0.40], kaynaksiz: 2, eksik: { ad: "sube-istisnasi", puan: [2, 3, 5] }, gercek: [0.35, 0.25, 0.40], kayitli: "sube-ayari" }, { ad: "yedekleme-yolu", alt: ["gece-penceresi", "surekli-akis", "haftalik-tam"], olcut: ["veri-kaybi-penceresi", "isletme-yuku", "maliyet"], puan: [[4, 4, 4], [5, 2, 2], [2, 5, 5]], agirlik: [0.45, 0.30, 0.25], kaynaksiz: 3, eksik: null, gercek: [0.45, 0.30, 0.25], kayitli: "gece-penceresi" }, ]; export const kazanan = (alt, puan, w) => alt .map((ad, i) => ({ ad, toplam: puan[i].reduce((t, p, j) => t + p * w[j], 0) })) .sort((a, b) => b.toplam - a.toplam)[0].ad; export const esit = (n) => Array(n).fill(1 / n); // Okuyanin elindeki tablo: eksik olcut yok, agirlik yazilmamissa esit varsayilir. export function okunan(c, duzelt = {}) { const olcut = duzelt.olcutEkle && c.eksik ? [...c.olcut, c.eksik.ad] : [...c.olcut]; const puan = c.alt.map((_, i) => duzelt.olcutEkle && c.eksik ? [...c.puan[i], c.eksik.puan[i]] : [...c.puan[i]]); let w = duzelt.agirlikYaz ? c.gercek.slice(0, olcut.length) : c.agirlik ? c.agirlik.slice(0, olcut.length) : esit(olcut.length); while (w.length < olcut.length) w = [...w, 1 / olcut.length]; // eklenen olcut icin varsayilan const s = w.reduce((t, x) => t + x, 0); return { olcut, puan, w: w.map((x) => x / s) }; } if (import.meta.url.endsWith(process.argv[1].split("/").pop())) { const k = (a) => COZUMLEME.filter(a).length; console.log(`${COZUMLEME.length} cozumleme; kusur: eksik olcut ${k((c) => c.eksik)}, ` + `yazilmamis agirlik ${k((c) => !c.agirlik)}, kaynagi belirsiz puan ` + `${COZUMLEME.reduce((t, c) => t + c.kaynaksiz, 0)}\n`); console.log("kayittaki tabloyla yeniden uretim:"); for (const c of COZUMLEME) { const o = okunan(c); const kusur = [c.eksik && "eksik olcut", !c.agirlik && "yazilmamis agirlik", c.kaynaksiz && `${c.kaynaksiz} kaynaksiz puan`].filter(Boolean); console.log(` ${c.ad.padEnd(15)} kayitli ${c.kayitli.padEnd(15)} okunan ` + `${kazanan(c.alt, o.puan, o.w).padEnd(15)} kusur: ${kusur.join(", ") || "-"}`); } const DUZELTME = [["kayitta oldugu gibi", {}], ["agirlik yazilinca", { agirlikYaz: true }], ["eksik olcut eklenince", { olcutEkle: true }], ["ikisi de", { agirlikYaz: true, olcutEkle: true }], ["kaynaklar da yazilinca", { agirlikYaz: true, olcutEkle: true, kaynakYaz: true }]]; console.log("\nduzeltme etkisi (yeniden uretilebilen / ayrica dogrulanabilen):"); for (const [ad, d] of DUZELTME) { const uret = COZUMLEME.filter((c) => { const o = okunan(c, d); return kazanan(c.alt, o.puan, o.w) === c.kayitli; }); const dogrulanan = uret.filter((c) => d.kaynakYaz || c.kaynaksiz === 0); console.log(` ${ad.padEnd(22)} ${uret.length}/${COZUMLEME.length} ${dogrulanan.length}/${COZUMLEME.length}`); } }
5 cozumleme; kusur: eksik olcut 2, yazilmamis agirlik 2, kaynagi belirsiz puan 8 kayittaki tabloyla yeniden uretim: arama-dizini kayitli katalog-ici okunan ayri-servis kusur: eksik olcut, yazilmamis agirlik, 2 kaynaksiz puan rapor-uretimi kayitli sube okunan sube kusur: 1 kaynaksiz puan uye-kimligi kayitli merkezi-servis okunan sube-tablosu kusur: yazilmamis agirlik ceza-motoru kayitli sube-ayari okunan odunc-servisi kusur: eksik olcut, 2 kaynaksiz puan yedekleme-yolu kayitli gece-penceresi okunan gece-penceresi kusur: 3 kaynaksiz puan duzeltme etkisi (yeniden uretilebilen / ayrica dogrulanabilen): kayitta oldugu gibi 2/5 0/5 agirlik yazilinca 3/5 1/5 eksik olcut eklenince 3/5 0/5 ikisi de 5/5 1/5 kaynaklar da yazilinca 5/5 5/5
Beş çözümlemenin ikisi kayıttaki haliyle yeniden üretilebiliyor. Üçünde okuyan kişi kayıtta yazan
karardan farklı bir kazanana varıyor: arama-dizini kaydında katalog-ici yazıyor ama tablo
ayri-servis veriyor, uye-kimligi kaydında merkezi-servis yazıyor ama tablo sube-tablosu
veriyor. Bu, kaydı okuyanın kararı yanlış anlaması değildir; kayıttaki tablo gerçekten o sonucu
üretir. Kararın kendisi doğrudur, kaydı yanlıştır.
Düzeltme tablosu üç kusurun ağırlığını ayırıyor. Ağırlıkları yazmak yeniden üretilebilen çözümleme
sayısını 2’den 3’e çıkarıyor; eksik ölçütü eklemek de 2’den 3’e. Tek başına ikisi de yetmiyor,
çünkü arama-dizini her iki kusuru birden taşıyor: ağırlık yazıldığında eksik sütun hâlâ yok,
sütun eklendiğinde ağırlık hâlâ eşit varsayılıyor. İkisi birden giderildiğinde beş çözümlemenin
beşi yeniden üretilebilir oluyor. Kusurlar toplanmıyor, çarpışıyor.
Üçüncü kusurun etkisi ikinci sütundadır. Beş çözümleme yeniden üretilebilir hale geldiğinde bile
yalnızca biri doğrulanabilir: kalan dördünde puanların kaynağı yazılı değil, dolayısıyla okuyan
kişi aynı kazanana varıyor ama puanların doğru olduğunu sınayamıyor. Bu iki durum arasındaki fark
küçük görünüp büyüktür. Yeniden üretilebilen bir çözümleme kararın tutarlı olduğunu gösterir;
doğrulanabilen bir çözümleme kararın dayanaklı olduğunu gösterir. yedekleme-yolu kaydı
kayıttaki haliyle doğru kazananı veriyor, ama üç puanın hiçbirinin nereden geldiği yazılmamış —
üçünün de yanlış olması ve kazananın yine de aynı çıkması mümkündür.
Soru Kümesi ve Tamamlama
Aynı beş kayıt bir soru kümesine uygulanır. Yanıt önceki derste ayrıldığı gibi doğru, eksik ya da yanlış olabilir; ayrım burada özellikle önemlidir, çünkü eksik ölçüt taşıyan bir tablo “hangi ölçütler kullanıldı” sorusuna yanlış yanıt verir: liste eksiktir ama tam görünür.
// odun/soru.mjs — soru kumesi cozumleme kayitlarina uygulanir; tamamlama maliyeti olculur import { COZUMLEME, kazanan, okunan } from "./tablo.mjs"; const uretilebilir = (c, d) => { const o = okunan(c, d); return kazanan(c.alt, o.puan, o.w) === c.kayitli; }; const SORU = [ ["O1", "hangi olcutler kullanildi", (c, t) => (!t && c.eksik ? "yanlis" : "dogru")], ["O2", "olcutlerin agirligi neydi", (c, t) => (!t && !c.agirlik ? "eksik" : "dogru")], ["O3", "bu puan nereden geldi", (c, t) => (!t && c.kaynaksiz ? "eksik" : "dogru")], ["O4", "ayni tabloyla ayni sonuc cikar mi", (c, t) => (uretilebilir(c, t ? { agirlikYaz: true, olcutEkle: true } : {}) ? "dogru" : "yanlis")], ["O5", "hangi alternatifler degerlendirildi", () => "dogru"], ]; const durum = {}; for (const tam of [false, true]) { const say = { dogru: 0, eksik: 0, yanlis: 0 }; for (const c of COZUMLEME) for (const [kod, , kural] of SORU) { const d = kural(c, tam); say[d] += 1; (durum[kod] ??= { false: [], true: [] })[tam].push(d); } console.log(`${tam ? "tamamlandiktan sonra" : "kayitta oldugu gibi "}: ` + `dogru ${say.dogru}, eksik ${say.eksik}, yanlis ${say.yanlis} ` + `(${SORU.length} soru x ${COZUMLEME.length} cozumleme)`); } console.log("\nkayitta oldugu haliyle soru basina dogru olmayan yanit (y = yanlis, e = eksik):"); for (const [kod, metin] of SORU) { const d = durum[kod][false]; const y = d.filter((x) => x === "yanlis").length, e = d.filter((x) => x === "eksik").length; console.log(` ${kod} ${metin.padEnd(36)} ${y ? `${y}y` : e ? `${e}e` : "-"}`); } // Tamamlama sureleri modelin girdisidir (KK11). const DK = { agirlik: 15, olcut: 20, kaynak: 5 }; const say = { agirlik: COZUMLEME.filter((c) => !c.agirlik).length, olcut: COZUMLEME.filter((c) => c.eksik).length, kaynak: COZUMLEME.reduce((t, c) => t + c.kaynaksiz, 0) }; const toplam = Object.entries(say).reduce((t, [a, n]) => t + n * DK[a], 0); console.log("\ntamamlama maliyeti:"); for (const [a, n] of Object.entries(say)) console.log(` ${a.padEnd(8)} ${n} kalem x ${DK[a]} dk = ${n * DK[a]} dk`); const once = COZUMLEME.filter((c) => uretilebilir(c, {})).length; const sonra = COZUMLEME.filter((c) => uretilebilir(c, { agirlikYaz: true, olcutEkle: true })).length; console.log(` toplam ${toplam} dk; yeniden uretilebilen ${once}/${COZUMLEME.length} -> ` + `${sonra}/${COZUMLEME.length}, kazanilan cozumleme basina ${(toplam / (sonra - once)).toFixed(1)} dk`);
kayitta oldugu gibi : dogru 14, eksik 6, yanlis 5 (5 soru x 5 cozumleme) tamamlandiktan sonra: dogru 25, eksik 0, yanlis 0 (5 soru x 5 cozumleme) kayitta oldugu haliyle soru basina dogru olmayan yanit (y = yanlis, e = eksik): O1 hangi olcutler kullanildi 2y O2 olcutlerin agirligi neydi 2e O3 bu puan nereden geldi 4e O4 ayni tabloyla ayni sonuc cikar mi 3y O5 hangi alternatifler degerlendirildi - tamamlama maliyeti: agirlik 2 kalem x 15 dk = 30 dk olcut 2 kalem x 20 dk = 40 dk kaynak 8 kalem x 5 dk = 40 dk toplam 110 dk; yeniden uretilebilen 2/5 -> 5/5, kazanilan cozumleme basina 36.7 dk
Yirmi beş yanıtın on dördü doğru, altısı eksik, beşi yanlış. Yanlışların dağılımı kusurların niteliğini gösteriyor: eksik ölçüt ve yeniden üretilemezlik yanlış üretiyor, yazılmamış ağırlık ve kaynağı belirsiz puan eksik üretiyor. Aradaki fark okuyanın davranışını belirler. Ağırlığın yazılmadığını gören kişi bir şeyin eksik olduğunu bilir ve sorabilir; eksik ölçütü gören kişi hiçbir şey görmez, çünkü tablo tamdır.
Tamamlamanın bedeli 110 dakika: iki ağırlık vektörü, iki ölçüt sütunu ve sekiz puan kaynağı. Bu sürenin sonunda yeniden üretilebilen çözümleme sayısı 2’den 5’e çıkıyor, yani kazanılan çözümleme başına 36,7 dakika. Sayının kendisi modelin girdilerine bağlıdır; taşıdığı bilgi oranlardadır. Puan kaynaklarını yazmak toplam sürenin yüzde 36’sını alıyor ve yeniden üretilebilirliği hiç değiştirmiyor — yalnızca doğrulanabilirliği sıfırdan beşe çıkarıyor. Ağırlıkları yazmak ise 30 dakikada üç çözümlemeye dokunuyor.
Buradan çıkan sıra şudur: önce eksik ölçüt, sonra ağırlık, en son puan kaynağı. Bu sıra kusurların ağırlığından değil, fark edilebilirliklerinden gelir. En sinsi kusur en ucuz olanı değil, kendini göstermeyenidir.
Özet
- Bir ödünleşim çözümlemesinin kayda geçmiş hali, üçüncü bir kişinin aynı kazanana varıp varamamasıyla ölçülür; beş kaydın ikisi kayıttaki haliyle yeniden üretilebildi.
- Üç kusur farklı biçimde bozar: eksik ölçüt tabloyu tam gösterir, yazılmamış ağırlık okuyanı eşit ağırlık varsaymaya iter, kaynağı belirsiz puan kazananı değiştirmeden doğrulamayı engeller.
- Ağırlıkları yazmak yeniden üretilebilen sayıyı 2’den 3’e, eksik ölçütü eklemek de 2’den 3’e çıkardı; iki kusuru birden taşıyan çözümleme yalnızca ikisi birden giderildiğinde üretilebilir oldu ve sayı 5’e çıktı.
- Yeniden üretilebilirlik ile doğrulanabilirlik ayrı ölçülerdir: beş çözümleme üretilebilir hale geldiğinde bile puan kaynakları yazılmadan yalnızca biri doğrulanabiliyordu.
- Soru kümesinde eksik ölçüt ve yeniden üretilemezlik yanlış yanıt, yazılmamış ağırlık ve kaynaksız puan eksik yanıt üretti; tamamlamanın bedeli 110 dakika, kazanılan çözümleme başına 36,7 dakika.
Sonraki Adım
Buraya kadar ölçülen her şey verilmiş bir kararla ilgiliydi: kararın kaydı, verilme süreci ve
dayandığı tablo. Üçünde de karar bir noktada kesinleşiyor ve kayıt kapanıyor. Oysa her kararın
yanında kapanmayan bir şey kalır: kararın dayandığı varsayımın tutmama ihtimali. arama-dizini
çözümlemesinde veri-tazeligi ölçütüne 0,50 ağırlık verildi, çünkü tazeliğin kritik olduğu
varsayıldı; o varsayım yanlışsa karar da yanlıştır ve bunu ancak zaman gösterir. Bu, kayda
geçirilecek bir karar değil, izlenecek bir belirsizliktir. Sonraki ders belirsizliği olasılık ve
etkiyle modelleyip bir dönem koşturur, kaydedilen riskin gerçekleşme oranını ve hiç kaydedilmemiş
olduğu halde gerçekleşen riski sayar.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.