Doğru ve yorumlanabilir tahminler oluşturun
[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, holidays
ve 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:
- Zaman serisi verilerimizle bir pandalar veri çerçevesi oluşturun.
- Veri çerçevemizi bir TimeSeriesVeri Kümesi örneği.
- 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.
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
veday_of_week
. - arasındaki tüm günleri seç
2014–01–01
ve2014–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:
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).
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:
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:
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:
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:
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:
- Modelimizin dizilerimizin görünen mevsimsel dinamiklerini yakaladığını doğrulayabiliriz.
- 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.
- 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:
In Şekil 10aşağıdakileri fark ediyoruz:
- The
hour
veday_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
:
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
<!–
->
- Bitcoin
- bizbuildermike
- blockchain
- blockchain uyumluluğu
- blockchain konferansı
- Blockchain Danışmanları
- coinbase
- zeka
- Fikir birliği
- kripto konferansı
- kripto madenciliği
- cryptocurrency
- Merkezi olmayan
- Defi
- Dijital Varlıklar
- Ethereum
- makine öğrenme
- değiştirilemez jeton
- Platon
- plato yapay zekası
- Plato Veri Zekası
- Platoblok zinciri
- PlatoVeri
- plato oyunu
- Çokgen
- hissesini kanıtı
- W3
- zefirnet