---
title: 'Geri Bildirim Toplama'
source: 'https://academia.sh/tr/kurslar/model-izleme/geri-bildirim-toplama'
course: 'Model İzleme ve Yönetişim'
language: tr
updated: '2026-08-17T18:08:53+00:00'
license: 'CC BY-SA 4.0'
---

# Geri Bildirim Toplama

Üretimden toplanan etiketin kapsadığı payın ve taşıdığı yanlılığın sayılması: beş toplama yordamı aynı 1200 satır üzerinde denendiğinde yalnız pozitif tahminler için etiket toplamak 0,4858 kapsam verir ve kavram kaymalı üretimde ölçülen isabeti gerçek isabetten +0,0894 yukarı kaydırır, çünkü o yordam isabeti değil kesinliği ölçer; dönem dönem bakıldığında ölçülen isabet 0,9362'den 1,0000'e çıkarken gerçek isabet 0,8500'e iner ve düşüşe kurulmuş bir uyarı hiç ateşlemez. Yalnız negatif tahminler ters yönde −0,0845, karar eşiğine yakın satırlar 0,1850 kapsamla −0,2909 sapar. Her dördüncü satırı toplayan yordam yarı kapsamla +0,0033 ve +0,0100 sapar; kapsam yanlılığı düzeltmez, yanlılık seçim kuralından gelir.

Bir önceki ders üç bantta üç ölçüyü saydı ve geriye tek geçerli gösterge kaldı: isabet. İki zararsız
senaryoda hiç ateşlemeyen, zararlı senaryoda dört dönemin dördünde ateşleyen tek ölçü oydu. Ama
isabet **etiket** ister ve şimdiye kadar etiket kurgunun bir armağanıydı — her satırın gerçek sınıfı
biliniyordu, yalnız iki dönem geç geliyordu.

Üretimde etiket armağan değildir, **toplanır**. Toplanan şey de nadiren her tahmini kapsar: bir
inceleme yalnız işaretlenmiş kayıtlara gider, bir itiraz yalnız rahatsız olandan gelir, bir doğrulama
yalnız kararsız kalınan durumda istenir. Bu ders beş toplama yordamını aynı küme üzerinde koşturur ve
iki sayıyı ayrı ayrı yazar: **kapsam**, yani etiketi gelen satırın payı; ve **sapma**, yani o
etiketlerle ölçülen isabetin gerçek isabetten farkı.

- **MI53.** Kaynak, hat, kurgu model, kavram kayması ve beş toplama yordamı **kurgudur** ve ders
  içinde üretilir. Hiçbir izleme ürünü, etiketleme servisi, bulut servisi ya da öğrenme kitaplığı
  çağrılmaz. Tohum 20260218.
- **MI54. Toplama yordamı**, hangi tahminin etiketinin geleceğini belirleyen kuraldır. Beşi sınanır:
  `tamami`; `yalniz pozitif`, modelin 1 dediği satırlar; `yalniz negatif`, 0 dediği satırlar;
  `esik yakini`, puanı karar eşiğine `MARJ` kadar yakın satırlar; `her dorduncu`, dizideki her
  dördüncü satır.
- **MI55. Kapsam**, etiketi gelen satırın izleme dönemlerindeki 1200 satıra oranıdır. **Sapma**,
  toplanan etiketlerle ölçülen isabetten bütün satırlarla ölçülen **gerçek isabetin** çıkarılmasıdır.
  Yönü anlamlıdır: artı işaret modelin olduğundan iyi göründüğünü söyler.
- **MI56.** Kullanıcı sinyalinin değerlendirmeye dönmesi ve o sinyalin yanlılığı, Yapay Zekâ
  Mühendisliği müfredatındaki Yapay Zekâ Güvenliği ve Değerlendirme kursunun geri bildirim döngüsü
  dersinde ölçüldü; **yordam tekrarlanmaz**. Oradaki ölçü dil modeli çıktısı içindi; buradaki ek
  **sayısal modelin gecikmeli etiketidir**.
- **MI57.** Model MLOps Temelleri kursundan düzeltilmiş biçimde devralınır: karar eşiği ayrı bir
  ayardır, eğitim ölçütü **dengeli isabettir**. İzleme dönemlerinde **taban sınıf oranı 0,5342**.
- **MI58.** Taban çizgisi **toplamasız kurulumdur**: etiket gelmez, ölçülen isabet yoktur, sapma
  tanımsızdır. Dönem isabetinin adımı **0,0050** ve bundan küçük sapma okunmaz.

## Etiket Nereden Geliyor

