---
title: 'Ölçüt Seçimi'
source: 'https://academia.sh/tr/kurslar/model-etik-ve-yorum/olcut-secimi'
course: 'Model Değerlendirme, Yorumlanabilirlik ve Etik'
language: tr
updated: '2026-08-17T18:10:14+00:00'
license: 'CC BY-SA 4.0'
---

# Ölçüt Seçimi

Aynı modelin iki bedel yapısında iki ayrı işletme noktası ve iki ayrı karar vermesi: denetimin pahalı olduğu yapıda seçilen eşik 0,95 ve 252 abonenin 17'si işaretleniyor, kaçağın pahalı olduğu yapıda eşik 0,25 ve 77'si işaretleniyor; 60 abonenin kararı iki yapı arasında ters dönüyor. Taban çizgisi de bedelle birlikte değişiyor — birinde hiç kimseyi işaretlememek 0,2421, öbüründe herkesi işaretlemek 0,7579. Tek eşiğin alt gruplardaki kazancı +0,4138 ile -0,4468 arasında dağılıyor, açıklık 0,8606, ve on iki alt grubun dördünde model kendi tabanının altında kalıyor; alt gruba özgü eşik seçmek ise sınama bedelini yalnız dördünde düşürüyor.

Önceki ders ölçütü doğruluk olarak aldı ve hiç sorgulamadı. Doğruluk iki hata türünü aynı ağırlıkta
sayar: şüphesiz bir aboneyi denetime göndermek ile şüpheli bir aboneyi kaçırmak eşit ağırlıkta
yanlıştır. İşletmede eşit değildir. Bir denetim ekibinin yolu, zamanı ve boşa giden ziyaretin
abonede bıraktığı iz bir bedeldir; kaçırılan bir kaçak ya da giderilmemiş bir arıza başka bir
bedeldir, ve ikisinin oranı bir iş kararıdır.

Bu ders o oranı **bedel yapısı** olarak yazar ve tek şeyi ölçer: aynı model, aynı puanlar, iki
ayrı bedel yapısı — kaç ayrı işletme noktası, kaç ayrı karar. Ölçüt tanımları, eşik ve eğriler
M27/K03'ün model değerlendirme konusunda kuruldu ve burada tekrarlanmaz. Eklenen tek şey, eşiğin
**iş hedefinden** okunmasıdır. Alt gruplar ve üçlü önceki dersten aynen sürer.

- **DT8.** Kurgu, bölme (**756/252/252**), tohum ve alt grup tanımları önceki dersten aynen sürer:
  dört eksen, **13 alt grup**, her sayının yanına n yazılır ve **n < 25 olan grup açıklığa
  girmez**.
- **DT9.** Model aynı derinlik 6 karar ağacıdır, tek farkla: yaprakta sınıf değil **şüpheli
  oranı** durur. Bu oran modelin puanıdır; eşiğin üstündeki abone denetime gönderilir.
- **DT10.** Ölçüt **abone başına bedeldir** ve **küçük iyidir**. Yanlış alarm (işaretlenen ama
  şüphesiz abone) $y$, kaçırma (işaretlenmeyen ama şüpheli abone) $k$ birim tutar; doğru kararlar
  sıfır tutar. Birim soyuttur ve para değildir.
- **DT11.** İki bedel yapısı sınanır. **Denetim pahalı**: $y = 2$, $k = 1$. **Kaçak pahalı**:
  $y = 1$, $k = 4$. İkisi de kurgudur ve bir iş kararını temsil eder.
- **DT12.** Eşik **10 aday** üzerinde süpürülür (0,05'ten 0,95'e onda birlik adımlarla) ve
  **doğrulama kümesinden** seçilir; sınama kümesi yalnız rapor için okunur.
- **DT13.** Taban çizgisi her bedel yapısı için ayrı hesaplanır ve iki öğrenmeyen yordamın **daha
  ucuz olanıdır**: hiç kimseyi işaretlememek, ya da herkesi işaretlemek.
