---
title: 'Görsel Yanıltma'
source: 'https://academia.sh/tr/kurslar/gorsellestirme-ve-raporlama/gorsel-yaniltma'
course: 'Görselleştirme, Raporlama ve Ölçekli Analiz'
language: tr
updated: '2026-08-17T18:08:48+00:00'
license: 'CC BY-SA 4.0'
---

# Görsel Yanıltma

Doğu ile kuzey arasındaki 1,2208'lik gerçek oran, eksen 18 m³'ten başlatıldığında 3,0769 çubuk oranı veriyor ve uzunluğu değerle orantılı sanan okuyucu kuzeyi 20,210 yerine 8,019 m³ okuyor. Aynı oran bir kareye kodlandığında iki kenar da çarpıldığı için alan oranı 1,4905 çıkıyor ve doğu 30,123 m³ okunuyor. Farklı birimli iki dizi için dokuz savunulabilir eksen çiftinden yedi ayrı kesişme dönemi çıkıyor. Düzensiz aralıklı 12 dönem eşit aralıklarla dizildiğinde -0,2079 m³/dönemlik eğim -0,6635 okunuyor. Dördü de savunulabilir bir varsayılan davranıştan doğuyor.

Önceki ders bir çarpıtmayı hiçbir tercihe bağlamadan ölçtü: bölgelerin alanı ızgarada verilidir ve
esneme düz bir yüzeye basmanın bedelidir. Yine de geri okunan sayı 1,228 m³ kaydı. Bu ders aynı
soruyu genişletir ve dört ayrı çarpıtmayı tek bir **aile** olarak ele alır. Ailenin ortak özelliği
şudur: her üye kanalın kendi tanımından doğar, hiçbiri hesap hatası değildir ve hiçbiri kasıt
gerektirmez.

Eksen kırpmanın çubuk uzunluklarının oranını bozması Elektronik Tablolarla Analiz kursunun temel
grafikler dersinde ölçüldü ve o sayı burada tekrarlanmaz. Orada ölçü **gösterimin meşruluğuydu** —
bu grafik bu ölçekte olur mu. Burada kırpma, ailenin dört üyesinden yalnız biridir ve aynı veriye
sırayla uygulanan dört işlemin ilkidir. Ölçülen şey her üyenin geri okuttuğu sayıdır.

- **GT37. Çarpıtma kanalın tanımından doğar.** Uzunluk kanalı tabana göre okunur, alan kanalı iki
  boyutta birden büyür, konum kanalı eksen aralığına bağlıdır. Hiçbiri hesabı bozmaz, üçü de geri
  okumayı bozar.
- **GT38. Okuyucunun çözücüsü değiştirilemez.** Okuyucu uzunluğu değerle, alanı değerle, komşu
  noktaları eşit dönem aralığıyla orantılı sayar. Gösterim bu varsayımı yanlışlarsa hata
  gösterime değil okuyucuya yazılır.
- **GT39. Alan kanalı oranı karesiyle büyütür.** Bir oranı "büyük göstermek" için şeklin iki kenarı
  birden çarpılırsa alan oranı değer oranının karesi olur.
- **GT40. İkili eksende kesişmenin veride karşılığı yoktur.** İki dizi farklı birimdeyse kesişme
  dönemi iki eksen aralığının seçimiyle belirlenir ve seçimler savunulabilir olduğu halde tek bir
  sayı vermez.
- **GT41. Düzensiz aralık eşit dizildiğinde eğim adım sayısıyla ölçülür.** Okuyucu adımı dönem
  sanar; büyütme çarpanı dönem açıklığının adım sayısına bölümüdür.
- **GT42. Diziler kurgudur.** 36 dönemlik tüketim ve okuma sayısı dizileri aynı tohumla türetildi
  ve kurgu olduğu koda yazılıdır.

## Uzunluk: Eksen Kırpma