Aşağıdaki blok ortak tanımı kurar ve modeli eğitir. Son satır dersin sınırlarını verir: kaç satır
üzerinde ölçüyoruz, tabanın altına inilemeyecek çözünürlük nedir ve etiket kaç dönem sonra gelir.

```python
# KURGUDUR. Olcum aginin sayac okumalari , bes asamali hat , kurgu model , kavram
# kaymasi ve bes toplama yordami ders icinde uretilir; hicbir izleme urunu ,
# etiketleme servisi , bulut servisi ya da ogrenme kitapligi cagrilmaz. Tohum 20260218.
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


BOLGE = ["dogu", "bati", "kuzey", "guney", "merkez"]
TIP = ["mesken", "isyeri"]
DONEM = [f"2026-{a:02d}" for a in range(1, 13)]
ABONE = {}
for i in range(200):
    r = uretec(TOHUM + 37 * i)
    ABONE[f"A{i + 1:03d}"] = {"bolge": BOLGE[int(r() * 5)], "tip": TIP[int(r() * 2)],
                              "baslangic": 10000 + int(r() * 60000)}


def kaynak_uret():
    kayit = []
    for i, (ab, a) in enumerate(ABONE.items()):
        e = a["baslangic"]
        for d in DONEM:
            r = uretec(TOHUM + 101 * i + 7 * DONEM.index(d))
            e += 4 + int(r() * 46)
            kayit.append({"abone": ab, "donem": d, "bolge": a["bolge"], "tip": a["tip"],
                          "endeks": e, "birim": "m3"})
    return kayit


def a1_ayikla(kayit):
    ZOR = ("abone", "donem", "bolge", "endeks", "birim")
    tut = [k for k in kayit if all(a in k for a in ZOR)]
    return tut, len(kayit) - len(tut)


def a2_tekille(kayit):
    gor, tut = set(), []
    for k in kayit:
        ad = (k["abone"], k["donem"])
        if ad not in gor:
            gor.add(ad)
            tut.append(k)
    return tut, len(kayit) - len(tut)


def a3_tuketim(kayit):
    tablo = {(k["abone"], k["donem"]): k for k in kayit}
    cikti, dusen = [], 0
    for k in kayit:
        i = DONEM.index(k["donem"])
        onceki = tablo.get((k["abone"], DONEM[i - 1])) if i else None
        if onceki is None:
            dusen += i > 0
            continue
        cikti.append(dict(k, m3=int(k["endeks"]) - int(onceki["endeks"])))
    return cikti, dusen


def satirlar(kaynak=None):
    v, _ = a1_ayikla(kaynak_uret() if kaynak is None else kaynak)
    v, _ = a2_tekille(v)
    v, _ = a3_tuketim(v)
    return v


def oznitelikler(kayitlar, pencere=None, basamak=4):
    sirali = sorted(kayitlar, key=lambda k: DONEM.index(k["donem"]))
    ab, bo = {}, {}
    for k in sirali:
        ab.setdefault(k["abone"], []).append((DONEM.index(k["donem"]), k["m3"]))
        bo.setdefault(k["bolge"], []).append((DONEM.index(k["donem"]), k["m3"]))

    def ortalama(dizi, i):
        secili = [v for d, v in dizi if (d < i and (pencere is None or d >= i - pencere))]
        return round(sum(secili) / len(secili), basamak) if secili else 0.0

    oz = {}
    for k in kayitlar:
        i = DONEM.index(k["donem"])
        oz[(k["abone"], k["donem"])] = {"abone_ort": ortalama(ab[k["abone"]], i),
                                        "bolge_ort": ortalama(bo[k["bolge"]], i),
                                        "isyeri": 1 if k["tip"] == "isyeri" else 0}
    return oz


IZGARA = [(a, b, c) for a in (0.6, 0.8, 1.0) for b in (0.0, 0.2, 0.4) for c in (0, 4, 8)]
KARAR_IZGARA = (18, 22, 26, 30, 34)     # karar esigi AYRI bir ayardir , egitimde aranir
IZLEME = DONEM[6:]                      # 2026-07 .. 2026-12 : uretimde izlenen donemler
GECIKME = 2                             # etiket kac donem sonra geliyor
KURAL_ESIK, KURAL_ISYERI = 30, 6        # KAVRAM: abone_ort + 6 x isyeri > 30


def puan(o, w):
    return w[0] * o["abone_ort"] + w[1] * o["bolge_ort"] + w[2] * o["isyeri"]


def etiket(oz_k, esik=KURAL_ESIK, isyeri_kat=KURAL_ISYERI):
    return 1 if oz_k["abone_ort"] + isyeri_kat * oz_k["isyeri"] > esik else 0


def tahmin(oz_k, w, karar):
    return 1 if puan(oz_k, w) > karar else 0


def dengeli_isabet(kume, oz, w, karar):
    dp = dn = yp = yn = 0
    for k in kume:
        o_k = oz[(k["abone"], k["donem"])]
        t, g = tahmin(o_k, w, karar), etiket(o_k)
        dp, yp = dp + (t and g), yp + (t and not g)
        yn, dn = yn + (g and not t), dn + (not t and not g)
    duyarlilik = dp / (dp + yn) if dp + yn else 0.0
    ozgulluk = dn / (dn + yp) if dn + yp else 0.0
    return (duyarlilik + ozgulluk) / 2, round(duyarlilik, 4), round(ozgulluk, 4)


def egit(kayitlar, oz, donemler=None):
    """Egitim olcutu DENGELI ISABETTIR: duyarlilik ile ozgullugun ortalamasi."""
    kume = [k for k in kayitlar if k["donem"] in (donemler or DONEM[1:9])]
    en = (-1.0, None, None, 0.0, 0.0)
    for w in IZGARA:
        for karar in KARAR_IZGARA:
            o, du, oz_ = dengeli_isabet(kume, oz, w, karar)
            if o > en[0]:
                en = (o, w, karar, du, oz_)
    return {"agirlik": en[1], "karar": en[2], "dengeli": round(en[0], 4),
            "duyarlilik": en[3], "ozgulluk": en[4], "egitim_satiri": len(kume)}


def kavram_kaydir(kayitlar, oz, baslangic="2026-09", yeni_esik=27):
    """KAVRAM KAYMASI: girdi AYNI , kural degisiyor. Esik 30'dan yeni_esik'e iniyor."""
    b = DONEM.index(baslangic)
    return {(k["abone"], k["donem"]): etiket(
        oz[(k["abone"], k["donem"])],
        yeni_esik if DONEM.index(k["donem"]) >= b else KURAL_ESIK) for k in kayitlar}


def uyari(dizi, taban, pay):
    """Bir olcu tabandan `pay` kadar saparsa o donem ates eder."""
    return [d for d, v in dizi if abs(v - taban) / max(abs(taban), 1e-9) > pay]


SATIR = satirlar()
OZ = oznitelikler(SATIR)                  # oznitelik BIR KEZ hesaplanir
MODEL = egit(SATIR, OZ)
IZL = [k for k in SATIR if k["donem"] in IZLEME]
buyuk = max(sum(1 for k in IZL if etiket(OZ[(k["abone"], k["donem"])]) == s) for s in (0, 1))
print(f"model {MODEL['agirlik']} karar esigi {MODEL['karar']} , dengeli isabet"
      f" {MODEL['dengeli']} , duyarlilik {MODEL['duyarlilik']} , izleme {len(IZL)} satir ,"
      f" taban sinif orani {buyuk / len(IZL):.4f} , adim {1 / 200:.4f} , etiket gecikmesi"
      f" {GECIKME} donem")
```