- **DT14.** Alt gruba özgü eşik, o alt grubun **doğrulama** satırlarından seçilir ve o alt grubun
  sınama satırlarında raporlanır. Alt grup doğrulama kümeleri küçüktür ve seçim payı buradan gelir.
- **DT15.** Doğruluk bu derste hiç basılmaz. Önceki dersin 0,7778'i ile bu dersin bedelleri aynı
  eksende değildir ve karşılaştırılmaz.

## İki Bedel Yapısı, İki Eşik

İlk blok kurguyu kurar, ağacı yaprakta oran bırakacak biçimde eğitir ve on eşiği iki bedel yapısı
altında süpürür.

```python
# MODELDIR. M26'nin KURGU olcum agi ayni tohumla uretilir, okumalar abone duzeyinde
# ozetlenir ve uzerine KURGU bir kacak/ariza suphesi etiketi eklenir.
import math

TOHUM, HAM, M32 = 20260218, 1400, 0xFFFFFFFF
BOLGE = [("kuzey", 0.28, 21, 0.00), ("guney", 0.22, 17, -0.10),
         ("dogu", 0.18, 26, 0.30), ("bati", 0.14, 14, -0.05),
         ("merkez", 0.18, 23, 0.05)]


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


ABONE, OKUMA, VERI = [], {}, []
for i in range(HAM):
    r = uretec(TOHUM + i)
    b = BOLGE[ayrik(r(), [x[1] for x in BOLGE])]
    hane = 1 + ayrik(r(), [0.06, 0.24, 0.30, 0.24, 0.11, 0.05])
    memnun = 1 + ayrik(r(), [0.08, 0.14, 0.27, 0.34, 0.17])
    if r() >= 0.046:
        ABONE.append({"no": 10001 + i, "bolge": b, "hane": hane, "memnuniyet": memnun})
for k in ABONE:
    r = uretec(TOHUM + 7000 + k["no"])
    for d in range(ayrik(r(), [0.05, 0.12, 0.21, 0.62])):
        OKUMA.setdefault(k["no"], []).append(0.0 if r() < 0.038 else math.floor(
            k["bolge"][2] * math.exp((r() + r() + r() - 1.5) * 0.62)
            * (1 - d * 0.05) * 100 + 0.5) / 100)
        r()
    v = OKUMA.get(k["no"])
    if v is None:
        continue
    ort, oyn, r = sum(v) / len(v), max(v) - min(v), uretec(TOHUM + 51000 + k["no"])
    z = (0.052 * (ort - 20) + 0.85 * (min(v) == 0.0) + 0.026 * oyn
         + 0.24 * (k["hane"] >= 5) - 0.20 * (k["memnuniyet"] >= 4) + k["bolge"][3]
         + 0.9 * (k["no"] - 10001) / 1399 + (r() + r() + r() - 1.5) * 1.30)
    x = {"no": k["no"], "hane": k["hane"], "memnuniyet": k["memnuniyet"],
         "donem": len(v), "ort_tuketim": round(ort, 2), "oynaklik": round(oyn, 2),
         "sifir_okuma": int(min(v) == 0.0), "supheli": int(z > 1.35),
         "bolge": k["bolge"][0]}
    for b in BOLGE:
        x["b_" + b[0]] = int(k["bolge"][0] == b[0])
    VERI.append(x)

ALAN = ["ort_tuketim", "oynaklik", "hane", "memnuniyet", "donem", "sifir_okuma",
        "b_kuzey", "b_guney", "b_dogu", "b_bati", "b_merkez"]


def karistir(veri, tohum):
    r, s = uretec(tohum), list(range(len(veri)))
    for i in range(len(s) - 1, 0, -1):
        j = int(r() * (i + 1))
        s[i], s[j] = s[j], s[i]
    return [veri[i] for i in s]


def uce_bol(K):
    a, b = int(len(K) * 0.6), int(len(K) * 0.8)
    return K[:a], K[a:b], K[b:]


def safsizlik(s):
    p = sum(x["supheli"] for x in s) / len(s) if s else 0.0
    return 2 * p * (1 - p)


def agac(s, derinlik, alanlar, enaz=2):     # yaprakta sinif degil ORAN durur
    p, en = sum(x["supheli"] for x in s) / len(s), None
    if derinlik and len(s) >= 2 * enaz and 0.0 < p < 1.0:
        for a in alanlar:
            d = sorted({x[a] for x in s})
            for v in (d[1:] if len(d) < 10 else
                      [d[int(i * len(d) / 10)] for i in range(1, 10)]):
                sol = [x for x in s if x[a] < v]
                sag = [x for x in s if x[a] >= v]
                if min(len(sol), len(sag)) < enaz:
                    continue
                k = safsizlik(s) - (len(sol) * safsizlik(sol) + len(sag) * safsizlik(sag)) / len(s)
                if en is None or k > en[0]:
                    en = (k, a, v, sol, sag)
    if en is None or en[0] <= 1e-9:
        return {"p": p}
    return {"alan": en[1], "esik": en[2], "sol": agac(en[3], derinlik - 1, alanlar),
            "sag": agac(en[4], derinlik - 1, alanlar)}


def puan(d, x):
    while "p" not in d:
        d = d["sol"] if x[d["alan"]] < d["esik"] else d["sag"]
    return d["p"]


def gruplar(x):                    # dort eksen, on uc alt grup; 01'den aynen surer
    return [("bolge", x["bolge"]),
            ("tarife", "10" if x["ort_tuketim"] <= 10 else
             ("25" if x["ort_tuketim"] <= 25 else "40")),
            ("hane", "1-2" if x["hane"] <= 2 else ("3-4" if x["hane"] <= 4 else "5+")),
            ("okuma", "az" if x["donem"] <= 2 else "tam")]


def bedel(s, e, ya, ka):           # abone basina bedel; kucuk iyi
    t = 0
    for x in s:
        t += ya * (1 - x["supheli"]) if puan(M, x) >= e else ka * x["supheli"]
    return t / len(s)


def isaret(s, e):
    return sum(puan(M, x) >= e for x in s) / len(s)


ADLAR = sorted({g for x in VERI for g in gruplar(x)})
EGT, DOG, SIN = uce_bol(karistir(VERI, TOHUM + 90000))
M = agac(EGT, 6, ALAN)
ESIK = [0.05 + 0.10 * i for i in range(10)]
YAPI = (("denetim pahali", 2, 1), ("kacak pahali", 1, 4))

print(f"{'esik':>5} | {'A dog':>7} {'A sin':>7} | {'B dog':>7} {'B sin':>7} "
      f"| {'isaret':>7}")
for e in ESIK:
    print(f"{e:>5.2f} | {bedel(DOG, e, 2, 1):>7.4f} {bedel(SIN, e, 2, 1):>7.4f} "
          f"| {bedel(DOG, e, 1, 4):>7.4f} {bedel(SIN, e, 1, 4):>7.4f} "
          f"| {isaret(SIN, e):>7.4f}")
SEC = {}
for ad, ya, ka in YAPI:
    e = SEC[ad] = min(ESIK, key=lambda t: (bedel(DOG, t, ya, ka), t))
    hic, hep = bedel(SIN, 1.1, ya, ka), bedel(SIN, -0.1, ya, ka)
    print(f"\n{ad:<14} esik {e:.2f}  sinama bedeli {bedel(SIN, e, ya, ka):.4f}  taban "
          f"{min(hic, hep):.4f} ({'hicbiri' if hic < hep else 'hepsi'})  kazanc "
          f"{min(hic, hep) - bedel(SIN, e, ya, ka):+.4f}  isaretlenen "
          f"{sum(puan(M, x) >= e for x in SIN)}/{len(SIN)}")
```

