---
title: 'Çeşitlilik ve Yankı Odası'
source: 'https://academia.sh/tr/kurslar/pekistirmeli-ve-oneri/cesitlilik-ve-yanki-odasi'
course: 'Pekiştirmeli Öğrenme ve Öneri Sistemleri'
language: tr
updated: '2026-08-17T18:10:16+00:00'
license: 'CC BY-SA 4.0'
---

# Çeşitlilik ve Yankı Odası

Sistem kendi önerileriyle beslendiğinde kapsamanın daralması ve popülerlik yanlılığının büyümesi: kırk sekiz dönem boyunca dar düzen sekizinci dönemden sonra her dönem 24 kalemin 8'ini hiç göstermiyor, altı kalem son yirmi dört dönemin hiçbirinde görünmüyor ve ilk beş kalemin gösterim payı 0,4711'den 0,5461'e çıkıyor. Beşinci yuvayı çeşitliliğe ayıran düzen ilk on bir dönemde abone başına 1,0000 etkileşim kaybediyor, on ikinci dönemde koşulları değişen kalemi bulup öne geçiyor, kümülatif olarak yirmi yedinci dönemde eşitleniyor ve kırk sekizinci dönemde 1,2250 önde bitiriyor.

Önceki derste her düzen kayda bir kez baktı. Gerçek bir sistemde karar tekrarlanır: gösterilen
kalem etkileşim üretir, etkileşim kaydı büyütür, büyüyen kayıt bir sonraki gösterimi belirler.
Bu ders o döngüyü kırk sekiz dönem çalıştırır ve kapsamanın nereye gittiğini sayar.

- **ON57. Kurgu birinci derste kurulan bloğun aynısıdır**; döngünün başlangıç kaydı o kurgunun
  3.002 gösterimi ile 577 etkileşimidir.
- **ON58. Sistem her dönem her aboneye beş kalem gösterir** ve puanı, abonenin öbeğinde o kalemin
  gösterim başına etkileşim oranı olarak kestirir: `(etkileşim + 0,5) / (gösterim + 5)`. Öbek,
  abonenin geçmişindeki baskın alandır ve sistemin gördüğü tek abone özelliğidir.
- **ON59. İki düzen karşılaştırılır.** Dar düzen beş yuvayı da kestirime verir ve **taban
  çizgisidir**, çünkü hiçbir çeşitlilik kuralı içermez. Geniş düzen dördünü kestirime verir,
  beşinciyi o ana dek en az gösterilmiş kaleme ayırır.
- **ON60. On ikinci dönemde bir kalemin karşılığı sekiz katına çıkar** ve 0,95 tavanına dayanır;
  bu ortamın değiştiği andır ve hiçbir düzene haber verilmez.
- **ON61. Üç sayı her dönem yazılır:** abone başına etkileşim (büyük iyi), o dönem hiç
  gösterilmeyen kalem sayısı (küçük iyi), ve gösterimlerin en çok gösterilen beş kalemdeki payı
  (küçük iyi) — sonuncusu **popülerlik yanlılığının** ölçüsüdür. Seçim yanlılığı Uygulamalı
  İstatistik kursundadır.

## Kendi Kaydıyla Beslenen Düzen