```
model (0.6, 0.0, 4) karar esigi 18 , dengeli isabet 0.9864 , duyarlilik 1.0 , izleme 1200 satir , taban sinif orani 0.5342 , adim 0.0050 , etiket gecikmesi 2 donem
```

## Kapsam ve Sapma

Aşağıdaki blok beş yordamı iki senaryoda koşturur. Üst tablo izleme penceresinin tamamı için
kapsamı, toplanan etiketlerle ölçülen isabeti, bütün satırlarla ölçülen gerçek isabeti ve ikisinin
farkını verir. Alt tablo yalnız kavram kaymalı üretimde dönem dönem ölçülen isabeti ve **düşüşe**
kurulmuş 0,05'lik bir uyarının kaç dönem ateşlediğini sayar.

```python
# Bu blok ilk bloktaki tanimlari surdurur. Oznitelikler BIR KEZ hesaplanmistir.
MARJ = 1.0            # karar esigine bu kadar yakin puanlar "esik yakini" sayilir
KAVRAM = kavram_kaydir(SATIR, OZ)
W, KR = MODEL["agirlik"], MODEL["karar"]
YORDAM = (("tamami", lambda o, j: True),
          ("yalniz pozitif", lambda o, j: tahmin(o, W, KR) == 1),
          ("yalniz negatif", lambda o, j: tahmin(o, W, KR) == 0),
          ("esik yakini", lambda o, j: abs(puan(o, W) - KR) <= MARJ),
          ("her dorduncu", lambda o, j: j % 4 == 0))


def olc(etiketler, sec, donemler):
    """Yalniz sec'in sectigi satirin etiketi geliyor; isabet ONLARLA olculur."""
    top = dogru = tam = tam_dogru = 0
    for j, k in enumerate(SATIR):
        if k["donem"] not in donemler:
            continue
        o = OZ[(k["abone"], k["donem"])]
        d = tahmin(o, W, KR) == (etiketler[(k["abone"], k["donem"])] if etiketler
                                 else etiket(o))
        tam, tam_dogru = tam + 1, tam_dogru + d
        if sec(o, j):
            top, dogru = top + 1, dogru + d
    return round(top / tam, 4), round(dogru / top, 4), round(tam_dogru / tam, 4)


print("yordam           senaryo         kapsam  olculen  gercek   sapma")
for ad, sec in YORDAM:
    for sad, et in (("saglam", None), ("kavram kaymali", KAVRAM)):
        kap, olcu, ger = olc(et, sec, IZLEME)
        print(f"{ad:<16} {sad:<14} {kap:.4f}   {olcu:.4f}  {ger:.4f}  {olcu - ger:+.4f}")

print("\nkavram kaymali , donem donem olculen isabet ve 0.05 bandinda DUSUSE atesleme")
for ad, sec in YORDAM:
    dizi = [(d, olc(KAVRAM, sec, [d])[1]) for d in IZLEME]
    taban = dict(dizi)["2026-08"]
    a = [d for d, v in dizi[2:] if (taban - v) / taban > 0.05]
    print(f"{ad:<16}" + "".join(f"{v:8.4f}" for _, v in dizi) + f"   ates {len(a)}")
```