```python
# yaniltma.py — MODELDIR: K03-K05'in kurgu olcum agi ayni tohumla uretilir.
# 36 donemlik iki dizi de KURGUDUR ve ayni tohumla turetildi: tuketim
# ortalamasi (m3) ve donem basina okuma sayisi (adet).
import math

TOHUM, HAM, M32 = 20260218, 1400, 0xFFFFFFFF
DONEM = ["2026-01", "2026-02", "2026-03"]
BOLGE = [("kuzey", 0.28, 21), ("guney", 0.22, 17), ("dogu", 0.18, 26),
         ("bati", 0.14, 14), ("merkez", 0.18, 23)]


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


_k, _e = [], []
for i in range(HAM):
    r = uretec(TOHUM + i)
    b = BOLGE[ayrik(r(), [x[1] for x in BOLGE])]
    ayrik(r(), [0.06, 0.24, 0.30, 0.24, 0.11, 0.05])
    ayrik(r(), [0.08, 0.14, 0.27, 0.34, 0.17])
    (_e if r() < 0.046 else _k).append(
        {"abone_no": 10001 + i, "bolge": b[0], "taban": b[2]})
GECERLI = {a["abone_no"] for a in _k}

OKUMA = []
for a in _k + _e:
    r = uretec(TOHUM + 7000 + a["abone_no"])
    for d in range(ayrik(r(), [0.05, 0.12, 0.21, 0.62])):
        t = 0.0 if r() < 0.038 else math.floor(
            a["taban"] * math.exp((r() + r() + r() - 1.5) * 0.62)
            * (1 - d * 0.05) * 100 + 0.5) / 100
        if a["abone_no"] not in GECERLI:
            r()
            continue
        OKUMA.append({"abone_no": a["abone_no"], "bolge": a["bolge"],
                      "donem": DONEM[d], "tuketim_m3": t})
        r()

AD = [b[0] for b in BOLGE]
DEGER = {a: sum(o["tuketim_m3"] for o in OKUMA if o["bolge"] == a)
         / sum(1 for o in OKUMA if o["bolge"] == a) for a in AD}
N = 36
_g = uretec(TOHUM + 505)
TUKETIM = [round(DEGER["kuzey"] - 0.140 * t
                 + 2.20 * math.sin(2 * math.pi * t / 12)
                 + (_g() + _g() + _g() - 1.5) * 0.60, 3) for t in range(N)]
_h = uretec(TOHUM + 917)
SAYAC = [round(1066 + 6.4 * t + 40 * math.sin(2 * math.pi * t / 12)
               + (_h() + _h() + _h() - 1.5) * 26) for t in range(N)]

GENIS = 40


def uzunluk(v, taban, tepe):
    """Kodlayici: deger -> uzunluk. Cubuk tam karaktere yuvarlanir."""
    return max(0, round(GENIS * (v - taban) / (tepe - taban)))


def coz_uzunluk(u, taban, tepe):
    """Cozucu: uzunluk -> deger. Okuma cozunurlugu bir karakterdir."""
    return taban + u / GENIS * (tepe - taban)


a, b = DEGER["dogu"], DEGER["kuzey"]
GERCEK = a / b
print(f"dogu {a:.3f} m3, kuzey {b:.3f} m3, gercek oran {GERCEK:.4f}")
for taban in (0.0, 18.0):
    ua, ub = uzunluk(a, taban, a), uzunluk(b, taban, a)
    print(f"eksen {taban:4.0f} m3'ten: dogu  |{'#' * ua}")
    print(f"              kuzey |{'#' * ub}")
    print(f"  cubuk orani {ua / ub:.4f}; uzunlugu degerle orantili sanan "
          f"okuyucu kuzeyi {coz_uzunluk(ub, 0.0, a):.3f} m3 okur")
KIRPIK = uzunluk(a, 18.0, a) / uzunluk(b, 18.0, a)
print(f"kirpma orani {GERCEK:.4f} -> {KIRPIK:.4f}, buyutme carpani "
      f"{KIRPIK / GERCEK:.3f}; kuzeyde geri okuma hatasi "
      f"{coz_uzunluk(uzunluk(b, 18.0, a), 0.0, a) - b:+.3f} m3")
```

```
dogu 24.674 m3, kuzey 20.210 m3, gercek oran 1.2208
eksen    0 m3'ten: dogu  |########################################
              kuzey |#################################
  cubuk orani 1.2121; uzunlugu degerle orantili sanan okuyucu kuzeyi 20.356 m3 okur
eksen   18 m3'ten: dogu  |########################################
              kuzey |#############
  cubuk orani 3.0769; uzunlugu degerle orantili sanan okuyucu kuzeyi 8.019 m3 okur
kirpma orani 1.2208 -> 3.0769, buyutme carpani 2.520; kuzeyde geri okuma hatasi -12.191 m3
```

İki çubuk kümesi aynı iki sayıyı taşıyor. Sıfırdan başlayan eksende oran 1,2121 çıkıyor; gerçek
oran 1,2208'dir ve aradaki fark çubukların tam karaktere yuvarlanmasından, yani okuma
çözünürlüğünden gelir. 18 m³'ten başlayan eksende aynı iki sayının oranı **3,0769** oluyor.