```python
# ORTAK -- KURGUDUR. Abone x hizmet kalemi etkilesim dizeyi ders icinde kurulur.
# Gosterim, secim ve puan ayri ayri uretilir: bir kalem once GOSTERILIR, sonra
# secilebilir, ancak secilirse puanlanabilir.
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


KALEM = [  # (ad, alan, kanal, ucretli, taahhut, randevu, taban_pay)
    ("otomatik_odeme_talimati", "odeme", "cevrimici", 0, 0, 0, 0.90),
    ("e_fatura_gecisi", "bildirim", "cevrimici", 0, 0, 0, 0.85),
    ("odeme_hatirlatma_sms", "bildirim", "cevrimici", 0, 0, 0, 0.78),
    ("taksitlendirme", "odeme", "sube", 0, 1, 0, 0.62),
    ("uzaktan_okuma_basvurusu", "olcum", "saha", 0, 1, 1, 0.55),
    ("kesinti_uyari_aboneligi", "bildirim", "cevrimici", 0, 0, 0, 0.50),
    ("borc_yapilandirma", "odeme", "sube", 0, 1, 0, 0.44),
    ("adres_guncelleme", "sozlesme", "cevrimici", 0, 0, 0, 0.40),
    ("sayac_degisimi", "olcum", "saha", 1, 0, 1, 0.36),
    ("tuketim_raporu_aboneligi", "bildirim", "cevrimici", 0, 0, 0, 0.32),
    ("fatura_itiraz_kaydi", "odeme", "sube", 0, 0, 0, 0.28),
    ("abonelik_devri", "sozlesme", "sube", 0, 0, 0, 0.25),
    ("kacak_kontrol_randevusu", "olcum", "saha", 0, 0, 1, 0.22),
    ("tesisat_bakim_paketi", "tesisat", "saha", 1, 1, 1, 0.19),
    ("ikinci_sayac_talebi", "olcum", "saha", 1, 0, 1, 0.16),
    ("isyeri_tarifesine_gecis", "sozlesme", "sube", 0, 1, 0, 0.14),
    ("basinc_duzenleyici_montaji", "tesisat", "saha", 1, 0, 1, 0.12),
    ("bahce_sulama_tarifesi", "sozlesme", "sube", 0, 1, 0, 0.10),
    ("sayac_yeri_degisikligi", "olcum", "saha", 1, 0, 1, 0.09),
    ("ortak_alan_paylasim_kaydi", "sozlesme", "sube", 0, 1, 0, 0.08),
    ("tesisat_uygunluk_raporu", "tesisat", "saha", 1, 0, 1, 0.07),
    ("gecikme_faizi_muafiyeti", "odeme", "sube", 0, 0, 0, 0.06),
    ("mobil_erisim_izni", "bildirim", "cevrimici", 0, 0, 0, 0.05),
    ("ek_hat_tesisati", "tesisat", "saha", 1, 1, 1, 0.04),
]
KESIM = {  # kesimin alanlara egilimi; yalniz uretecin icinde kullanilir
    "tasarruf": {"odeme": 0.5, "olcum": 1.7, "sozlesme": 0.6, "bildirim": 1.5, "tesisat": 0.6},
    "odeme":    {"odeme": 1.9, "olcum": 0.5, "sozlesme": 0.6, "bildirim": 1.1, "tesisat": 0.3},
    "isyeri":   {"odeme": 0.7, "olcum": 0.9, "sozlesme": 1.6, "bildirim": 0.7, "tesisat": 1.9},
    "yeni":     {"odeme": 0.8, "olcum": 0.7, "sozlesme": 1.8, "bildirim": 1.3, "tesisat": 0.7},
}
KESIM_AD = list(KESIM)
rk = uretec(TOHUM + 101)
KALITE = [0.25 + 0.70 * rk() for _ in KALEM]   # kalemin kendi doyuruculugu

N_ABONE, N_KALEM = 360, len(KALEM)
ABONE, GOSTERIM, ETKILESIM, PUAN, EGILIM = [], {}, {}, {}, {}
for i in range(N_ABONE):
    r = uretec(TOHUM + 7919 * i)
    a, kesim = 20001 + i, KESIM_AD[int(r() * 4)]
    etkinlik = 0.35 + 1.15 * r() ** 1.6
    ABONE.append(a)
    for j, (ad, alan, kanal, uc, ta, ra, pay) in enumerate(KALEM):
        egilim = min(0.95, KESIM[kesim][alan] * pay * etkinlik * 0.55)
        EGILIM[(a, j)] = egilim
        if r() < min(0.95, pay ** 0.55 * 0.72):        # sunulmus mu
            GOSTERIM[(a, j)] = 1
            if r() < egilim:                            # secilmis mi
                ETKILESIM[(a, j)] = r()                 # deger: sira damgasi
                if r() < 0.32:                          # puan birakmis mi
                    ham = (0.16 + 0.50 * KESIM[kesim][alan] / 1.9
                           + 0.42 * KALITE[j] + 0.26 * (r() - 0.5))
                    PUAN[(a, j)] = max(1, min(5, int(round(ham * 5))))
        else:
            r(), r(), r()
AL = [KALEM[j][1] for j in range(N_KALEM)]
SAY = {a: {} for a in ABONE}
for (a, j) in ETKILESIM:                            # abone obegi: gecmisteki baskin alan
    SAY[a][AL[j]] = SAY[a].get(AL[j], 0) + 1
OBEK = {a: (max(sorted(c), key=lambda x: c[x]) if c else "yok") for a, c in SAY.items()}
DONEM, K, DEGISIM, ARTAN = 48, 5, 12, 9             # 12. donemde 9. kalemin karsiligi degisir


def dongu(genis):
    """Sistem kendi kaydiyla besleniyor: gosterdigini olcuyor, olctugunu gosteriyor."""
    gos, etk = {}, {}
    for (a, j) in GOSTERIM:
        gos[(OBEK[a], j)] = gos.get((OBEK[a], j), 0) + 1
    for (a, j) in ETKILESIM:
        etk[(OBEK[a], j)] = etk.get((OBEK[a], j), 0) + 1
    toplam, satir = [0] * N_KALEM, []
    for d in range(1, DONEM + 1):
        don_gos, don_etk = [0] * N_KALEM, 0
        for a in ABONE:
            o = OBEK[a]
            s = sorted(range(N_KALEM),
                       key=lambda j: (-(etk.get((o, j), 0) + 0.5)
                                      / (gos.get((o, j), 0) + 5.0), j))
            ilk = s[:K] if not genis else s[:K - 1] + [        # besinci yuva cesitlilige
                min((j for j in range(N_KALEM) if j not in s[:K - 1]),
                    key=lambda j: (toplam[j], (j + a + d) % N_KALEM))]
            r = uretec(TOHUM + 660000 + a * 53 + d * 1301)
            for j in ilk:
                don_gos[j] += 1
                toplam[j] += 1
                gos[(o, j)] = gos.get((o, j), 0) + 1
                e = EGILIM[(a, j)]
                if j == ARTAN and d >= DEGISIM:
                    e = min(0.95, e * 8.0)
                if r() < e:
                    don_etk += 1
                    etk[(o, j)] = etk.get((o, j), 0) + 1
        u5 = sorted(range(N_KALEM), key=lambda j: -don_gos[j])[:5]
        satir.append((don_etk / len(ABONE),
                      [j for j in range(N_KALEM) if don_gos[j] == 0],
                      sum(don_gos[j] for j in u5) / sum(don_gos),
                      don_gos[ARTAN]))
    return satir


DAR = dongu(False)
print(f"dar duzen: her donem ilk {K}, {DONEM} donem, {len(ABONE)} abone")
print(f"{DEGISIM}. donemde {KALEM[ARTAN][0]} kaleminin karsiligi sekiz katina cikar")
print("donem  etkilesim/abone  o donem hic gosterilmeyen  ilk bes gosterim payi")
for d in (1, 8, 24, 48):
    e, yok, p, n = DAR[d - 1]
    print(f"  {d:>2}       {e:.4f}                {len(yok):>2}/{N_KALEM}                {p:.4f}")
KILIT = set(range(N_KALEM))
for x in DAR[DONEM // 2:]:
    KILIT &= set(x[1])
print(f"son {DONEM - DONEM // 2} donemin HEPSINDE gosterilmeyen kalem: {len(KILIT)}/{N_KALEM}")
```

