Garfield
YZF Admin
Zaman serisi tahmini için TensorFlow modeli tasarlarken veriyi zamana göre bölmeniz, geçmiş gözlemlerden sabit uzunlukta giriş pencereleri üretmeniz, gelecekteki değerleri eğitim verisine sızdırmamanız ve modeli yalnızca geçmişte bulunabilecek bilgilerle eğitmeniz gerekir. Başlangıç için tek değişkenli bir seri üzerinde kayan pencere ve yoğun katmanlı bir model yeterlidir; hata kabul edilebilir düzeye gelmezse çok değişkenli giriş, evrişimli katman veya LSTM/GRU gibi sıralı modelleri deneyebilirsiniz.
Bir zaman serisinde her satırın zaman sırası korunmalıdır. Örneğin elektrik tüketimini tahmin edecekseniz giriş olarak son 24 saati, hedef olarak 25. saati kullanabilirsiniz. Girdi penceresi
Veriyi rastgele karıştırarak eğitim ve doğrulama kümelerine ayırmayın. İlk bölüm eğitim, sonraki bölüm doğrulama, en son bölüm test için kullanılmalıdır. Böylece model gelecekteki örnekleri geçmişi tahmin etmek için kullanmaz. Ölçekleme yapacaksanız ortalama ve standart sapmayı yalnızca eğitim bölümünden hesaplayın; doğrulama ve test verisini bu hesaplamaya katmak veri sızıntısı oluşturur.
Aşağıdaki örnek, tek değişkenli varsayımsal bir seri için son 4 değerden sonraki değeri tahmin eder. İlk 20 zaman noktası eğitim, sonraki 4 nokta doğrulama, kalan 8 nokta test hedefleri için kullanılır; ölçekleme yalnız eğitim bölümünden öğrenilir. Kodun çalışması için TensorFlow ve NumPy kurulmuş olmalıdır.
Kodun sonunda
İlk modelin amacı en karmaşık çözümü kurmak değil, tahmin probleminin doğru tanımlandığını kontrol etmektir. Önce yalnızca son değer, son birkaç değerin ortalaması veya mevsimsel tekrar gibi basit bir tahmin yöntemiyle karşılaştırma yapın. TensorFlow modeliniz bu temel yöntemi geçemiyorsa katman sayısını artırmak sorunu çözmeyebilir; pencere uzunluğu, veri kalitesi veya hedef tanımı yanlış olabilir.
Tablodaki seçim, doğrulama hatasına göre yapılmalıdır. Örneğin LSTM eğitim hatasını düşürüp doğrulama hatasını artırıyorsa model eğitim verisini ezberliyor olabilir. Bu durumda daha küçük model, daha kısa eğitim, erken durdurma veya daha güçlü düzenlileştirme deneyin. Eğitim ve doğrulama hataları birlikte yüksekse önce veri penceresini, ölçeklemeyi ve hedef değerlerin doğru kaydırıldığını kontrol edin.
Bir sonraki tek değeri tahmin etmekle 24 adım sonrasını tahmin etmek aynı problem değildir. Tek adımlı model bir sonraki değeri üretir. Çok adımlı tasarımda model doğrudan 24 çıktı üretebilir veya ilk tahmini tekrar girişe ekleyerek sonraki tahmini üretir. İkinci yöntemde ilk hatalar sonraki adımlara taşınabildiği için uzak tahminlerde hata büyüyebilir.
Modeli gerçek kullanım biçimine göre değerlendirin. Her gün yalnızca ertesi günü tahmin edecekseniz tek adımlı değerlendirme uygundur. Günün 24 saatini tek seferde planlayacaksanız test hedefi de 24 değer içermeli ve her tahmin adımı ayrı ölçülmelidir.
Düşük MAE modelin test kümesindeki ortalama hatasının düşük olduğunu gösterir; gelecekte her zaman aynı doğrulukta tahmin yapacağını kanıtlamaz. Test döneminde veri dağılımı değiştiyse, ani kampanya veya arıza gibi eğitimde görülmeyen olaylar varsa hata artabilir.
Tahminleri gerçek değerlerle zaman ekseninde karşılaştırın. Hata belirli saatlerde veya mevsimlerde yoğunlaşıyorsa pencereye saat, gün veya mevsim bilgisi eklemeyi düşünün. Ancak bu bilgiyi tahmin anında gerçekten biliyor olmanız gerekir. Gelecekte bilinmeyen bir değişkeni giriş olarak kullanmak, üretimde elde edilemeyecek bir model oluşturur.
Üretime almadan önce modeli test döneminde sabit tutarak yeni veriler üzerinde izleyin. Hata zamanla artarsa önce giriş verisinin eksik, gecikmiş veya farklı birimlerde olup olmadığını kontrol edin; sorun veri kaynağında değilse belirli aralıklarla yeniden eğitim ve yeni bir test dönemi planlayın.
Veriyi modele uygun hâle getirme
Bir zaman serisinde her satırın zaman sırası korunmalıdır. Örneğin elektrik tüketimini tahmin edecekseniz giriş olarak son 24 saati, hedef olarak 25. saati kullanabilirsiniz. Girdi penceresi
[10, 12, 11, 13] ve tahmin ufku bir ise hedef, bu diziden hemen sonraki gerçek değerdir.Veriyi rastgele karıştırarak eğitim ve doğrulama kümelerine ayırmayın. İlk bölüm eğitim, sonraki bölüm doğrulama, en son bölüm test için kullanılmalıdır. Böylece model gelecekteki örnekleri geçmişi tahmin etmek için kullanmaz. Ölçekleme yapacaksanız ortalama ve standart sapmayı yalnızca eğitim bölümünden hesaplayın; doğrulama ve test verisini bu hesaplamaya katmak veri sızıntısı oluşturur.
Kayan pencere oluşturma
Aşağıdaki örnek, tek değişkenli varsayımsal bir seri için son 4 değerden sonraki değeri tahmin eder. İlk 20 zaman noktası eğitim, sonraki 4 nokta doğrulama, kalan 8 nokta test hedefleri için kullanılır; ölçekleme yalnız eğitim bölümünden öğrenilir. Kodun çalışması için TensorFlow ve NumPy kurulmuş olmalıdır.
Python:
import numpy as np
import tensorflow as tf
values = np.array([
10, 12, 11, 13, 15, 14, 16, 18,
17, 19, 21, 20, 22, 24, 23, 25,
27, 26, 28, 30, 29, 31, 33, 32,
34, 36, 35, 37, 39, 38, 40, 42
], dtype=np.float32)
window = 4
train_end = 20
val_end = 24
train_values = values[:train_end]
mean = train_values.mean()
std = train_values.std()
scaled = (values - mean) / std
x = []
y = []
for i in range(window, len(scaled)):
x.append(scaled[i - window:i])
y.append(scaled[i])
x = np.array(x, dtype=np.float32)[..., np.newaxis]
y = np.array(y, dtype=np.float32)
train_samples = train_end - window
x_train, y_train = x[:train_samples], y[:train_samples]
val_samples = val_end - window
x_val, y_val = x[train_samples:val_samples], y[train_samples:val_samples]
x_test, y_test = x[val_samples:], y[val_samples:]
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(window, 1)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(32, activation="relu"),
tf.keras.layers.Dense(1)
])
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
loss="mse",
metrics=[tf.keras.metrics.MeanAbsoluteError()]
)
model.fit(
x_train,
y_train,
epochs=100,
batch_size=4,
validation_data=(x_val, y_val),
shuffle=False,
verbose=0
)
loss, mae = model.evaluate(x_test, y_test, verbose=0)
print("Test MAE (özgün birim):", mae * std)
last_window = scaled[-window:].reshape(1, window, 1)
predicted_scaled = model.predict(last_window, verbose=0)[0, 0]
predicted = predicted_scaled * std + mean
print("Sonraki tahmin:", predicted)
Kodun sonunda
Test MAE (özgün birim), standart sapmayla geri ölçeklenmiş ortalama mutlak hatayı; Sonraki tahmin ise özgün birimdeki tahmini gösterir. Test pencereleri her adımda daha önce gözlenen gerçek değerleri kullanır; bu, tek başlangıçtan sekiz adımı birden tahmin etmek yerine kayan bir adım sonrası değerlendirmedir. Bu değerler örnek dizinin gerçek yapısına bağlıdır; örnek kodun çıktısı gerçek bir veri kümesinde başarı garantisi değildir.Modeli seçme ve değerlendirme
İlk modelin amacı en karmaşık çözümü kurmak değil, tahmin probleminin doğru tanımlandığını kontrol etmektir. Önce yalnızca son değer, son birkaç değerin ortalaması veya mevsimsel tekrar gibi basit bir tahmin yöntemiyle karşılaştırma yapın. TensorFlow modeliniz bu temel yöntemi geçemiyorsa katman sayısını artırmak sorunu çözmeyebilir; pencere uzunluğu, veri kalitesi veya hedef tanımı yanlış olabilir.
| Model yaklaşımı | Ne zaman başlanır? | Sınırı |
|---|---|---|
| Yoğun katmanlı model | Kısa ve düzenli serilerde hızlı başlangıç için | Zaman içindeki uzun bağımlılıkları doğrudan temsil etmeyebilir |
| 1B evrişimli model | Yakın geçmişte tekrarlanan yerel örüntüler varsa | Çok uzun dönem ilişkileri için tek başına yetersiz kalabilir |
| LSTM veya GRU | Sıralı bağımlılıkların önemli olduğu serilerde | Daha yavaş eğitilebilir ve aşırı öğrenmeye daha açık olabilir |
| Çok değişkenli model | Takvim, hava durumu veya başka ölçümler hedefi etkiliyorsa | Gelecekte kullanılabilecek yardımcı değişkenleri ayrıca üretmeniz gerekir |
Tahmin ufku ve çok adımlı tahmin
Bir sonraki tek değeri tahmin etmekle 24 adım sonrasını tahmin etmek aynı problem değildir. Tek adımlı model bir sonraki değeri üretir. Çok adımlı tasarımda model doğrudan 24 çıktı üretebilir veya ilk tahmini tekrar girişe ekleyerek sonraki tahmini üretir. İkinci yöntemde ilk hatalar sonraki adımlara taşınabildiği için uzak tahminlerde hata büyüyebilir.
Modeli gerçek kullanım biçimine göre değerlendirin. Her gün yalnızca ertesi günü tahmin edecekseniz tek adımlı değerlendirme uygundur. Günün 24 saatini tek seferde planlayacaksanız test hedefi de 24 değer içermeli ve her tahmin adımı ayrı ölçülmelidir.
Sonucun doğru yorumlanması
Düşük MAE modelin test kümesindeki ortalama hatasının düşük olduğunu gösterir; gelecekte her zaman aynı doğrulukta tahmin yapacağını kanıtlamaz. Test döneminde veri dağılımı değiştiyse, ani kampanya veya arıza gibi eğitimde görülmeyen olaylar varsa hata artabilir.
Tahminleri gerçek değerlerle zaman ekseninde karşılaştırın. Hata belirli saatlerde veya mevsimlerde yoğunlaşıyorsa pencereye saat, gün veya mevsim bilgisi eklemeyi düşünün. Ancak bu bilgiyi tahmin anında gerçekten biliyor olmanız gerekir. Gelecekte bilinmeyen bir değişkeni giriş olarak kullanmak, üretimde elde edilemeyecek bir model oluşturur.
Üretime almadan önce modeli test döneminde sabit tutarak yeni veriler üzerinde izleyin. Hata zamanla artarsa önce giriş verisinin eksik, gecikmiş veya farklı birimlerde olup olmadığını kontrol edin; sorun veri kaynağında değilse belirli aralıklarla yeniden eğitim ve yeni bir test dönemi planlayın.
Son düzenleme: