---
title: 'Bağlanım Ölçütleri'
source: 'https://academia.sh/tr/kurslar/denetimli-ogrenme/baglanim-olcutleri'
course: 'Denetimli Öğrenme'
language: tr
updated: '2026-08-17T18:10:20+00:00'
license: 'CC BY-SA 4.0'
---

# Bağlanım Ölçütleri

Hedef bir sayı olduğunda ölçütün sayımdan uzaklığa geçmesi ve aynı ailenin iki üyesinin üç ölçütte yer değiştirmesi: kare hataya uydurulmuş doğrusal model ortalama kare hatada 22,3164 ile önde, mutlak hataya uydurulmuş olan ortalama mutlak hatada 3,6178 ile önde. Taban çizgisi eğitim ortalamasıdır (19,7665 m³) ve açıklanan değişim oranı tam olarak bu tabana göre tanımlıdır. Sınama kümesinin 13 satırı kare hatanın yüzde 37,59'unu, mutlak hatanın yüzde 17,71'ini taşır; o 13 satır kırpıldığında sıralama iki ölçütte de tersine döner. Denenen aday sayısı üçtür ve hiçbir ayar değişkeni süpürülmemiştir.

Önceki dört ders ölçütü sınıflandırma için kurdu. Karışıklık matrisi, kesinlik, duyarlılık, eşik
ve kalibrasyon — hepsi tek bir işlemden çıktı: **saymak**. Kaç örnek doğru sınıfa düştü, kaç örnek
yanlış olumluya gitti, bir olasılık aralığında kaç örnek gerçekleşti. Sayılabilir bir şey vardı,
çünkü tahmin ile gerçek ya çakışıyordu ya çakışmıyordu.

Hedef bir sayı olduğunda çakışma diye bir şey yoktur. 24,80 m³ tüketen bir abone için 24,79
denmesi ile 11,20 denmesi arasındaki fark bir sayım farkı değil bir **uzaklık** farkıdır ve bu
uzaklığın nasıl toplanacağı bir karardır. Bu ders o kararı ölçer: aynı ailenin iki üyesi, aynı
ayrılmış kümede, iki ölçütte yer değiştirir.

- **MD36.** Hedef, abonenin üç döneme yayılan okumalarından hesaplanan **ortalama tüketimidir**
  (m³). Küme M27/K01'in kurgu abone tablosudur, tohum 20260218, bölme 756/252/252.
- **MD37.** Taban çizgisi **eğitim kümesinin ortalamasıdır**: her satır için aynı sayı söylenir.
  Sınıflandırmadaki "en sık sınıfı söyle" tabanının bağlanımdaki karşılığı budur ve öğrenmez.
- **MD38.** Öznitelikler kurs boyunca sabittir: beş bölge göstergesi, hane büyüklüğü, memnuniyet,
  okuma sayısı ve sıfır okuma göstergesi. Değişen tek şey modeldir.
- **MD39.** Ortalama mutlak hata (OMH) hataların mutlak değerlerinin ortalaması, ortalama kare
  hata (OKH) karelerinin ortalamasıdır. OKH hedefin biriminin karesindedir; karekökü alındığında
  birime döner.
- **MD40.** Açıklanan değişim oranı (ADO) $1 - \text{OKH}_{\text{model}} / \text{OKH}_{\text{taban}}$
  olarak hesaplanır ve payda **MD37'nin tabanıdır**. Taban değişirse ADO değişir.
- **MD41.** İki doğrusal model de aynı öznitelikleri ve aynı biçimi kullanır; ayrıldıkları tek yer
  **eğitim sırasında hangi hatayı küçülttükleridir**. İkisi de modeldir.
- **MD42.** Bu derste denenen aday sayısı **üçtür** ve hiçbir ayar değişkeni süpürülmemiştir;
  ayar bütçesinin şişirdiği fark `07`'de ölçülür.

## Üç Ölçüt ve Öğrenmeyen Taban

```python
# ORTAK — MODELDIR. M27/K01'in KURGU abone tablosu ayni tohumla yeniden uretilir;
# bu derste hedef sinif degil sayidir: ort_tuketim (m3).
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, 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, v = uretec(TOHUM + 7000 + k["no"]), []
    for d in range(ayrik(r(), [0.05, 0.12, 0.21, 0.62])):
        v.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()
    if not v:
        continue
    ort, oyn = sum(v) / len(v), max(v) - min(v)
    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), "bolge_ad": k["bolge"][0]}
    for b in BOLGE:
        x["b_" + b[0]] = int(k["bolge"][0] == b[0])
    VERI.append(x)


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]


K = karistir(VERI, TOHUM + 90000)
EGT, DOG, SIN = K[:756], K[756:1008], K[1008:]
ALAN = ["b_kuzey", "b_guney", "b_dogu", "b_bati", "b_merkez",
        "hane", "memnuniyet", "donem", "sifir_okuma"]


def omh(t, s):
    return sum(abs(t[i] - x["ort_tuketim"]) for i, x in enumerate(s)) / len(s)


def okh(t, s):
    return sum((t[i] - x["ort_tuketim"]) ** 2 for i, x in enumerate(s)) / len(s)


TABAN = sum(x["ort_tuketim"] for x in EGT) / len(EGT)
TABAN_OKH = okh([TABAN] * len(SIN), SIN)


def ado(t, s):
    return 1 - okh(t, s) / TABAN_OKH


print(f"egitim {len(EGT)}, dogrulama {len(DOG)}, sinama {len(SIN)}")
print(f"egitim ortalamasi {TABAN:.4f} m3, sinama ortalamasi "
      f"{sum(x['ort_tuketim'] for x in SIN) / len(SIN):.4f} m3")
print(f"taban cizgisi: OMH {omh([TABAN] * len(SIN), SIN):.4f}  "
      f"OKH {TABAN_OKH:.4f}  ADO {ado([TABAN] * len(SIN), SIN):.4f}")
```

```
egitim 756, dogrulama 252, sinama 252
egitim ortalamasi 19.7665 m3, sinama ortalamasi 19.9234 m3
taban cizgisi: OMH 5.0806  OKH 42.6718  ADO 0.0000
```

Taban çizgisi 19,7665 m³ söylüyor ve ortalama 5,0806 m³ şaşıyor. Aynı hatanın kare olarak
toplanmışı 42,6718'dir; karekökü 6,53 m³. İki sayı arasındaki bu boşluk ölçütün kendisinden gelir:
kare toplamı, büyük hataları küçük hatalardan daha ağır sayar, bu yüzden hata dağılımı çarpıkken
kareli ölçüt mutlak ölçütten büyük bir sayı verir. Tabanın ADO değeri tanım gereği tam sıfırdır —
taban, kendisine göre hiçbir değişim açıklamaz.

Tabanın **eğitim** ortalaması olması bir ayrıntı değil bir zorunluluktur. Sınama kümesinin kendi
ortalaması bir tahmin değil, ölçülecek satırlardan okunmuş bir sayıdır; onu taban yapmak sınama
kümesine bakmış bir yordamı taban saymak olur. Öğrenmeyen bir yordamın da yalnız eğitim kümesini
görmesi gerekir.

## Aynı Ailenin İki Üyesi

Model bir doğrusal modeldir: her öznitelik bir katsayıyla çarpılır, toplanır. İki üye arasındaki
tek fark eğitim sırasında hangi hatayı küçülttükleridir. Birincisi kare hatayı küçültür ve
katsayıları en küçük karelerle çözer. İkincisi mutlak hatayı küçültür; bunu, her turda hatası
büyük satırların ağırlığını düşürerek ve aynı çözümü yeniden kurarak yapar.