Asıl sayı son satırdadır. Uzunluğu değerle orantılı sayan bir okuyucu kırpılmış gösterimden kuzeyi
**8,019 m³** okur; gerçek değer 20,210'dur ve geri okuma hatası **-12,191 m³**'tür. Ne veri
değişti ne de bir hesap yanlış yapıldı.

Bu kararın nereden geldiği önemlidir. İki bölgenin ortalaması 20,210 ile 24,674 arasında sıkışık ve
sıfırdan başlayan bir eksende iki çubuk neredeyse aynı görünüyor. "Farkı görünür kıl" bir tasarım
gereğidir ve bir önceki kurs bunu meşru bir karar olarak ele almıştı — çizgi grafiğinde okunan şey
eğim olduğu için orada eksen kırpılabilir. Aynı karar uzunluk kanalında uygulandığında okuyucunun
çözücüsünü yanlışlar. Karar aynıdır, kanal farklıdır, sonuç 12 m³'lük bir hatadır.

## Alan: Oranın Karesi

```python
# alan.py — "iki kat buyuk goster" karari sekli iki boyutta birden buyutur;
# okuyucu alani okur ve oran karesiyle geri doner.
KENAR = 12


def alan_kodla(oran):
    """Kodlayici: oran -> alan. Iki kenar da oranla carpilir."""
    k = KENAR * oran
    return k * k


def alan_coz(al):
    """Cozucu: alan -> deger. Okuyucu alani degerle orantili sanar."""
    return b * al / (KENAR * KENAR)


al_a, al_b = alan_kodla(GERCEK), alan_kodla(1.0)
print(f"kuzey karesi {KENAR}x{KENAR} = {al_b:.0f} birim alan")
print(f"dogu karesi {KENAR * GERCEK:.2f}x{KENAR * GERCEK:.2f} = {al_a:.1f} birim alan")
print(f"alan orani {al_a / al_b:.4f} = gercek oranin karesi {GERCEK ** 2:.4f}")
print(f"geri okunan dogu degeri {alan_coz(al_a):.3f} m3, gercek {a:.3f} m3, "
      f"hata {alan_coz(al_a) - a:+.3f} m3")
```

```
kuzey karesi 12x12 = 144 birim alan
dogu karesi 14.65x14.65 = 214.6 birim alan
alan orani 1.4905 = gercek oranin karesi 1.4905
geri okunan dogu degeri 30.123 m3, gercek 24.674 m3, hata +5.449 m3
```

Ailenin ikinci üyesi eksene hiç dokunmaz. Doğunun kuzeyden 1,2208 kat büyük olduğunu göstermek
için doğunun karesi 1,2208 ile ölçeklenir; ölçekleme iki kenara birden uygulanır çünkü kare kare
kalmalıdır. Sonuç, alan oranının **1,4905** olmasıdır ve bu sayı değer oranının karesidir.

Okuyucu alanı görür, kenarı değil. Alanı değerle orantılı sayan bir okuyucu doğuyu **30,123 m³**
okur; gerçek değer 24,674'tür ve geri okuma hatası **+5,449 m³**'tür. Büyütme çarpanı 1,2208, yani
oranın kendisi kadardır — oran ne kadar büyükse çarpıtma da o kadar büyür.

Bu üye eksen kırpmadan iki bakımdan farklıdır. Birincisi, düzeltilemez: kenar oranını değerin
karekökü yapmak alanı düzeltir ama bu kez kenar oranı veriye ait olmaktan çıkar ve kenarı okuyan
biri yanılır. İkincisi, kararın kendisi görünmez; eksen tabanı bir sayıdır ve yazılabilir, "hangi
boyut ölçeklendi" ise gösterimde hiçbir yerde durmaz.

## Konum: İkili Eksen ve Düzensiz Aralık

```python
# ikili.py — iki dizi iki ayri birimde. Her eksen kendi araligina cekildiginde
# kesisme donemi eksen secimiyle belirlenir.
SATIR = 12


def konum(v, alt, ust):
    return max(0, min(SATIR - 1, round((v - alt) / (ust - alt) * (SATIR - 1))))


def secenekler(v):
    en, ec = min(v), max(v)
    return {"sifirdan": (0.0, ec),
            "veri araligi": (math.floor(en), math.ceil(ec)),
            "genis": (math.floor(en) - (ec - en) * 0.5, math.ceil(ec))}


sa, sb = secenekler(TUKETIM), secenekler(SAYAC)
print("tuketim ekseni  sayac ekseni    kesisme donemi")
kesisme = set()
for na, (aa, au) in sa.items():
    for nb, (ba, bu) in sb.items():
        k = next((t for t in range(N)
                  if konum(TUKETIM[t], aa, au) <= konum(SAYAC[t], ba, bu)), None)
        kesisme.add(k)
        print(f"{na:14s}  {nb:14s} {str(k):>15s}")
print(f"{len(sa) * len(sb)} savunulabilir eksen ciftinden "
      f"{len(kesisme)} farkli kesisme donemi cikiyor")
print(f"iki dizinin birimleri farkli (m3 ve adet); kesisme donemi veride "
      f"karsiligi olmayan bir sayidir")
```

