Yapay Zeka

Yapay Zeka ile Zaman Serisi Tahmini: Prophet ve LSTM

Fatih Algül
12.03.2026 276 görüntülenme

Giriş: Zaman Serisi Tahmini Neden Önemli?

Zaman serisi tahmini, geçmiş verilere dayanarak gelecekteki değerleri öngörme sürecidir. Finansal piyasalardan hava durumu tahminlerine, enerji tüketiminden e-ticaret satış projeksiyonlarına kadar pek çok alanda kritik bir rol oynar. Geleneksel istatistiksel yöntemler (ARIMA, Exponential Smoothing vb.) uzun yıllar boyunca bu alanda standart olmuş olsa da, yapay zeka ve makine öğrenmesi tekniklerinin yükselişi ile birlikte çok daha güçlü ve esnek araçlar ortaya çıkmıştır.

Bu yazıda, zaman serisi tahmini için en popüler iki yaklaşımı derinlemesine inceleyeceğiz: Facebook (Meta) tarafından geliştirilen Prophet ve derin öğrenme tabanlı LSTM (Long Short-Term Memory) ağları. Her iki yöntemin çalışma prensiplerini, güçlü ve zayıf yönlerini, pratik kod örnekleriyle birlikte ele alacağız.

Prophet Nedir?

Prophet, Meta'nın 2017 yılında açık kaynak olarak yayımladığı bir zaman serisi tahmin kütüphanesidir. Temel felsefesi, alan uzmanlarının derin istatistik bilgisine sahip olmadan da güçlü tahminler üretebilmesini sağlamaktır. Prophet, ayrıştırılabilir (decomposable) bir model kullanır ve zaman serisini üç temel bileşene ayırır:

  • Trend (g(t)): Verinin uzun vadeli artış veya azalış eğilimi. Doğrusal veya lojistik büyüme modellerini destekler.
  • Mevsimsellik (s(t)): Haftalık, yıllık veya özel periyotlarla tekrar eden örüntüler. Fourier serileri kullanılarak modellenir.
  • Tatil/Özel Gün Etkisi (h(t)): Bayramlar, kampanyalar gibi düzensiz ama bilinen olayların etkisi.

Matematiksel olarak model şu şekilde ifade edilir:

y(t) = g(t) + s(t) + h(t) + ε(t)

Burada ε(t), modelin yakalayamadığı gürültüyü (noise) temsil eder.

Prophet ile Basit Bir Tahmin Örneği

Aşağıdaki Python kodu, Prophet kullanarak basit bir satış tahmini yapmayı göstermektedir:

import pandas as pd
from prophet import Prophet
import matplotlib.pyplot as plt

# Veriyi yükle - Prophet 'ds' (tarih) ve 'y' (değer) sütunlarını bekler
df = pd.read_csv('satis_verisi.csv')
df.columns = ['ds', 'y']
df['ds'] = pd.to_datetime(df['ds'])

# Modeli oluştur ve eğit
model = Prophet(
    yearly_seasonality=True,
    weekly_seasonality=True,
    daily_seasonality=False,
    changepoint_prior_scale=0.05
)
model.fit(df)

# Gelecek 90 gün için tahmin yap
future = model.make_future_dataframe(periods=90)
forecast = model.predict(future)

# Sonuçları görselleştir
fig = model.plot(forecast)
plt.title('Satış Tahmini - Prophet')
plt.xlabel('Tarih')
plt.ylabel('Satış Miktarı')
plt.show()

# Bileşenleri ayrı ayrı görselleştir
fig2 = model.plot_components(forecast)
plt.show()

Prophet'in Güçlü Yönleri

  • Kullanımı son derece kolaydır; minimum parametre ayarı gerektirir.
  • Eksik veriler ve aykırı değerlerle iyi başa çıkar.
  • Tatil ve özel gün etkilerini kolayca modele dahil edebilirsiniz.
  • Trend değişim noktalarını (changepoints) otomatik olarak algılar.
  • Güven aralıkları (uncertainty intervals) ile birlikte tahmin üretir.

LSTM Nedir?

LSTM, 1997 yılında Hochreiter ve Schmidhuber tarafından önerilen özel bir Tekrarlayan Sinir Ağı (RNN) mimarisidir. Klasik RNN'lerin en büyük sorunu olan kaybolan gradyan problemini (vanishing gradient problem) çözmek için tasarlanmıştır. LSTM, hücre durumu (cell state) adı verilen bir bellek mekanizması sayesinde uzun vadeli bağımlılıkları öğrenebilir.

