Zaman Serisi Nedir?
Zaman serisi, belirli bir zaman diliminde düzenli aralıklarla toplanan verilerin dizisidir. Örneğin, günlük sıcaklık, hisse senedi fiyatları veya bir web sitesinin ziyaretçi sayısı gibi veriler zaman serisi oluşturur. Bu tür veriler genellikle, bir olayın zamanla nasıl geliştiğini anlamak için analiz edilir. Zaman serisi analizi, geçmiş verileri inceleyerek gelecekteki eğilimleri tahmin etmeye yardımcı olur ve bu nedenle ekonomik analizden hava durumu tahminine kadar birçok alanda yaygın bir şekilde kullanılmaktadır.
Zaman serisi verileri, belirli bir düzende sıralandıkları için, bu verileri analiz etmek için çeşitli yöntemler kullanmak mümkündür. Ancak zaman serisi analizi, genellikle klasik istatistiksel yöntemlerle gerçekleştirilirken, son yıllarda derin öğrenme yöntemleri de giderek daha popüler hale gelmiştir. Sinir ağları, karmaşık ilişkileri belirlemek ve tahmin yapmak için güçlü bir araçtır ve zaman serisi verileri ile birleştirildiğinde güçlü sonuçlar verebilir.
Bu yazıda, Python kullanarak bir zaman serisi sinir ağı oluşturmanın temellerini inceleyeceğiz. Özellikle Keras ve TensorFlow gibi popüler kütüphaneleri kullanarak nasıl etkili bir zaman serisi modellemesi yapabileceğinizi öğrenmek için temel adımları takip edeceğiz.
Python ile Zaman Serisi Sinir Ağı Modelleme
Zaman serisi analizi için sinir ağı modeli oluşturmak, veriyi anlamak ve modelin nasıl yapılandırılacağı hakkında bilgi sahibi olmayı gerektirir. İlk olarak, verileri hazırlamak, model mimarisini belirlemek, eğitmek ve sonrasında tahmin yapmak için gerekli adımları gözden geçirelim.
İlk adım, zaman serisi verilerini uygun hale getirmektir. Zaman serisi verileri genellikle bir dataframe veya dizi içinde bulunur. Bu verilerin eğitim ve test setlerine bölünmesi gereklidir. Eğitim seti, modelin öğrenmesi için kullanılacakken, test seti modelin performansını değerlendirmek için kullanılacaktır. Ayrıca, veriler genellikle normalleştirilmelidir; bu, modelin daha hızlı ve doğru bir şekilde öğrenmesine olanak tanır.
Örnek bir veri kümesi olarak, tarihsel hisse senedi fiyatlarını alalım. Bu veri setinde, tarih ve fiyat bilgileri yer almaktadır. Python’da Pandas kütüphanesini kullanarak verileri okuyabilir ve işleyebiliriz:
import pandas as pd
# Veriyi oku
df = pd.read_csv('stock_prices.csv')
# Tarih sütununu datetime formatına çevir
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
Model Mimarisinin Oluşturulması
Model mimarisini tanımlamak için Keras kütüphanesini kullanacağız. Zaman serisi için uygun bir mimari, genellikle LSTM (Long Short-Term Memory) veya GRU (Gated Recurrent Units) gibi tekrarlayan sinir ağlarıdır. Bu tür yapılar, zaman serisi verilerindeki ardışıklıkları öğrenmekte iyidir ve geçmiş bilgileri koruyarak gelecekteki tahminleri yapabilirler.
Bir LSTM tabanlı model oluşturalım. Model, belirli bir ardışık veriyi (örneğin son 60 gün) alacak ve bir sonraki günün fiyatını tahmin edecektir. Keras ile basit bir model oluşturabiliriz:
from keras.models import Sequential
from keras.layers import LSTM, Dense, Dropout
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(60, 1)))
model.add(Dropout(0.2))
model.add(LSTM(units=50, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(units=50))
model.add(Dropout(0.2))
model.add(Dense(units=1))
model.compile(optimizer='adam', loss='mean_squared_error')
Buradaki modelde, üç LSTM katmanı ve her birinin ardından gelen Dropout katmanları bulunur. Dropout, aşırı öğrenmeyi (overfitting) önlemek için kullanılan bir tekniktir. Sonuç olarak, modelin çıktısı bir Dense katmanı ile belirlenmiştir, burada her bir Nöron modelin tahminini temsil eder.
Modeli Eğitmek ve Tahmin Yapmak
Modelin eğitilmesi için veriyi uygun bir şekilde hazırlamak ve eğitim sürecini başlatmak gerekir. Eğitim sürecine başlamadan önce verileri uygun bir şekle (3D şekli) sokmalıyız. Eğitim sırasında model, çeşitli öznitelikler üzerinde çalışarak uygun ağırlıkları öğrenmelidir.
Aşağıda, eğitim ve tahmin sürecinin nasıl yapılacağını gösteren bir örnek verilmiştir:
# Eğitim ve test verilerini oluştur
train_set = ... # Zaman serisi verilerinin eğitim seti (ölçeklenmiş)
test_set = ... # Zaman serisi verilerinin test seti (ölçeklenmiş)
# Modeli eğit
model.fit(train_set, epochs=100, batch_size=32)
# Test verileri üzerinde tahmin yap
predicted_prices = model.predict(test_set)
Yukarıdaki kodda, eğitim setini belirlerken verilerin ne şekilde ölçeklendiğine dikkat etmemiz gerekir. Genellikle, Min-Max veya Z-score normalizasyonu gibi yöntemlerle verilerimizi normalize etmeliyiz.
Sonuçların Değerlendirilmesi
Modelimizi eğittikten sonra, tahmin sonuçlarını değerlendirmek önemlidir. Modelin ne kadar iyi performans gösterdiğini anlamak için farklı metrikler kullanabiliriz. En yaygın kullanılan metriklerden biri RMSE (Root Mean Square Error) ve MAE (Mean Absolute Error) gibi hata ölçümleridir. Bu metrikler, tahminlerimizin gerçekteki değerlerle ne kadar uyumlu olduğunu gösterir.
Aşağıda tahminlerimizi değerlendirirken kullanabileceğimiz bir örnek verilmiştir:
from sklearn.metrics import mean_squared_error, mean_absolute_error
rmse = mean_squared_error(test_set, predicted_prices, squared=False)
mae = mean_absolute_error(test_set, predicted_prices)
print(f'RMSE: {rmse}, MAE: {mae}')
Sonuçların gözden geçirilmesi, modelin başarısını değerlendirmek adına kritiktir. Hangi düzeyde doğru tahminler yapıldığını görmek, gelecekteki model geliştirmeleri için faydalı geri bildirim sağlar. Ayrıca, modelin performansını artırmak için farklı hiperparametre ayarları ve katman konfigürasyonları da test edilebilir.
Sonuç
Zaman serisi analizi, günümüzde veri biliminin önemli bir parçasıdır ve yapay zeka ile birleştiğinde oldukça güçlü araçlar sunar. Bu yazıda, Python kullanarak bir zaman serisi sinir ağı oluşturmanın temel adımlarını inceledik. Verileri hazırlamaktan, modelin yapılandırılmasına ve tahmin süreçlerine kadar birçok temel bileşeni gözden geçirdik. Python’un sunduğu Keras ve TensorFlow gibi kütüphaneler sayesinde, karmaşık zaman serisi verilerini etkili bir şekilde işleyebiliriz.
Gelecekte daha karmaşık ve derinlemesine analizler gerçekleştirmek için, modelimizi sürekli olarak güncelleyip geliştirmeye çalışmalıyız. Zaman serileri üzerinde daha iyi tahminler yapabilmek için farklı mimariler (örneğin, CNN-LSTM birleşimleri) ve farklı veri ön işleme teknikleri araştırılabilir. Bu sayede, modelin doğruluğunu ve genelleme performansını artırabiliriz.
Unutmayın ki, zaman serisi sinir ağları oluşturma süreci, deneme yanılma ve araştırma gerektiren bir yolculuktur. Verilerinizi sürekli inceleyerek ve modeli geliştirmeye devam ederek, daha iyi sonuçlar elde etme yolunda ilerleyebilirsiniz. Şimdi kendi zaman serisi projelerinizi başlatma zamanı!