Giriş
Zaman serisi analizi, belirli bir zaman dilimi içinde ölçülen verilerin analizidir ve bu veriler genellikle bir dizi gözlem içerir. Günümüzde birçok sektör, zaman serisi verilerini kullanarak gelecekteki trendleri tahmin etmek için makine öğrenmesi ve derin öğrenme yöntemlerine yönelmektedir. Bu yazıda, Python ile derin öğrenme kullanarak zaman serisi tahminine giriş yapacağız. Derin öğrenme, çok katmanlı yapay sinir ağları kullanarak karmaşık problemleri çözme yeteneği sunar ve zaman serisi tahmini gibi görevlerde son derece etkili sonuçlar üretmektedir.
Özellikle, derin öğrenme yöntemleri zaman serisi tahmininde kısa vadeli ve uzun vadeli tahminlerde oldukça başarılıdır. LSTM (Long Short-Term Memory) gibi özel yapılar, zaman bağımlılıklarını öğrenmek için tasarlanmış ve geleneksel yöntemlere göre daha iyi performans göstermektedir. Makine öğrenmesi ve zaman serisi analizi konusuna ilgi duyan geliştiriciler için Python, güçlü kütüphaneler ve araçlar sunarak bu alanda çalışmayı kolaylaştırır.
Bu yazıda, TensorFlow ve Keras kütüphanelerini kullanarak basit bir LSTM modeli ile zaman serisi tahmini gerçekleştireceğiz. Özellikle, finansal veriler gibi önemli bir zaman serisi verisini kullanarak adım adım bir model oluşturacak ve tahminler yapacağız.
Zaman Serisi Verisinin Hazırlanması
Zaman serisi tahminine başlamadan önce uygun bir veri setine ihtiyaç duyarız. Bu aşamada, öncelikle verimizi hazırlamalıyız. Örneğin, hisse senedi fiyatları gibi günlük kapanış fiyatlarını içeren bir veri setini kullanabiliriz. Bu verileri bir CSV dosyasından okuyarak başlayalım. Python’da pandas kütüphanesi, veri manipülasyonu için harika bir araçtır. Aşağıda basit bir veri hazırlığı örneği yer almaktadır:
import pandas as pd
# Veri setini oku
df = pd.read_csv('hisse_senedi_verisi.csv')
df['tarih'] = pd.to_datetime(df['tarih']) # Tarih sütununu datetime olarak ayarla
df.set_index('tarih', inplace=True) # Tarihi indeks olarak ayarla
Verimizde, tarih sütunu tarih bilgilerini içermelidir ve fiyat verileri ile birlikte zaman serisi oluşturmalıdır. Bu aşamanın ardından verimizi görselleştirerek inceleyelim. Bu sayede verimizin eğilimleri ve mevsimsel bileşenleri hakkında bir fikir edinebiliriz. Matplotlib kütüphanesini kullanarak zaman serisi çizimini gerçekleştirebiliriz:
import matplotlib.pyplot as plt
plt.plot(df['kapanis'])
plt.title('Hisse Senedi Kapanış Fiyatları')
plt.xlabel('Tarih')
plt.ylabel('Fiyat')
plt.show()
Verimizi inceledikten sonra, modelimizi besleyecek olan uygun bir zaman penceresi oluşturmamız gerekecek. Bu, modelimizin geçmiş verilerle gelecekteki değerleri tahmin etmesini sağlayacaktır. Zaman serisi verilerini, geçmiş değerleri ve tahmin edilecek gelecekteki değerleri oluşturacak bir dizi özellik ve hedef kare şeklinde yeniden şekillendirmemiz gerekir.
LSTM Modelinin Oluşturulması
LSTM (Long Short-Term Memory) ağları, özellikle zaman serisi verilerinde çok iyi sonuçlar vermektedir. LSTM, sıradan geri beslemeli sinir ağlarına göre uzun dönem bağımlılıklarını öğrenmek için tasarlanmıştır. Modelimizi oluşturmak için önce verimizi uygun bir formatta yeniden şekillendireceğiz. Bu sayede modelimiz, geçmiş verileri alıp gelecekteki değerleri tahmin edebilecektir. Aşağıda örnek bir veri hazırlama işlevi yer almaktadır:
import numpy as np
def create_dataset(data, time_step=1):
dataX, dataY = [], []
for i in range(len(data)-time_step-1):
a = data[i:(i+time_step), 0]
dataX.append(a)
dataY.append(data[i + time_step, 0])
return np.array(dataX), np.array(dataY)
Bu işlev, belirttiğimiz zaman adımıyla veri parçaları oluşturmaktadır. Örneğin, eğer geçmiş 10 gün verisi kullanmak istiyorsak, time_step değişkenini 10 olarak belirleyebiliriz. Şimdi verimizi bu işlev aracılığıyla yeniden şekillendirelim:
time_step = 10
veri = df['kapanis'].values
veri = veri.reshape(-1,1)
X, y = create_dataset(veri, time_step)
Bu aşamada, modelimizin girdilerini ve çıktısını hazırlamış olduk. Şimdi ise modelimizi tanımlayalım. Keras kütüphanesini kullanarak LSTM modelimizi oluşturacağız. Modelimizin katmanları, LSTM katmanı ve çıkış katmanından oluşacaktır:
from keras.models import Sequential
from keras.layers import LSTM, Dense, Dropout
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(X.shape[1], 1)))
model.add(Dropout(0.2))
model.add(LSTM(50, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(25))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mean_squared_error')
Öncelikle bir LSTM katmanı ekliyoruz. Bu katman, 50 nöron ve döngünün sonundaki return_sequences parametresi sayesinde bir dizi çıkış üretir. Daha sonra modelimizi Dropout katmanları ile buruşmalarını önleyerek düzenli hale getireceğiz. Son olarak, çıkış katmanı ekleyip modelimizi derliyoruz.
Modelin Eğitilmesi ve Değerlendirilmesi
Modelimiz oldukça basit, ancak zaman serisi tahminlerinde deneme yanılma ile optimize edilebilir. Şimdi eğitme işlemine geçelim. Eğitim veri setimizi oluşturmak için verileri eğitim ve test olarak ayırmamız gerekecek. Genellikle, verinin %80’ini eğitim, %20’sini test için ayırmak iyi bir yöntemdir:
train_size = int(len(X) * 0.8)
X_train, X_test = X[0:train_size], X[train_size:len(X)]
y_train, y_test = y[0:train_size], y[train_size:len(y)]
Artık eğitim ve test veri setlerimizi oluşturduğumuza göre modelimizi eğitebiliriz. Modelin eğitilmesi ve kaydedilmesi, ayrıca tahminlerin yapılması için aşağıdaki gibi kodları kullanabiliriz:
model.fit(X_train, y_train, batch_size=1, epochs=10)
# Test tahminleri
train_predict = model.predict(X_train)
test_predict = model.predict(X_test)
Yukarıdaki kodlarla modelimizi 10 devir (epoch) boyunca eğittik. Eğitim süresince modelin kayıplarını izlemek, gelişiminizi değerlendirmenize yardımcı olabilir. Bu süreçte, modelin geçmiş veriyle nasıl tahminlerde bulunduğunu ve sonuçlarını görselleştirerek inceleyeceğiz. Aşağıdaki örnekte, eğitim ve test tahminlerini çizebiliriz:
train_predict_plot = np.empty_like(veri)
train_predict_plot[:, :] = np.nan
train_predict_plot[time_step:len(train_predict)+time_step, :] = train_predict
plt.plot(veri)
plt.plot(train_predict_plot)
plt.title('Eğitim Tahminleri')
plt.show()
Bu aşamada, modelimizin eğitim dönemindeki tahminlerini görebiliriz. Eğitim ve test verileri üzerindeki tahminleri incelemek, modelin başarısını değerlendirmek ve aşırı öğrenmeyi önlemek için önemlidir.
Sonuç ve İleri Adımlar
Python ile derin öğrenme ve zaman serisi tahmini hakkında geliştirdiğimiz bu örnekle, LSTM modelinin nasıl oluşturulup eğitileceğine dair temel bir anlayışa sahip olduk. Ancak, gerçek dünyadaki veriler genellikle gürültülü ve karmaşık olabilir. Bu nedenle, modelin başarısını artırmak için veri ön işleme, hiperparametre optimizasyonu ve farklı model mimarileri gibi ileri düzey teknikleri denemekte fayda vardır.
Ayrıca, daha karmaşık veri setleri ile çalışarak modelimizi iyileştirebilir ve değişken sayısını artırarak daha zengin öngörüler elde edebiliriz. Zaman serisi tahmini, yalnızca finans sektöründe değil, aynı zamanda hava durumu tahmini, enerji tüketimi analizi ve sağlık verileri gibi birçok alanda da uygulanmaktadır. Bu bağlamda, uygulamalarınızı farklı veri setlerinde denemek, öğrenme sürecinizi hızlandıracaktır.
Sonuç olarak, Python ile derin öğrenme ve zaman serisi tahmini konularını bir araya getirerek ilgi çekici ve uygulamalı projeler geliştirebilirsiniz. İlginç projeler geliştirdikçe, deneyimlerinizi ve öğrendiklerinizi topluluğunuzla paylaşmayı unutmayın. Bu, hem kendiniz hem de başkaları için son derece değerli olacaktır.