İçeriğe geç
academia.sh

Ders 16 / 18

Olay Sonrası İnceleme

Eylem maddesinin izlenmesinin ölçülmesi: 18 dönemde incelemesiz koşumun 48 olay ve %90 tekrar bırakması, kök neden kişi yazıldığında 96 maddenin %84'ünün 6,9 günde kapanmasına karşılık yalnız 15'inin sistemsel düzeltme olması ve tekrarın %84'te kalması, süreç yazıldığında 75 maddenin 42'sinin sistemsel çıkıp olayın 25'e inmesi, takip bırakıldığında 61 sistemsel maddenin 46'sının hiç kapanmayıp yinelenen olay oranının %84'e ve yineleme kesintisinin 1105 dakikaya çıkması, sekiz sorudan yedisinin 76.800 baytla yanıtlanıp sekizincisinin hiçbir kayıt katmanında bulunmaması.

İçindekiler

Önceki ders çalışma yordamının kendisini saydı: adım sayısı, karar noktası ve eskimiş adım. Yordam yazıldı, olay kapandı, hat açıldı. Sonrasında hiç sorulmayan bir soru kaldı: aynı olay bir daha olacak mı, olmaması için ne yapıldı ve o iş bitti mi.

Olay sonrası çözümlemenin kendisi M16/K07’de ölçüldü. Burada ölçülen incelemenin çıktısı değil, çıktının izlenmesidir. Ölçü şudur: bir dönemde kaç eylem maddesi açıldı, kaçı kapandı, kapanma ne kadar sürdü ve kapanmayan madde kaç kez aynı olayı yeniden üretti. Suçsuz incelemenin de ölçülebilir bir karşılığı vardır: kök neden kişi olarak yazıldığında ve süreç olarak yazıldığında kaç sistemsel düzeltme çıkıyor.

Soru Kümesi ve Kayıt Katmanları

Örnek yine kurgu bölgesel ölçüm ağıdır; sayaç okuma toplayıcısı, doğrulayıcı, faturalama ve iş emri servisleri. Olay geçmişi de inceleme kütüğü de kurgudur.

OY19: on sekiz dönem koşulur, dönem 30 gündür; beş neden sınıfının her birinin sabit bir günlük olay olasılığı ve sabit bir kesinti dakikası vardır. OY20: her olay üç gün sonra incelenir, inceleme beş kişi-saat tutar. OY21: her inceleme üç eylem maddesi açar; kök neden ya kişi ya süreç olarak yazılır ve yazım, madde türlerinin payını belirler — kişide hatırlatma 0,55, belge 0,30, sistemsel 0,15; süreçte sistemsel 0,55, belge 0,25, hatırlatma 0,20. OY22: madde türü kapanma olasılığını, kapanma süresini ve kapanan madde başına kişi-saati belirler; takip çarpanı kapanma olasılığını ölçekler, 0,98’de tavanlanır. OY23: kapanan bir sistemsel madde, kendi sınıfının günlük olay olasılığını 0,70 ile çarpar; belge ve hatırlatma hiçbir olasılığı değiştirmez. OY24: tekrar, sınıfın daha önce olay üretmiş olmasıdır; yinelenen olay, sınıfın hiç kapanmayacak bir sistemsel maddesi açıkta beklerken sınıfın yeniden olay üretmesidir. Tohum 20260812’dir ve bütün zarlar baştan atılır, böylece beş koşum aynı diziyi paylaşır.

Olaylar, incelemeler ve maddeler süreç içi bir modeldir; gerçek bir olay kaydı yoktur.

// inceleme/model.mjs — olay sonrasi inceleme modeli: gercek bir olay kaydi yok; gunler,
// olaylar ve eylem maddeleri veri yapisidir. Uretec kendi yazilir, tohum gorunur.