Bir LSTM hücresi üç temel kapıdan (gate) oluşur:

  1. Unutma Kapısı (Forget Gate): Hücre durumundan hangi bilgilerin atılacağına karar verir.
  2. Giriş Kapısı (Input Gate): Yeni bilgilerden hangilerinin hücre durumuna ekleneceğini belirler.
  3. Çıkış Kapısı (Output Gate): Hücre durumunun hangi kısmının çıktı olarak verileceğini kontrol eder.

Bu kapı mekanizması, LSTM'in uzun zaman aralıklarındaki örüntüleri yakalayabilmesini sağlar; bu da zaman serisi tahmini için onu ideal bir aday yapar.

LSTM ile Zaman Serisi Tahmini Örneği

Aşağıda Keras/TensorFlow kullanarak bir LSTM modeli oluşturma ve eğitme örneği verilmiştir:

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
from tensorflow.keras.callbacks import EarlyStopping
import matplotlib.pyplot as plt

# Veriyi yükle ve ölçeklendir
df = pd.read_csv('satis_verisi.csv', parse_dates=['tarih'], index_col='tarih')
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_data = scaler.fit_transform(df[['satis']].values)

# Pencere boyutunu belirle ve eğitim verisi oluştur
window_size = 60

def create_sequences(data, window):
    X, y = [], []
    for i in range(window, len(data)):
        X.append(data[i - window:i, 0])
        y.append(data[i, 0])
    return np.array(X), np.array(y)

# Eğitim ve test ayrımı
train_size = int(len(scaled_data) * 0.8)
train_data = scaled_data[:train_size]
test_data = scaled_data[train_size - window_size:]

X_train, y_train = create_sequences(train_data, window_size)
X_test, y_test = create_sequences(test_data, window_size)

# LSTM için veriyi 3 boyutlu hale getir: [örnekler, zaman adımları, özellikler]
X_train = X_train.reshape((X_train.shape[0], X_train.shape[1], 1))
X_test = X_test.reshape((X_test.shape[0], X_test.shape[1], 1))

# LSTM modelini oluştur
model = Sequential([
    LSTM(128, return_sequences=True, input_shape=(window_size, 1)),
    Dropout(0.2),
    LSTM(64, return_sequences=True),
    Dropout(0.2),
    LSTM(32, return_sequences=False),
    Dropout(0.2),
    Dense(16, activation='relu'),
    Dense(1)
])

model.compile(optimizer='adam', loss='mean_squared_error')

# Early stopping ile eğit
early_stop = EarlyStopping(monitor='val_loss', patience=10, restore_best_weights=True)

history = model.fit(
    X_train, y_train,
    epochs=100,
    batch_size=32,
    validation_split=0.1,
    callbacks=[early_stop],
    verbose=1
)

# Tahmin yap ve ölçeği geri dönüştür
predictions = model.predict(X_test)
predictions = scaler.inverse_transform(predictions)
y_test_actual = scaler.inverse_transform(y_test.reshape(-1, 1))

# Sonuçları görselleştir
plt.figure(figsize=(14, 6))
plt.plot(y_test_actual, label='Gerçek Değerler', color='blue')
plt.plot(predictions, label='LSTM Tahminleri', color='red')
plt.title('LSTM Zaman Serisi Tahmini')
plt.xlabel('Zaman')
plt.ylabel('Satış')
plt.legend()
plt.show()

LSTM'in Güçlü Yönleri

  • Doğrusal olmayan karmaşık ilişkileri öğrenebilir.
  • Çok değişkenli (multivariate) zaman serilerini doğal olarak destekler.
  • Uzun vadeli bağımlılıkları yakalamada etkilidir.
  • Özellik mühendisliği yapmadan ham veriden örüntüler çıkarabilir.

Prophet vs. LSTM: Karşılaştırmalı Analiz

Her iki yöntem de güçlü araçlar olmakla birlikte, farklı senaryolarda farklı avantajlar sunar. Aşağıda kapsamlı bir karşılaştırma yer almaktadır:

Kullanım Kolaylığı

Prophet, kutudan çıktığı haliyle çok az yapılandırma ile iyi sonuçlar verir. Veri bilimciler birkaç satır kodla tahmin üretebilir. LSTM ise veri ön işleme, hiperparametre ayarlama, model mimarisi tasarımı gibi adımlar gerektirir ve deneyim ister.

Veri Miktarı Gereksinimleri

Prophet, nispeten az veriyle bile makul sonuçlar üretebilir; birkaç yüz gözlem yeterli olabilir. LSTM modelleri ise genellikle binlerce hatta on binlerce veri noktasına ihtiyaç duyar. Yetersiz veriyle LSTM, kolayca aşırı uyum (overfitting) yapabilir.