```
tuketim ekseni  sayac ekseni    kesisme donemi
sifirdan        sifirdan                     5
sifirdan        veri araligi                25
sifirdan        genis                       19
veri araligi    sifirdan                     0
veri araligi    veri araligi                18
veri araligi    genis                        8
genis           sifirdan                     0
genis           veri araligi                19
genis           genis                       17
9 savunulabilir eksen ciftinden 7 farkli kesisme donemi cikiyor
iki dizinin birimleri farkli (m3 ve adet); kesisme donemi veride karsiligi olmayan bir sayidir
```

İkili eksen, ailenin en zor savunulan üyesidir çünkü var olma nedeni meşrudur: tüketim ortalaması
m³, dönem başına okuma sayısı adet cinsindendir ve ikisini tek eksene koymak bir seriyi düz bir
çizgiye indirger. Her seriyi kendi aralığına çekmek doğal çözümdür.

Bedeli tablodadır. Dokuz savunulabilir eksen çiftinden **yedi ayrı kesişme dönemi** çıkıyor ve
aralarında 0. dönemle 25. dönem gibi birbirinden tamamen farklı yanıtlar var. Okuyucunun bu
gösterimden çıkardığı "şu dönemde biri ötekini geçti" cümlesi veride hiçbir şeye karşılık gelmez;
iki farklı birimin karşılaştırılabilir olduğu izlenimi tümüyle eksen seçiminin ürünüdür. Diğer üç
üyede geri okunan sayının bir hatası vardı; burada geri okunan sayının **kaynağı yoktur**.

```python
# aralik.py — elde bulunan donemler esit araliklarla dizilirse egim bozulur.
ELDE = [0, 1, 2, 3, 4, 5, 6, 12, 18, 24, 30, 35]


def egim(xs, ys):
    n = len(xs)
    ox, oy = sum(xs) / n, sum(ys) / n
    return (sum((xs[i] - ox) * (ys[i] - oy) for i in range(n))
            / sum((x - ox) ** 2 for x in xs))


y = [TUKETIM[t] for t in ELDE]
ara = [ELDE[i + 1] - ELDE[i] for i in range(len(ELDE) - 1)]
dogru = egim(ELDE, y)
cizilen = egim(list(range(len(ELDE))), y)
print(f"{len(ELDE)} donem elde var, {ELDE[0]}. donemden {ELDE[-1]}. doneme "
      f"yayiliyor; aralar {min(ara)}-{max(ara)} donem")
print(f"gercek egim {dogru:+.4f} m3/donem ({ELDE[-1] - ELDE[0]} donemlik yayilim)")
print(f"esit araliklarla cizilen gosterimden okunan egim {cizilen:+.4f} "
      f"m3/donem ({len(ELDE) - 1} adim), buyutme {cizilen / dogru:.2f} kat")
print("adim  gercek aralik  gercek egim  cizilen egim")
for i in (0, 6, 7, len(ara) - 1):
    print(f"{i:4d} {ara[i]:14d} {(y[i + 1] - y[i]) / ara[i]:+12.4f} "
          f"{y[i + 1] - y[i]:+13.4f}")

TABLO = [("eksen kirpma", "uzunluk", f"{GERCEK:.4f}", f"{KIRPIK:.4f}",
          f"{KIRPIK / GERCEK:.2f} kat", "eksen tabani"),
         ("alan buyutme", "alan", f"{GERCEK:.4f}", f"{al_a / al_b:.4f}",
          f"{(al_a / al_b) / GERCEK:.2f} kat", "kenar mi alan mi olceklendi"),
         ("ikili eksen", "konum", "yok", f"{len(kesisme)} ayri donem",
          "-", "iki eksenin araligi"),
         ("duzensiz aralik", "konum", f"{dogru:.4f}", f"{cizilen:.4f}",
          f"{cizilen / dogru:.2f} kat", "donem araliklari")]
print("carpitma         kanal    kaynak    geri okunan   buyutme   yazilmayan karar")
for ad, kanal, kay, geri, buy, satir in TABLO:
    print(f"{ad:16s} {kanal:8s} {kay:>8s} {geri:>13s} {buy:>9s}   {satir}")
```

