Türkçe

Pencere fonksiyonları ile zaman serisi verilerinin gücünü açığa çıkarın. Bu kılavuz, veri analizi için temel kavramları, pratik örnekleri ve gelişmiş teknikleri kapsar.

Zaman Serisi Analitiği: Veri İçgörüleri İçin Pencere Fonksiyonlarında Uzmanlaşmak

Sıralı ve zamana bağlı doğası ile karakterize edilen zaman serisi verileri, tüm sektörlerde yaygındır. Hisse senedi fiyatlarını izlemekten web sitesi trafiğini izlemeye, sensör okumalarını analiz etmekten satış trendlerini tahmin etmeye kadar, zaman serisi verilerinden anlamlı içgörüler elde etme yeteneği, bilinçli karar verme için çok önemlidir. Pencere fonksiyonları, bir tablo veya veri çerçevesindeki mevcut satırla ilgili bir dizi satır üzerinde hesaplamalar yapmak için güçlü ve esnek bir araç seti sağlar ve bu da onları zaman serisi analizi için vazgeçilmez kılar.

Zaman Serisi Verilerini Anlamak

Zaman serisi verileri, zaman sırasına göre indekslenmiş bir veri noktaları dizisidir. Veri noktaları çeşitli metrikleri temsil edebilir, örneğin:

Zaman serisi verilerini analiz etmek, gelecekteki değerleri tahmin etmek, anormallikleri tespit etmek ve iş süreçlerini optimize etmek için kullanılabilecek kalıpları, trendleri ve mevsimselliği belirlemeyi içerir.

Pencere Fonksiyonlarına Giriş

Pencere fonksiyonları, pencereleme toplamları veya analitik fonksiyonlar olarak da bilinir, satırları geleneksel toplama fonksiyonları (örn. SUM, AVG, COUNT) gibi tek bir sonuç kümesinde gruplandırmadan, mevcut satırla ilgili bir dizi satır üzerinde hesaplamalar yapmanıza olanak tanır. Bu özellik, genellikle hareketli ortalamaları, kümülatif toplamları ve diğer zaman tabanlı metrikleri hesaplamanız gereken zaman serisi analizi için özellikle yararlıdır.

Bir pencere fonksiyonu tipik olarak aşağıdaki bileşenlerden oluşur:

  1. Fonksiyon: Gerçekleştirilecek hesaplama (örn. AVG, SUM, RANK, LAG).
  2. OVER ifadesi: Hesaplama için kullanılan satırların penceresini tanımlar.
  3. PARTITION BY ifadesi (isteğe bağlı): Verileri bölümlere ayırır ve pencere fonksiyonu her bölüme bağımsız olarak uygulanır.
  4. ORDER BY ifadesi (isteğe bağlı): Her bölümdeki satırların sırasını belirtir.
  5. ROWS/RANGE ifadesi (isteğe bağlı): Hesaplama için kullanılan mevcut satıra göre satır kümesi olan pencere çerçevesini tanımlar.

Temel Kavramlar ve Sözdizimi

1. OVER() İfadesi

OVER() ifadesi bir pencere fonksiyonunun kalbidir. Fonksiyonun üzerinde çalışacağı satırların penceresini tanımlar. Bağımsız değişken içermeyen basit bir OVER() ifadesi, tüm sonuç kümesini pencere olarak kabul edecektir. Örneğin:

SQL Örneği:

SELECT
  date,
  sales,
  AVG(sales) OVER()
FROM
  sales_data;

Bu sorgu, sales_data tablosundaki tüm tarihlerdeki ortalama satışları hesaplar.

2. PARTITION BY

PARTITION BY ifadesi, verileri bölümlere ayırır ve pencere fonksiyonu her bölüme ayrı ayrı uygulanır. Bu, verilerinizdeki farklı gruplar için metrikleri hesaplamak istediğinizde kullanışlıdır.

SQL Örneği:

SELECT
  date,
  product_id,
  sales,
  AVG(sales) OVER (PARTITION BY product_id)
FROM
  sales_data;

Bu sorgu, her ürün için ayrı ayrı ortalama satışları hesaplar.

3. ORDER BY

ORDER BY ifadesi, her bölümdeki satırların sırasını belirtir. Bu, çalışan toplamları, hareketli ortalamaları ve diğer zaman tabanlı metrikleri hesaplamak için gereklidir.

SQL Örneği:

SELECT
  date,
  sales,
  SUM(sales) OVER (ORDER BY date)
FROM
  sales_data;

Bu sorgu, zaman içindeki satışların kümülatif toplamını hesaplar.

4. ROWS/RANGE

