Zamansal Füzyon Transformatörü: Derin Öğrenme ile Zaman Serisi Tahmini - Tam Eğitim

Doğru ve yorumlanabilir tahminler oluşturun

DALLE ile oluşturuldu [1]

[2]'ye göre, Zamansal Füzyon Transformatörü zaman serisi tahmini için öne çıkan tüm Derin Öğrenme modellerinden daha iyi performans gösterir.

Öne çıkan bir özellik dahil Gradyan Artırma Ağacı Tablosal zaman serisi verileri için model.

Ama nedir Zamansal Füzyon Transformatörü (TFT)[3] ve neden bu kadar ilginç?

Bu yazımızda yenilikleri kısaca anlatacağız. Zamansal Füzyon Transformatörü ve uçtan uca bir proje inşa edin Enerji Talep Tahmini. Özellikle şunları ele alacağız:

  • Verilerimizi TFT formatına nasıl hazırlarız?
  • TFT modelinin nasıl oluşturulacağı, eğitileceği ve değerlendirileceği.
  • Doğrulama verileri ve örnek dışı tahminler hakkında tahminler nasıl alınır?
  • Nasıl hesaplanır özelliğin önemi, mevsimsellik kalıpları, ve ekstrem olayların sağlamlığı yerleşik modeli kullanarak yorumlanabilir dikkat mekanizması.

Hadi içeri girelim!

Temporal Fusion Transformer mimarisinin derinlemesine analizi için önceki makalelerime bakın. göre.

Tgeçici Fkullanım Tfidyeci (TFT), çoklu zaman dizilerinin karmaşık zamansal dinamiklerini yakalamak için kişisel dikkati kullanan Transformer tabanlı bir modeldir.

TFT şunları destekler:

  • Çoklu zaman serisi: Bir TFT modelini binlerce tek değişkenli veya çok değişkenli zaman serisi üzerinde eğitebiliriz.
  • Çoklu Ufuk Tahmini: Model, tahmin aralıkları da dahil olmak üzere bir veya daha fazla hedef değişkenin çok adımlı tahminlerini üretir.
  • Heterojen özellikler: TFT, zamanla değişen ve statik dışsal değişkenler de dahil olmak üzere birçok özellik türünü destekler.
  • Yorumlanabilir tahminler: Tahminler değişken önem ve mevsimsellik açısından yorumlanabilir.

Bu özelliklerden biri benzersizdir Zamansal Füzyon Transformatörü. Bunu bir sonraki bölümde ele alacağız.

Dikkate değer DL zaman serisi modelleri arasında (örneğin, Derin AR[4]), TFT, çeşitli özellik türlerini desteklemesi nedeniyle öne çıkıyor. Bunlar:

  • Zamanla değişen bilinen
  • Zamanla değişen bilinmeyen
  • Zamanla değişmez gerçek
  • Zamanla değişmez kategorik

Örneğin, elimizde bir satış tahmini vakası:

Diyelim ki 3 ürünün satışını tahmin etmemiz gerekiyor. num sales hedef değişkendir. CPI index ya da number of visitors vardır Zamanla değişen bilinmeyen özellikler çünkü bunlar yalnızca tahmin zamanına kadar bilinir. Fakat, holidaysve special days vardır zamanla değişen bilinen olaylar.

The product id is zamanla değişmeyen (statik) kategorik özellik. Sayısal olan ve zamana bağlı olmayan diğer özellikler yearly_revenue olarak kategorize edilebilir zamanla değişmeyen gerçek.

Projemize geçmeden önce verilerinizi nasıl dönüştüreceğinize dair mini bir eğitim göstereceğiz. genişletilmiş zaman serisi formatı.

Not: Bu makaledeki tüm görseller ve şekiller yazar tarafından oluşturulmuştur.

Bu eğitim için şunu kullanıyoruz: TemporalFusionTransformer model PyTorch Tahmini kütüphane ve PyTorch Lightning:

pip kurulumu meşale pytorch-lightning pytorch_forecasting