```python
def coz(A, b):
    n = len(A)
    M = [list(A[i]) + [b[i]] for i in range(n)]
    for i in range(n):
        p = max(range(i, n), key=lambda r: abs(M[r][i]))
        M[i], M[p] = M[p], M[i]
        for r in range(n):
            if r != i:
                f = M[r][i] / M[i][i]
                for c in range(i, n + 1):
                    M[r][c] -= f * M[i][c]
    return [M[i][n] / M[i][i] for i in range(n)]


def agirlikli_ekk(s, agirlik, ceza=1e-6):
    d = len(ALAN) + 1
    A = [[0.0] * d for _ in range(d)]
    b = [0.0] * d
    for x, g in zip(s, agirlik):
        v = [1.0] + [float(x[a]) for a in ALAN]
        for i in range(d):
            b[i] += g * v[i] * x["ort_tuketim"]
            for j in range(d):
                A[i][j] += g * v[i] * v[j]
    for i in range(1, d):
        A[i][i] += ceza
    return coz(A, b)


def kestir(w, x):
    return w[0] + sum(w[i + 1] * x[a] for i, a in enumerate(ALAN))


def mutlak_uydur(s, tur=40, taban_agirlik=0.05):
    w = agirlikli_ekk(s, [1.0] * len(s))
    for _ in range(tur):
        g = [1.0 / max(abs(kestir(w, x) - x["ort_tuketim"]), taban_agirlik) for x in s]
        w = agirlikli_ekk(s, g)
    return w


ORT = {}
for x in EGT:
    ORT.setdefault(x["bolge_ad"], []).append(x["ort_tuketim"])
ORT = {k: sum(v) / len(v) for k, v in ORT.items()}

W_KARE, W_MUTLAK = agirlikli_ekk(EGT, [1.0] * len(EGT)), mutlak_uydur(EGT)
ADAY = [("taban cizgisi", [TABAN] * len(SIN)),
        ("bolge ortalamasi", [ORT[x["bolge_ad"]] for x in SIN]),
        ("kare hataya uydurulmus", [kestir(W_KARE, x) for x in SIN]),
        ("mutlak hataya uydurulmus", [kestir(W_MUTLAK, x) for x in SIN])]

print(f"{'model':<26} {'OMH':>8} {'OKH':>9} {'ADO':>8}")
for ad, t in ADAY:
    print(f"{ad:<26} {omh(t, SIN):>8.4f} {okh(t, SIN):>9.4f} {ado(t, SIN):>8.4f}")
for olcut, fn, yon in (("OMH", omh, 1), ("OKH", okh, 1), ("ADO", ado, -1)):
    s = sorted(ADAY[1:], key=lambda p: yon * fn(p[1], SIN))
    print(f"{olcut} siralamasi: "
          + ", ".join(f"{i + 1}) {a}" for i, (a, _) in enumerate(s)))
```

```
model                           OMH       OKH      ADO
taban cizgisi                5.0806   42.6718   0.0000
bolge ortalamasi             4.0374   28.7760   0.3256
kare hataya uydurulmus       3.6504   22.3164   0.4770
mutlak hataya uydurulmus     3.6178   22.3987   0.4751
OMH siralamasi: 1) mutlak hataya uydurulmus, 2) kare hataya uydurulmus, 3) bolge ortalamasi
OKH siralamasi: 1) kare hataya uydurulmus, 2) mutlak hataya uydurulmus, 3) bolge ortalamasi
ADO siralamasi: 1) kare hataya uydurulmus, 2) mutlak hataya uydurulmus, 3) bolge ortalamasi
```

Son üç satır dersin yanıtıdır. Ortalama mutlak hata mutlak hataya uydurulmuş modeli birinci
sırada okuyor: 3,6178'e karşı 3,6504, arada 0,0326 m³. Ortalama kare hata **başka bir modeli**
birinci sırada okuyor: 22,3164'e karşı 22,3987, arada 0,0823. **Üç aday, iki ölçüt, iki ayrı
birinci.** Hiçbir hesap yanlış değildir; iki ölçüt aynı hata listesini iki ayrı biçimde topluyor
ve iki ayrı sıralama üretiyor.

Bölge ortalaması her iki ölçütte de üçüncüdür ve tabanı ikisinde de açık farkla geçiyor. Ailenin
kattığı farkın büyük bölümü orada: taban 42,6718'den bölge ortalaması 28,7760'a düşüyor, doğrusal
model 22,3164'e indiriyor. Bölge tek başına açıklanan değişimin 0,3256'sını, kalan sekiz öznitelik
0,1514'ünü veriyor.

