Yoğunluk Analizi ve KDE Nedir? QGIS ve Python ile Mekansal Isı Haritası Rehberi
Bir şehrin trafik kazası noktaları haritaya işlendiğinde, veriler dağınık ve anlamsız görünür. Aynı veriye Kernel Density Estimation (KDE) uygulandığında ise kazaların yoğunlaştığı bölgeler pürüzsüz bir ısı haritasına dönüşür. KDE, dağınık nokta verilerini sürekli bir yoğunluk yüzeyine çeviren parametrik olmayan istatistiksel bir yöntemdir. Bu kapsamlı rehberde KDE'nin matematiksel temelinden adaptif varyantına, Python ile tam iş akışından QGIS adım adım uygulamasına kadar her boyutunu ele alıyoruz.
1. KDE Nedir? Sayım Yönteminden Farkı
Nokta verilerini analiz etmenin en temel yolu basit sayım (point density)'dır: çalışma alanı ızgaraya bölünür, her hücredeki nokta sayılır. Hızlıdır ama kaba sonuç verir — hücre sınırları yapay keskinlikler yaratır, komşu hücreler arasında ani geçişler olur, küçük ızgara boyutu gürültü, büyük ızgara boyutu bilgi kaybı demektir.
KDE bu sorunu çözer: her noktanın çevresine matematiksel bir ağırlık fonksiyonu (kernel) yerleştirir. Tüm noktaların kernel fonksiyonları üst üste bindirilir ve pürüzsüz, sürekli bir yoğunluk yüzeyi elde edilir. Noktaya yakın bölgeler yüksek, uzak bölgeler düşük katkı alır. Sonuç haritası keskin sınırlar yerine yumuşak geçişlerle gerçekçi bir yoğunluk görüntüsü sunar.
Somut örnek: İstanbul'daki 10.000 trafik kazasını haritaya işlediğinizde bazı bölgelerin yoğun, bazılarının seyrek göründüğünü görürsünüz. KDE, bu noktaları pürüzsüz bir yoğunluk yüzeyine dönüştürür: Bağcılar kavşağı belirgin bir "tepe" oluştururken kırsal bölgeler "düzlük" kalır. Trafik mühendisleri bu yüzeyi kullanarak öncelikli müdahale noktalarını belirler.
2. Matematiksel Temel
KDE'nin matematiksel özü şudur: n adet gözlem noktası {x₁, x₂, ..., xₙ} verildiğinde, herhangi bir konumdaki yoğunluk tahmini şöyle hesaplanır:
Bu formülde:
- n: Toplam nokta sayısı
- h: Bandwidth (bant genişliği, arama yarıçapı)
- K(·): Kernel fonksiyonu — belirli özellikleri sağlayan simetrik bir olasılık yoğunluk fonksiyonu
- x − xᵢ: Tahmin noktası ile i. gözlem noktası arasındaki mesafe
2B (iki boyutlu, mekansal) KDE için formül vektörel hale gelir:
Burada d(·) Öklid mesafesidir ve her nokta kendi çevresine 2D bir çan eğrisi yerleştirir. Tüm noktaların çan eğrileri toplandığında yoğunluk yüzeyi oluşur.
Sezgisel açıklama: Her noktaya üzerine biraz çay döküldüğünü hayal edin. Çay yayılır ve kenarlara doğru incelir. Birbirine yakın noktaların çayları üst üste biner — bu bölgeler daha "ıslak" yani yoğun görünür. İşte KDE tam da bunu yapar.
3. Kernel Fonksiyonu Türleri
Kernel fonksiyonu, her noktanın çevresine nasıl bir ağırlık dağılımı uygulanacağını belirler. Birbirinden farklı matematiksel şekillere sahiptirler ama pratikte sonuçlar arasındaki fark küçüktür — bandwidth seçimi çok daha belirleyicidir.
| Kernel Türü | Şekil | Özellik | Tipik Kullanım |
|---|---|---|---|
| Gaussian (Normal) | Sonsuz uzanan çan eğrisi | Bandwidth dışına da düşük ağırlık verir; pürüzsüz yüzey | Python varsayılanı, genel amaçlı |
| Epanechnikov | Kesik parabolik | İstatistiksel olarak optimal (MSE minimize eder) | Akademik çalışmalar |
| Quartic (Bisquare) | Kesik dördüncü derece eğri | Epanechnikov'a benzer, bandwidth dışını sıfırlar | QGIS ve ArcGIS varsayılanı |
| Uniform (Box) | Düz dikdörtgen | Bandwidth içindeki tüm noktalara eşit ağırlık | Basit sayıma yakın sonuç |
| Triangular | Üçgen | Merkeze doğrusal azalan ağırlık | Sınırlı kullanım |
| Cosine | Kosinüs şekli | Yumuşak kenarlı, Gaussian'a benzer | sklearn seçeneği |
4. Bandwidth: KDE'nin En Kritik Parametresi
Bandwidth (bant genişliği / arama yarıçapı), her noktanın çevresine yerleştirilen kernel fonksiyonunun ne kadar geniş yayılacağını belirler. KDE sonucunu doğrudan şekillendirir:
Silverman's Rule of Thumb
En yaygın otomatik bandwidth seçim yöntemidir. Verinin standart sapması ve nokta sayısına dayalı analitik bir formüldür:
Burada σ standart sapma, IQR çeyrekler arası aralık, n nokta sayısıdır. Python'da scipy.stats.gaussian_kde'nin bw_method='silverman' seçeneği bu formülü kullanır. Normal dağılım varsayımı nedeniyle çok yoğun veya çok seyrek verilerde yanıltıcı olabilir.
Çapraz Doğrulama (Cross-Validation) ile Bandwidth Seçimi
Farklı bandwidth değerleri denenerek tahmin hatası (MISE — Mean Integrated Squared Error) minimize edilir. İstatistiksel olarak daha sağlam ama hesaplama maliyeti yüksektir. sklearn'ün GridSearchCV'si bu işlemi otomatikleştirir.
Alan Uzmanı Kararı
Bazı analizlerde coğrafi veya operasyonel bir anlam taşıyan mesafe değerleri kullanmak daha mantıklıdır:
- Yürüyüş mesafesi: 400 m
- Polis devriye yarıçapı: 500 m
- Hastalık bulaşma yarıçapı: 1 km
- Şehir içi mahalle ölçeği: 2–5 km
Pratik öneri: Silverman ile başlayın, sonucu görsel olarak değerlendirin. Fazla gürültülüyse bandwidth'i 2 katına çıkarın. Çok düz görünüyorsa yarıya indirin. Duyarlılık analizi yaparak 3 farklı bandwidth ile kıyaslamalı haritalar üretin.
5. Adaptif KDE
Standart KDE'nin en büyük sınırlılığı sabit bandwidth kullanmasıdır: tüm çalışma alanında aynı h uygulanır. Ama gerçek dünya verileri homojen değildir — kent merkezinde yoğun, kırsal alanda seyrek noktalar olabilir. Sabit bandwidth bu durumda iki soruna yol açar:
- Yoğun bölgelerde oversmoothing — gerçek zirveler yumuşar
- Seyrek bölgelerde undersmoothing — gürültü yüksek görünür
Adaptif (değişken) KDE, bandwidth'i yerel nokta yoğunluğuna göre otomatik ayarlar:
- Yoğun bölgelerde → küçük bandwidth (ince ayrıntı)
- Seyrek bölgelerde → büyük bandwidth (düzleştirme)
Popüler yöntem k-en yakın komşu bandwidth'idir: her nokta için en yakın k noktanın mesafesi bandwidth olarak kullanılır. Bu sayede yerel veri yoğunluğuna duyarlı bir yüzey elde edilir.
6. Ağırlıklı KDE
Standart KDE her noktaya eşit ağırlık verir. Ama bazı analizlerde noktaların önem düzeyi farklıdır: kazadaki yaralı sayısı, suçun şiddet skoru, hastalığın bulaşıcılık oranı gibi nitelik değerleri yoğunluk hesabına dahil edilebilir.
Ağırlıklı KDE formülü:
Her nokta kendi ağırlık değeri (wᵢ) ile çarpılarak yoğunluk yüzeyine katkıda bulunur. Ağır bir olayın bulunduğu konum, hafif bir olayın konumuna göre yüzeyi daha fazla yukarı çeker.
Pratik örnek: Trafik kazası analizinde yalnızca kaza sayısını değil, her kazadaki yaralı sayısını ağırlık olarak kullansanız: 1 yaralılı 10 kaza ile 10 yaralılı 1 kaza, standart KDE'de aynı katkıyı verirdi ama ağırlıklı KDE'de ikincisi 10 kat daha fazla etkiler. Bu, şiddetli kazaların yoğunlaştığı bölgeleri çok daha doğru ortaya koyar.
7. Sınır Etkisi ve Düzeltme
Çalışma alanının kenarlarındaki noktalar, sınır dışına da kernel yayar ama bu alan analiz kapsamı dışındadır. Sonuç olarak sınır yakınındaki yoğunluk değerleri yapay olarak düşük hesaplanır. Bu sınır etkisi (edge effect) özellikle küçük çalışma alanlarında belirgindir.
Sınır Etkisi ile Başa Çıkma Yöntemleri
- Buffer zone: Çalışma alanını gerçek sınırın dışına taşıp kesip dışa taşan katkıları sıfırlamak. En basit yaklaşım.
- Reflection (yansıma): Sınırın ayna görüntüsünde hayali noktalar oluşturarak toplam katkının dengelenmesi. QGIS'in bazı araçları bunu otomatik yapar.
- Guard zone: Analiz alanını genişletip daha fazla gerçek nokta dahil etmek.
- Kernel normalizasyonu: Her ızgara hücresi için yalnızca çalışma alanı içindeki kernel katkısını normalize etmek.
Uyarı: Suç veya hastalık haritalarında sınır etkisi ciddi hatalara yol açabilir. Bir mahallenin sınırında yoğun olan suç aktivitesi, komşu mahallenin analizi dışında kaldığı için sınırda yapay düşük yoğunluk görünebilir. Raporlarda sınır etkisini açıkça belirtin.
8. Python ile Tam Uygulama
9. QGIS ile KDE Adım Adım
QGIS'te KDE iki farklı şekilde uygulanabilir. Görselleştirme için Semboloji, gerçek analiz için İşleme Araçları kullanılır.
Yöntem 1: Anlık Görselleştirme (Semboloji)
→ Semboloji sekmesi
→ "Tekli Sembol" yerine Isı Haritası (Heatmap) seç
Yarıçap (Radius): analiz ölçeğinize uygun değer (piksel veya harita birimi)
Renk rampası: YlOrRd, Magma veya özel
Maksimum değer: "Genel" veya "Katman"
Uygula → Tamam
⚠ Bu yaklaşım görselleştirme içindir; raster çıktı üretmez.
Yöntem 2: Raster KDE (Analiz Amaçlı)
Arama: "Isı Haritası" veya "Heatmap"
→ Interpolasyon → Isı Haritası (Kernel Yoğunluğu Tahmini)
Girdi noktası katmanı: nokta vektör katmanınız
Yarıçap (Radius): bandwidth değeri (metre cinsinden, örn. 500)
Çıktı raster boyutu (piksel boyutu): 50 m önerilir
Kernel şekli: Quartic (varsayılan) veya Gaussian
Ağırlık alanı (isteğe bağlı): sayısal ağırlık sütunu seçin
Çıktı dosyası: kde_sonuc.tif
→ Çalıştır
Çıktıyı Renklendirme
Render tipi: Tek Bant Sözde Renk (Singleband pseudocolor)
Renk rampası: Magma veya YlOrRd
Sınıflandırma modu: Kantil (Quantile) veya Eşit Aralık
Sınıf sayısı: 10–15
Uygula
Bandwidth Optimizasyonu QGIS'te
veya
İşleme → R Scripti (R yüklüyse) → bw.ucv() fonksiyonu ile
cross-validation bandwidth hesabı yapılabilir.
QGIS'te karşılaştırmalı analiz: Aynı veri için 3 farklı bandwidth (örn. 250 m, 500 m, 1000 m) ile 3 ayrı KDE rasterı oluşturun. Her birini aynı renk skalasına normalize edip yan yana görüntüleyin. Hangisi araştırma sorunuza uygun detayı veriyorsa onu seçin.
10. KDE Çıktısını Yorumlama
KDE raster çıktısı piksel değerlerini birim alan başına olay yoğunluğu (km² başına olay sayısı) olarak verir. Yorumlarken dikkat edilmesi gereken noktalar:
- Mutlak değerler görecelidir. Bandwidth ve kernel türüne göre değişir; aynı veri seti farklı parametrelerle farklı yoğunluk değerleri üretir. Analizler arası karşılaştırma için parametreler sabit tutulmalıdır.
- KDE istatistiksel anlamlılık testi yapmaz. Yüksek yoğunluk görünen bölge rastlantısal da olabilir. İstatistiksel doğrulama için Gi* veya LISA ile birlikte kullanın.
- Nüfus düzeltmesi gerekebilir. Suç veya hastalık analizlerinde ham nokta yoğunluğu yanıltıcı olabilir — nüfus yoğunluğu yüksek bir yerde daha fazla suç normal olarak beklenir. KDE çıktısını nüfus rasterına bölerek "nüfus düzeltmeli oran" haritası oluşturun.
- Sınır yakınındaki değerleri dikkatli yorumlayın. Sınır etkisi nedeniyle yapay düşük yoğunluk olabilir.
Raster Hesap Makinesi ile Yoğunluk Sınıflandırma
Normalleştirme (0-1 arası):
("kde_sonuc@1" - minimum) / (maksimum - minimum)
Eşik ile ikili harita (yoğun bölge = 1, seyrek = 0):
IF("kde_sonuc@1" > 0.75 * maksimum, 1, 0)
11. KDE vs Diğer Yöntemler
| Yöntem | Çıktı | İstatistiksel Test | Nüfus Düzeltmesi | En İyi Kullanım |
|---|---|---|---|---|
| Basit Sayım | Hücre başına sayı | Hayır | Hayır | Hızlı ön bakış |
| KDE (standart) | Sürekli yoğunluk yüzeyi | Hayır | Mümkün | Görselleştirme, keşifsel analiz |
| Ağırlıklı KDE | Şiddet ağırlıklı yüzey | Hayır | Mümkün | Şiddet + sıklık birlikte |
| Getis-Ord Gi* | z-skoru, güven düzeyi | Evet | Hayır | İstatistiksel sıcak nokta doğrulama |
| Local Moran's I | Küme tipleri (HH, LL…) | Evet | Hayır | Anomali ve aykırı değer tespiti |
| Interpolasyon (IDW) | Sürekli değer yüzeyi | Hayır | Evet | Sürekli alan verisini tahmin etme |
Tipik iş akışı: KDE ile başlayın (keşifsel görselleştirme) → Gi* ile istatistiksel doğrulama yapın → Nüfus düzeltmesi uygulayın → Sonuçları karşılaştırarak raporlayın.
12. Uzamsal-Zamansal (Space-Time) KDE
Standart KDE yalnızca mekânsal boyutu ele alır. Oysa birçok fenomen zaman içinde de değişir: suç belirli saatlerde yoğunlaşır, hastalık yayılır, trafik kazaları hafta sonu farklılaşır. Uzamsal-zamansal KDE (STKDE), mekansal boyutlara üçüncü bir boyut olarak zamanı ekler.
Matematiksel olarak:
h_s mekansal bandwidth, h_t zamansal bandwidth (saat, gün, ay cinsinden) olur. Farklı zaman dilimlerine ait KDE'ler birbirine çıkarılarak değişim haritaları üretilebilir.
13. Uygulama Alanları
| Alan | Veri | Amaç | Ağırlık |
|---|---|---|---|
| Suç haritalaması | Suç olayı konumları | Devriye güzergahı, kaynak tahsisi | Suç şiddet skoru |
| Trafik güvenliği | Kaza noktaları | Öncelikli iyileştirme noktaları | Yaralı/ölü sayısı |
| Epidemiyoloji | Vaka konumları | Yayılım modeli, risk bölgesi | Hastalık şiddeti |
| Ekoloji | Tür gözlem noktaları | Habitat kullanım yoğunluğu | Birey sayısı |
| Perakende | Müşteri adresleri | Yeni şube konumu seçimi | Harcama miktarı |
| Gayrimenkul | Satış işlemleri | Piyasa aktivite yoğunluğu | İşlem fiyatı |
| Sismoloji | Deprem episantr noktaları | Sismik risk bölgeleri | Deprem büyüklüğü |
14. Yaygın Hatalar
- Coğrafi koordinatlarda KDE hesaplamak: Derece cinsinden koordinatlarla (EPSG:4326) yapılan KDE anlamsız bandwidth değerleri üretir. Mutlaka metre cinsinden projeksiyon kullanın (UTM, TM35).
- Nüfus düzeltmesi yapmamak: Yoğun nüfuslu kentsel alanlarda her fenomen daha fazla sayıda olur. Ham KDE haritası yanıltıcı olabilir — nüfusa normalize edin.
- Tek bandwidth ile karar vermek: En az 3 farklı bandwidth deneyip karşılaştırın; duyarlılık analizi yapın.
- Sınır etkisini görmezden gelmek: Özellikle küçük çalışma alanlarında sınır yakınındaki değerler yapay düşüktür.
- KDE'yi istatistiksel anlamlılık kanıtı saymak: KDE görsel keşif aracıdır; "bu bölgede gerçekten istatistiksel küme var" demek için Gi* veya LISA gerekir.
- Farklı parametre setleri ile üretilen KDE'leri karşılaştırmak: Aynı veri için farklı bandwidth ile yapılmış iki haritanın yoğunluk değerleri doğrudan karşılaştırılamaz.
Mekansal Yoğunluk Analizi İçin Uzman Desteği
KDE, sıcak nokta analizi, uzamsal-zamansal analiz ve mekansal görselleştirme projelerinde profesyonel CBS danışmanlığı.
Ücretsiz Danışmanlık AlınKaynaklar
- Silverman, B. W. (1986). Density Estimation for Statistics and Data Analysis. Chapman & Hall.
- Chainey, S., Tompson, L., & Uhlig, S. (2008). The utility of hotspot mapping for predicting spatial patterns of crime. Security Journal, 21(1–2), 4–28.
- Fotheringham, A. S., Brunsdon, C., & Charlton, M. (2000). Quantitative Geography: Perspectives on Spatial Data Analysis. SAGE Publications.
- Nakaya, T., & Yano, K. (2010). Visualising crime clusters in a space-time cube. GeoJournal, 75(3), 289–306.
- KDEpy kütüphanesi belgeleri: kdepy.readthedocs.io
- QGIS Heatmap dokümantasyonu: docs.qgis.org