Çok Değişkenli Analiz

LSTM bu alanda açık ara öndedir. Birden fazla giriş değişkenini (sıcaklık, nem, fiyat, promosyon durumu vb.) aynı anda modele dahil edebilirsiniz. Prophet ise temel olarak tek değişkenli (univariate) bir modeldir; ekstra değişkenler regressor olarak eklenebilse de bu, LSTM kadar esnek değildir.

Yorumlanabilirlik

Prophet, trend, mevsimsellik ve tatil bileşenlerini ayrı ayrı görselleştirerek modelin neyi yakaladığını anlamayı kolaylaştırır. LSTM ise bir kara kutu modelidir; tahminlerin arkasındaki mantığı yorumlamak çok daha zordur.

Eğitim Süresi ve Hesaplama Maliyeti

Prophet, CPU üzerinde saniyeler içinde eğitilebilir. LSTM modellerinin eğitimi ise özellikle GPU olmadan dakikalardan saatlere kadar sürebilir. Büyük veri setlerinde bu fark daha da belirginleşir.

Hibrit Yaklaşımlar ve İleri Teknikler

Son yıllarda, Prophet ve LSTM'in güçlü yönlerini birleştiren hibrit yaklaşımlar popülerlik kazanmıştır. Örneğin, Prophet'in ayrıştırdığı bileşenleri LSTM'e giriş olarak vermek veya Prophet'in artıklarını (residuals) LSTM ile modellemek gibi stratejiler umut verici sonuçlar üretmiştir:

# Hibrit yaklaşım: Prophet artıklarını LSTM ile modelle
forecast = prophet_model.predict(df)
df['residual'] = df['y'] - forecast['yhat']

# Artıkları LSTM ile modelle
residual_scaled = scaler.fit_transform(df[['residual']].values)
X_res, y_res = create_sequences(residual_scaled, window_size)
X_res = X_res.reshape((X_res.shape[0], X_res.shape[1], 1))

lstm_residual_model.fit(X_res, y_res, epochs=50, batch_size=32)

# Nihai tahmin = Prophet tahmini + LSTM artık tahmini
final_prediction = prophet_forecast + lstm_residual_prediction

Bunun yanı sıra Transformer tabanlı modeller (örneğin Temporal Fusion Transformer, Informer, PatchTST) zaman serisi alanında hızla yükselmektedir. Attention mekanizması sayesinde uzun menzilli bağımlılıkları daha etkili bir şekilde yakalayabilmektedirler. Ancak bu modeller henüz Prophet ve LSTM kadar olgun ve yaygın kullanıma sahip değildir.

Hangi Durumda Hangisini Seçmelisiniz?

Doğru aracı seçmek, projenizin gereksinimlerine bağlıdır. İşte pratik bir karar rehberi:

  • Prophet'i tercih edin — hızlı prototipleme yapıyorsanız, verinizdeki mevsimsellik ve tatil etkileri belirginse, tek değişkenli bir seri ile çalışıyorsanız ve yorumlanabilirlik önemliyse.
  • LSTM'i tercih edin — büyük miktarda veriniz varsa, birden fazla değişkenin etkileşimini modellemek istiyorsanız, doğrusal olmayan karmaşık örüntüler bekliyorsanız ve GPU gibi hesaplama kaynaklarına erişiminiz varsa.
  • Hibrit yaklaşımı deneyin — tek bir yöntemin yakalayamadığı örüntüler varsa, maksimum doğruluk kritikse ve yeterli geliştirme süreniz varsa.

Sonuç

Zaman serisi tahmini, yapay zekanın en pratik ve değer yaratan uygulama alanlarından biridir. Prophet, erişilebilirliği ve kullanım kolaylığıyla hızlı sonuçlar elde etmek isteyen ekipler için mükemmel bir başlangıç noktasıdır. LSTM ise daha karmaşık problemlerde ve büyük veri setlerinde üstün performans sergileyebilir. En iyi strateji, her iki yöntemi de deneyerek kendi veri setiniz ve problem tanımınız için en uygun yaklaşımı bulmaktır.

Unutmayın: hiçbir model her durumda en iyi sonucu vermez. Veri biliminin temel prensibi olan "deneme ve karşılaştırma" yaklaşımını benimseyin. Modellerinizi çapraz doğrulama (cross-validation) ile test edin, hata metriklerini (MAE, RMSE, MAPE) karşılaştırın ve iş gereksinimlerinize en uygun çözümü seçin.

Yazar Hakkında
Fatih Algül
TechSoft Solutions
Proje mi var?

Yazılım, IoT veya otomasyon konularında destek almak ister misiniz?

İletişime Geç