Erstellen Sie genaue und interpretierbare Vorhersagen
Laut [2] gilt: Zeitfusionstransformator übertrifft alle bekannten Deep-Learning-Modelle für die Zeitreihenvorhersage.
Einschließlich eines vorgestellten Baum zur Steigerung des Farbverlaufs Modell für tabellarische Zeitreihendaten.
Aber was ist Temporal Fusion Transformer (TFT)[3] und warum ist es so interessant?
In diesem Artikel erläutern wir kurz die Neuheiten von Zeitfusionstransformator und darauf ein End-to-End-Projekt aufbauen Prognose des Energiebedarfs. Im Einzelnen werden wir Folgendes behandeln:
- So bereiten Sie unsere Daten für das TFT-Format vor.
- So erstellen, trainieren und evaluieren Sie das TFT-Modell.
- So erhalten Sie Vorhersagen zu Validierungsdaten und Out-of-Sample-Vorhersagen.
- Wie man rechnet Feature-Wichtigkeiten, Saisonalitätsmuster, und Robustheit bei extremen Ereignissen mit den eingebauten Modellen interpretierbare Aufmerksamkeit Mechanismus.
Lass uns eintauchen!
Eine ausführliche Analyse der Temporal Fusion Transformer-Architektur finden Sie in meinem vorherigen Artikel Artikel.
Temporal FVerwendung TTransformator (TFT) ist ein Transformer-basiertes Modell, das die Selbstaufmerksamkeit nutzt, um die komplexe zeitliche Dynamik mehrerer Zeitsequenzen zu erfassen.
TFT unterstützt:
- Mehrere Zeitreihen: Wir können ein TFT-Modell anhand Tausender univariater oder multivariater Zeitreihen trainieren.
- Multi-Horizont-Prognose: Das Modell gibt mehrstufige Vorhersagen einer oder mehrerer Zielvariablen aus – einschließlich Vorhersageintervallen.
- Heterogene Merkmale: TFT unterstützt viele Arten von Funktionen, einschließlich zeitvarianter und statischer exogener Variablen.
- Interpretierbare Vorhersagen: Vorhersagen können im Hinblick auf variable Bedeutung und Saisonalität interpretiert werden.
Eine dieser Eigenschaften ist einzigartig Zeitfusionstransformator. Wir werden dies im nächsten Abschnitt behandeln.
Zu den bemerkenswerten DL-Zeitreihenmodellen (z. B. DeepAR[4]) zeichnet sich TFT dadurch aus, dass es verschiedene Arten von Funktionen unterstützt. Diese sind:
- Zeitlich variabel bekannt
- Zeitlich variabel unbekannt
- Zeitinvariant echt
- Zeitinvariant kategorisch
Stellen Sie sich zum Beispiel vor, wir hätten eine Umsatzprognosefall:
Nehmen wir an, wir müssen den Verkauf von drei Produkten vorhersagen. Der num sales
ist die Zielvariable. Der CPI index
oder im number of visitors
sind zeitlich variierend unbekannt Merkmale, da sie nur bis zum Vorhersagezeitpunkt bekannt sind. Jedoch, holidays
und special days
sind zeitveränderlich bekannt Veranstaltungen.
Das product id
is eine zeitinvariante (statische) Kategorialfunktion Besonderheit. Andere Merkmale, die numerisch und nicht zeitabhängig sind, wie z yearly_revenue
kann kategorisiert werden als zeitinvariante real.
Bevor wir zu unserem Projekt übergehen, zeigen wir zunächst ein Mini-Tutorial, wie Sie Ihre Daten in konvertieren erweitertes Zeitreihenformat.
Hinweis: Alle Bilder und Abbildungen in diesem Artikel wurden vom Autor erstellt.
Für dieses Tutorial verwenden wir die TemporalFusionTransformer
Modell aus dem PyTorch-Prognose Bibliothek und PyTorch Lightning:
pip installiere Torch Pytorch-Lightning pytorch_forecasting
Der gesamte Prozess umfasst drei Dinge:
- Erstellen Sie einen Pandas-Datenrahmen mit unseren Zeitreihendaten.
- Wickeln Sie unseren Datenrahmen in einen TimeSeriesDataset Beispiel.
- Übergeben Sie uns TimeSeriesDataset Instanz zu
TemporalFusionTransformer.
Das TimeSeriesDataset ist sehr nützlich, da es uns hilft anzugeben, ob Features zeitlich variabel oder statisch sind. Außerdem ist es das einzige Format, das TemporalFusionTransformer
akzeptiert.
Lassen Sie uns einen minimalen Trainingsdatensatz erstellen, um zu zeigen, wie TimeSeriesDataset funktioniert:
Wir sollten unsere Daten wie folgt formatieren: Jedes farbige Kästchen stellt eine andere Zeitreihe dar, dargestellt durch seine group
Wert.
Die wichtigste Spalte unseres Datenrahmens ist die time_idx
— Es bestimmt die Reihenfolge der Proben. Wenn keine Beobachtungen fehlen, sollten die Werte um erhöht werden +1 für jede Zeitreihe.
Als nächstes packen wir unseren Datenrahmen in einen TimeSeriesDataset Beispiel:
Alle Argumente sind selbsterklärend: Die max_encoder_length
definiert den Lookback-Zeitraum und max_prediction_length
Gibt an, wie viele Datenpunkte vorhergesagt werden. In unserem Fall blicken wir drei Zeitschritte in die Vergangenheit zurück, um zwei Vorhersagen auszugeben.
Das TimeSeriesDataset Die Instanz dient nun als Datenlader. Lassen Sie uns einen Stapel drucken und prüfen, wie unsere Daten an TFT übergeben werden:
Dieser Stapel enthält die Trainingswerte [0,1]
aus der ersten Zeitreihe (group 0
) und die Testwerte[2,3,4]
. Wenn Sie diesen Code erneut ausführen, erhalten Sie andere Werte, da die Daten standardmäßig gemischt werden.
Unser Projekt wird die verwenden Strom-Lastdiagramme20112014 [5] Datensatz von UCI. Das Notizbuch für dieses Beispiel kann unter heruntergeladen werden hier:
Dieser Datensatz enthält den Stromverbrauch (in kW) von 370 Kunden/Verbrauchern im 15-Minuten-Takt. Die Daten umfassen 4 Jahre (2011–2014).
Einige Verbraucher wurden nach 2011 erstellt, sodass ihr Stromverbrauch zunächst bei Null liegt.
Wir führen eine Datenvorverarbeitung gem [3]:
- Aggregieren Sie unsere Zielvariable
power_usage
pro Stunde. - Finden Sie das früheste Datum für jede Zeitreihe, in der die Potenz ungleich Null ist.
- Erstellen Sie neue Funktionen:
month
,day
,hour
undday_of_week
. - Wählen Sie alle Tage dazwischen aus
2014–01–01
und2014–09–07
.
Lasst uns beginnen:
Daten herunterladen
wget https://archive.ics.uci.edu/ml/machine-learning-databases/00321/LD2011_2014.txt.zip
!entpacken LD2011_2014.txt.zip
Datenvorverarbeitung
Jede Spalte repräsentiert einen Verbraucher. Am originellsten power_usage
Werte sind 0.
Als nächstes aggregieren wir zu stündlichen Daten. Aufgrund der Größe und Komplexität des Modells trainieren wir unser Modell nur auf 5 Verbrauchern (für diejenigen mit Werten ungleich Null).
Jetzt bereiten wir unseren Datensatz für die vor TimeSeriesDataset Format. Beachten Sie, dass jede Spalte eine andere Zeitreihe darstellt. Daher „schmelzen“ wir unseren Datenrahmen, sodass alle Zeitreihen vertikal statt horizontal gestapelt werden. Dabei erstellen wir unsere neuen Features.
Der endgültige vorverarbeitete Datenrahmen wird aufgerufen time_df
. Drucken wir den Inhalt aus:
Das time_df
liegt jetzt im richtigen Format für vor TimeSeriesDataset. Wie Sie inzwischen erraten haben, ist die Granularität stündlich hours_from_start
Variable wird die sein Zeitindex.
Explorative Datenanalyse
Die Auswahl von 5 Verbrauchern/Zeitreihen ist nicht zufällig. Der power usage
jeder Zeitreihe hat unterschiedliche Eigenschaften, wie zum Beispiel den Mittelwert:
time_df[['consumer_id','power_usage']].groupby('consumer_id').mean()
Lassen Sie uns den ersten Monat jeder Zeitreihe grafisch darstellen:
Es gibt keinen erkennbaren Trend, aber jede Zeitreihe weist leicht unterschiedliche Saisonalität und Amplitude auf. Wir können weiter experimentieren und Stationarität, Signalzerlegungen usw. überprüfen, aber in unserem Fall konzentrieren wir uns nur auf den Aspekt der Modellbildung.
Beachten Sie auch, dass andere Methoden zur Zeitreihenprognose wie z ARIMA muss einige Anforderungen erfüllen (z. B. muss die Zeitreihe zunächst stationär werden). Mit TFT können wir unsere Daten unverändert lassen.
Erstellen Sie DataLoader
In diesem Schritt übergeben wir unsere time_df
zu den TimeSeriesDataSet Format, das äußerst nützlich ist, weil:
- Es erspart uns das Schreiben unseres eigenen Dataloaders.
- Wir können festlegen, wie TFT mit den Funktionen des Datensatzes umgeht.
- Wir können unseren Datensatz problemlos normalisieren. In unserem Fall ist eine Normalisierung zwingend erforderlich, da sich alle Zeitsequenzen in ihrer Größe unterscheiden. Daher verwenden wir die GroupNormalizer jede Zeitreihe einzeln zu normalisieren.
Unser Modell verwendet ein Rückblickfenster von einer Woche (7*24), um den Stromverbrauch der nächsten 24 Stunden vorherzusagen.
Beachten Sie außerdem, dass die hours_from_start
ist sowohl der Zeitindex als auch ein zeitveränderliches Merkmal. Der power_usage
ist unsere Zielvariable. Zur Veranschaulichung ist unser Validierungssatz der letzte Tag:
Basismodell
Als nächstes kommt der Schritt, den fast jeder vergisst: Ein Basismodell. Insbesondere bei Zeitreihenprognosen werden Sie überrascht sein, wie oft ein naiver Prädiktor sogar ein ausgefalleneres Modell übertrifft!
Als naive Basis sagen wir die Stromverbrauchskurve des Vortages voraus:
Training des Temporal Fusion Transformer-Modells
Wir können unser TFT-Modell mit dem Vertrauten trainieren Trainer:innen Schnittstelle von PyTorch Lightning.
Beachten Sie die folgenden Dinge:
- Wir nutzen die Frühes Stoppen Rückruf zur Überwachung des Validierungsverlusts.
- Wir verwenden Tensorbrett um unsere Trainings- und Validierungsmetriken zu protokollieren.
- Unser Modell verwendet Quantilverlust – eine spezielle Art von Verlust, der uns bei der Ausgabe der Vorhersageintervalle hilft. Weitere Informationen zur Quantilverlustfunktion finden Sie unter Überprüfen Sie diesen Artikel.
- Wir verwenden 4 Aufmerksamkeitsköpfe, wie das Originalpapier.
Wir sind jetzt bereit, unser Modell zu erstellen und zu trainieren:
Das ist es! Nach 6 Epochen setzt EarlyStopping ein und stoppt das Training.
Laden und speichern Sie das beste Modell
Vergessen Sie nicht, Ihr Modell zu speichern. Obwohl wir es beizen können, ist die sicherste Option, die beste Epoche direkt zu speichern:
!zip -r model.zip lightning_logs/lightning_logs/version_1/*
Um das Modell erneut zu laden, entpacken Sie es model.zip und führen Sie Folgendes aus – merken Sie sich einfach den besten Modellpfad:
Überprüfen Sie Tensorboard
Schauen Sie sich die Trainings- und Validierungskurven mit Tensorboard genauer an:
Modellbewertung
Erhalten Sie Vorhersagen zum Validierungssatz und berechnen Sie den Durchschnitt P50 (Quantilmedian) Verlust:
Die letzten beiden Zeitreihen weisen einen etwas höheren Verlust auf, da ihre relative Größe ebenfalls hoch ist.
Plotvorhersagen zu Validierungsdaten
Wenn wir das bestehen mode=raw
auf die vorhersagen() Methode erhalten wir weitere Informationen, einschließlich Vorhersagen für alle sieben Quantile. Wir haben auch Zugriff auf die Aufmerksamkeitswerte (dazu später mehr).
Schauen Sie sich das genauer an raw_predictions
Variable:
Wir nutzen die plot_prediction() um unsere Grundstücke zu erstellen. Natürlich können Sie Ihr eigenes individuelles Grundstück erstellen – das plot_prediction() hat den zusätzlichen Vorteil, dass die Aufmerksamkeitswerte hinzugefügt werden.
Hinweis: Unser Modell sagt die nächsten 24 Datenpunkte voraus auf einmal. Dies ist kein rollierendes Prognoseszenario, bei dem ein Modell a vorhersagt Single ermittelt jedes Mal den Wert und fügt alle Vorhersagen zusammen.
Wir erstellen für jeden Verbraucher ein Diagramm (insgesamt 5).
Die Ergebnisse sind durchaus beeindruckend.
Unsere Zeitfusionstransformator Das Modell konnte das Verhalten aller fünf Zeitreihen erfassen, sowohl hinsichtlich der Saisonalität als auch der Größenordnung!
Beachten Sie außerdem Folgendes:
- Wir haben kein Hyperparameter-Tuning durchgeführt.
- Wir haben keine ausgefallene Feature-Engineering-Technik implementiert.
In einem folgenden Abschnitt zeigen wir, wie wir unser Modell durch Hyperparameteroptimierung verbessern können.
Zeichnen Sie Vorhersagen für eine bestimmte Zeitreihe auf
Zuvor zeichnen wir Vorhersagen zu den Validierungsdaten mithilfe von auf idx
Argument, das alle Zeitreihen in unserem Datensatz durchläuft. Wir können spezifischer sein und Vorhersagen für eine bestimmte Zeitreihe ausgeben:
In Abbildung 7, Wir planen den Tag im Voraus MT_004 Verbraucher für Zeitindex=26512.
Denken Sie an unsere Zeitindex-Kolumne hours_from_start
beginnt bei 26304 und wir können Vorhersagen ab 26388 erhalten (weil wir früher eingestellt haben). min_encoder_length=max_encoder_length // 2
was gleich ist 26304 + 168//2=26388
Prognosen außerhalb der Stichprobe
Lassen Sie uns Vorhersagen außerhalb der Stichprobe erstellen, die über den endgültigen Datenpunkt der Validierungsdaten hinausgehen 2014–09–07 23:00:00
Wir müssen lediglich einen neuen Datenrahmen erstellen, der Folgendes enthält:
- Die Anzahl der
N
=max_encoder_length
vergangene Daten, die als Lookback-Fenster dienen – die Encoderdaten in der TFT-Terminologie. - Die zukünftigen Daten der Größe
max_prediction_length
für die wir unsere Vorhersagen berechnen wollen – die Decoder-Daten.
Wir können Vorhersagen für alle fünf unserer Zeitreihen oder nur für eine erstellen. Figure 7 zeigt die Out-of-Sample-Vorhersagen für Verbraucher MT_002:
Genaue Prognosen sind eine Sache, aber auch die Erklärbarkeit ist heutzutage von großer Bedeutung.
Und noch schlimmer ist es bei Deep-Learning-Modellen, die als Black Boxes gelten. Methoden wie z LIME und FORM kann (bis zu einem gewissen Grad) Erklärbarkeit bieten, funktioniert aber nicht gut für Zeitreihen. Außerdem handelt es sich um externe Post-hoc-Methoden, die nicht an ein bestimmtes Modell gebunden sind.
Zeitfusionstransformator bietet drei Arten der Interpretierbarkeit:
- Saisonal gesehen: TFT nutzt seinen Roman Interpretierbare Mehrkopfaufmerksamkeit Mechanismus zur Berechnung der Wichtigkeit vergangener Zeitschritte.
- Funktionstechnisch: TFT nutzt seine Variablenauswahlnetzwerk Modul zur Berechnung der Wichtigkeit jedes Merkmals.
- Robustheit bei extremen Ereignissen: Wir können untersuchen, wie sich Zeitreihen bei seltenen Ereignissen verhalten
Wenn Sie mehr über das Innenleben von erfahren möchten Interpretierbare Mehrkopfaufmerksamkeit und Variables Auswahlnetzwerk, Schauen Sie sich meinen vorherigen Artikel an.
Saisonale Interpretierbarkeit
TFT untersucht die Aufmerksamkeitsgewichte, um die zeitlichen Muster über vergangene Zeitschritte hinweg zu verstehen.
Die grauen Linien in allen vorherigen Diagrammen stellen die Aufmerksamkeitswerte dar. Schauen Sie sich diese Plots noch einmal an – fällt Ihnen etwas auf? Figure 8 zeigt die Erkenntnisse von Figure 7 und berücksichtigt auch die Aufmerksamkeitswerte:
Die Aufmerksamkeitswerte zeigen, wie wirkungsvoll diese Zeitschritte sind, wenn das Modell seine Vorhersage ausgibt. Die kleinen Spitzen spiegeln die tägliche Saisonalität wider, während die höheren Spitzen gegen Ende wahrscheinlich die wöchentliche Saisonalität implizieren.
Wenn wir die Aufmerksamkeitskurven über alle Zeitschritte und Zeitreihen mitteln (nicht nur über die 5, die wir in diesem Tutorial verwendet haben), erhalten wir die symmetrisch aussehende Form Figure 9 vom TFT-Papier:
Frage: Was nützt das? Können wir Saisonalitätsmuster nicht einfach mit Methoden wie ACF-Plots, Zeitsignalzerlegung usw. abschätzen?
Antworten: WAHR. Die Untersuchung der Aufmerksamkeitsgewichte von TFT bietet jedoch zusätzliche Vorteile:
- Wir können bestätigen, dass unser Modell die scheinbare saisonale Dynamik unserer Sequenzen erfasst.
- Unser Modell kann auch versteckte Muster aufdecken, da die Aufmerksamkeitsgewichte der aktuellen Eingabefenster alle vergangenen Eingaben berücksichtigen.
- Das Aufmerksamkeitsgewichtungsdiagramm ist nicht dasselbe wie ein Autokorrelationsdiagramm: Das Autokorrelationsdiagramm bezieht sich auf eine bestimmte Sequenz, während sich die Aufmerksamkeitsgewichte hier auf die Auswirkung jedes Zeitschritts konzentrieren, indem alle Kovariaten und Zeitreihen betrachtet werden.
Funktionsbezogene Interpretierbarkeit
Das Variablenauswahlnetzwerk Komponente von TFT kann das leicht abschätzen Feature-Wichtigkeiten:
In Figure 10, fällt uns Folgendes auf:
- Das
hour
undday_of_week
haben starke Werte, sowohl als vergangene Beobachtungen als auch als zukünftige Kovariaten. Der Benchmark im Originalpapier kommt zu derselben Schlussfolgerung. - Das
power_usage
ist offensichtlich die einflussreichste beobachtete Kovariate. - Das
consumer_id
ist hier nicht sehr aussagekräftig, da wir nur 5 Verbraucher verwenden. Im TFT-Papier, in dem die Autoren alle 370 Verbraucher verwenden, ist diese Variable von größerer Bedeutung.
Hinweis: Wenn Ihre statische Gruppierungsvariable nicht wichtig ist, ist es sehr wahrscheinlich, dass Ihr Datensatz auch mit einem einzelnen Verteilungsmodell (wie ARIMA) genauso gut modelliert werden kann.
Erkennung extremer Ereignisse
Zeitreihen sind bekanntermaßen anfällig für plötzliche Änderungen ihrer Eigenschaften bei seltenen Ereignissen (auch als „…“ bezeichnet). Schocks).
Schlimmer noch, diese Ereignisse sind sehr schwer zu fassen. Stellen Sie sich vor, Ihre Zielvariable wird für einen kurzen Zeitraum volatil, weil eine Kovariate stillschweigend ihr Verhalten ändert:
Handelt es sich hierbei um zufälliges Rauschen oder um ein verstecktes, anhaltendes Muster, das unserem Modell entgeht?
Mit TFT können wir die Robustheit jedes einzelnen Merkmals über seinen Wertebereich hinweg analysieren. Leider weist der aktuelle Datensatz keine Volatilität oder seltene Ereignisse auf – diese sind eher in Finanz-, Verkaufsdaten usw. zu finden. Dennoch zeigen wir, wie man sie berechnet:
Bei einigen Features sind nicht alle Werte im Validierungsdatensatz vorhanden, daher zeigen wir nur die hour
und consumer_id
:
In beiden Abbildungen sind die Ergebnisse ermutigend. In Figure 12, bemerken wir diesen Verbraucher MT_004 schneidet im Vergleich zu anderen Verbrauchern leicht ab. Wir könnten dies überprüfen, wenn wir den P50-Verlust jedes Verbrauchers mit seinem zuvor berechneten durchschnittlichen Stromverbrauch normalisieren.
Die grauen Balken geben die Verteilung jeder Variablen an. Eine Sache, die ich immer mache, ist herauszufinden, welche Werte eine niedrige Häufigkeit haben. Dann überprüfe ich, wie das Modell in diesen Bereichen funktioniert. Daher können Sie leicht erkennen, ob Ihr Modell das Verhalten seltener Ereignisse erfasst.
Im Allgemeinen können Sie diese TFT-Funktion verwenden, um Ihr Modell auf Schwachstellen zu untersuchen und mit der weiteren Untersuchung fortzufahren.
Wir können nahtlos verwenden Zeitfusionstransformator mit Opt So führen Sie eine Hyperparameter-Optimierung durch:
Das Problem besteht darin, dass TFT, da es sich um ein Transformer-basiertes Modell handelt, erhebliche Hardware-Ressourcen benötigt!
Zeitfusionstransformator ist zweifellos ein Meilenstein für die Time-Series-Community.
Das Modell erzielt nicht nur SOTA-Ergebnisse, sondern bietet auch einen Rahmen für die Interpretierbarkeit von Vorhersagen. Das Modell ist auch in der erhältlich Darts Python-Bibliothek, die auf der PyTorch Forecasting-Bibliothek basiert.
Schließlich, wenn Sie neugierig sind, mehr über die Architektur des zu erfahren Zeitfusionstransformator Im Detail überprüfen Sie die Begleitartikel auf dem Originalpapier.
Temporal Fusion Transformer: Zeitreihenvorhersage mit Deep Learning – Vollständiges Tutorial neu veröffentlicht von der Quelle https://towardsdatascience.com/temporal-fusion-transformer-time-series-forecasting-with-deep-learning-complete-tutorial-d32c1e51cd91?source= rss—-7f60cf5620c9—4 über https://towardsdatascience.com/feed
<!–
->
- Bitcoin
- bizbuildermike
- Blockchain
- Blockchain-Konformität
- Blockchain Konferenz
- Blockchain-Berater
- coinbase
- Einfallsreichtum
- Konsens
- Krypto-Konferenz
- Kryptoabbau
- kryptowährung
- dezentralisiert
- DeFi
- Digitale Assets
- Astraleum
- Maschinelles Lernen
- nicht fungibler Token
- Plato
- platon ai
- Datenintelligenz von Plato
- Platoblockkette
- PlatoData
- Platogaming
- Vieleck
- Nachweis der Beteiligung
- W3
- Zephyrnet