export const DONEM = 30, DONEM_SAY = 18, GUN = DONEM * DONEM_SAY;
export const TOHUM = 20260812, MADDE = 3, GECIKME = 3, DUSUS = 0.70;
// neden sinifi: ad, gunluk olay olasiligi, kesinti dakikasi
export const SINIF = [["yapilandirma kaymasi", 0.030, 25], ["kapasite", 0.022, 40],
  ["bagimlilik zaman asimi", 0.026, 18], ["veri kalitesi", 0.020, 55],
  ["toplu is penceresi", 0.016, 70]];
// madde turu: kapanma olasiligi, kapanma gunu, kapanan madde basina kisi-saat
export const TUR = { sistemsel: [0.55, 25, 12], belge: [0.80, 8, 3], hatirlatma: [0.95, 2, 0.5] };
// kok neden kisi ya da surec olarak yazildiginda acilan madde turlerinin paylari
export const KARISIM = { kisi: [["hatirlatma", 0.55], ["belge", 0.30], ["sistemsel", 0.15]],
  surec: [["sistemsel", 0.55], ["belge", 0.25], ["hatirlatma", 0.20]] };
export const INCELEME_SAAT = 5;                    // olay basina inceleme kisi-saati

export function uretec(tohum) {                    // dogrusal eslesmeli uretec
  let x = tohum >>> 0;
  return () => ((x = (x * 1664525 + 1013904223) >>> 0) / 2 ** 32);
}

// butun zarlar bastan atilir: kosumlar ayni olay ve madde dizisini paylasir
const Z = (() => { const z = uretec(TOHUM);
  return Array.from({ length: GUN * SINIF.length }, () => ({ olay: z(),
    madde: Array.from({ length: MADDE }, () => ({ tur: z(), kapanma: z(), sure: z() })) })); })();
const sec = (pay, p) => { let e = 0; for (const [ad, y] of pay) { e += y; if (p < e) return ad; } };

export function kos({ inceleme = true, yazim = "surec", takip = 1.0 } = {}) {
  const carpan = SINIF.map(() => 1), acikSis = SINIF.map(() => 0);   // sinif basina durum
  const oluSis = SINIF.map(() => 0), gorulen = SINIF.map(() => 0), olaylar = [], maddeler = [];
  for (let g = 0; g < GUN; g++) {
    for (const m of maddeler)                      // kapanis gunu gelen madde kapanir
      if (m.durum === "acik" && m.kapanis === g) {
        m.durum = "kapandi";
        if (m.tur === "sistemsel") { carpan[m.sinif] *= DUSUS; acikSis[m.sinif]--; }
      }
    for (let s = 0; s < SINIF.length; s++) {
      const z = Z[g * SINIF.length + s];
      if (z.olay >= SINIF[s][1] * carpan[s]) continue;
      // tekrar: sinif daha once olay uretti. yinelenen: sinifin hic kapanmayacak
      // sistemsel maddesi acikta beklerken ayni sinif yeniden olay uretti
      olaylar.push({ g, sinif: s, kesinti: SINIF[s][2],
        tekrar: gorulen[s]++ > 0, yinelenen: oluSis[s] > 0 });
      if (!inceleme) continue;
      for (const d of z.madde) {
        const tur = sec(KARISIM[yazim], d.tur), [kap, sure] = TUR[tur];
        const kapanir = d.kapanma < Math.min(0.98, kap * takip);
        const gecen = Math.round(sure * (0.6 + 0.8 * d.sure));
        maddeler.push({ sinif: s, tur, acilis: g + GECIKME, durum: "acik",
          kapanis: kapanir ? g + GECIKME + gecen : null, gecen: kapanir ? gecen : null });
        if (tur === "sistemsel") { acikSis[s]++; if (!kapanir) oluSis[s]++; }
      }
    }
  }
  return { olaylar, maddeler };
}

const ort = (a) => (a.length ? (a.reduce((s, v) => s + v, 0) / a.length).toFixed(1) : "-");
const yuz = (a, b) => (b ? (100 * a / b).toFixed(0) + "%" : "-");