```
 esik |   A dog   A sin |   B dog   B sin |  isaret
 0.05 |  1.0952  0.9762 |  0.6032  0.5437 |  0.7063
 0.15 |  0.7659  0.7659 |  0.4802  0.5913 |  0.5357
 0.25 |  0.4802  0.4246 |  0.4762  0.5595 |  0.3056
 0.35 |  0.3889  0.3214 |  0.5278  0.5913 |  0.2183
 0.45 |  0.3492  0.2976 |  0.5079  0.6349 |  0.1825
 0.55 |  0.2778  0.2579 |  0.5833  0.7262 |  0.1151
 0.65 |  0.2540  0.2460 |  0.6548  0.7341 |  0.1032
 0.75 |  0.2222  0.2302 |  0.6667  0.7540 |  0.0833
 0.85 |  0.2222  0.2302 |  0.6667  0.7540 |  0.0833
 0.95 |  0.2183  0.2222 |  0.6786  0.7778 |  0.0675

denetim pahali esik 0.95  sinama bedeli 0.2222  taban 0.2421 (hicbiri)  kazanc +0.0198  isaretlenen 17/252

kacak pahali   esik 0.25  sinama bedeli 0.5595  taban 0.7579 (hepsi)  kazanc +0.1984  isaretlenen 77/252
```

