---
title: 'Üretim İzleme'
source: 'https://academia.sh/tr/kurslar/yz-guvenlik-ve-degerlendirme/uretim-izleme'
course: 'Yapay Zekâ Güvenliği ve Değerlendirme'
language: tr
updated: '2026-08-17T18:06:34+00:00'
license: 'CC BY-SA 4.0'
---

# Ü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.

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.

```python
# 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.

```python
# 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.