export function olc(ayar) {
  const { olaylar, maddeler } = kos(ayar), M = maddeler.length;
  const kapanan = maddeler.filter((m) => m.durum === "kapandi");
  const yin = olaylar.filter((o) => o.yinelenen), tek = olaylar.filter((o) => o.tekrar);
  const dk = (a) => a.reduce((s, o) => s + o.kesinti, 0);
  const sis = maddeler.filter((m) => m.tur === "sistemsel");
  return { olay: olaylar.length, kesinti: dk(olaylar), acilan: M, kapanan: kapanan.length,
    tekrar: tek.length, tekrarOran: yuz(tek.length, olaylar.length), tekrarKesinti: dk(tek),
    yinelenen: yin.length, yinOran: yuz(yin.length, olaylar.length), yinKesinti: dk(yin),
    donemMadde: (M / DONEM_SAY).toFixed(1), kapanmaOran: yuz(kapanan.length, M),
    kapanmaSure: ort(kapanan.map((m) => m.gecen)), sis: sis.length, sisPay: yuz(sis.length, M),
    sisKapanan: sis.filter((m) => m.durum === "kapandi").length,
    saat: olaylar.length * (ayar.inceleme === false ? 0 : INCELEME_SAAT)
      + kapanan.reduce((s, m) => s + TUR[m.tur][2], 0) };
}

Ölçüm dosyası sekiz soruluk bir küme kurar ve her sorunun yanıtı için gereken kayıt alanlarını yazar. Katmanlar üst üste binerek eklenir.

// inceleme/olc.mjs — inceleme sorulari hangi kayit katmaniyla yanitlaniyor, eylem maddesi
// izlendiginde ne degisiyor, kapanmayan madde kac olayi yeniden uretiyor.
import { DONEM, DONEM_SAY, SINIF, TOHUM, MADDE, olc } from "./model.mjs";

const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));
const t0 = process.hrtime.bigint();

// soru kumesi: her sorunun yanitlanmasi icin gereken kayit alanlari
const SORU = [
  ["olay ne zaman oldu, ne kadar surdu", ["olay"]],
  ["kok neden ne yazildi", ["not"]],
  ["kok neden kisi mi surec mi yazildi", ["yazim"]],
  ["incelemeden kac madde acildi", ["kutuk"]],
  ["maddelerin kaci kapandi, ne surede", ["kutuk", "kapanis"]],
  ["kisi yazimi kac sistemsel duzeltme uretti", ["yazim", "kutuk"]],
  ["kapanmayan madde hangi olayi yeniden uretti", ["kutuk", "bag"]],
  ["maddenin kapanmasi hangi kesintiyi onledi", ["karsiOlgu"]],
];
// kayit katmani: ad, actigi alanlar, birim bayt, birimin sayildigi nesne
const KATMAN = [["olay kaydi", ["olay"], 240, "olay"], ["+ inceleme notu", ["not"], 1800, "olay"],
  ["+ yazim alani", ["yazim"], 24, "olay"], ["+ madde kutugu", ["kutuk", "kapanis"], 320, "madde"],
  ["+ madde-sinif bagi", ["bag"], 16, "madde"]];

const K = { "inceleme yok": { inceleme: false }, "kisi yazimi": { yazim: "kisi" },
  "surec yazimi": { yazim: "surec" }, "surec + takip yok": { yazim: "surec", takip: 0.5 },
  "surec + haftalik takip": { yazim: "surec", takip: 1.35 } };
const R = Object.fromEntries(Object.entries(K).map(([a, y]) => [a, olc(y)]));
const T = R["surec yazimi"];

console.log(`${DONEM_SAY} donem x ${DONEM} gun, ${SINIF.length} neden sinifi, ` +
  `inceleme basina ${MADDE} madde; tohum ${TOHUM}`);