İki bedel sütunu ters yönde iniyor. Denetimin pahalı olduğu yapıda bedel eşik yükseldikçe düşüyor
ve en ucuz nokta **0,95**; kaçağın pahalı olduğu yapıda en ucuz nokta **0,25** ve ondan sonra
yükselmeye başlıyor. Model tek bir modeldir, puanlar tek bir puan kümesidir, ve iki yapı aynı
tablodan iki ayrı satır seçiyor. 252 abonenin birinde **17'si**, öbüründe **77'si** denetime
gidiyor.

Taban çizgisi de bedelle birlikte yer değiştiriyor. Denetim pahalıyken en ucuz öğrenmeyen yordam
**hiç kimseyi işaretlememektir** ve 0,2421 tutuyor; kaçak pahalıyken **herkesi işaretlemektir** ve
0,7579 tutuyor. İkisi de aynı kümede, aynı etiketlerle hesaplanıyor. Modelin kazancı da buna göre
değişiyor: birinci yapıda tabanın yalnız **0,0198** altına inebiliyor, ikincisinde **0,1984**.
Aynı model, aynı sınama kümesi — ve biri "az işe yarar", öbürü "belirgin biçimde işe yarar" diye
raporlanır.

## Karar Kimde Değişiyor

İki işletme noktası arasındaki fark bir tabloda iki satırdır, ama abone tarafında somut bir şeydir:
bazı aboneler bir yapıda denetime gider, öbüründe gitmez.

```python
eA, eB = SEC["denetim pahali"], SEC["kacak pahali"]
fark = [x for x in SIN if (puan(M, x) >= eA) != (puan(M, x) >= eB)]
oran = sorted(((sum(g in gruplar(x) for x in fark)
                / sum(g in gruplar(x) for x in SIN), g) for g in ADLAR), reverse=True)
print(f"karari degisen abone {len(fark)}/{len(SIN)}, {sum(x['supheli'] for x in fark)}"
      f" tanesi supheli; alt gruplarda oran:")
for o, g in oran[:2] + oran[-1:]:
    print(f"  {' '.join(g):<14} {o:.4f}")
```

```
karari degisen abone 60/252, 23 tanesi supheli; alt gruplarda oran:
  tarife 10      0.7500
  bolge dogu     0.5556
  bolge bati     0.0938
```

Altmış abonenin kararı ters dönüyor ve bunların 23'ü gerçekten şüpheli. Bedel yapısını seçmek bir
ölçüt tercihi değil, altmış hanenin kapısının çalınıp çalınmamasıdır. Dağılım eşit de değil: doğu
bölgesindeki abonelerin **0,5556**'sı iki yapı arasında yer değiştirirken batıda bu oran
**0,0938**. Bedel yapısı bir kez seçildiğinde yükünü bütün alt gruplar aynı ölçüde taşımıyor.