```
12 donem elde var, 0. donemden 35. doneme yayiliyor; aralar 1-6 donem
gercek egim -0.2079 m3/donem (35 donemlik yayilim)
esit araliklarla cizilen gosterimden okunan egim -0.6635 m3/donem (11 adim), buyutme 3.19 kat
adim  gercek aralik  gercek egim  cizilen egim
   0              1      +1.3370       +1.3370
   6              6      -0.1895       -1.1370
   7              6      -0.0655       -0.3930
  10              5      -0.3822       -1.9110
carpitma         kanal    kaynak    geri okunan   buyutme   yazilmayan karar
eksen kirpma     uzunluk    1.2208        3.0769  2.52 kat   eksen tabani
alan buyutme     alan       1.2208        1.4905  1.22 kat   kenar mi alan mi olceklendi
ikili eksen      konum         yok  7 ayri donem         -   iki eksenin araligi
duzensiz aralik  konum     -0.2079       -0.6635  3.19 kat   donem araliklari
```

Dördüncü üye en sık ve en fark edilmeden ortaya çıkanıdır. Elde 12 dönem var ve bunlar 0. dönemden
35. döneme yayılıyor; aralar 1 ile 6 dönem arasında değişiyor. Gösterim onları sırayla ve eşit
aralıklarla diziyor, çünkü elde bulunanı sırayla dizmek varsayılan davranıştır.

Eğim -0,2079 m³/dönem yerine **-0,6635** okunuyor, **3,19 kat** büyük. Çarpan dönem açıklığının adım
sayısına bölümüdür: 35 bölü 11. Adım tablosu bunun adım adım nasıl oluştuğunu gösteriyor — 0. adımda
gerçek aralık bir dönemdir ve iki sayı çakışıyor, 6. adımda aralık altı döneme çıkıyor ve dönem
başına -0,1895 olan düşüş gösterimde -1,1370 olarak okunuyor.

Son tablo dört üyeyi yan yana koyuyor. Son sütun, dördünün ortak yanıdır: **her birinde geri okumayı
düzeltecek bilgi gösterimin dışında kalmıştır**. Eksen tabanı bir sayıdır ve yazılabilir; dönem
aralıkları da öyle. "Hangi boyut ölçeklendi" ve "iki eksenin aralığı ne" ise ancak gösterimin
yapıldığı yerde bilinir ve okuyucuya hiç ulaşmaz. Dördü de bir savunulabilir varsayılandan doğdu:
farkı görünür kıl, şekli oranla büyüt, iki seriyi kendi aralığına çek, elde bulunanı sırayla diz.
Yanıltma bunların hiçbirinde kasıt gerektirmedi.

## Özet

- Dört çarpıtma tek bir ailedir: kanalın kendi tanımından doğar, hesabı bozmaz, geri okumayı bozar.
- Eksen 18 m³'ten başlatıldığında 1,2208'lik oran 3,0769 okunuyor ve uzunluğu değerle orantılı sayan
  okuyucu kuzeyi 20,210 yerine 8,019 m³ okuyor, hata -12,191 m³.
- Aynı oran bir kareye kodlandığında iki kenar birden çarpıldığı için alan oranı 1,4905, yani
  oranın karesi oluyor; doğu 30,123 m³ okunuyor ve hata +5,449 m³.
- Farklı birimli iki dizide dokuz savunulabilir eksen çiftinden yedi ayrı kesişme dönemi çıkıyor;
  geri okunan sayının kaynakta karşılığı yok.
- Düzensiz aralıklı 12 dönem eşit dizildiğinde -0,2079 m³/dönemlik eğim -0,6635 okunuyor; çarpan
  dönem açıklığının adım sayısına bölümü, 35 bölü 11'dir.
- Dördünde de geri okumayı düzeltecek bilgi gösterimin dışında kalıyor ve dördü de savunulabilir
  bir varsayılan davranıştan doğuyor.

## Sonraki Adım

Bu ders çarpıtmanın kasıt gerektirmediğini gösterdi; her üyede gösterim doğru kurulmuş, tek bir
sayı yanlış hesaplanmamıştı. Bir varsayım hâlâ el değmeden duruyor: okuyucunun kanalı okuyabildiği.
Sonraki ders bunu ölçer. Renk tek kodlama kanalıyken kaç seri birbirinden ayırt edilemez kalıyor
sayılır, ve şekil, doğrudan etiketleme ile sıralamadan oluşan **yedekli kodlama** bu sayıyı kaça
indiriyor ölçülür. Karşıtlık oranı hesabı ve renk sistemi arayüz kurslarının işidir ve
tekrarlanmaz; burada sayılan yalnız veriye özgü olandır.