console.log("\n1. hangi kayit katmani kac soruyu yanitliyor (surec yazimi kosumu)");
const A = [-21, 8, 13, 10, 12];
yaz(A, "katman", "birim", "kumul. bayt", "yanit/8", "bayt/soru");
let alan = [], bayt = 0;
for (const [ad, ac, b, birim] of KATMAN) {
  alan = alan.concat(ac);
  bayt += b * (birim === "olay" ? T.olay : T.acilan);
  const y = SORU.filter(([, g]) => g.every((f) => alan.includes(f))).length;
  yaz(A, ad, birim, bayt, `${y}/8`, Math.round(bayt / y));
}
console.log("  yanitsiz: " + SORU.filter(([, g]) => g.includes("karsiOlgu")).map(([s]) => s)
  .join("") + " — karsi olgu, hicbir katmanda yok");

console.log("\n2. eylem maddesinin izlenmesi ve madde turu");
const B = [-24, 6, 8, 10, 9, 9, 8, 11, 10];
yaz(B, "kosum", "olay", "acilan", "donem/md", "kapanan", "kapanma", "gun", "sistemsel", "sis. pay");
for (const [ad, r] of Object.entries(R))
  yaz(B, ad, r.olay, r.acilan, r.donemMadde, r.kapanan, r.kapanmaOran, r.kapanmaSure,
    `${r.sis} (${(r.sis / r.olay).toFixed(2)})`, r.sisPay);   // sistemsel: sayi (olay basina)

console.log("\n3. kapanmayan madde ve yinelenen olay");
const C = [-24, 9, 8, 11, 8, 14, 17];
yaz(C, "kosum", "tekrar", "oran", "yinelenen", "oran", "yin. kesinti", "kapanmayan sis.");
for (const [ad, r] of Object.entries(R))
  yaz(C, ad, r.tekrar, r.tekrarOran, r.yinelenen, r.yinOran, r.yinKesinti + " dk",
    `${r.sis - r.sisKapanan}/${r.sis}`);

console.log("\n4. incelemenin bedeli ve yanitsiz sorunun karsiligi");
const D = [-24, 11, 11, 11, 14];
yaz(D, "kosum", "kisi-saat", "saat/olay", "kesinti", "tekrar dk");
for (const [ad, r] of Object.entries(R))
  yaz(D, ad, r.saat.toFixed(0), (r.saat / r.olay).toFixed(1), r.kesinti + " dk",
    `${r.tekrarKesinti} (${(100 * r.tekrarKesinti / r.kesinti).toFixed(0)}%)`);

const ms = Number(process.hrtime.bigint() - t0) / 1e6;   // ham olcum basilmaz, bant denetlenir
console.log(`\nbes kosum ve katman taramasi 2000 ms bandinda: ${ms < 2000 ? "evet" : "hayir"}`);
18 donem x 30 gun, 5 neden sinifi, inceleme basina 3 madde; tohum 20260812

1. hangi kayit katmani kac soruyu yanitliyor (surec yazimi kosumu)
katman                  birim  kumul. bayt   yanit/8   bayt/soru
olay kaydi               olay         6000       1/8        6000
+ inceleme notu          olay        51000       2/8       25500
+ yazim alani            olay        51600       3/8       17200
+ madde kutugu          madde        75600       6/8       12600
+ madde-sinif bagi      madde        76800       7/8       10971
  yanitsiz: maddenin kapanmasi hangi kesintiyi onledi — karsi olgu, hicbir katmanda yok

2. eylem maddesinin izlenmesi ve madde turu
kosum                     olay  acilan  donem/md  kapanan  kapanma     gun  sistemsel  sis. pay
inceleme yok                48       0       0.0        0        -       -   0 (0.00)         -
kisi yazimi                 32      96       5.3       81      84%     6.9  15 (0.47)       16%
surec yazimi                25      75       4.2       52      69%    15.5  42 (1.68)       56%
surec + takip yok           38     114       6.3       38      33%    14.0  61 (1.61)       54%
surec + haftalik takip      23      69       3.8       60      87%    16.5  40 (1.74)       58%