ROWS ve RANGE ifadeleri, hesaplama için kullanılan mevcut satıra göre satır kümesi olan pencere çerçevesini tanımlar. ROWS ifadesi pencere çerçevesini fiziksel satır numarasına göre belirtirken, RANGE ifadesi pencere çerçevesini ORDER BY sütununun değerlerine göre belirtir.

ROWS Örneği:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
FROM
  sales_data;

Bu sorgu, son 3 gündeki (mevcut gün dahil) satışların hareketli ortalamasını hesaplar.

RANGE Örneği:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date RANGE BETWEEN INTERVAL '2' DAY PRECEDING AND CURRENT ROW)
FROM
  sales_data;

Bu sorgu, son 2 gündeki (mevcut gün dahil) satışların hareketli ortalamasını hesaplar. `RANGE` ifadesinin sayısal veya tarih/saat veri türünde sıralı bir sütun gerektirdiğini unutmayın.

Zaman Serisi Analizi İçin Yaygın Pencere Fonksiyonları

1. Yuvarlanan/Hareketli Ortalama

Hareketli ortalama olarak da bilinen yuvarlanan ortalama, zaman serisi verilerindeki kısa vadeli dalgalanmaları düzeltmek ve daha uzun vadeli trendleri vurgulamak için yaygın olarak kullanılan bir tekniktir. Belirli bir zaman penceresindeki değerlerin ortalaması alınarak hesaplanır.

SQL Örneği:

