# PostgreSQL’de Hareketli Ortalama Nasıl Hesaplanır? (Örneklerle)
PostgreSQL veritabanınızda zaman serileri verileriyle çalışıyorsanız, trendleri ve kalıpları tespit etmek için hareketli ortalama hesaplamak çok faydalı olacaktır. Bu makale, PostgreSQL’de hareketli ortalama hesaplamanın temellerinden ileri düzey tekniklerine kadar adım adım bir rehber sunmaktadır. Veri analizi ve zaman serisi verilerinin yorumlanmasında hareketli ortalamaların gücünü keşfedeceğiz. Başlangıç seviyesinden ileri seviyeye, gerçek dünya örnekleri ve pratik çözümlerle dolu bu rehber, PostgreSQL becerilerinizi bir üst seviyeye taşımanıza yardımcı olacaktır.
Öğrenme Yol Haritası
Bu makale, farklı seviyelerdeki okuyucular için tasarlanmıştır. Aşağıdaki yol haritası, sizin için en uygun bölüme hızlıca ulaşmanıza yardımcı olacaktır:
* Yeni Başlayan: Adım adım açıklama, basit kod örneği.
* Orta Seviye: Gerçek hayat örneği, optimizasyon ipuçları.
* İleri Seviye: Performans analizi, edge case’ler (aykırı durumlar).
PostgreSQL’de Hareketli Ortalama: Temel Kavramlar
Hareketli ortalama (Moving Average), bir veri serisindeki belirli bir zaman dilimi içindeki değerlerin ortalamasını hesaplama yöntemidir. Bu, veri serisindeki gürültüyü azaltmaya ve altta yatan trendleri ortaya çıkarmaya yardımcı olur. PostgreSQL’de hareketli ortalama hesaplamak için çeşitli yöntemler mevcuttur. En yaygın kullanılanlar, basit hareketli ortalama (SMA), ağırlıklı hareketli ortalama (WMA) ve üstel hareketli ortalama (EMA)’dır.
Basit Hareketli Ortalama (SMA): Belirli bir pencere büyüklüğündeki (periyot) tüm değerlerin basit aritmetik ortalamasını alır. Örneğin, 3 günlük bir SMA, son üç günün değerlerinin ortalamasını alır.
Ağırlıklı Hareketli Ortalama (WMA): SMA’ya benzer, ancak daha yeni verilere daha fazla ağırlık verir. Daha yeni verilerin daha önemli olduğunu düşündüğümüz durumlarda tercih edilir.
Üstel Hareketli Ortalama (EMA): Daha yeni verilere daha fazla ağırlık veren bir başka yöntemdir. WMA’ya göre hesaplama yöntemi daha karmaşıktır ve daha fazla ağırlıklandırma sağlar, bu da daha hızlı tepki süresi sunar.
Bu makalede, öncelikle en basit ve anlaşılır olan SMA’ya odaklanacağız, daha sonra diğer yöntemleri ele alacağız.
PostgreSQL’de Basit Hareketli Ortalama (SMA) Nasıl Hesaplanır? (Yeni Başlayanlar İçin)
Öncelikle, basit bir örnek veri seti oluşturalım:
CREATE TABLE stok_fiyatlari (
tarih DATE,
fiyat NUMERIC
);
INSERT INTO stok_fiyatlari (tarih, fiyat) VALUES
('2024-01-20', 10),
('2024-01-21', 12),
('2024-01-22', 15),
('2024-01-23', 14),
('2024-01-24', 16),
('2024-01-25', 18),
('2024-01-26', 20);
Şimdi, 3 günlük bir SMA hesaplayalım. Bunun için AVG() fonksiyonu ve pencere fonksiyonlarını kullanacağız:
SELECT
tarih,
fiyat,
AVG(fiyat) OVER (ORDER BY tarih ASC ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS sma_3
FROM
stok_fiyatlari;
Bu sorgu, her satır için son üç günün fiyat ortalamasını hesaplar. ROWS BETWEEN 2 PRECEDING AND CURRENT ROW kısmı, pencere fonksiyonunun nasıl çalıştığını tanımlar. 2 PRECEDING, mevcut satırdan önceki iki satırı, CURRENT ROW ise mevcut satırı içerir.
Sonuç, her gün için 3 günlük hareketli ortalamayı gösterir. Pencere boyutunu değiştirerek (örneğin, ROWS BETWEEN 6 PRECEDING AND CURRENT ROW ile 7 günlük SMA) farklı periyotlar için hareketli ortalama hesaplayabilirsiniz.
Gerçek Hayat Örneği: Web Sitesi Trafiği Analizi (Orta Seviye)
fatihsoysal.com gibi bir web sitesinin günlük ziyaretçi sayısını takip ettiğimizi varsayalım. Bu verileri PostgreSQL’de saklıyoruz ve günlük ziyaretçilerdeki trendleri analiz etmek istiyoruz. 7 günlük bir hareketli ortalama hesaplayarak, günlük dalgalanmaları filtreleyip genel trendi daha net görebiliriz.
Öncelikle, web sitesi trafik verilerini içeren bir tablo oluşturalım:
CREATE TABLE web_trafigi (
tarih DATE,
ziyaretci_sayisi INTEGER
);
--Veri ekleme işlemi burada yapılacak...
Ardından, 7 günlük hareketli ortalamayı hesaplayan sorguyu çalıştıralım:
SELECT
tarih,
ziyaretci_sayisi,
AVG(ziyaretci_sayisi) OVER (ORDER BY tarih ASC ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS sma_7
FROM
web_trafigi;
Bu sorgu, her gün için son yedi günün ziyaretçi sayısının ortalamasını hesaplayarak, daha net bir trend analizi sağlar. Bu analiz, web sitesi trafiğinin zaman içindeki gelişimini anlamak ve gelecekteki stratejileri planlamak için kullanılabilir.
PostgreSQL’de Hareketli Ortalama Optimizasyonu (Orta Seviye)
Büyük veri kümeleriyle çalışırken, hareketli ortalama hesaplama işlemi performans sorunlarına yol açabilir. Performansı iyileştirmek için aşağıdaki ipuçlarını kullanabilirsiniz:
* İndeksleme: tarih sütununa bir indeks eklemek, sorguyu hızlandıracaktır.
* Parçalama (Partitioning): Büyük tabloları parçalara ayırmak, sorgu süresini kısaltır.
* Materyalize Görünüm (Materialized View): Hareketli ortalamayı önceden hesaplayıp materyalize bir görünümde saklamak, tekrarlanan hesaplamaları önler. Bu, raporlama gibi sıkça kullanılan sorgulamalar için idealdir.
İleri Düzey Teknikler: Ağırlıklı ve Üstel Hareketli Ortalamalar (İleri Seviye)
Basit hareketli ortalama tüm değerlere eşit ağırlık verirken, ağırlıklı hareketli ortalama daha yeni verilere daha fazla ağırlık verir. Üstel hareketli ortalama ise, ağırlıklandırmayı üstel olarak azaltarak daha yeni verilere daha fazla önem verir.
Ağırlıklı Hareketli Ortalama (WMA): Ağırlıklandırma faktörlerini belirlememiz gerekir. Örneğin, 3 günlük bir WMA için ağırlıklar sırasıyla 1, 2 ve 3 olabilir:
SELECT
tarih,
fiyat,
(
LAG(fiyat, 2, 0) OVER (ORDER BY tarih ASC) * 1 +
LAG(fiyat, 1, 0) OVER (ORDER BY tarih ASC) * 2 +
fiyat * 3
) / 6 AS wma_3
FROM
stok_fiyatlari;
Üstel Hareketli Ortalama (EMA): EMA hesaplaması daha karmaşıktır ve yinelemeli bir formül kullanır. Bu formülde, düzeltme faktörü (smoothing factor) önemli bir rol oynar. Bu faktör, daha yeni verilere ne kadar ağırlık verileceğini belirler.
-- EMA hesaplaması için daha karmaşık bir SQL sorgusu gereklidir ve genellikle yinelemeli bir yaklaşım veya kullanıcı tanımlı bir fonksiyon gerektirir.
-- Bu kısım için daha detaylı bir açıklama ve örnek kod, https://fatihsoysal.com adresindeki ilgili makalede bulunabilir.
Performans Analizi ve Edge Case’ler (İleri Seviye)
Büyük veri kümeleri üzerinde hareketli ortalama hesaplamasının performansı, kullanılan yöntem, indeksleme, parçalama ve diğer optimizasyon tekniklerine bağlıdır. Performans analizi için EXPLAIN ANALYZE komutunu kullanarak sorgu planını inceleyebilir ve darboğazları belirleyebilirsiniz.
Edge case’ler, örneğin verinin eksik olduğu durumlar veya çok hızlı değişimler içeren durumlar, hareketli ortalama hesaplamalarını etkileyebilir. Bu durumları ele almak için veri ön işleme teknikleri (örneğin, eksik verilerin doldurulması) kullanmak gerekebilir.
Sonuç
PostgreSQL’de hareketli ortalama hesaplamak, zaman serisi verilerini analiz etmek ve trendleri belirlemek için güçlü bir araçtır. Bu makalede, basit hareketli ortalamadan daha gelişmiş tekniklere kadar çeşitli yöntemleri ele aldık. Veri büyüklüğünüz ve performans gereksinimleriniz göz önünde bulundurularak en uygun yöntemi seçmeniz önemlidir. Optimizasyon tekniklerini kullanarak büyük veri kümeleri üzerinde bile verimli hesaplamalar yapabilirsiniz. Unutmayın, https://fatihsoysal.com adresindeki diğer makalelerimde de veri analizi ve PostgreSQL ile ilgili daha fazla bilgi bulabilirsiniz.
Sıkça Sorulan Sorular:
1. Hangi hareketli ortalama yöntemi en iyisidir? En iyi yöntem, veri setinizin özelliklerine ve analiz hedeflerinize bağlıdır. SMA basit ve anlaşılırdır, WMA ve EMA ise daha yeni verilere daha fazla ağırlık verir.
2. Hareketli ortalama pencere boyutu nasıl seçilir? Pencere boyutu, analiz edilen verilerin doğasına ve tespit edilmek istenen trendlerin frekansına bağlıdır. Daha kısa pencereler, kısa vadeli dalgalanmalara daha duyarlıdır, daha uzun pencereler ise uzun vadeli trendleri daha iyi yansıtır.
3. Eksik verilerle nasıl başa çıkılır? Eksik veriler, hareketli ortalama hesaplamalarını etkileyebilir. Eksik verileri doldurmak için çeşitli yöntemler mevcuttur (örneğin, önceki veya sonraki değerlerle doldurma, ortalama ile doldurma).
4. PostgreSQL’de hareketli ortalama hesaplamanın performansını nasıl iyileştirebilirim? İndeksleme, parçalama ve materyalize görünümler performansı artırabilir.
5. Ağırlıklı hareketli ortalama için ağırlıklar nasıl seçilir? Ağırlıklar, analiz hedeflerine ve veri setinin özelliklerine bağlı olarak belirlenir. Daha yeni verilere daha fazla ağırlık vermek için ağırlıkları artan bir sıra ile seçebilirsiniz.
Yazar: Fatih Soysal