## Bedel Alt Gruplarda Aynı Değil

Kaçağın pahalı olduğu yapıda seçilen tek eşik 0,25'tir ve on üç alt grubun hepsine aynı biçimde
uygulanır. Aşağıdaki blok o tek eşiğin her alt gruptaki bedelini, o alt grubun kendi tabanını, ve
alt grup kendi eşiğini seçseydi ne olacağını yan yana basar.

```python
ya, ka = 1, 4
print(f"{'alt grup':<14} {'n':>4} {'isaret':>7} {'bedel':>7} {'taban':>7} {'kazanc':>8}"
      f" | {'kendi':>5} {'bedeli':>7} {'ek':>8}")
kz, ek = [], []
for g in ADLAR:
    d = [x for x in DOG if g in gruplar(x)]
    s = [x for x in SIN if g in gruplar(x)]
    b, tb = bedel(s, eB, ya, ka), min(bedel(s, 1.1, ya, ka), bedel(s, -0.1, ya, ka))
    ke = min(ESIK, key=lambda t: (bedel(d, t, ya, ka), t))
    kb = bedel(s, ke, ya, ka)
    if len(s) >= 25:
        kz.append(tb - b)
        ek.append(b - kb)
    print(f"{' '.join(g):<14} {len(s):>4} {isaret(s, eB):>7.4f} {b:>7.4f} {tb:>7.4f} "
          f"{tb - b:>+8.4f} | {ke:>5.2f} {kb:>7.4f} {b - kb:>+8.4f}"
          f"{'  n<25' if len(s) < 25 else ''}")
print(f"\nkazanc acikligi ({len(kz)} alt grup): en iyi {max(kz):+.4f}, en kotu "
      f"{min(kz):+.4f}, aciklik {max(kz) - min(kz):.4f}; tabanin altinda kalan "
      f"{sum(1 for v in kz if v < 0)}/{len(kz)}")
print(f"kendi esigi sinama bedelini dusuren alt grup: {sum(1 for v in ek if v > 0)}"
      f"/{len(ek)}, degistirmeyen {sum(1 for v in ek if v == 0)}, yukselten "
      f"{sum(1 for v in ek if v < 0)}")
```

```
alt grup          n  isaret   bedel   taban   kazanc | kendi  bedeli       ek
bolge bati       32  0.0938  0.0938  0.0000  -0.0938 |  0.35  0.0625  +0.0312
bolge dogu       36  0.7500  0.7778  0.4722  -0.3056 |  0.45  0.7222  +0.0556
bolge guney      58  0.1897  0.2759  0.6897  +0.4138 |  0.15  0.5517  -0.2759
bolge kuzey      68  0.2500  0.6618  0.7059  +0.0441 |  0.15  0.6765  -0.0147
bolge merkez     58  0.3276  0.8448  0.6552  -0.1897 |  0.25  0.8448  +0.0000
hane 1-2         73  0.3562  0.5205  0.7534  +0.2329 |  0.15  0.6301  -0.1096
hane 3-4        143  0.2657  0.5944  0.7692  +0.1748 |  0.25  0.5944  +0.0000
hane 5+          36  0.3611  0.5000  0.7222  +0.2222 |  0.55  0.7500  -0.2500
okuma az         85  0.2706  0.7059  0.7882  +0.0824 |  0.45  0.8471  -0.1412
okuma tam       167  0.3234  0.4850  0.7425  +0.2575 |  0.15  0.5509  -0.0659
tarife 10        12  0.7500  0.4167  0.6667  +0.2500 |  0.05  0.4167  +0.0000  n<25
tarife 25       193  0.1813  0.4870  0.6425  +0.1554 |  0.45  0.4560  +0.0311
tarife 40        47  0.7021  0.8936  0.4468  -0.4468 |  0.05  0.5957  +0.2979

kazanc acikligi (12 alt grup): en iyi +0.4138, en kotu -0.4468, aciklik 0.8606; tabanin altinda kalan 4/12
kendi esigi sinama bedelini dusuren alt grup: 4/12, degistirmeyen 2, yukselten 6
```