3. kapanmayan madde ve yinelenen olay
kosum                      tekrar    oran  yinelenen    oran  yin. kesinti  kapanmayan sis.
inceleme yok                   43     90%          0      0%          0 dk              0/0
kisi yazimi                    27     84%          8     25%        335 dk             5/15
surec yazimi                   20     80%         14     56%        593 dk            16/42
surec + takip yok              33     87%         32     84%       1105 dk            46/61
surec + haftalik takip         18     78%          8     35%        433 dk             8/40

4. incelemenin bedeli ve yanitsiz sorunun karsiligi
kosum                     kisi-saat  saat/olay    kesinti     tekrar dk
inceleme yok                      0        0.0    1791 dk    1583 (88%)
kisi yazimi                     376       11.7    1173 dk     965 (82%)
surec yazimi                    480       19.2     966 dk     758 (78%)
surec + takip yok               404       10.6    1353 dk    1145 (85%)
surec + haftalik takip          556       24.2     878 dk     670 (76%)

bes kosum ve katman taramasi 2000 ms bandinda: evet

Sayılar ölçüm sınıfındadır; girdileri yukarıdaki varsayımlardır.

Sekiz Sorunun Yedisi

Birinci tablo kayıt katmanlarını soruya çevirir. Yalnız olay kaydıyla 6.000 baytta sekiz sorudan biri yanıtlanır. İnceleme notu 51.000 bayta çıkarır ve yanıt yalnız ikiye gider — not bir alan değil bir metindir, pahalıdır ve kendi başına sayılamaz. Yazım alanı 600 bayta üçüncü soruyu, madde kütüğü 24.000 bayta üç soru birden açar; soru başına bayt 17.200’den 12.600’e iner. Son katman, maddeyi neden sınıfına bağlayan 16 baytlık alandır: 1.200 bayta kapanmayan madde hangi olayı yeniden üretti sorusunu açar. En ucuz katman en geç eklenendir ve en pahalı soruyu yanıtlar.

Sekizinci soru hiçbir katmanda yoktur: bu maddenin kapanması hangi kesintiyi önledi. Karşılığı gözlenmemiş bir durumdur, kayıt genişletilerek yanıtlanamaz. Kütüğün verdiği en yakın şey “kapanmayan madde şu kadar olay üretti”dir — önlenen değil, önlenmeyen sayılır.

Kapanma Oranı Neyi Ölçmez

İkinci tablo ilk bakışta kişi yazımını iyi gösterir: 96 madde açılır, 81’i kapanır (%84) ve kapanma 6,9 gün sürer — beş koşumun en hızlısı. Süreç yazımında 75 maddenin 52’si kapanır (%69), kapanma 15,5 gün sürer. Son iki sütun farkı söyler. Kişi yazımının 96 maddesinden yalnız 15’i sistemsel düzeltmedir (%16); geri kalanı hatırlatma ve belgedir. Süreç yazımının 75 maddesinin 42’si sistemseldir (%56); olay başına 0,47’ye karşı 1,68. Hatırlatma iki günde kapanır ve hiçbir olasılığı değiştirmez; sistemsel düzeltme yirmi beş günde kapanır ve sınıfın olay olasılığını 0,70 ile çarpar. Kapanma oranı, kapanan şeyin ne olduğunu ölçmez.

Sonucu üçüncü ve dördüncü tablo verir. Kişi yazımında 32 olay ve 1173 dakika kesinti ölçülür; tekrar oranı %84’tür — incelemesiz koşumun %90’ından altı puan aşağıda. Süreç yazımında olay 25’e, kesinti 966 dakikaya, tekrar %80’e iner. Suçsuzluğun ölçülebilir karşılığı budur: kişi yazıldığında maddeler açılır, hızla kapanır ve sistem aynı kalır.

Açılan Madde ile İzlenen Madde

