İçeriğe geç

Ölçeklendirme ve Oranlar

Bir grafik yalan söylemek için veriyi değiştirmek zorunda değil. Eksenin nereden başladığını seçmek yeterli.

Dört takımın maç başına xG değerleri 1.92, 1.74, 1.61, 1.48 olsun. En iyi takım en kötüsünden %30 daha iyi. Ama eksen 1.40’tan başlatıldığında çubuklar 0.52, 0.34, 0.21, 0.08 uzunluklarına düşer ve en iyi takımın çubuğu en kötüsünün 6.5 katı olur. Veri dokunulmadı; sadece sıfır silindi.

Aynı problemin üç yaygın biçimi var:

  • Kesik eksen — uzunlukla kodlanan veride tabanın sıfırdan kaydırılması.
  • Oran/fark karışıklığı — “3 puan arttı” ile “%3 arttı” ifadelerinin aynı grafikte yer değiştirmesi.
  • Normalize edilmemiş örneklem — 90 dakika oynayan ile 2700 dakika oynayanın aynı eksende karşılaştırılması.

Tufte’nin ölçütü, grafikteki efektin veridekine oranıdır:

L=grafikte o¨lc¸u¨len efektveride o¨lc¸u¨len efektL = \frac{\text{grafikte ölçülen efekt}}{\text{veride ölçülen efekt}}

Kesik eksenli çubuk grafikte, taban bb ve uç değerler vmaxv_{\max}, vminv_{\min} için bu şöyle açılır:

L=vmaxbvminbvmaxvminL = \frac{\dfrac{v_{\max} - b}{v_{\min} - b}}{\dfrac{v_{\max}}{v_{\min}}}

b=0b = 0 iken L=1L = 1: grafik veriyi olduğu gibi aktarır. bvminb \to v_{\min} iken payda sıfıra gider ve LL \to \infty. Tufte’nin kabul aralığı:

0.95<L<1.050.95 < L < 1.05

Yukarıdaki xG örneğinde b=1.40b = 1.40 için L5.01L \approx 5.01 — grafik farkı beş kat abartıyor.

Ham sayımlar oynanan süreyle karşılaştırılamaz. Standart normalizasyon:

x^=xm90\hat{x} = \frac{x}{m} \cdot 90

Burada xx ham sayım, mm oynanan dakika. Ama bu, düşük mm‘de patlar: 90 dakikada 2 gol atan oyuncu “maç başına 2.00 gol” görünür.

Çözüm, popülasyon ortalamasına doğru küçültmektir (empirik Bayes / toplamsal düzleştirme):

x~=x+kμ0m90+k\tilde{x} = \frac{x + k\,\mu_0}{\dfrac{m}{90} + k}
  • μ0\mu_0 — popülasyonun 90 dakika başına ortalaması
  • kk — önsel gücü, “kaç maçlık hayali kanıt” olarak okunur

Etkisi asimetriktir; küçük örneklemi sertçe çeker, büyüğüne neredeyse dokunmaz. μ0=0.35\mu_0 = 0.35, k=5k = 5 ile:

OyuncuxxmmHam x^\hat{x}Küçültülmüş x~\tilde{x}Kayma
A2902.0000.625−69%
B44500.8000.575−28%
C1227000.4000.393−2%

A ile C’nin ham değerleri 5 kat fark ediyor; küçültülmüş değerleri 1.6 kat. İkincisi kanıtın gerçekten desteklediği fark.

Büyüme, katsayı ve oran gibi çarpımsal büyüklüklerde eşit oranlar eşit mesafeye karşılık gelmelidir:

d(v1,v2)logv2logv1=logv2v1d(v_1, v_2) \propto \log v_2 - \log v_1 = \log \frac{v_2}{v_1}

Doğrusal eksende 10 → 20 ile 100 → 110 aynı mesafeyi kaplar; oysa biri iki katına çıkmış, diğeri %10 artmıştır.

Kodlama kanalına göre karar ver. Kural eksen tipine değil, verinin nasıl kodlandığına bağlıdır:

KodlamaÖrnekTaban kuralı
Uzunluk / alanÇubuk, alan, hacimSıfır zorunlu
KonumÇizgi, dağılımKırpılabilir, ama işaretlenir
AçıPastaToplam %100 olmalı, yoksa kullanma

Kırpma işaretlenir. Çizgi grafikte eksen kırpıldığında eksen kırığı simgesi veya “eksen 1.40’tan başlıyor” notu doğrudan eksen üzerinde yer alır — dipnotta değil.

Örneklem eşiği rozeti. Payda bir eşiğin altındaysa değer soluklaştırılır ve n = 3 biçiminde işaretlenir. Sıralamalarda küçültülmüş değer kullanılır, ham değer detayda gösterilir.

Eksen aralığı doldurma. Sıfır tabanı zorunlu olduğunda üst sınır 1.05vmax1.05 \cdot v_{\max} olarak alınır; veriye “nefes payı” vermek için tabanı kaydırmak yasaktır, tavanı yükseltmek serbesttir.

Aşağıdaki iki panelde veri aynı. Kaydırıcı yalnızca sol paneldeki eksenin nereden başladığını değiştirir. Yalan katsayısı canlı hesaplanır.

Kesik eksen · taban 1.40
Sıfırdan başlamayan eksende dört takımın xG değerleri; farklar olduğundan büyük görünüyor.1.921.40Takım ATakım BTakım CTakım D

Yalan katsayısı5.01

Sıfır tabanı
Sıfırdan başlayan eksende aynı xG değerleri; çubuk boyları gerçek oranı yansıtıyor.1.920.00Takım ATakım BTakım CTakım D

Yalan katsayısı 1.00

Veri sabit. Değişen tek şey eksenin nereden başladığı. Tabanı 0'a çektiğinizde yalan katsayısı 1.00'e iner — Tufte'nin kabul aralığı 0.95 < L < 1.05.

Konfigürasyon düzeyinde fark tek bir satırdır:

Yanlış

// Çubuk grafikte taban veriye göre "otomatik" seçiliyor.
const eksen = {
tip: 'cubuk',
y: {
// Kütüphanelerin çoğunda varsayılan bu — ve sessizce yalan söyler.
taban: 'otomatik', // → 1.40
tavan: 'otomatik',
},
};
// L ≈ 5.01 · işaret yok · okuyucu farkı 6.5x sanıyor

Doğru

// Uzunlukla kodlanan veride taban sabit.
const eksen = {
tip: 'cubuk',
y: {
taban: 0,
tavan: 1.05 * Math.max(...degerler),
},
};
// L = 1.00 · fark %30 · okuyucu farkı %30 sanıyor

Küçük örneklemde sıralama üretirken de aynı ayrım geçerlidir:

Ham oran

const gol90 = (o) => (o.gol / o.dakika) * 90;
siralama = oyuncular.sort((a, b) => gol90(b) - gol90(a));
// 1. Oyuncu A — 2.00 (90 dk, 2 gol)
// 2. Oyuncu B — 0.80 (450 dk)
// 3. Oyuncu C — 0.40 (2700 dk)

Küçültülmüş oran

const MU0 = 0.35; // lig ortalaması / 90 dk
const K = 5; // önsel gücü ≈ 5 maç
const gol90 = (o) =>
(o.gol + K * MU0) / (o.dakika / 90 + K);
siralama = oyuncular.sort((a, b) => gol90(b) - gol90(a));
// 1. Oyuncu A — 0.63 (n işaretli: 90 dk)
// 2. Oyuncu B — 0.58
// 3. Oyuncu C — 0.39

Aynı iki hata alan değiştirince isim değiştirir, biçim değiştirmez.

KavramFutbolFinans / İş zekâsıÜrün analitiği
Normalizasyon birimi90 dakikaÇeyrek, çalışan başınaAktif kullanıcı başına
Kesik eksen kurbanıTakım xG çubuklarıÇeyreklik gelir çubuklarıHaftalık aktif kullanıcı
Küçük örneklem tuzağı1 maçta %100 isabet3 müşterilik segment kârlılığı12 oturumluk A/B testi
Log ölçek gereğiŞut mesafesi–gol olasılığıBileşik büyümeKohort tutundurma eğrisi

Kesik eksenin en sık göründüğü yer yatırımcı sunumları; en az sorgulandığı yer maç yayınları. İkisinde de düzeltme aynı: uzunlukla kodluyorsan sıfırdan başla.