Ders 06 / 13
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.
İçindekiler
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ğineMARJkadar 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.
# 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.
# 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 dorduncunun 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
tamamidışındaki her yordamda sapma sıfırdan farklıdır. yalniz pozitif0,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 negatifters yönde −0,0845 sapar,esik yakini0,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 dorduncu0,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ü.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.