Üçüncü koşum takibi bırakır: kök neden yine süreç yazılır, kapanma olasılığı yarıya iner. Açılan madde düşmez, tersine 75’ten 114’e çıkar — daha çok olay olur, daha çok inceleme yapılır. Kapanan 38’de kalır (%33). Kritik sayı sistemsel maddelerdedir: 61 düzeltme açılır, 46’sı hiç kapanmaz. Yinelenen olay oranı %84’e, yineleme kesintisi 1105 dakikaya çıkar, toplam kesinti 966’dan 1353 dakikaya gider.

Haftalık takip tersini yapar: 69 maddenin 60’ı kapanır (%87), 40 sistemsel maddenin 32’si kapanır, açıkta yalnız 8 kalır. Yinelenen olay 14’ten 8’e, toplam kesinti 878 dakikaya iner. Bedeli dördüncü tablodadır: kişi-saat 480’den 556’ya, olay başına 24,2 kişi-saate çıkar — beş koşumun en pahalısı. Ödenen şey inceleme değil, incelemenin izlenmesidir.

Aynı tabloda incelemesiz koşum bedava görünür: sıfır kişi-saat. Karşılığı 1791 dakikadır ve bunun 1583 dakikası (%88) tekrar eden olaylardandır.

Farkın Saklandığı Yer

Fark açılan madde ile kapanan sistemsel madde arasında saklıdır: takipsiz koşumda kütükte 114 satır görünür ve dönem başına 6,3 madde raporlanır — beş koşumun en yüksek üretimi. Aynı koşumda 61 sistemsel maddenin 46’sı hiç kapanmaz ve olayların %84’ü kapanmayan bir madde açıkta beklerken olur. Bildirilmiş kısım açılan madde sayısı, bildirilmemiş kısım maddenin türü ve durumudur.

Kişi yazımında kapanmayan sistemsel madde yalnız 5’tir ve yinelenen olay oranı %25 ile düşük görünür. Bu iyi bir haber değildir — açılmış sistemsel madde yalnız 15 olduğu için kapanmayan madde yüzünden yineleyen olay da sayılamaz. Hiç açılmamış madde, kapanmamış madde olarak da görünmez. Oradaki gerçek sayı tekrar oranıdır: %84.

Özet

  • Sekiz sorudan yedisi beş kayıt katmanı ve 76.800 baytla yanıtlanır (soru başına 10.971 bayt); maddeyi neden sınıfına bağlayan 16 baytlık son alan, 1.200 bayta en pahalı soruyu açar.
  • Yanıtsız kalan soru “bu maddenin kapanması hangi kesintiyi önledi”dir; karşı olgu hiçbir katmanda yoktur.
  • Kök neden kişi yazıldığında 96 maddenin %84’ü ve en hızlısı (6,9 gün) kapanır, ama yalnız 15’i sistemsel düzeltmedir (olay başına 0,47) ve tekrar oranı %84’te kalır — incelemesiz koşumun %90’ına yakın. Süreç yazıldığında 75 maddenin 42’si sistemseldir (1,68) ve olay 25’e iner.
  • Takip bırakıldığında 114 madde açılır ama yalnız 38’i kapanır; 61 sistemsel maddenin 46’sı hiç kapanmaz, yinelenen olay oranı %84’e ve yineleme kesintisi 1105 dakikaya çıkar.
  • Haftalık takip 556 kişi-saat karşılığında kesintiyi 878 dakikaya indirir; incelemesiz koşumun bedeli sıfır kişi-saat ve 1791 dakikadır.

Sonraki Adım

Madde kapanınca olay olasılığı düştü, ama hepsi olay olduktan sonra çalıştı: sistemsel düzeltme yirmi beş günde kapanırken aynı sınıf yeniden olay üretmeye devam etti. Değişimin hızını olaydan önce düzenleyen bir kural hiç konmadı. Sonraki ders hata bütçesini böyle bir kurala çevirir: bütçe tükendiğinde yeni dağıtım durur — dağıtım sıklığı ne olur, kuyrukta ne birikir, bütçe ne kadar sürede geri kazanılır ve tek bir büyük olay hattı aylarca durdurduğunda kural nasıl gevşetilir.

İ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