Bütünde 0,1984 olan kazanç alt gruplarda **+0,4138 ile −0,4468** arasına dağılıyor; **açıklık
0,8606**. Dört alt grupta model kendi tabanının **altında**: batı, doğu, merkez ve tarife 40
basamağı. Tarife 40 basamağının kendi tabanı 0,4468, modelin bedeli 0,8936 — o basamakta model,
"herkesi işaretle" demekten iki kat pahalı. Nedeni işaret sütununda: eşik 0,25 o basamaktaki
abonelerin 0,7021'ini işaretliyor ama basamağın şüpheli oranı 0,553 olduğu için işaretlenmeyenler
arasında kalan şüpheliler dört birimlik kaçırma bedelini ödüyor.

Son üç sütun bir düzeltme öneriyor ve düzeltmenin bedelini de gösteriyor. Her alt grup kendi
doğrulama satırlarından kendi eşiğini seçtiğinde tarife 40 basamağı 0,05'e iniyor ve bedeli
0,8936'dan 0,5957'ye düşüyor. Ama aynı işlem on iki alt grubun yalnız **dördünde** sınama bedelini
düşürüyor; ikisinde değiştirmiyor, **altısında yükseltiyor** — güneyde 0,2759, hane 5 ve üstünde
0,2500 birim. Sebep, alt grup doğrulama kümelerinin küçüklüğüdür: kırk yetmiş satırdan seçilen bir
eşik, o satırların gürültüsünü seçiyor. Alt grup başına eşik ayarlamak alt grup başına doğrulama
kümesi ister, ve bu kümeler bölmeden değil tasarımdan gelir.

## Özet

- Bedel yapısı iş hedefini sayıya çevirir: yanlış alarm ile kaçırmanın oranı bir iş kararıdır ve
  eşik o orandan okunur. Ölçüt **abone başına bedeldir** ve küçük iyidir.
- Aynı model, aynı puanlar, iki bedel yapısı: denetim pahalıyken seçilen eşik 0,95 ve 252 abonenin
  17'si işaretleniyor; kaçak pahalıyken eşik 0,25 ve 77'si işaretleniyor. **60 abonenin kararı ters
  dönüyor** ve 23'ü gerçekten şüpheli.
- Taban çizgisi de bedelle değişiyor: birinci yapıda hiç kimseyi işaretlememek (0,2421), ikincide
  herkesi işaretlemek (0,7579) taban olur. Modelin kazancı buna göre +0,0198 ya da +0,1984.
- Tek eşik alt gruplarda tek sonuç vermiyor: kazanç +0,4138 ile −0,4468 arasında dağılıyor,
  **açıklık 0,8606**, ve **12 alt grubun 4'ünde model kendi tabanının altında** kalıyor.
- Alt gruba özgü eşik seçmek 12 alt grubun yalnız 4'ünde sınama bedelini düşürüyor, altısında
  yükseltiyor; alt grup doğrulama kümesi küçüldükçe seçim payı büyüyor.

## Sonraki Adım

Bu derste taban çizgisi ikinci kez kendi başına bir soruya dönüştü. Bedel yapısı değişince taban
da değişti: birinde hiç kimseyi işaretlememek, öbüründe herkesi işaretlemek. Alt gruplarda ise her
grubun kendi tabanı çıktı ve bir grupta 0,0000, başkasında 0,7882 oldu. Yedi kurs boyunca taban
çizgisi bir **araçtı** — modelin sayısını okunur kılan sabit bir işaret. Burada sabit olmadığı
görüldü. Sonraki ders tabanı doğrudan konu edinir: bir problemde kaç taban vardır, hangisi
seçilir, seçim aynı modeli hangi iki ayrı biçimde okutur, ve M27'nin yedi kursunda seçilmiş
tabanlar tek bir tabloda toplandığında ne görünür.