```
yordam           senaryo         kapsam  olculen  gercek   sapma
tamami           saglam         1.0000   0.9800  0.9800  +0.0000
tamami           kavram kaymali 1.0000   0.8900  0.8900  +0.0000
yalniz pozitif   saglam         0.4858   0.9588  0.9800  -0.0212
yalniz pozitif   kavram kaymali 0.4858   0.9794  0.8900  +0.0894
yalniz negatif   saglam         0.5142   1.0000  0.9800  +0.0200
yalniz negatif   kavram kaymali 0.5142   0.8055  0.8900  -0.0845
esik yakini      saglam         0.1850   0.8919  0.9800  -0.0881
esik yakini      kavram kaymali 0.1850   0.5991  0.8900  -0.2909
her dorduncu     saglam         0.2500   0.9833  0.9800  +0.0033
her dorduncu     kavram kaymali 0.2500   0.9000  0.8900  +0.0100

kavram kaymali , donem donem olculen isabet ve 0.05 bandinda DUSUSE atesleme
tamami            0.9700  0.9700  0.8150  0.8700  0.8650  0.8500   ates 4
yalniz pozitif    0.9341  0.9362  1.0000  1.0000  1.0000  1.0000   ates 0
yalniz negatif    1.0000  1.0000  0.6606  0.7347  0.7245  0.6907   ates 4
esik yakini       0.8286  0.8537  0.3824  0.5526  0.4857  0.4615   ates 4
her dorduncu      0.9800  0.9800  0.8600  0.8600  0.8200  0.9000   ates 4
```

## Toplama Yordamı Ölçütü de Seçer

`yalniz pozitif` satırı dersin en sert bulgusudur. Kapsamı 0,4858, yani tahminlerin neredeyse
yarısını görüyor — az bir örneklem değil. Kavram kaymalı üretimde ölçtüğü isabet **0,9794**, gerçek
isabet **0,8900**; sapma **+0,0894**, on sekiz çözünürlük adımı ve **yukarı** yönlü. Alt tabloda daha
da kötüsü var: ölçülen isabet 0,9362'den **1,0000'e çıkıyor**, gerçeği 0,8500'e inerken. Düşüşe
kurulmuş uyarı **hiç ateşlemiyor**.

Mekanizma seçim kuralındadır. Yalnız 1 denen satırların etiketi geldiğinde ölçülen şey isabet değil
**kesinliktir (precision)**: modelin 1 dediklerinin ne kadarı gerçekten 1. Kavram kayması etiket
kuralını **gevşetiyor** — eşik 30'dan 27'ye iniyor — ve daha çok satır gerçekten 1 oluyor. Modelin
eski pozitifleri toptan doğrulanıyor, kesinlik 1,0000'e çıkıyor; kaçırdığı yeni pozitifler ise
pozitif olmayan tarafta kaldığı için hiç ölçülmüyor. **Toplama yordamı, bozulmanın en görünmez
olduğu ölçütü seçmiş oluyor.**