İki doğrusal modelin OKH farkı 0,0823'tür. Karekökleri alındığında bu 4,7240 m³ ile 4,7327 m³
demektir; iki modelin tipik şaşması 0,0087 m³ ayrılıyor. Ölçütün ham değeri hedefin
biriminin karesinde olduğu için 0,0823 gözle büyük görünür, oysa birime döndürüldüğünde ortalama
mutlak hatadaki 0,0326'lık farkla aynı büyüklük sınıfındadır. Kareli bir ölçütü yorumlamadan önce
karekökünü almak, farkın gerçek ölçeğini görmenin en ucuz yoludur.

## Hangi Ölçüt Hangi Hatayı Ağırlıklandırıyor

Yer değiştirmenin kaynağı, iki ölçütün büyük hatalara verdiği ağırlıktır. Bunu ölçmenin yolu,
hataları büyükten küçüğe sıralayıp toplamın hangi payının hangi satırlardan geldiğini saymaktır.

```python
HATA = {ad: sorted((abs(t[i] - x["ort_tuketim"]) for i, x in enumerate(SIN)),
                   reverse=True) for ad, t in ADAY[2:]}
print(f"{'model':<26} {'top13 OMH':>10} {'top13 OKH':>10} "
      f"{'yari OMH':>9} {'yari OKH':>9}")
for ad, h in HATA.items():
    def yarisi(fn):
        toplam, birikim, sayac = sum(fn(q) for q in h), 0.0, 0
        for q in h:
            birikim, sayac = birikim + fn(q), sayac + 1
            if 2 * birikim >= toplam:
                return sayac
    print(f"{ad:<26} {sum(h[:13]) / sum(h):>10.4f} "
          f"{sum(q * q for q in h[:13]) / sum(q * q for q in h):>10.4f} "
          f"{yarisi(lambda q: q):>9} {yarisi(lambda q: q * q):>9}")

buyuk = sorted(range(len(SIN)),
               key=lambda i: -abs(ADAY[2][1][i] - SIN[i]["ort_tuketim"]))[:13]
kalan = [i for i in range(len(SIN)) if i not in set(buyuk)]
alt = [SIN[i] for i in kalan]
print(f"\n13 satir kirpildiktan sonra ({len(alt)} satir)")
for ad, t in ADAY[2:]:
    kt = [t[i] for i in kalan]
    print(f"{ad:<26} OMH {omh(kt, alt):.4f}  OKH {okh(kt, alt):.4f}")
print(f"kirpilan 13 satirin gercek degerleri: "
      f"{[SIN[i]['ort_tuketim'] for i in buyuk[:4]]}")
```

```
model                       top13 OMH  top13 OKH  yari OMH  yari OKH
kare hataya uydurulmus         0.1771     0.3759        58        22
mutlak hataya uydurulmus       0.1838     0.3962        57        21

13 satir kirpildiktan sonra (239 satir)
kare hataya uydurulmus     OMH 3.1674  OKH 14.6846
mutlak hataya uydurulmus   OMH 3.1186  OKH 14.3617
kirpilan 13 satirin gercek degerleri: [43.48, 39.49, 36.53, 32.18]
```

Sınama kümesinin 252 satırından **13'ü**, yani yüzde beşi, kare hatanın yüzde 37,59'unu taşıyor;
aynı 13 satır mutlak hatanın yalnız yüzde 17,71'ini taşıyor. Aynı ayrım toplamın yarısında da
görünür: mutlak hatanın yarısı 58 satıra dağılmışken kare hatanın yarısı **22 satırda** toplanıyor.
Kare ölçütü 252 satırlık bir kümede etkin olarak yirmi küsur satırdan okunur.

Bu 13 satır kırpıldığında sıralama iki ölçütte de tersine döner: mutlak hataya uydurulmuş model
hem OMH'de (3,1186'ya karşı 3,1674) hem OKH'de (14,3617'ye karşı 14,6846) öne geçiyor. Kare
hataya uydurulmuş modelin bütün OKH üstünlüğü, kırpılan o 13 satırdadır. Kırpılan satırların
gerçek değerleri 43,48, 39,49, 36,53, 32,18 m³ — kümenin en yüksek tüketimleri. Kare hatayı
küçülten model bu uçları kovalamak için kalan 239 satırda biraz daha çok şaşmayı göze alıyor;
mutlak hatayı küçülten model tersini yapıyor.

Buradan çıkan karar ölçüt seçiminin bir **bedel** kararı olduğudur. Bir kaçak şüphesi kümesinde
tek bir abonenin 18 m³ şaşması ile on abonenin 1,8 m³ şaşması aynı saha maliyetini üretmiyorsa,
iki durumu aynı sayıya toplayan bir ölçüt yanlış modeli seçtirir.

## Açıklanan Değişim Oranı Üçüncü Bir Sıralama Vermez

ADO sütunu OKH sütunuyla **birebir aynı** sıralamayı veriyor ve bu bir rastlantı değildir. Tanım
$1 - \text{OKH}_{\text{model}} / \text{OKH}_{\text{taban}}$; payda bütün modeller için aynı sabittir
(42,6718). Sabit bir sayıya bölmek sıralamayı değiştiremez. ADO üçüncü bir ölçüt değil, **kare
hatanın tabana göre okunmuş biçimidir**: 1 − 22,3164 / 42,6718 = 0,4770.

Kattığı şey sıralama değil, **birim**. OKH 22,3164 tek başına büyük mü küçük mü söylemez; ADO
0,4770 aynı sayıyı "tabanın hatasının yarısına yakınını sildi" diye okur. Bu yüzden ADO yazılırken
**hangi tabana göre** hesaplandığı da yazılmalıdır. Burada taban eğitim kümesinin ortalamasıdır.
Payda sınama kümesinin kendi ortalamasından hesaplansaydı 42,6471 olurdu ve ADO 0,4770 yerine
0,4767 çıkardı; fark küçüktür, çünkü iki ortalama birbirine yakındır (19,7665'e karşı 19,9234).
Eğitim ve sınama ortalamaları uzak düştüğünde bu fark küçük kalmaz ve iki ADO değeri
karşılaştırılamaz hale gelir.

Denenen aday sayısı bu derste **üçtür**: bölge ortalaması, kare hataya uydurulmuş doğrusal model,
mutlak hataya uydurulmuş doğrusal model. Hiçbirinde bir ayar değişkeni süpürülmedi, dolayısıyla
tablodaki hiçbir sayıda arama şişmesi yoktur. Aynı tablonun bütçe altında nasıl değiştiği `07`'nin
konusudur.

## Özet

- Hedef bir sayı olduğunda ölçüt sayımdan uzaklığa geçer ve uzaklığın nasıl toplanacağı bir
  karardır; taban çizgisi eğitim ortalamasıdır (19,7665 m³; OMH 5,0806, OKH 42,6718).
- Aynı ailenin iki üyesi iki ölçütte yer değiştirir: mutlak hataya uydurulmuş model OMH'de
  3,6178 ile, kare hataya uydurulmuş model OKH'de 22,3164 ile birincidir.
- Sınama kümesinin 13 satırı kare hatanın yüzde 37,59'unu, mutlak hatanın yüzde 17,71'ini taşır;
  kare hatanın yarısı 22, mutlak hatanın yarısı 58 satırdan gelir.
- O 13 satır kırpıldığında sıralama iki ölçütte de tersine döner (3,1186'ya karşı 3,1674 ve
  14,3617'ye karşı 14,6846); kare ölçütünün üstünlüğünün tamamı o satırlardadır.
- Açıklanan değişim oranı üçüncü bir sıralama üretmez; paydası bütün modeller için sabit olduğundan
  ortalama kare hatanın tabana göre okunmuş biçimidir ve tabansız yazılamaz.

## Sonraki Adım

Bu dersin bütün sayıları tek bir bölmeden okundu: 756 satır eğitim, 252 satır sınama. İki doğrusal
model arasındaki fark OMH'de 0,0326, OKH'de 0,0823 çıktı. Bunlar küçük sayılardır ve şu ana kadar
yanlarında hiçbir dalgalanma ölçüsü yok — başka bir bölme aynı sıralamayı verir miydi, bilinmiyor.
Sonraki ders bölmenin kendisini bir ayar olarak ele alır: elde kalan veri kaç kata bölünürse
kestirim ne kadar oynar, kat sayısı büyüdükçe kaç eğitim yapılır ve her katta tek satır bırakan
uçtaki seçim niçin her zaman daha iyi değildir.