SELECT
  date,
  sales,
  AVG(sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_7_days
FROM
  sales_data;

Bu sorgu, 7 günlük satışların hareketli ortalamasını hesaplar.

Python Örneği (Pandas kullanarak):

import pandas as pd

# 'date' ve 'sales' sütunlarına sahip 'sales_df' adlı bir Pandas DataFrame'iniz olduğunu varsayalım

sales_df['moving_average_7_days'] = sales_df['sales'].rolling(window=7).mean()

Küresel Uygulama Örneği: Çok uluslu bir perakendeci, günlük satış dalgalanmalarını gidermek ve farklı bölgelerdeki temel satış trendlerini belirlemek için 30 günlük hareketli ortalama kullanabilir.

2. Kümülatif Toplam

Çalışan toplam olarak da bilinen kümülatif toplam, mevcut satıra kadar olan değerlerin toplamını hesaplar. Zaman içindeki toplam birikmiş değeri izlemek için kullanışlıdır.

SQL Örneği:

SELECT
  date,
  sales,
  SUM(sales) OVER (ORDER BY date) AS cumulative_sales
FROM
  sales_data;

Bu sorgu, zaman içindeki satışların kümülatif toplamını hesaplar.

Python Örneği (Pandas kullanarak):

import pandas as pd

# 'date' ve 'sales' sütunlarına sahip 'sales_df' adlı bir Pandas DataFrame'iniz olduğunu varsayalım

sales_df['cumulative_sales'] = sales_df['sales'].cumsum()

Küresel Uygulama Örneği: Uluslararası bir e-ticaret şirketi, farklı pazarlarda yeni bir ürün lansmanından elde edilen toplam geliri izlemek için kümülatif satışları kullanabilir.

3. Lead ve Lag

LEAD ve LAG fonksiyonları, sırasıyla sonraki veya önceki satırlardan verilere erişmenizi sağlar. Dönemden döneme değişiklikleri hesaplamak, trendleri belirlemek ve farklı zaman dilimlerindeki değerleri karşılaştırmak için kullanışlıdırlar.

SQL Örneği:

SELECT
  date,
  sales,
  LAG(sales, 1, 0) OVER (ORDER BY date) AS previous_day_sales,
  sales - LAG(sales, 1, 0) OVER (ORDER BY date) AS sales_difference
FROM
  sales_data;

Bu sorgu, önceki güne kıyasla satış farkını hesaplar. `LAG(sales, 1, 0)` fonksiyonu, önceki satırdan (1 ofset) satış değerini alır ve önceki satır yoksa (örn. ilk satır), 0 (varsayılan değer) döndürür.

Python Örneği (Pandas kullanarak):

import pandas as pd

# 'date' ve 'sales' sütunlarına sahip 'sales_df' adlı bir Pandas DataFrame'iniz olduğunu varsayalım

sales_df['previous_day_sales'] = sales_df['sales'].shift(1)
sales_df['sales_difference'] = sales_df['sales'] - sales_df['previous_day_sales'].fillna(0)

Küresel Uygulama Örneği: Küresel bir havayolu şirketi, aynı rota için farklı haftalardaki bilet satışlarını karşılaştırmak ve potansiyel talep dalgalanmalarını belirlemek için lead ve lag fonksiyonlarını kullanabilir.

4. Rank ve Dense Rank

RANK() ve DENSE_RANK() fonksiyonları, belirtilen sıralamaya göre bir bölüm içindeki her satıra bir sıra atar. RANK() boşluklu sıralar atar (örn. 1, 2, 2, 4), DENSE_RANK() ise boşluksuz sıralar atar (örn. 1, 2, 2, 3).

SQL Örneği:

SELECT
  date,
  sales,
  RANK() OVER (ORDER BY sales DESC) AS sales_rank,
  DENSE_RANK() OVER (ORDER BY sales DESC) AS sales_dense_rank
FROM
  sales_data;

Bu sorgu, satış değerlerini azalan sırada sıralar.

Küresel Uygulama Örneği: Küresel bir çevrimiçi pazar yeri, her ülke veya bölgedeki en çok satan ürünleri belirlemek için sıralama fonksiyonlarını kullanabilir.

Gelişmiş Teknikler ve Uygulamalar

1. Pencere Fonksiyonlarını Birleştirme

Daha karmaşık hesaplamalar yapmak için pencere fonksiyonları birleştirilebilir. Örneğin, kümülatif toplamın hareketli ortalamasını hesaplayabilirsiniz.

SQL Örneği:

SELECT
  date,
  sales,
  AVG(cumulative_sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_cumulative_sales
FROM
  (
    SELECT
      date,
      sales,
      SUM(sales) OVER (ORDER BY date) AS cumulative_sales
    FROM
      sales_data
  ) AS subquery;

2. Koşullu Toplama ile Pencere Fonksiyonlarını Kullanma

Belirli koşullara göre hesaplamalar yapmak için pencere fonksiyonlarını koşullu toplama ile birlikte kullanabilirsiniz (örn. CASE ifadelerini kullanarak).

SQL Örneği:

SELECT
  date,
  sales,
  AVG(CASE WHEN sales > 100 THEN sales ELSE NULL END) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_high_sales
FROM
  sales_data;

Bu sorgu, yalnızca satışların 100'den büyük olduğu günler için satışların hareketli ortalamasını hesaplar.

3. Zaman Serisi Ayrıştırması

Pencere fonksiyonları, bir zaman serisini trend, mevsimsel ve artık bileşenlerine ayırmak için kullanılabilir. Bu, trendi tahmin etmek için hareketli ortalamaların hesaplanmasını, mevsimsel kalıpların belirlenmesini ve ardından artıkları elde etmek için trend ve mevsimsel bileşenlerin çıkarılmasını içerir.

4. Anormallik Tespiti

Pencere fonksiyonları, hareketli ortalamaları ve standart sapmaları hesaplayarak zaman serisi verilerindeki anormallikleri tespit etmek için kullanılabilir. Belirli bir aralığın dışına düşen veri noktaları (örn. hareketli ortalamadan +/- 3 standart sapma), anormallik olarak işaretlenebilir.

Sektörlerde Pratik Örnekler

1. Finans

2. Perakende

3. Üretim

4. Sağlık Hizmetleri

Doğru Aracı Seçme

Pencere fonksiyonları, aşağıdakiler dahil olmak üzere çeşitli veri işleme araçlarında ve programlama dillerinde mevcuttur:

Araç seçimi, özel ihtiyaçlarınıza ve teknik uzmanlığınıza bağlıdır. SQL, ilişkisel veritabanlarında depolanan veriler için çok uygundur, Python ve Spark ise büyük veri kümelerini işlemek ve karmaşık analizler yapmak için daha esnektir.

En İyi Uygulamalar

Sonuç

Pencere fonksiyonları, hareketli ortalamaları, kümülatif toplamları, lead/lag değerlerini ve diğer zaman tabanlı metrikleri hesaplamanızı sağlayan zaman serisi analizi için güçlü bir araçtır. Pencere fonksiyonlarında uzmanlaşarak, zaman serisi verilerinizden değerli içgörüler elde edebilir ve daha bilinçli kararlar alabilirsiniz. İster finansal verileri, ister satış verilerini, ister sensör verilerini veya web trafiği verilerini analiz ediyor olun, pencere fonksiyonları geleneksel toplama tekniklerini kullanarak tespit edilmesi zor olacak kalıpları, trendleri ve anormallikleri belirlemenize yardımcı olabilir. Pencere fonksiyonlarının temel kavramlarını ve sözdizimini anlayarak ve en iyi uygulamaları izleyerek, bunları çeşitli sektörlerdeki çok çeşitli gerçek dünya sorunlarını çözmek için etkili bir şekilde kullanabilirsiniz.