Tüm süreç 3 şeyi içerir:

  1. Zaman serisi verilerimizle bir pandalar veri çerçevesi oluşturun.
  2. Veri çerçevemizi bir TimeSeriesVeri Kümesi örneği.
  3. Bizimkileri geç TimeSeriesVeri Kümesi örnek TemporalFusionTransformer.

The TimeSeriesVeri Kümesi çok kullanışlıdır çünkü özelliklerin zamanla değişen mi yoksa statik mi olduğunu belirlememize yardımcı olur. Ayrıca, bu tek formattır TemporalFusionTransformer kabul eder.

Nasıl yapılacağını göstermek için minimal bir eğitim veri kümesi oluşturalım TimeSeriesVeri Kümesi çalışır:

Verilerimizi şu şekilde formatlamalıyız: Her renkli kutu, farklı bir zaman serisini temsil eder. group değeri.

Şekil 1: sample_data pandalar veri çerçevesi

Veri çerçevemizin en önemli sütunu time_idx — numunelerin sırasını belirler. Eksik gözlem yoksa değerler şu oranda artmalıdır: +1 her zaman serisi için.

Daha sonra veri çerçevemizi bir TimeSeriesVeri Kümesi örnek:

Tüm argümanlar kendi kendini açıklamaktadır: max_encoder_length yeniden inceleme süresini tanımlar ve max_prediction_length kaç veri noktasının tahmin edileceğini belirtir. Bizim durumumuzda, 3 tahminin çıktısını almak için geçmişteki 2 zaman adımına bakıyoruz.

The TimeSeriesVeri Kümesi örnek artık bir veri yükleyici olarak hizmet veriyor. Bir grup yazdıralım ve verilerimizin TFT'ye nasıl aktarılacağını kontrol edelim:

Bu grup eğitim değerlerini içerir [0,1] ilk zaman serisinden (group 0) ve test değerleri[2,3,4]. Bu kodu tekrar çalıştırırsanız veriler varsayılan olarak karıştırıldığı için farklı değerler elde edersiniz.

Projemizde kullanılacak ElektrikYük Diyagramları20112014 [5] UCI'den veri seti. Bu örneğin not defteri şu adresten indirilebilir: okuyun:

Bu veri seti, 370 istemcinin/tüketicinin 15 dakikalık frekansla güç kullanımını (KW cinsinden) içerir. Veriler 4 yılı (2011–2014) kapsamaktadır.

Bazı tüketiciler 2011'den sonra yaratıldı, dolayısıyla güç kullanımları başlangıçta sıfırdır.

Veri ön işlemesini buna göre yapıyoruz [3]:

  • Hedef değişkenimizi toplayın power_usage saate göre.
  • Gücün sıfır olmadığı her zaman serisi için en erken tarihi bulun.
  • Yeni özellikler oluşturun: month, day, hour ve day_of_week.
  • arasındaki tüm günleri seç 2014–01–01 ve 2014–09–07.

Hadi başlayalım:

Verileri İndir

wget https://archive.ics.uci.edu/ml/machine-learning-databases/00321/LD2011_2014.txt.zip
!zip'i aç
LD2011_2014.txt.zip

Veri ön işleme

Her sütun bir tüketiciyi temsil eder. Çoğu başlangıç power_usage değerler 0'dır.

Daha sonra saatlik verileri topluyoruz. Modelin boyutu ve karmaşıklığı nedeniyle modelimizi yalnızca 5 tüketici (sıfır olmayan değerler için) üzerinde eğitiyoruz.

Şimdi veri setimizi hazırlıyoruz. TimeSeriesVeri Kümesi biçim. Her sütunun farklı bir zaman serisini temsil ettiğine dikkat edin. Bu nedenle veri çerçevemizi 'eritiriz', böylece tüm zaman serileri yatay yerine dikey olarak istiflenir. Bu süreçte yeni özelliklerimizi yaratıyoruz.

Önceden işlenmiş son veri çerçevesi denir time_df. İçeriğini yazdıralım:

The time_df artık uygun formatta TimeSeriesVeri Kümesi. Şimdiye kadar tahmin ettiğiniz gibi, ayrıntı düzeyi saatlik olduğundan, hours_from_start değişken olacak zaman endeksi.

Açıklayıcı Veri Analizi

5 tüketicinin/zaman serisinin seçimi rastgele değildir. power usage Her zaman serisinin ortalama değeri gibi farklı özellikleri vardır:

time_df[['tüketici_kimliği','güç_kullanımı']].groupby('tüketici_kimliği').mean()

Her zaman serisinin ilk ayını çizelim:

Şekil 2: Tüm 5 zaman serisinin/tüketicinin ilk ayı.

Göze çarpan bir eğilim yok, ancak her zaman serisi biraz farklı mevsimselliğe ve genliğe sahip. Durağanlığı, sinyal ayrıştırmalarını vb. daha fazla deneyebilir ve kontrol edebiliriz, ancak bizim durumumuzda yalnızca model oluşturma yönüne odaklanıyoruz.

Ayrıca, aşağıdaki gibi diğer zaman serisi tahmin yöntemlerine de dikkat edin: ARİMA Birkaç gereksinimi karşılaması gerekiyor (örneğin zaman serisinin öncelikle durağan hale gelmesi gerekiyor.) TFT ile verilerimizi olduğu gibi bırakabiliyoruz.

DataLoader'lar oluşturun

Bu adımda, time_df için TimeSeriesDataSet son derece yararlı olan format çünkü:

  • Bizi kendi Veri Yükleyicimizi yazmaktan kurtarır.
  • TFT'nin veri kümesinin özelliklerini nasıl işleyeceğini belirtebiliriz.
  • Veri setimizi kolaylıkla normalleştirebiliriz. Bizim durumumuzda normalleştirme zorunludur çünkü tüm zaman dizilerinin büyüklükleri farklıdır. Böylece, şunu kullanıyoruz: GrupNormalleştirici Her zaman serisini ayrı ayrı normalleştirmek için.

Modelimiz önümüzdeki 7 saatin güç kullanımını tahmin etmek için bir haftalık (24*24) yeniden inceleme aralığını kullanıyor.

Ayrıca şunu da unutmayın: hours_from_start hem zaman indeksi hem de zamanla değişen bir özelliktir. power_usage hedef değişkenimizdir. Gösterim amacıyla, doğrulama setimiz son gündür:

Temel Model

Sırada neredeyse herkesin unuttuğu adım var: Temel model. Özellikle zaman serisi tahminlerinde, acemi bir tahmincinin daha gelişmiş bir modelden bile ne kadar daha iyi performans gösterdiğine şaşıracaksınız!

Saf bir temel olarak, önceki günün güç kullanım eğrisini tahmin ediyoruz:

Geçici Füzyon Transformatörü Modelinin Eğitimi

Tanıdık yöntemleri kullanarak TFT modelimizi eğitebiliriz. Eğitmen PyTorch Lightning'in arayüzü.

Aşağıdaki hususlara dikkat edin:

  • Biz kullanın Erken Durdurma doğrulama kaybını izlemek için geri arama.
  • Biz kullanmak tensör tahtası eğitim ve doğrulama ölçümlerimizi günlüğe kaydetmek için.
  • Modelimizin kullandığı Nicelik Kaybı — tahmin aralıklarının çıktısını almamıza yardımcı olan özel bir kayıp türü. Nicelik Kaybı işlevi hakkında daha fazla bilgi için, bu makaleyi kontrol et.
  • 4 tane kullanıyoruz dikkat kafalarıorijinal kağıt gibi.

Artık modelimizi oluşturmaya ve eğitmeye hazırız:

Bu kadar! 6 dönemden sonra EarlyStopping devreye girer ve eğitimi durdurur.

En İyi Modeli Yükleyin ve Kaydedin

Modelinizi kaydetmeyi unutmayın. Her ne kadar bunu halledebilsek de, en güvenli seçenek en iyi dönemi doğrudan kaydetmektir:

!zip -r model.zip Lightning_logs/lightning_logs/version_1/*

Modeli tekrar yüklemek için sıkıştırmayı açın model.zip ve aşağıdakileri uygulayın; yalnızca en iyi model yolunu hatırlayın:

Tensorboard'u kontrol edin

Tensorboard ile eğitim ve doğrulama eğrilerine daha yakından bakın:

Model Değerlendirmesi

Doğrulama kümesine ilişkin tahminler alın ve ortalamayı hesaplayın P50 (kantil medyan) kayıp:

Son 2 zaman serisinin göreceli büyüklüğü de yüksek olduğu için biraz daha yüksek kayıp var.

Doğrulama Verilerine İlişkin Grafik Tahminleri

eğer geçersek mode=raw üzerinde ) (Tahmin yöntemini kullanarak, yedi yüzdelik dilimin tamamına ilişkin tahminler de dahil olmak üzere daha fazla bilgi elde ederiz. Ayrıca dikkat değerlerine de erişebiliyoruz (bununla ilgili daha sonra detaylı bilgi vereceğiz).

Daha yakından bakın raw_predictions değişken:

Biz kullanın arsa_prediction() arsalarımızı oluşturmak için. Tabii ki kendi özel planınızı yapabilirsiniz. arsa_prediction() dikkat değerlerini eklemenin ekstra faydası vardır.

Not: Modelimiz sonraki 24 veri noktasını tahmin ediyor tek seferde. Bu, bir modelin tahmin ettiği bir sürekli tahmin senaryosu değildir. tek her seferinde değer verir ve tüm tahminleri bir araya 'diker'.

Her tüketici için bir arsa oluşturuyoruz (toplamda 5).

Şekil 3: MT_002 için doğrulama verilerine ilişkin tahminler
Şekil 4: MT_004 için doğrulama verilerine ilişkin tahminler
Şekil 5: MT_005 için doğrulama verilerine ilişkin tahminler
Şekil 6: MT_006 için doğrulama verilerine ilişkin tahminler
Şekil 7: MT_008 için doğrulama verilerine ilişkin tahminler

Sonuçlar oldukça etkileyici.

nen Zamansal Füzyon Transformatörü model, hem mevsimsellik hem de büyüklük açısından 5 zaman serisinin tümünün davranışını yakalamayı başardı!

Ayrıca şunu da unutmayın:

  • Herhangi bir hiperparametre ayarı yapmadık.
  • Herhangi bir fantezi özellik mühendisliği tekniği uygulamadık.

Sonraki bölümde modelimizi hiperparametre optimizasyonuyla nasıl geliştireceğimizi göstereceğiz.

Belirli Bir Zaman Serisi İçin Grafik Tahminleri

Daha önce doğrulama verilerini kullanarak tahminleri çiziyorduk. idx veri setimizdeki tüm zaman serileri üzerinde yinelenen argüman. Daha spesifik olabiliriz ve belirli bir zaman serisine ilişkin tahminler üretebiliriz:

Şekil 7: için gün öncesi tahmini MT_004 eğitim setinde

In Şekil 7, gün öncesinden planlar yapıyoruz MT_004 zaman endeksi için tüketici = 26512.

Zaman indeksleme sütunumuzu unutmayın hours_from_start 26304'ten başlıyor ve 26388'den itibaren tahminler alabiliyoruz (çünkü daha önce ayarladık) min_encoder_length=max_encoder_length // 2 hangisine eşit 26304 + 168//2=26388

Örnek Dışı Tahminler

Doğrulama verilerinin son veri noktasının ötesinde, örnek dışı tahminler oluşturalım. 2014–09–07 23:00:00

Tek yapmamız gereken aşağıdakileri içeren yeni bir veri çerçevesi oluşturmak:

  • Sayısı N=max_encoder_length yeniden inceleme aralığı işlevi gören geçmiş tarihler - kodlayıcı verileri TFT terminolojisinde.
  • Boyutun gelecekteki tarihleri max_prediction_length tahminlerimizi hesaplamak istediğimiz şey - kod çözücü verileri.

Zaman serilerimizin 5'inin tümü veya yalnızca biri için tahminler oluşturabiliriz. Şekil 7 Tüketici için örnek dışı tahminleri gösterir MT_002:

Şekil 7: MT_002 için gün öncesi tahmini

Doğru tahmin bir şeydir, ancak günümüzde açıklanabilirlik de çok önemlidir.

Kara kutu olarak kabul edilen Derin Öğrenme modelleri için ise durum daha da kötü. Gibi yöntemler MİSKET LİMONU ve ŞEKİL açıklanabilirlik sağlayabilir (bir dereceye kadar) ancak zaman serileri için iyi çalışmaz. Ayrıca bunlar harici post-hoc yöntemlerdir ve belirli bir modele bağlı değildir.

Zamansal Füzyon Transformatörü üç tür yorumlanabilirlik sağlar:

  • Mevsimsellik açısından: TFT romanından yararlanıyor Yorumlanabilir Çok Kafalı Dikkat Geçmiş zaman adımlarının önemini hesaplamak için mekanizma.
  • Özellik açısından: TFT, Değişken Seçim Ağı Her özelliğin önemini hesaplamak için modül.
  • Aşırı olayların sağlamlığı: Nadir olaylar sırasında zaman serilerinin nasıl davrandığını araştırabiliriz

İç işleyişi hakkında derinlemesine bilgi edinmek istiyorsanız Yorumlanabilir Çok Kafalı Dikkat ve Değişken Seçim Ağı, önceki makaleme göz at.

Mevsimsellik Açısından Yorumlanabilirlik

TFT, geçmiş zaman adımlarındaki zamansal kalıpları anlamak için dikkat ağırlıklarını araştırır.

Önceki tüm grafiklerdeki gri çizgiler dikkat puanlarını temsil eder. Şu planlara tekrar bakın; bir şey fark ettiniz mi? Şekil 8 bulgularını gösterir Şekil 7 ve ayrıca dikkat puanlarını da hesaba katar:

Şekil 8: MT_001 için mevsimselliklerin görüntülendiği gün öncesi tahmini

Dikkat puanları, modelin tahminini ortaya çıkardığı zaman adımlarının ne kadar etkili olduğunu ortaya koyuyor. Küçük zirveler günlük mevsimselliği yansıtırken sonlara doğru daha yüksek olan zirve muhtemelen haftalık mevsimselliği işaret ediyor.

Dikkat eğrilerinin tüm zaman adımlarında ve zaman serilerinde (yalnızca bu derste kullandığımız 5 değil) ortalamasını alırsak, simetrik görünen şekli elde ederiz. Şekil 9 TFT kağıdından:

Şekil 9: Elektrik veri kümesi için Zamansal Desenler (Kaynak)

Soru: Bunun ne faydası var? Mevsimsellik modellerini ACF grafikleri, zaman sinyali ayrıştırması vb. yöntemlerle basitçe tahmin edemez miyiz?

Cevap: Doğru. Ancak TFT'nin dikkat ağırlıklarını çalışmanın ekstra avantajları vardır:

  1. Modelimizin dizilerimizin görünen mevsimsel dinamiklerini yakaladığını doğrulayabiliriz.
  2. Modelimiz ayrıca gizli kalıpları da ortaya çıkarabilir çünkü mevcut girdi pencerelerinin dikkat ağırlıkları tüm geçmiş girdileri dikkate alır.
  3. Dikkat ağırlıkları grafiği, bir otokorelasyon grafiğiyle aynı değildir: Otokorelasyon grafiği belirli bir diziye atıfta bulunurken buradaki dikkat ağırlıkları, tüm ortak değişkenlere ve zaman serilerine bakarak her zaman adımının etkisine odaklanır.

Özellik Bazında Yorumlanabilirlik

The Değişken Seçim Ağı TFT bileşeni kolayca tahmin edebilir özelliğin önemi:

Şekil 10: Doğrulama verileriyle ilgili önemleri içerir

In Şekil 10aşağıdakileri fark ediyoruz:

  • The hour ve day_of_week hem geçmiş gözlemler hem de gelecekteki ortak değişkenler olarak güçlü puanlara sahiptir. Orijinal makaledeki kıyaslama aynı sonucu paylaşıyor.
  • The power_usage açıkça gözlemlenen en etkili ortak değişkendir.
  • The consumer_id Burada çok önemli değil çünkü sadece 5 tüketici kullanıyoruz. Yazarların 370 tüketicinin tamamını kullandığı TFT makalesinde bu değişken daha belirgindir.

Not: Gruplandırma statik değişkeniniz önemli değilse, büyük olasılıkla veri kümeniz tek bir dağıtım modeli (ARIMA gibi) tarafından eşit derecede iyi bir şekilde modellenebilir.

Aşırı Olay Tespiti

Zaman serileri, nadir olaylar sırasında (aynı zamanda şoklara).

Daha da kötüsü, bu olayların anlaşılması çok zor. Bir ortak değişkenin davranışı sessizce değiştirmesi nedeniyle hedef değişkeninizin kısa bir süre için değişken hale geldiğini hayal edin:

Bu rastgele bir gürültü mü yoksa modelimizin gözünden kaçan gizli, kalıcı bir model mi?

TFT ile her bir özelliğin sağlamlığını kendi değer aralıklarında analiz edebiliriz. Ne yazık ki mevcut veri seti dalgalanma veya nadir olaylar sergilemiyor; bunların finans, satış verileri vb. verilerde bulunma olasılığı daha yüksektir. Yine de bunların nasıl hesaplanacağını göstereceğiz:

Bazı özelliklerin tüm değerleri doğrulama veri kümesinde mevcut değildir, bu nedenle yalnızca hour ve consumer_id:

Şekil 11: Saatlik tahminler ile gerçekleşenler (normalleştirilmiş ortalamalar) karşılaştırması
Şekil 12: Consumer_id'de tahminler ve gerçekler (normalleştirilmiş ortalamalar)

Her iki şekilde de sonuçlar cesaret vericidir. İçinde Şekil 12Tüketicinin MT_004 diğer tüketicilerle karşılaştırıldığında biraz daha düşük performans gösteriyor. Her tüketicinin P50 kaybını daha önce hesapladığımız ortalama güç kullanımıyla normalleştirirsek bunu doğrulayabiliriz.

Gri çubuklar her değişkenin dağılımını gösterir. Her zaman yaptığım şeylerden biri hangi değerlerin düşük frekansa sahip olduğunu bulmaktır. Daha sonra modelin bu alanlarda nasıl performans gösterdiğini kontrol ediyorum. Dolayısıyla modelinizin nadir olayların davranışını yakalayıp yakalamadığını kolayca tespit edebilirsiniz.

Genel olarak bu TFT özelliğini, modelinizde zayıf noktalar olup olmadığını araştırmak ve daha ileri araştırmalara geçmek için kullanabilirsiniz.

Sorunsuzca kullanabiliriz Zamansal Füzyon Transformatörü ile Optuna hiperparametre ayarlaması gerçekleştirmek için:

Sorun şu ki, TFT Transformer tabanlı bir model olduğundan önemli donanım kaynaklarına ihtiyacınız olacak!

Zamansal Füzyon Transformatörü şüphesiz Zaman Serisi topluluğu için bir dönüm noktasıdır.

Model yalnızca SOTA sonuçlarına ulaşmakla kalmıyor, aynı zamanda tahminlerin yorumlanabilirliği için bir çerçeve de sağlıyor. Model ayrıca şu adreste de mevcuttur: Dart PyTorch Forecasting kütüphanesini temel alan python kütüphanesi.

Son olarak, mimarisini merak ediyorsanız Zamansal Füzyon Transformatörü ayrıntılı olarak kontrol edin eşlik eden makale orijinal kağıt üzerinde.

Zamansal Füzyon Transformatörü: Derin Öğrenme ile Zaman Serisi Tahmini - Eğitimin Tamamı Kaynaktan Yayınlandı https://towardsdatascience.com/temporal-fusion-transformer-time-series-forecasting-with-deep-learning-complete-tutorial-d32c1e51cd91?source= rss—-7f60cf5620c9—4 https://towardsdatascience.com/feed aracılığıyla

<!–

->

Zaman Damgası:

Den fazla Blockchain Danışmanları