```
dar duzen: her donem ilk 5, 48 donem, 360 abone
12. donemde tuketim_raporu_aboneligi kaleminin karsiligi sekiz katina cikar
donem  etkilesim/abone  o donem hic gosterilmeyen  ilk bes gosterim payi
   1       1.2250                 0/24                0.4711
   8       1.3917                 8/24                0.5461
  24       1.4583                 8/24                0.5461
  48       1.3194                 8/24                0.5461
son 24 donemin HEPSINDE gosterilmeyen kalem: 6/24
```

Birinci dönemde 24 kalemin hepsi gösteriliyor. Sekizinci dönemde sekiz kalem düşüyor; sayı orada
**8/24**'te donuyor ve kırk sekizinci döneme kadar oynamıyor. Altı kalem son yirmi dört dönemin
**hiçbirinde** gösterilmiyor. Popülerlik yanlılığı aynı hareketin öbür yüzü: ilk beş kalemin
gösterim payı 0,4711'den **0,5461**'e çıkıp orada duruyor.

Döngü kendini kapatıyor. Gösterilmeyen kalem hakkında yeni bilgi doğmuyor, kestirimi düşük
kalıyor, düşük kestirim onu bir sonraki dönem de dışarıda bırakıyor: kalem kötü olduğu için değil
**ölçülmediği için** dışarıda kalıyor. On ikinci dönemde ortam değişiyor ama dar düzen göremiyor,
çünkü sisteme bunu söyleyecek tek yol o kalemin gösterilmesidir.

## Beşinci Yuvayı Çeşitliliğe Vermek

```python
GENIS = dongu(True)
GENISKILIT = set(range(N_KALEM))
for x in GENIS[DONEM // 2:]:
    GENISKILIT &= set(x[1])
print(f"genis duzen: ilk {K - 1} model, besinci yuva en az gosterilen kaleme")
print("donem  etkilesim/abone  o donem hic gosterilmeyen  ilk bes gosterim payi  degisen kalem")
for d in (1, 8, 24, 48):
    e, yok, p, n = GENIS[d - 1]
    print(f"  {d:>2}       {e:.4f}                {len(yok):>2}/{N_KALEM}                "
          f"{p:.4f}        {n:>3}")
bedel = sum(GENIS[d][0] - DAR[d][0] for d in range(DEGISIM - 1))
kazanc = sum(GENIS[d][0] - DAR[d][0] for d in range(DEGISIM - 1, DONEM))
esit = [d + 1 for d in range(DONEM)
        if sum(x[0] for x in GENIS[:d + 1]) > sum(x[0] for x in DAR[:d + 1])]
print(f"kisa donem bedeli (1-{DEGISIM - 1}. donem toplami): abone basina {bedel:+.4f}")
print(f"uzun donem kazanci ({DEGISIM}-{DONEM}. donem toplami): abone basina {kazanc:+.4f}")
print(f"kumulatif esitlenme donemi: {esit[0] if esit else 'yok'}; {DONEM}. donemde "
      f"kumulatif fark {sum(x[0] for x in GENIS) - sum(x[0] for x in DAR):+.4f}")
print(f"karsiligi degisen kalem {DONEM}. donemde: dar duzen {DAR[-1][3]} gosterim, "
      f"genis duzen {GENIS[-1][3]}")
print(f"toplanan veri -- dar: {len(KILIT)} kalem hic gosterilmiyor, ilk bes gosterim payi "
      f"{DAR[-1][2]:.4f}; genis: {len(GENISKILIT)} kalem, {GENIS[-1][2]:.4f}")
```

```
genis duzen: ilk 4 model, besinci yuva en az gosterilen kaleme
donem  etkilesim/abone  o donem hic gosterilmeyen  ilk bes gosterim payi  degisen kalem
   1       1.1833                 0/24                0.4611         37
   8       1.2722                 0/24                0.5011         81
  24       1.4806                 0/24                0.4989         97
  48       1.3889                 0/24                0.4989         97
kisa donem bedeli (1-11. donem toplami): abone basina -1.0000
uzun donem kazanci (12-48. donem toplami): abone basina +2.2250
kumulatif esitlenme donemi: 27; 48. donemde kumulatif fark +1.2250
karsiligi degisen kalem 48. donemde: dar duzen 17 gosterim, genis duzen 97
toplanan veri -- dar: 6 kalem hic gosterilmiyor, ilk bes gosterim payi 0.5461; genis: 0 kalem, 0.4989
```

Bedel ilk on bir dönemde ödeniyor: geniş düzen abone başına **1,0000** etkileşim geride
bitiriyor, çünkü beş yuvadan biri kestirimin en iyisine değil en az bilinene gidiyor. Buna
karşılık kapsama hiç daralmıyor ve ilk beş kalemin payı **0,4989**'da kalıyor.

On ikinci dönemde hesap dönüyor. Geniş düzen, karşılığı değişen kalemi zaten dönüşümlü yuvada
gösterdiği için değişimi **aynı dönem** fark ediyor. Kırk sekizinci dönemde o kalem geniş düzende
**97**, dar düzende **17** gösterim alıyor. On iki ile kırk sekiz arasındaki toplam kazanç abone
başına **+2,2250**; ilk on bir dönemin **−1,0000**'lık bedeliyle birlikte kümülatif fark
**yirmi yedinci dönemde** sıfırlanıyor ve kırk sekizincide **+1,2250** oluyor. Çeşitlilik bir
zevk tercihi değil **ölçüm bütçesidir**: hiç ölçmeyen sistem ortam sabit kaldıkça kazanır, ortam
her değiştiğinde kaybeder.

"Yankı odası" bu tabloyu anlatan bir **mecazdır** ve kendi sayısı yoktur; karşılığı gösterilmeyen
kalem sayısı ile ilk beşin gösterim payıdır. Yanıltıcı olduğu yer şurası: kurguda hiçbir abonenin
eğilimi değişmiyor. Daralan abonenin ilgisi değil **sistemin ölçtüğü alandır**, ve ölçülmeyen bir
kalemin kötü sayılması bir inanç değil bir kayıt boşluğudur.

## Özet

- Dar düzen sekizinci dönemden sonra her dönem 24 kalemin 8'ini göstermiyor, 6 kalem son yirmi
  dört dönemin hiçbirinde görünmüyor ve ilk beşin gösterim payı 0,4711'den 0,5461'e çıkıyor.
- Çeşitliliğin kısa dönem bedeli ilk on bir dönemde abone başına −1,0000, uzun dönem kazancı on
  iki ile kırk sekiz arasında +2,2250'dir; kümülatif fark yirmi yedinci dönemde eşitlenir.
- Yankı odası bir mecazdır; bu kurguda daralan abonenin ilgisi değil, sistemin ölçtüğü alandır.

## Kurs Kapanışı

On dört dersin hesabı tek tabloda ve her sayı kendi dersinden okundu. Satırlar ortak birim
taşımaz; son sütun ölçütü ve yönünü yazar. **Fark tek işaret düzeniyle verilir: yöntemin sayısı
eksi taban çizgisi**, ve üçüncü sütunda parantez içindedir. Dördüncü sütun kursun kendi sayısıdır:
görülmeyen durum, denenmeyen eylem, gösterilmeyen kalem.