`yalniz negatif` aynı kusuru ters işaretle taşır: sağlam üretimde 1,0000 ölçer ve modeli olduğundan
iyi gösterir, kavram kaymalı üretimde 0,8055 ölçüp **−0,0845** ile fazla karamsar olur. En açık
örnek `esik yakini`'dir: karar eşiğine yakın satırlar tanımı gereği modelin en kararsız olduğu
satırlardır ve yalnız onları toplamak 0,8900'lük bir modeli **0,5991** okutur. Sapma **−0,2909**,
elli sekiz çözünürlük adımı.

## Kapsam Yanlılığı Düzeltmez

İki satırı yan yana koymak dersin kuralını verir. `yalniz pozitif` **0,4858** kapsamla +0,0894
sapıyor; `her dorduncu` **0,2500** kapsamla +0,0100. Kapsamın yarısı, sapmanın dokuzda biri. Sağlam
üretimde `her dorduncu`nun sapması **+0,0033**, yani çözünürlük adımının bile altında ve
**okunamaz**. Toplanan etiket sayısını büyütmek yanlılığı küçültmez; yanlılığı belirleyen tek şey
**seçim kuralının tahminle ilişkili olup olmadığıdır**. `her dorduncu` dizideki konuma bakar, modelin
çıktısına değil — bu yüzden yarı kapsamla dokuz kat daha doğrudur.

Buradan kursun kuralının etiket tarafındaki karşılığı çıkar. Ateşleyen bir gösterge nasıl bozulmanın
kanıtı değilse, **toplanmış bir etiket kümesi de ölçümün kanıtı değildir**. Bir kapsam sayısı tek
başına rapor edilirse — "tahminlerin yüzde 49'u için etiketimiz var" — ölçünün ne olduğu hakkında
hiçbir şey söylemez; söyleyen şey, o yüzde 49'un **hangi kuralla** seçildiğidir. Sapması ayrıca
gösterilmeyen bir toplama yordamı **ölçülmemiş sayılır**.

## Özet

- Toplama yordamı, hangi tahminin etiketinin geleceğini belirleyen kuraldır; kapsam ile sapma ayrı
  iki sayıdır ve `tamami` dışındaki her yordamda sapma sıfırdan farklıdır.
- `yalniz pozitif` 0,4858 kapsamla kavram kaymalı üretimde **+0,0894** sapar ve ölçülen isabeti
  0,9362'den 1,0000'e **çıkarır**; düşüşe kurulmuş 0,05'lik uyarı hiç ateşlemez. Ölçtüğü şey isabet
  değil **kesinliktir** ve kural gevşediğinde kesinlik yükselir.
- `yalniz negatif` ters yönde −0,0845 sapar, `esik yakini` 0,1850 kapsamla −0,2909 sapar; ikisi de
  bozulmayı gösterir ama düzeyi on yedi ile elli sekiz çözünürlük adımı yanlış okur.
- `her dorduncu` 0,2500 kapsamla +0,0033 ve +0,0100 sapar; kapsamın yarısı, sapmanın dokuzda biri.
  **Kapsam yanlılığı düzeltmez**, yanlılık seçim kuralının tahminle ilişkili olmasından gelir.
- Sapması ayrıca gösterilmeyen bir toplama yordamı ölçülmemiş sayılır; bir kapsam sayısı tek başına
  ölçümün kanıtı değildir.

## Sonraki Adım

Altı ders tek bir soruyu böldü: bozulma **görülüyor mu**. Veri kayması ateşleyen ama bozmayan bir
değişimdi, kavram kayması bozan ama ateşlemeyen bir değişim; gecikmeli etiket tek gören ölçüyü iki
dönem geciktirdi, vekil ölçütler o boşlukta ayırt etmedi, bant daraldıkça yanlış alarm büyüdü ve
toplanan etiketin kendisi ölçüyü kaydırdı. Ölçülen şey hep aynıydı: bir bozulmanın **görülmesi**.

Hiç sorulmayan şey, görüldükten **sonra** ne yapılacağıdır. `2026-09`'da kuralın değiştiğini
`2026-11`'de öğrenen bir ekibin elinde bir karar dizisi vardır ve her biri kendi bedelini taşır: yeni
bir model eğitip yayına almak, onu önce trafiğin bir payına vermek, iki modeli aynı anda koşturup
farkın gerçek olduğunu göstermek, kararın gerekçesini kaydetmek. Sonraki konu bu kararları sayar ve
ilk ölçüsü şudur: yeni modele giden istek payı arttıkça sonuç ne kadar oynuyor, ve **hiç istek
göndermeden** ölçüm almak mümkün mü.
