Ders 19 / 21
Üretim İzleme
Kurulu bir savunmanın üretimde bozulduğunu üç göstergenin kaç kayıt sonra gösterdiğinin ölçülmesi: altı yüz kayıtlık kurgu akışta savunmasız taban 0 engelleme, 0 yanlış alarm ve 120 kaçan zararlı verirken eşik 0,50 kurulumu 95 kaydı engelliyor, 11'i yanlış alarm ve 36 zararlı kaçıyor. Üç yüz birinci kayıttan sonra iki ayrı bozulma başlatılıyor: trafik kayması kaçan zararlıyı 36'dan 84'e çıkarıyor, sessiz eşik değişikliği yanlış alarmı 11'den 27'ye. Kaçan zararlı vekili dalgayı 20 kayıt sonra bildiriyor ama eşik kaymasını hiç bildirmiyor, engelleme payı eşiği 29 kayıt sonra görüyor, etiket gerektiren yanlış alarm payı iki koşumda 45 ve 220 kayıt veriyor. Hiçbir gösterge iki bozulmayı birden yakalamıyor.
İçindekiler
Dört derste ölçüm laboratuvarda yapıldı. Küme tasarlandı, hakem insan etiketiyle karşılaştırıldı, değerlendiriciler arası uyum ölçüldü ve bir istem değişikliğinin sayıyı koşum bandının üstünde oynatıp oynatmadığı sınandı. Bunların hepsi sabit bir küme üzerinde yapıldı. Üretimde koşan sistemin trafiği sabit değildir, etiketi yoktur ve savunmanın ayarları bir gün sessizce değişir. Laboratuvar sayısı o günden sonra neyin doğru olduğunu söylemez.
Gösterge, uyarı ve gösterge tablosu yordamı Gözlemlenebilirlik ve Güvenilirlik ile DevOps müfredatının Gözlemlenebilirlik ve İşletim kurslarında ölçüldü; adım izi ve belirteç maliyeti Yapay Zekâ Ajanları ile Model API’leri ile Uygulama Geliştirme kurslarında sayıldı. Hiçbiri tekrarlanmaz. Bu dersin ölçtüğü tek şey şudur: bir savunma bozulduğunda hangi gösterge bunu kaç kayıt sonra gösterir.
- DG51. Akış, kayıtlar, sınıflar ve savunma kurgudur. Kayıtların metni tümüyle zararsız destek talepleridir ve sınıfla hiçbir ilişkisi yoktur; sınıf yalnızca yapısal öznitelik profilinde durur. Akış kursun kayıt kümesiyle aynı üreteçten gelir, 600 kayda uzatılmıştır.
- DG52. Üretimde koşan savunma model süzgeci, eşik 0,50’dir. Savunmasız taban her derste olduğu gibi hiçbir süzgeç, işaretleme ya da kapı içermez.
- DG53. İz kaydı her istek için tutulur ve sınıf etiketi taşımaz: karar, kaynak ve yapısal bayraklar. Etiket yalnızca insan incelemesine giden kayıtlarda oluşur.
- DG54. İki bozulma 301. kayıttan sonra başlar ve hiçbir yere bildirilmez. Dalga: bozulmuş girdi payı 0,07’den 0,28’e çıkar. Eşik: süzgecin eşiği 0,50’den 0,30’a düşer.
- DG55. Gösterge, bandı ardışık 10 kayıt boyunca terk ederse bozulmayı bildirmiş sayılır. Band, değişimden önceki 300 kaydın pencere değerlerinin en küçüğü ile en büyüğüdür.
- DG56. İki koşum tohum 20260218 ve 20260219 ile alınır; koşum akışın kendisini değiştirir, savunmayı değiştirmez.
Akış ve Savunmasız Taban
İlk blok kursun ortak tanımını kurar ve onu bir akışa uzatır. Koşan her işlev savunma tarafındadır.
# KURGUDUR. Kayitlarin metni tumuyle zararsiz destek talepleridir ve sinifla # hicbir iliskisi yoktur; sinif yalnizca yapisal ozellik profilinde durur. TOHUM, M32 = 20260218, 0xFFFFFFFF 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 def izno(m): h = 2166136261 for c in str(m): h = ((h ^ ord(c)) * 16777619) & M32 return h SINIF = ["temiz", "dolayli_yonerge", "gizli_alan_istegi", "yetki_asimi", "kaynak_taklidi", "bozulmus_girdi"] KAYNAK = ["kullanici", "erisilen_belge", "arac_ciktisi"] OZELLIK = ["yonerge_kipi", "rol_degistirme_istegi", "gizli_alan_adi", "yan_etkili_arac_adi", "kaynak_damgasi_uyusmuyor", "olagandisi_damga_dagilimi", "asiri_uzunluk"] PROFIL = { "temiz": [0.06, 0.02, 0.05, 0.03, 0.02, 0.04, 0.05], "dolayli_yonerge": [0.88, 0.42, 0.10, 0.30, 0.35, 0.08, 0.12], "gizli_alan_istegi": [0.35, 0.15, 0.86, 0.12, 0.10, 0.06, 0.08], "yetki_asimi": [0.30, 0.25, 0.12, 0.84, 0.14, 0.05, 0.07], "kaynak_taklidi": [0.22, 0.55, 0.08, 0.10, 0.82, 0.07, 0.06], "bozulmus_girdi": [0.05, 0.03, 0.04, 0.03, 0.06, 0.80, 0.62], } KAYNAK_PAYI = { "temiz": [0.72, 0.20, 0.08], "dolayli_yonerge": [0.05, 0.70, 0.25], "gizli_alan_istegi": [0.55, 0.30, 0.15], "yetki_asimi": [0.40, 0.35, 0.25], "kaynak_taklidi": [0.10, 0.60, 0.30], "bozulmus_girdi": [0.65, 0.20, 0.15], } METIN = ["bu ayki fatura tutari gecen aya gore yuksek geldi", "sayac endeksi yanlis girilmis olabilir", "mahallede kesinti ne zaman bitecek", "tarife basamagimi ogrenmek istiyorum", "ariza kaydim icin ekip ne zaman gelir", "adres degisikligi nasil yapilir"] PAY = [0.62, 0.10, 0.07, 0.07, 0.07, 0.07] # kursun kayit kumesinin dagilimi def kayit(i, taban, pay): r = uretec(taban + 6151 * i) s = SINIF[ayrik(r(), pay)] kaynak = KAYNAK[ayrik(r(), KAYNAK_PAYI[s])] oz = {o: (r() < p) for o, p in zip(OZELLIK, PROFIL[s])} return {"no": i + 1, "sinif": s, "kaynak": kaynak, "ozellik": oz, "metin": METIN[int(r() * len(METIN))], "uzunluk": 40 + int(r() * 260)} def zararli(k): return k["sinif"] != "temiz" AGIRLIK = {"yonerge_kipi": 0.42, "rol_degistirme_istegi": 0.26, "gizli_alan_adi": 0.44, "yan_etkili_arac_adi": 0.40, "kaynak_damgasi_uyusmuyor": 0.38, "olagandisi_damga_dagilimi": 0.30, "asiri_uzunluk": 0.12} KAYNAK_EK = {"kullanici": 0.00, "erisilen_belge": 0.18, "arac_ciktisi": 0.12} def puan(k): p = sum(AGIRLIK[o] for o in OZELLIK if k["ozellik"][o]) + KAYNAK_EK[k["kaynak"]] r = uretec(TOHUM ^ izno(k["no"])) return min(max(p + (r() - 0.5) * 0.20, 0.0), 1.6) def model_suzgeci(k, esik=0.40): return puan(k) >= esik def olc(kayitlar, karar): dp = yp = dn = yn = 0 for k in kayitlar: isaret, gercek = karar(k), zararli(k) if isaret and gercek: dp += 1 elif isaret and not gercek: yp += 1 elif not isaret and gercek: yn += 1 else: dn += 1 kesinlik = dp / (dp + yp) if dp + yp else 0.0 duyarlilik = dp / (dp + yn) if dp + yn else 0.0 return {"dp": dp, "yp": yp, "yn": yn, "dn": dn, "kesinlik": round(kesinlik, 4), "duyarlilik": round(duyarlilik, 4), "yanlis_engelleme_payi": round(yp / (yp + dn), 4) if yp + dn else 0.0} N, DEGISIM, ESIK = 600, 300, 0.50 # akis , degisim noktasi , kurulu esik ONCE = [kayit(i, TOHUM, PAY) for i in range(DEGISIM)] print("akis", N, "kayit , degisim", DEGISIM + 1, "kayittan sonra") print("kalibrasyon donemi sinif sayisi:", {s: sum(k["sinif"] == s for k in ONCE) for s in SINIF}) print("\nkurulum engellenen yanlis alarm kacan zararli duyarlilik") for ad, karar in (("savunmasiz", lambda k: False), ("model 0.50", lambda k: model_suzgeci(k, ESIK))): m = olc(ONCE, karar) print(f"{ad:<16} {m['dp'] + m['yp']:>10} {m['yp']:>13} {m['yn']:>14} {m['duyarlilik']:>11.4f}") print("engellenenlerin ucte biri insana gider:", len([k for k in ONCE if model_suzgeci(k, ESIK)][::3]), "/", len(ONCE), "kayit")
akis 600 kayit , degisim 301 kayittan sonra
kalibrasyon donemi sinif sayisi: {'temiz': 180, 'dolayli_yonerge': 30, 'gizli_alan_istegi': 23, 'yetki_asimi': 13, 'kaynak_taklidi': 30, 'bozulmus_girdi': 24}
kurulum engellenen yanlis alarm kacan zararli duyarlilik
savunmasiz 0 0 120 0.0000
model 0.50 95 11 36 0.7000
engellenenlerin ucte biri insana gider: 32 / 300 kayit
Savunmasız tabanın izlenecek bir şeyi yoktur: hiçbir kayıt engellenmediği için engelleme payı sabit sıfırdır, hiçbir kayıt incelemeye gitmediği için yanlış alarm payı tanımsızdır. İzleme savunmanın bir özelliğidir, sistemin değil. Kurulu savunma 95 kaydı engelliyor, bunların 11’i yanlış alarm ve 36 zararlı kaçıyor; iki sayı birlikte yazıldı. İzlemenin bedeli de burada görünür: yanlış alarm payını ölçebilmek için 300 kaydın 32’si insana gidiyor.
Üç Gösterge, İki Bozulma
İkinci blok üç göstergeyi iz kaydından hesaplar ve iki bozulmayı ayrı akışlarda başlatır.
# Uretimde etiket yoktur: gosterge yalniz iz kaydindan hesaplanir, etiket # ise incelemeye giden kayitlarin insan kararindan gelir. DALGA = [0.41, 0.10, 0.07, 0.07, 0.07, 0.28] # bozulmus girdi dalgasi HAFIF = ("olagandisi_damga_dagilimi", "asiri_uzunluk") # tek baslarina esigin altinda kalir PEN1, PEN2, ARDISIK, INCELEME = 120, 240, 10, 3 def iz_kaydi(k, esik): """Uretimde tutulan alanlar. Sinif etiketi YOKTUR.""" return {"engellendi": model_suzgeci(k, esik), "kaynak": k["kaynak"], "hafif": any(k["ozellik"][o] for o in HAFIF)} def akis(taban, pay_sonrasi, esik_sonrasi): ks = [kayit(i, taban, PAY if i < DEGISIM else pay_sonrasi) for i in range(N)] es = [ESIK if i < DEGISIM else esik_sonrasi for i in range(N)] return list(zip(ks, [iz_kaydi(k, e) for k, e in zip(ks, es)])) def seri(cift): """Uc gosterge, kayan pencere. Ikincisi etiket ister ve daha genis pencere kullanir.""" g = {"engelleme payi": [], "yanlis alarm payi": [], "kacan zararli vekili": []} for t in range(len(cift)): if t + 1 >= PEN1: p = [z for _, z in cift[t + 1 - PEN1:t + 1]] g["engelleme payi"].append((t, sum(x["engellendi"] for x in p) / PEN1)) gecen = [x for x in p if not x["engellendi"]] g["kacan zararli vekili"].append( (t, sum(x["hafif"] for x in gecen) / len(gecen) if gecen else 0.0)) if t + 1 >= PEN2: eng = [k for k, z in cift[t + 1 - PEN2:t + 1] if z["engellendi"]] incelenen = eng[::INCELEME] # engellenenlerin ucte biri insana gider g["yanlis alarm payi"].append( (t, sum(not zararli(k) for k in incelenen) / len(incelenen))) return g def band(s): v = [x for t, x in s if t < DEGISIM] return min(v), max(v) def gecikme(s, alt, ust): """Bandi ARDISIK kayit boyunca terk eden gosterge bozulmayi bildirmis sayilir.""" sayac, ilk = 0, None for t, x in s: if t < DEGISIM: continue if x < alt or x > ust: ilk, sayac = (t if sayac == 0 else ilk), sayac + 1 if sayac >= ARDISIK: return ilk - DEGISIM + 1, "yukari" if x > ust else "asagi" else: sayac = 0 return None, "-" def gercek(dilim): """Etiket gerektirir; uretimde bu sayilar bilinmez, kurgu oldugu icin okunur.""" karar = {k["no"]: z["engellendi"] for k, z in dilim} return olc([k for k, _ in dilim], lambda k: karar[k["no"]]) for taban in (TOHUM, 20260219): ak = {"dalga": akis(taban, DALGA, ESIK), "esik": akis(taban, PAY, 0.30)} print(f"\ntohum {taban} gercek etki: kacan zararli / yanlis alarm / duyarlilik") for b, a in ak.items(): o, y = gercek(a[:DEGISIM]), gercek(a[DEGISIM:]) print(f" {b:<7} {o['yn']:>3} -> {y['yn']:<4} {o['yp']:>4} -> {y['yp']:<4}" f" {o['duyarlilik']:>8.4f} -> {y['duyarlilik']:.4f}") d = {b: seri(a) for b, a in ak.items()} print(" gosterge band dalga esik") for ad in d["dalga"]: alt, ust = band(d["dalga"][ad]) h = [] for b in ("dalga", "esik"): n, y = gecikme(d[b][ad], alt, ust) h.append("bildirmedi" if n is None else f"{n} kayit {y}") print(f" {ad:<21} {alt:.4f}-{ust:.4f} {h[0]:<16} {h[1]}")
tohum 20260218 gercek etki: kacan zararli / yanlis alarm / duyarlilik dalga 36 -> 84 11 -> 2 0.7000 -> 0.5359 esik 36 -> 8 11 -> 27 0.7000 -> 0.9355 gosterge band dalga esik engelleme payi 0.2667-0.3583 55 kayit yukari 29 kayit yukari yanlis alarm payi 0.0800-0.1600 140 kayit asagi 45 kayit yukari kacan zararli vekili 0.0610-0.1928 20 kayit yukari bildirmedi tohum 20260219 gercek etki: kacan zararli / yanlis alarm / duyarlilik dalga 33 -> 77 12 -> 11 0.7027 -> 0.5792 esik 33 -> 8 12 -> 36 0.7027 -> 0.9304 gosterge band dalga esik engelleme payi 0.2667-0.3750 54 kayit yukari 36 kayit yukari yanlis alarm payi 0.0385-0.2308 bildirmedi 220 kayit yukari kacan zararli vekili 0.0723-0.1538 10 kayit yukari 229 kayit asagi
Hangi Gösterge Neyi Gördü
İki bozulma birbirinin aynası. Dalga kaçan zararlıyı 36’dan 84’e çıkarıyor ve duyarlılığı 0,7000’den 0,5359’a düşürüyor; yanlış alarmı ise 11’den 2’ye indiriyor, çünkü temiz kayıt payı azaldı. Eşik kayması bunun tersini yapıyor: kaçan zararlı 8’e iner, yanlış alarm 11’den 27’ye çıkar. Her iki bozulma da savunmanın bir sayısını iyileştirip öbürünü bozuyor. Kursun kuralı burada bir izleme kuralına dönüşür: tek gösterge basan bir gösterge tablosu her bozulmayı bir iyileşme gibi gösterebilir.
Kaçan zararlı vekili dalgayı en erken gören göstergedir: 20 ve 10 kayıt. Etiket istemez, çünkü engellenmeden geçen kayıtlarda süzgecin tek başına eşiğin altında bıraktığı iki bayrağın payını sayar. Aynı vekil eşik kaymasını hiç bildirmiyor ya da 229 kayıt sonra ve yanlış yönde bildiriyor: eşik düşünce daha çok kayıt engellenir, geçenlerin arasında bayrak taşıyan azalır ve vekil düşer. Yükseliş bekleyen bir uyarı kuralı bu bozulmayı tanımı gereği göremez.
Vekilin niçin işe yaradığı süzgecin kendi ağırlıklarında yazılıdır. Bozulmuş girdi sınıfının iki
belirgin bayrağı olagandisi_damga_dagilimi ve asiri_uzunluk; ağırlıkları 0,30 ve 0,12. İkisi
birden taşınsa bile toplam 0,42 eder ve kullanıcıdan gelen bir kayıtta kaynak eki sıfır olduğu için
0,50 eşiğinin altında kalır. Yani süzgeç bu sınıfı ancak kaynak eki taşıyan kayıtlarda
yakalayabilir; dalga büyüdükçe engelleme payı bir miktar yükselir ama kaçan zararlı daha hızlı
yükselir. Vekil tam da süzgecin göremediği bu artığı sayar, bu yüzden erken görür.
Engelleme payı iki bozulmayı da bildiriyor (55 ve 54; 29 ve 36 kayıt) ama hangisi olduğunu söylemiyor: her iki durumda da yönü yukarıdır. Etiket istemeyen bu gösterge en ucuzudur ve en az şey söyler; tek başına okunduğunda dalga ile eşik kaymasını ayırt etmez.
Yanlış alarm payı bedelin doğrudan ölçüsüdür ve üç göstergenin en güvenilmezidir. Eşik kaymasını iki koşumda 45 ve 220 kayıt sonra bildiriyor; iki koşum arasındaki fark gecikmenin kendisinden büyüktür, yani bu göstergenin gecikmesi ölçülemez. Dalgada bir koşumda 140 kayıt sonra aşağı yönde, öbüründe hiç bildirmiyor. Nedeni yapısaldır: gösterge 240 kayıtlık pencerede engellenenlerin ancak üçte birinden etiket alır, yani bir okuması otuz kadar etikete dayanır. Bandının genişliği de bunu doğruluyor: 0,0800–0,1600 ile 0,0385–0,2308, aynı savunma için.
Üç göstergenin hiçbiri iki bozulmayı birden yakalamıyor ve yakalayan tek gösterge de yönü doğru söylemiyor. İzleme bir savunmadır ve iki sayısı vardır: gördüğü bozulma ile bedeli — otuz iki insan incelemesi, ardışık on kayıtlık bekleme ve bir bozulmada iki yüz kayda varan gecikme.
Özet
- Üretim izleme savunmanın bir özelliğidir: savunmasız tabanda engelleme payı sabit sıfır, yanlış alarm payı tanımsızdır ve izlenecek gösterge yoktur.
- İz kaydı sınıf etiketi taşımaz; etiket yalnızca incelemeye giden kayıtlarda oluşur ve 300 kaydın 32’si insana gider.
- Kaçan zararlı vekili dalgayı 20 ve 10 kayıt sonra bildirir, eşik kaymasını hiç ya da yanlış yönde bildirir; engelleme payı ikisini de bildirir ama ayırt etmez.
- Etiket gerektiren yanlış alarm payının gecikmesi iki koşumda 45 ve 220 kayıttır; fark gecikmenin kendisinden büyük olduğu için bu gösterge ölçülmüş sayılmaz.
Sonraki Adım
Bu derste gösterge, iz kaydından ve engellenen kayıtların incelenmesinden hesaplandı. Sistemin kendisinden gelen bir sinyal daha vardır ve bedava görünür: kullanıcının yanıtı beğenmediğini söylemesi, düzeltme göndermesi, aynı soruyu yeniden sorması. Bu sinyal değerlendirme kümesine dönebilir ve bir sonraki turun savunmasını ayarlayabilir. Sorulmayan şey şudur: bu sinyali kim gönderebiliyor. Engellenen kullanıcı yanıtı hiç görmez ve söyleyecek bir şeyi olmaz; döngüye yalnızca geçenlerin sesi ulaşır. Sonraki ders bu sinyalin kapsadığı payı ve yanlılığın yönünü ölçer.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.