| Ders | Taban çizgisi | Yöntemin sayısı | Toplanan veri | Ölçüt |
|---|---|---|---|---|
| Pekiştirmeli 01 | rastgele eylem 10,432 | el kuralı 20,621 (+10,189) | 1.458 çiftin 1.355'i görülmedi | getiri, büyük iyi |
| Pekiştirmeli 02 | rastgele eylem 10,432 | geçmiş alanlı kural 23,148 (+12,716) | durum uzayı 243'ten 1.215'e; sayım yok | getiri, büyük iyi |
| Pekiştirmeli 03 | keşifsiz ajan −16,492 | keşif oranı 0,20 ile 25,659 (+42,151) | 1.458 çiftin 880'i denenmedi | getiri, büyük iyi |
| Pekiştirmeli 04 | kural politikası 20,621 | keşifli çizelge 24,419 (+3,798) | 1.458 hücrenin 1.355'i güncellenmedi | getiri, büyük iyi |
| Pekiştirmeli 05 | rastgele eylem 10,432 | tekrar tamponu 26,233 / 25,302 (+15,801) | 1.458 hücrenin 678'i güncellenmedi | getiri, büyük iyi |
| Pekiştirmeli 06 | ağırlıklar sıfır 10,177 | taban çıkarmalı 22,866 / 22,190 (+12,689) | uzlaşma 0,290; sayım yok | getiri, büyük iyi |
| Pekiştirmeli 07 | ham getiri 14,207 / 17,218 | üstünlük 23,401 / 23,755 (+9,194) | 5 abonenin 0'ı ziyaretsiz kaldı | getiri, büyük iyi |
| Öneri 01 | rastgele sıra 0,2036 | en çok seçilen kalem 0,6527 (+0,4491) | 24 kalemin 15'i hiç önerilmedi | ilk beş isabeti, büyük iyi |
| Öneri 02 | popülerlik 0,6527 | içerik temelli 0,4431 (−0,2096) | 24 kalemin 0'ı gösterilmedi | ilk beş isabeti, büyük iyi |
| Öneri 03 | popülerlik 0,6527 | kullanıcı temelli 0,6946 (+0,0419) | 24 kalemin 8'i gösterilmedi | ilk beş isabeti, büyük iyi |
| Öneri 04 | popülerlik 0,6527 | atlayan kurulum 0,7006 (+0,0479) | 24 kalemin 15'i gösterilmedi | ilk beş isabeti, büyük iyi |
| Öneri 05 | popülerlik geri dönüşü 0,5752 | üç soruluk giriş 0,5487 (−0,0265) | 24 kalemin 19'u gösterilmedi | soğukta ilk beş isabeti, büyük iyi |
| Öneri 06 | çevrimiçi taban 1,4581 | hafif düzen 1,4788 (+0,0207) | 24 kalemin 12'si gösterilmedi | abone başına etkileşim, büyük iyi |
| Öneri 07 | dar düzen, 48 dönem | geniş düzen (+1,2250) | 24 kalemin 8'i gösterilmedi | kümülatif etkileşim, büyük iyi |

**Kursun kuralı budur: kararı veren bir sistemin ölçüsü, o kararın kendi verisini değiştirdiği
hesaba katılmadan okunamaz; topladığı veriyi yazmayan sistem ölçülmemiş sayılır.**

Dördüncü sütun tek bir sayıya indirgenir: sayım basan on iki derste görülmeyen çift,
güncellenmeyen hücre, ziyaretsiz abone ve gösterilmeyen kalem toplamı **4.345 birimdir**.
Birimler aynı değildir ve toplam bir ortalama değil bir sayımdır: bu kursta ölçülen her başarım
sayısının arkasında, yöntemin hakkında hiçbir şey öğrenmediği dört binden fazla birim durur.
Pekiştirmeli 02 ile 06 sayım basmaz, toplama girmez.

Kursun ikinci iddiası aynı tablodan okunur: **çevrimdışı ölçülen sayı çevrimiçi davranışı
söylemez.** Dört derste iki sayı ayrıldı. Öneri 06'da çevrimdışı 0,6886 ile birinci olan düzen,
kendi gösterim kararlarını verdiğinde 1,4563 ile sonuncu ve tabanın altında kaldı. Öneri 07'de
kayda göre iyi olan dar düzen kırk sekiz dönem sonunda 1,2250 geride bitirdi. Öneri 05'te kayıttan
okunan isabet, soru sorulduğunda 0,5752'den 0,5487'ye düştü. Pekiştirmeli 03'te ayrım ters yönde
göründü: keşif oranı 1,00 olan ajanın **davranışı** kötüydü ama **topladığı veri** iyiydi ve
dondurulan çizelge 23,000 verdi. Tek kaynak şudur: sayının okunduğu kayıt, kararı başka bir
düzenin verdiği kayıttır.

Elli iki derste her sayının yanına tabanı yazıldı ve son on dördünde sistemin kendi verisini
değiştirdiği sayıldı. Sorulmayan tek şey **kimin için** ölçüldüğüdür. Tablodaki her sayı bütün
abonelerin ortalamasıdır: aynı sayı iki alt grupta iki ayrı şey söylüyorsa hangisi rapor edilir,
sistemin bir kalemi kime gösterip kime göstermediği **neye dayanıyor** ve okunabilir mi, ve ölçüsü
iyi çıkan bir sistemin ölçüye hiç girmeyen bir gruba verdiği zarar hangi sayıyla yazılır. Sonraki
kurs, Model Değerlendirme, Yorumlanabilirlik ve Etik, bu üç soruyla açılır.
