Kurs
Hiç bir dağılımı görselleştirmeye çalışıp, her seferinde kutu (bin) boyutunu değiştirdiğinizde şekli değişen bir histogram elde ettiniz mi?
Genelde şöyle olur. 10 kutu seçersiniz ve pürüzsüz bir eğri görürsünüz. Sonra 30’a geçersiniz ve birden fazla tepe belirir. Veri aynı kaldı, ancak farklı kutu sayıları farklı yorumlara yol açtı. Histogramlardaki en büyük sorun bu: size dağılımın kendisini değil, onun bir versiyonunu gösterirler. Üstelik bu versiyon, rastgele belirlediğiniz bir parametreden etkilenir.
KDE farklı bir yaklaşım benimser. Veriyi kutulara bölmek yerine, her veri noktasının üzerine küçük ve pürüzsüz bir eğri yerleştirir ve hepsini toplar. Bu, alttaki dağılımın tek ve sürekli bir tahminini verir.
Bu yazıda KDE’nin sezgisini, formülün adım adım açıklamasını, bant genişliğinin pürüzsüzlüğü nasıl kontrol ettiğini ve Python ile R’da pratik örnekleri bulacaksınız.
Histogramlara yeni misiniz? İşte sizi başlatacak kapsamlı bir Frekans Histogramları rehberi.
Çekirdek Yoğunluk Tahmini Nedir?
Çekirdek yoğunluk tahmini, bir veri kümesinin olasılık yoğunluk fonksiyonunu tahmin etmek için kullanılan parametrik olmayan bir yöntemdir.
Onu farklı kılan, parametrik olmamasıdır.
Parametrik yöntemlerde, verinizin belirli bir dağılımı izlediğini varsayarsınız — normal, üstel vb. — ve ardından ona uyan parametreleri kestirirsiniz. Bu varsayım yanlışsa, modeliniz de yanlıştır. KDE böyle varsayımlar yapmaz. Verinin kendisinin konuşmasına izin verir ve altta yatan dağılımın tahminini doğrudan gözlemlerden oluşturur.
Çıktı, değerlerin nerede yoğunlaştığını ve bunun ne kadar olası olduğunu gösteren pürüzsüz bir eğridir. Eğrinin yüksek olduğu yerler yoğun bölgeleri, düşük olduğu yerler seyrek bölgeleri ifade eder.
Neden Çekirdek Yoğunluk Tahmini Kullanılır?
Histogramlar dağılımları görselleştirmek için varsayılan araçtır, ancak bir sorunları vardır: gördüğünüz şekil, seçtiğiniz kutu sayısına bağlıdır. Üstelik bu kutu parametresini siz belirlersiniz. Aynı veri kümesine bakan iki kişi, yalnızca farklı kutu sayıları seçerek tamamen farklı sonuçlara varabilir.
KDE ile, veriyi kutulara zorlamak yerine, baştan rastgele belirlediğiniz bir parametreye bağlı olarak değişmeyen, pürüzsüz ve sürekli bir eğri elde edersiniz.
Bu da şunlar için kullanışlıdır:
- Kutu boyutu yanlılığı olmadan genel dağılım şeklini görselleştirmek
- Birden fazla tepe, çarpıklık veya ağır kuyruklar gibi kalıpları tespit etmek
- Aynı grafikte gruplar arasında dağılımları karşılaştırmak
- Modellemeden önce verinizin daha net bir resmini elde etmek
KDE’nin Arkasındaki Sezgi
Her bir veri noktasını alır ve üzerine küçük, pürüzsüz bir eğri yerleştirirsiniz. Bu eğriye çekirdek denir. Sonra bu bireysel eğrilerin hepsini toplayarak tek bir eğri elde edersiniz.
Sonuçta verinizin yoğunluğunu gösteren tek bir pürüzsüz eğri elde edersiniz. Noktaların kümelendiği yerlerde birden fazla çekirdek üst üste biner ve eğri yükselir. Verinin seyrek olduğu yerlerde çekirdekler zar zor örtüşür ve eğri düşük kalır. Her nokta nihai tahmine eşit katkı yapar.
Bir sınıfın final sınavı notlarını kaydettiğinizi hayal edin. Bunları histogramda kutulara ayırmak yerine, KDE her nota küçük ve pürüzsüz bir eğri yerleştirir. Notların kümelendiği — örneğin 70-75 civarı — yerde eğriler üst üste biner ve tahmin yükselir. 95 alan tek bir öğrenci ise kuyruğa küçük bir tümsek ekler.
Aşağıdaki görsel tam olarak bunu gösteriyor. Öğrencilerin çoğu ortalama civarında puan aldı ve bir öğrenci çok daha yüksek puan aldı:

