AI Atlas
Başlangıç· ~2 dk okuma#time-series#trend#seasonality

Zaman Serisi

Time Series

Zaman içinde sıralı olarak ölçülmüş veri — günlük satışlar, saatlik sıcaklık, milisaniyelik kalp atışı. Sıralama anlamlıdır ve özel analiz yöntemleri gerektirir.

ZAMAN SERİSİyttrendTrend + mevsimsellik + gürültünün toplamı.
Tanım

Zaman serisi, eşit (genelde) zaman aralıklarıyla kaydedilmiş bir gözlem dizisidir. Klasik tabular verinin aksine sıra rastgele değil, anlamlıdır: t anındaki değer t-1 ile büyük olasılıkla ilişkilidir. Bu yapısal özellik, hem zenginlik (mevsimsellik, trend, otokorelasyon) hem de kısıtlama (rastgele bölünme yapamazsın) getirir.

Bir zaman serisinin temel bileşenleri şunlardır: trend (uzun vadeli yön), seasonality (mevsimsel ya da haftalık tekrar eden örüntü), cyclical (yıllar süren iş dalgaları), noise (rastgele dalgalanma). Bu dört bileşene ayrıştırma (decomposition), analizin başlangıç noktasıdır.

Zaman serileri durağan (stationary) veya durağan olmayan olabilir. Durağan seri istatistiksel özelliklerini zamanla korur; durağan olmayan seri trend ya da değişken varyans içerir. Klasik istatistiksel modeller (ARIMA) durağanlık ister; pratikte fark alma (differencing), log dönüşümü, mevsimsellik ayırma ile durağanlığa götürülür.

Modern ML yaklaşımları (gradient boosting, derin öğrenme) durağanlığı zorunlu kılmaz; lag özellikleri, takvim özellikleri, dış değişkenler ile zenginleştirilen tabular bir dataset kurarsın ve regresyon yapar gibi modellersin.

Benzetme

Bir kalp atışı izi düşün. Tek bir noktanın değeri pek bir şey söylemez; ama önceki dakikalardaki ritim, dalga şeklinin düzeni, varsa düzensizlik — hepsi bir doktora çok şey anlatır. Sıralama bilgi taşır. Aynı kalp atışı verisini rastgele karıştırırsan tüm bilgi kaybolur. Zaman serisi analizi de aynen bu mantıkla çalışır — sıra korunmalıdır.

Gerçek dünyadan örnek

Bir e-ticaret sitesinin son 3 yıldaki günlük sipariş sayısı bir zaman serisidir. Görsel bakışta gözüken örüntüler:

1. Trend: yıl başına ~%18 büyüme (uzun vadeli artış). 2. Yıllık mevsimsellik: Aralık'ta zirve (yılbaşı/Yeni Yıl), ocak-şubat dip. 3. Haftalık mevsimsellik: Pazartesi-Salı hafifçe düşük, Çarşamba-Perşembe normal, Cuma-Pazar tepe. 4. Olay etkileri: Black Friday, Ramazan/Bayram, Sevgililer Günü etrafında belirgin sıçramalar.

Bu bileşenler ayrıştırıldığında her biri ayrı modellenir: trend için doğrusal/üstel, mevsimsellik için Fourier/dummy, tatil etkileri için indicator değişkenler. Prophet bu ayrıştırmayı otomatik yapar; LightGBM modelinde ise lag + takvim + tatil özellikleri olarak elle inşa edersin.

Kod örnekleri
Zaman serisi keşfi ve ayrıştırmaPython
import pandas as pd
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.stattools import adfuller
import matplotlib.pyplot as plt

df = pd.read_csv("orders.csv", parse_dates=["date"], index_col="date")

# Görselleştirme — her zaman önce yap
df["orders"].plot(figsize=(12, 4), title="Günlük siparişler")
plt.savefig("series.png")

# Mevsimsel ayrıştırma
result = seasonal_decompose(df["orders"], model="additive", period=7)
result.plot()
plt.savefig("decomposition.png")

# Durağanlık testi (ADF)
stat, pvalue, *_ = adfuller(df["orders"].dropna())
print(f"ADF p-value: {pvalue:.4f}")
# p < 0.05 → durağan
# p > 0.05 → durağan değil; differencing gerekebilir

# Rolling istatistikler — varyans değişiyor mu?
df["rolling_mean"] = df["orders"].rolling(30).mean()
df["rolling_std"] = df["orders"].rolling(30).std()
Lag ve takvim özellikleriPython
import pandas as pd

df = pd.read_csv("orders.csv", parse_dates=["date"]).sort_values("date")

# Geçmiş değerler
for lag in [1, 7, 14, 30]:
    df[f"lag_{lag}"] = df["orders"].shift(lag)

# Takvim özellikleri
df["dow"] = df["date"].dt.dayofweek      # 0=Pzt
df["month"] = df["date"].dt.month
df["is_weekend"] = df["dow"].isin([5, 6]).astype(int)
df["day_of_year"] = df["date"].dt.dayofyear

# Hareketli ortalama
df["ma_7"] = df["orders"].rolling(7).mean()
df["ma_30"] = df["orders"].rolling(30).mean()
Ne zaman kullan
  • Veri zaman damgalı ve sıralı olarak anlamlıysa
  • Talep, finansal seriler, sensör verileri, telemetri analizinde
  • Anomali tespitinde — beklenenden büyük sapma alarm
  • Tahminleme tabanı — forecasting modelleri zaman serisi üzerine kurulur
Ne zaman kullanma
  • Zaman boyutu olmayan, sıra anlamsız tabular veri
  • Çok kısa seri — istatistiksel desen çıkarılamaz
  • Çok düzensiz aralıklarla gelen veri — önce yeniden örnekleme gerekir
Sık yapılan hatalar

Zaman damgasını rastgele bölmek

Zaman serisinde rastgele train/test bölmek, geleceği eğitime, geçmişi doğrulamaya verir. Test skoru yüksek görünür ama canlıda çuvallarsın. Daima kronolojik bölme kullan.

Eksik tarihleri görmemek

Veri günlükse her günün satırı olmalı. Bazı günler eksikse model yanlış lag hesaplar. resample('D') ile yeniden indekslenip eksik değerler interpole/forward-fill edilmeli.

Birden çok seri için tek model varsayımı

1000 SKU'nun her biri için ayrı zaman serisi var; hepsini tek model yapmak veya 1000 model eğitmek arasında doğru bir orta yol vardır (hiyerarşik tahmin, global modeller). Her ikisinin de kendi tuzakları.