KDE görselleştirildi
Çekirdek Yoğunluk Tahmini Formülü
KDE formülü göründüğünden daha az göz korkutucudur.

KDE formülü
Her bir parça ne anlama geliyor:
-
nveri noktalarının sayısıdır -
x_iveri kümenizdeki tekil veri noktalarıdır -
Kçekirdek fonksiyonudur — her noktanın üzerine yerleştirilen pürüzsüz eğri -
hbant genişliğidir — her çekirdeğin ne kadar geniş olduğunu kontrol eder -
xyoğunluğu değerlendirdiğiniz noktadır
Düz Türkçeyle, formül şunu söyler: herhangi bir x noktası için, her bir veri noktası x_i’nin ona ne kadar yakın olduğuna bakın, bu yakınlığı K çekirdek fonksiyonuyla ağırlıklandırın ve sonucu tüm n nokta üzerinden ortalayın. Bunu aralıktaki her x için yaparsanız, tüm yoğunluk eğrisini elde edersiniz.
Bant genişliği h, K içindeki kesrin paydasında yer alır. Daha küçük h çekirdeği daraltır, dolayısıyla yalnızca çok yakın noktalar tahmini etkiler. Daha büyük h etkisini daha geniş bir alana yayar. Bunun hakkında daha fazla detayı yazının ilerleyen kısımlarında bulacaksınız.
Çekirdek Fonksiyonu Nedir?
Çekirdek, her veri noktasının üzerine yerleştirdiğiniz pürüzsüz eğridir. O noktanın etkisinin komşularına nasıl yayıldığını tanımlar.
Her çekirdek bir veri noktasına ortalanır ve mesafeye göre ağırlık atar. Merkeze yakın noktalar yüksek ağırlık alır. Uzak noktalar düşük ağırlık alır ya da hiç almaz. Bu ağırlıklandırmanın tam şekli, seçtiğiniz çekirdeğe bağlıdır.
Üç yaygın seçenek vardır:
- Gaussian: Çan eğrisi. Veri kümesindeki her noktaya ağırlık atar ve etki mesafeyle azalır. Çoğu kütüphanede varsayılandır ve pratikte iyi çalışır
- Uniform: Düz bir dikdörtgen. Sabit bir mesafe içindeki her nokta eşit ağırlık alır, dışındakiler hiç almaz. Basittir, ancak daha az pürüzsüz tahminler üretir
- Epanechnikov: Ortalama karesel hata açısından matematiksel olarak en uygun parabolik bir şekil. Gaussian’dan daha verimlidir, ancak pratikte gözle görülür bir fark yaratması nadirdir.
Çoğu durumda çekirdek seçimi pek fark yaratmaz. Aynı veri üzerine aynı bant genişliğiyle uygulanan iki farklı çekirdek neredeyse özdeş eğriler üretir. Çok daha önemli olan bant genişliğidir — şimdi de ona bakalım.
KDE’de Bant Genişliğinin Rolü
Bant genişliği, seçtiğiniz çekirdekten bile daha fazla, KDE çıktınız üzerinde en büyük etkiye sahip tek parametredir.
Her çekirdeğin ne kadar geniş olacağını kontrol eder. Dar bir çekirdek yalnızca yakınındaki noktaların etkisini çeker. Geniş bir çekirdek bu etkiyi çok daha büyük bir aralığa yayar. Sonuç, veriyi yakından takip eden bir eğri ya da onu düzleştiren bir eğri olur.
Küçük bant genişliği
Küçük bir bant genişliği her çekirdeği sıkı ve dar yapar. Tahmin her bir veri noktasına keskin şekilde tepki verir; bu da verinin gerçek yapısını yakaladığı gibi gürültüyü de yakaladığı anlamına gelir.
Pratikte bu, birden fazla küçük tepeye sahip dikenli bir eğri gibi görünür. Bu tepelerin bazıları verinizdeki gerçek kümeleri gösterir. Diğerleri ise yetersiz düzleştirme nedeniyle oluşan yapaylıklardır. Hangisinin hangisi olduğunu ayırt etmek zordur ve sorun da budur.

Küçük bant genişliğiyle KDE
Büyük bant genişliği
Büyük bir bant genişliği her çekirdeği genişletir. Komşu çekirdekler üst üste biner ve nihai eğri pürüzsüz çıkar.
Aşırı pürüzsüzleşirse, gerçek yapıyı kaybetmeye başlarsınız. İki farklı küme tek bir eğriye bulanabilir. Ağır kuyruklu bir dağılım simetrik görünebilir. Görsel temsil size bazı şeyleri gizliyor olabilir.

Büyük bant genişliğiyle KDE
Doğru bant genişliğini bulmak
Evrensel olarak doğru bir bant genişliği yoktur. Amaç, gürültüyü filtreleyecek kadar pürüzsüz, ancak gerçek kalıpları silmeyecek kadar da duyarlı bir değer bulmaktır.
Çoğu kütüphane bunu otomatik bant genişliği seçimi yöntemleriyle yapar. Silverman’ın başparmak kuralı en yaygın olanıdır. Bant genişliğini örneklem büyüklüğü ve verinizin standart sapmasına göre seçer. Yaklaşık normal dağılımlar için iyi çalışır, ancak çok modlu olanları aşırı düzleştirebilir.
Emin değilseniz birkaç bant genişliği değeri deneyin ve eğrileri karşılaştırın. Farklılıklar veriniz hakkında size çok şey söyleyecektir.
KDE ve Histogram
Hem histogramlar hem de KDE, verinizin dağılımını gösterir — ancak bunu çok farklı şekillerde yaparlar.
Histogram
Histogram, verinizi ayrık kutulara böler ve her birine kaç noktanın düştüğünü sayar. Hızlıdır, sezgiseldir ve teknik olmayan bir kitleye açıklaması kolaydır.
Sorun, kutu duyarlılığıdır. Kutu sayısını değiştirirseniz şekil de değişir. Nesnel olarak doğru bir kutu sayısı yoktur; bu da iki kişinin yalnızca bu tercihten ötürü aynı veriye bakıp farklı sonuçlara varabileceği anlamına gelir.
Histogramlar ayrıca basamaklı, süreksiz bir şekil üretir. Hızlı bir bakış için uygundur, ancak alttaki gerçek dağılımı gizleyebilir.
KDE
KDE, kutular olmadan pürüzsüz ve sürekli bir eğri sunar. Bir dağılımın gerçek şeklini ortaya çıkarmada — histogramın kutu seçimine bağlı olarak kaçırabileceği veya yanlış yansıtabileceği çarpıklık, birden fazla tepe veya ağır kuyruklar gibi — daha iyidir.
Dezavantajı, KDE’nin kendi parametresini — bant genişliğini — getirmesi ve daha fazla hesaplama gerektirmesidir. Ayrıca açıklaması daha az sezgiseldir; çünkü y ekseni sayımları değil, olasılık yoğunluğunu gösterir; bu da kavrama aşina olmayan okurları şaşırtabilir.
Her birini ne zaman kullanmalı
Verinizin hızlı ve anlaşılır bir özetine ihtiyaç duyduğunuzda veya kitleniz yoğunluk tahminlerine aşina olmadığında histogram kullanın. Dağılımın şeklinin önemli olduğu durumlarda — örneğin grupları karşılaştırırken veya verinizde birden fazla modu tespit etmeye çalışırken — KDE kullanın.

Histogram ile KDE karşılaştırması
Pratikte, genellikle birlikte kullanılırlar: sayımlar için histogram, şekil için üzerine bindirilmiş KDE eğrisi.
Python’da Çekirdek Yoğunluk Tahmini
Python, hızlı bir grafik mi yoksa tahminin kendisi üzerinde daha fazla kontrol mü istediğinize bağlı olarak KDE’yi hesaplamak ve çizmek için birkaç yol sunar.
seaborn ile KDE’yi görselleştirme
En hızlı KDE grafiği seaborn.kdeplot() ile elde edilir. Gerekli olan yalnızca bu kadardır:
import seaborn as sns
import numpy as np
np.random.seed(42)
scores = np.concatenate([
np.random.normal(65, 4, 60),
np.random.normal(80, 3, 40)
])
sns.kdeplot(scores, bw_adjust=1)

seaborn ile KDE
bw_adjust parametresi otomatik olarak seçilen bant genişliğini ölçeklendirir. 1’in altındaki değerler eğriyi sıkılaştırır, üzerindeki değerler daha fazla düzleştirir. Bu, seaborn’un dahili olarak seçtiği bant genişliğinin üzerine çarpılan bir katsayıdır; bu nedenle ham bir bant genişliği değeri belirlemeniz gerekmez.
Y ekseni sayımları değil, olasılık yoğunluğunu gösterir. Eğri, bir değerin dağılımın geri kalanına göre göreli olarak ne kadar olası olduğunu gösterir. Daha yüksek olması, verinin orada daha yoğunlaştığı anlamına gelir.
scipy ile KDE hesaplama
Gerçek yoğunluk değerlerine — yalnızca bir grafiğe değil — ihtiyacınız varsa, scipy.stats.gaussian_kde kullanın. Bu, herhangi bir noktada değerlendirebileceğiniz çağrılabilir bir nesne verir.
from scipy.stats import gaussian_kde
import numpy as np
import matplotlib.pyplot as plt
kde = gaussian_kde(scores, bw_method="scott")
x = np.linspace(45, 100, 500)
density = kde(x)
plt.plot(x, density)
bw_method="scott" bant genişliğini otomatik seçmek için Scott’ın kuralını kullanır. Çoğu durum için iyi bir varsayılandır. Bant genişliğini elle ayarlamak için skaler de geçebilirsiniz.

scipy ve matplotlib ile KDE
R’da Çekirdek Yoğunluk Tahmini
R’da KDE temel dilin içine gömülüdür. Ek paketlere ihtiyacınız yoktur.
density() ile KDE hesaplama
density() fonksiyonu sayısal bir vektör alır ve bir KDE nesnesi döndürür.
set.seed(42)
scores <- c(rnorm(60, mean = 65, sd = 4),
rnorm(40, mean = 80, sd = 3))
kde <- density(scores, bw = "SJ")
bw argümanı bant genişliği seçimini kontrol eder. "SJ" varsayılanına kıyasla çok modlu dağılımları daha iyi yöneten Sheather-Jones yöntemini kullanır. Bant genişliğini elle ayarlamak için sayısal bir değer de geçebilirsiniz.
Sonuç, iki ana bileşene sahip bir liste nesnesidir:
kde$x: yoğunluğun değerlendirildiği nokta dizisikde$y: karşılık gelen yoğunluk değerleri
Eğriyi çizmek
Sonucu doğrudan plot() fonksiyonuna verin.
plot(kde,
main = "Exam Score Distribution",
xlab = "Score",
ylab = "Density")

R’da KDE çizildi
KDE’yi bir histogramın üzerine bindirmek için önce freq = FALSE ile hist() kullanın, ardından eğriyi lines() ile ekleyin.
hist(scores, freq = FALSE, main = "Histogram + KDE", xlab = "Score")
lines(kde, col = "blue", lwd = 2)

R’da histogram ve KDE
freq = FALSE histogramı yoğunluğa ölçeklendirir; böylece hem çubuklar hem de eğri aynı y eksenini paylaşır.
KDE’nin Avantajları ve Sınırlamaları
KDE gerçekten kullanışlı bir görseldir; ancak her şey gibi, histogramların yerine kullanmadan önce bilinmeye değer ödünleri vardır.
Avantajlar
En büyük artısı, KDE’nin verinizin dağılımı hakkında varsayım yapmamasıdır. Verinizin normal, üstel veya başka bir dağılım olup olmadığına baştan karar vermeniz gerekmez. Şekil doğrudan veriden gelir; bu da KDE’yi çok modlu dağılımlar ve standart parametrik forma uymayan her şey için yeterince esnek kılar.
Çıktı ayrıca basamaklı bir yaklaşım yerine pürüzsüz ve sürekli bir eğridir. Bu da histogramın kutu seçimine bağlı olarak sizden gizleyebileceği birden fazla tepe veya uzun kuyruklar gibi kalıpları fark etmeyi kolaylaştırır.
Ve KDE, önce bir model uydurmanızı gerektirmeden ham veri üzerinde çalıştığı için, herhangi bir keşifsel analizin iyi bir ilk adımıdır.
Sınırlamalar
Bant genişliği seçimi temel zayıflıktır. Yanlış seçerseniz, tahmin ya gürültünün peşinden koşar ya da verideki gerçek kalıpları düzleştirir. Silverman’ın kuralı gibi otomatik yöntemler yaklaşık normal veriler için iyi çalışır, ancak karmaşık dağılımlarda yanıltıcı olabilir. Sonuca güvenmeden önce genellikle birkaç bant genişliği değerini elle kontrol etmek gerekir.
Ölçek büyüdükçe performans sorun olabilir. KDE, her değerlendirme konumunda her veri noktası için bir çekirdek fonksiyonunu değerlendirir; bu da veri kümeniz büyüdükçe hesaplamanın hızla artması demektir. Çoğu keşifsel çalışma için bu sorun oluşturmaz, ancak yüz binlerce noktadan oluşan veri kümelerinde yavaşlayabilir.
Sınır etkileri daha incelikli bir sorundur. Standart KDE, verinin her iki yönde de sonsuza dek uzayabileceğini varsayar. Verinizin sıfırın altına inemeyen değerler gibi sert bir sınırı olduğunda, tahmin bu sınırın ötesine olasılık kütlesi sızdırır ve kenara yakın yapay olarak düşük bir eğri üretir. Sınır düzeltmeli KDE sürümleri vardır; ancak standart kütüphanelerde daha az uygulanırlar.
Sonuç
KDE, histogramlardan daha temiz bir şekilde verinizin dağılımına bakmanızı sağlar. Kutu tercihleri ve parametrik varsayımlar yoktur — yalnızca veri kümenizdekini gerçekten gösteren pürüzsüz bir eğri vardır.
Gerçekten önemli olan tek parametre bant genişliğidir. Birkaç değer deneyin, eğrileri karşılaştırın, otomatik seçenekleri kullanın ve ondan sonuç çıkarmadan önce tahminin veriniz hakkında bildiklerinizle uyumlu olduğundan emin olun.
KDE için sezgi geliştirmenin en iyi yolu, onu gerçek veriler üzerinde çalıştırmaktır. Aşina olduğunuz bir veri kümesini seçin, KDE uygulayın ve histogramla karşılaştırın; neleri kaçırdığınızı görün.
Veri görselleştirmeyle ilgileniyor musunuz? Python kullanıyorsanız Seaborn ile Veri Görselleştirme kursumuza, R kullanıyorsanız ggplot2 ile Veri Görselleştirme kursumuza göz atın.
SSS
Çekirdek yoğunluk tahmini ne için kullanılır?
KDE, bir veri kümesinin belirli bir şekli — örneğin normal veya üstel dağılım — izlediğini varsaymadan olasılık dağılımını tahmin etmek için kullanılır. Modellemeden önce verinizin nasıl dağıldığını görselleştirmek istediğiniz keşifsel veri analizinde yaygındır. Ayrıca anomali tespitinde, gruplar arasında dağılımları karşılaştırmada ve istatistiksel iş akışlarında bir düzleştirme adımı olarak da kullanılır.
KDE, histogramdan nasıl farklıdır?
Histogram, veriyi ayrık kutulara böler ve her birine kaç noktanın düştüğünü sayar. Elde ettiğiniz şekil, seçtiğiniz kutu sayısına bağlıdır; bu da onu keyfi bir parametreye duyarlı kılar. KDE bunu, her veri noktasına pürüzsüz bir eğri yerleştirip toplam alarak aşar; böylece kutu sayısına bağlı olarak değişmeyen sürekli bir tahmin elde edersiniz.
KDE kullanmak için büyük bir veri kümesine ihtiyaç var mı?
KDE küçük veri kümelerinde de çalışır, ancak çok az noktanız olduğunda tahminler daha az güvenilirdir. Sınırlı veride, tekil gözlemler nihai eğri üzerinde büyük bir etkiye sahiptir; bu da gerçek yapıyı gürültüden ayırmayı zorlaştırır. Veri kümeniz büyüdükçe tahmin istikrar kazanır ve gerçek dağılımı daha doğru yansıtır.
Yanlış bant genişliği seçerseniz ne olur?
Çok küçük bir bant genişliği, her bir noktaya tepki veren dikenli bir eğri üretir ve verinizin genel şeklini görmeyi zorlaştırır. Çok büyük bir bant genişliği ise tahmini aşırı düzleştirir ve ayrı tepeleri tek bir tümsekte birleştirerek gerçek yapıyı gizleyebilir. Çoğu kütüphane, başlangıç noktası olarak Silverman’ın kuralı gibi otomatik bant genişliği seçim yöntemleri sunar; ancak sonuç çıkarmadan önce birkaç değeri elle denemek iyi bir pratiktir.
KDE, verinizin sınırları yakınında iyi çalışır mı?
Standart KDE, verinin her iki yönde de sonsuza uzanabileceğini varsayar; bu da değişkeninizin alt veya üst sınırı olduğunda — yaş, gelir ya da sıfırın altına inemeyen herhangi bir sayı gibi — sorun yaratır. Bu sınırlar yakınında tahmin, geçerli aralığın dışına olasılık kütlesi sızdırır ve kenarlarda yapay olarak düşük bir eğri üretir. Bunu ele alan sınır-düzeltmeli KDE yöntemleri vardır; ancak tüm kütüphanelerde bulunmaz ve ek kurulum gerektirir.
