Zeitreihenmodell: Ein Leitfaden
HeimHeim > Blog > Zeitreihenmodell: Ein Leitfaden

Zeitreihenmodell: Ein Leitfaden

Mar 22, 2023

Unabhängig davon, ob wir Finanzmarkttrends oder den Stromverbrauch vorhersagen möchten, ist die Zeit ein wichtiger Faktor, der in unseren Modellen berücksichtigt werden muss. Beispielsweise wäre es interessant, vorherzusagen, zu welcher Stunde der Stromverbrauch am höchsten ist. Dies könnte für die Anpassung des Preises oder der Stromproduktion nützlich sein.

Geben Sie Zeitreihen ein. Eine Zeitreihe ist eine zeitlich geordnete Reihe von Datenpunkten. In einer Zeitreihe ist die Zeit oft die unabhängige Variable und das Ziel besteht meist darin, eine Prognose für die Zukunft zu erstellen.

Allerdings spielen beim Umgang mit Zeitreihen noch andere Aspekte eine Rolle.

In diesem Beitrag stelle ich verschiedene Eigenschaften von Zeitreihen vor und wie wir sie modellieren können, um möglichst genaue Prognosen zu erhalten.

Informell ist Autokorrelation die Ähnlichkeit zwischen Beobachtungen als Funktion der Zeitverzögerung zwischen ihnen.

Oben sehen Sie ein Beispiel für ein Autokorrelationsdiagramm. Wenn Sie genau hinsehen, werden Sie feststellen, dass der erste Wert und der 24. Wert eine hohe Autokorrelation aufweisen. Ebenso sind die 12. und 36. Beobachtung stark korreliert. Das bedeutet, dass wir alle 24 Zeiteinheiten einen sehr ähnlichen Wert finden werden.

Beachten Sie, dass das Diagramm wie eine Sinusfunktion aussieht. Dies ist ein Hinweis auf Saisonalität,und Sie können seinen Wert ermitteln, indem Sie den Zeitraum in der obigen Darstellung ermitteln, der 24 Stunden ergeben würde.

Mehr zu Data ScienceEin Leitfaden für wiederkehrende neuronale Netze: RNN- und LSTM-Netze verstehen

Unter Saisonalität versteht man periodische Schwankungen. Beispielsweise ist der Stromverbrauch tagsüber hoch und nachts niedrig, oder die Online-Verkäufe nehmen zu Weihnachten zu, bevor sie wieder nachlassen.

Wie Sie oben sehen können, gibt es eine tägliche Saisonalität. Jeden Tag erreicht man gegen Abend einen Höhepunkt und die Tiefstwerte liegen jeweils am Anfang und am Ende des Tages.

Denken Sie daran, dass die Saisonalität auch aus einem Autokorrelationsdiagramm abgeleitet werden kann, wenn es eine Sinusform hat. Schauen Sie sich einfach den Zeitraum an und er gibt die Länge der Saison an.

Stationarität ist ein wichtiges Merkmal von Zeitreihen. Eine Zeitreihe wird als stationär bezeichnet, wenn sich ihre statistischen Eigenschaften im Laufe der Zeit nicht ändern. Mit anderen Worten, es hat einen konstanten Mittelwert und eine konstante Varianz und seine Kovarianz ist unabhängig von der Zeit.

Wenn wir uns das gleiche Diagramm ansehen, sehen wir, dass der obige Prozess stationär ist. Der Mittelwert und die Varianz variieren im Laufe der Zeit nicht.

Aktienkurse sind oft kein stationärer Prozess. Möglicherweise sehen wir einen wachsenden Trend oder seine Volatilität könnte im Laufe der Zeit zunehmen (was bedeutet, dass sich die Varianz ändert).

Idealerweise möchten wir eine stationäre Zeitreihe für die Modellierung haben. Natürlich sind nicht alle davon stationär, aber wir können verschiedene Transformationen vornehmen, um sie stationär zu machen.

Sie haben vielleicht bemerkt, dass der Titel der Handlung oben „Dickey-Fuller“ lautet. Dies ist der statistische Test, den wir durchführen, um festzustellen, ob eine Zeitreihe stationär ist oder nicht.

Ohne auf technische Details einzugehen, testet der Dickey-Fuller-Test die Nullhypothese, um festzustellen, ob eine Einheitswurzel vorhanden ist.

Wenn ja, dann ist p > 0 und der Prozess ist nicht stationär.

Andernfalls, p = 0, wird die Nullhypothese verworfen und der Prozess wird als stationär betrachtet.

Der folgende Prozess ist beispielsweise nicht stationär. Beachten Sie, dass der Mittelwert über die Zeit hinweg nicht konstant ist.

Es gibt viele Möglichkeiten, eine Zeitreihe zu modellieren, um Vorhersagen zu treffen. Zu den beliebtesten Methoden gehören:

Das Modell des gleitenden Durchschnitts ist wahrscheinlich der naivste Ansatz zur Zeitreihenmodellierung. Dieses Modell besagt einfach, dass die nächste Beobachtung der Mittelwert aller vergangenen Beobachtungen ist.

Obwohl dieses Modell einfach ist, kann es überraschend effektiv sein und stellt einen guten Ausgangspunkt dar.

Andernfalls kann der gleitende Durchschnitt verwendet werden, um interessante Trends in den Daten zu identifizieren. Wir können ein Fenster definieren, um das Modell des gleitenden Durchschnitts anzuwenden, um die Zeitreihen zu glätten und verschiedene Trends hervorzuheben.

Im obigen Diagramm haben wir das Modell des gleitenden Durchschnitts auf ein 24-Stunden-Fenster angewendet. Die grüne Linie hat die Zeitreihe geglättet und wir können sehen, dass es innerhalb eines 24-Stunden-Zeitraums zwei Spitzenwerte gibt.

Je länger das Fenster ist, desto gleichmäßiger wird der Trend natürlich sein. Unten sehen Sie ein Beispiel für einen gleitenden Durchschnitt in einem kleineren Fenster.

Die exponentielle Glättung verwendet eine ähnliche Logik wie der gleitende Durchschnitt, dieses Mal wird jedoch jeder Beobachtung eine andere abnehmende Gewichtung zugewiesen. Mit anderen Worten: Je weiter wir uns von der Gegenwart entfernen, desto weniger Bedeutung kommt den Beobachtungen zu.

Mathematisch wird die exponentielle Glättung wie folgt ausgedrückt:

Alpha ist hier ein Glättungsfaktor das nimmt Werte zwischen null und eins an. Es bestimmt, wie schnell das Gewicht für frühere Beobachtungen abnimmt.

Im Diagramm oben stellt die dunkelblaue Linie die exponentielle Glättung der Zeitreihe mit einem Glättungsfaktor von 0,3 dar, während die orange Linie einen Glättungsfaktor von 0,05 verwendet.

Wie Sie sehen, ist die Zeitreihe umso glatter, je kleiner der Glättungsfaktor ist. Dies ist sinnvoll, denn wenn der Glättungsfaktor gegen Null geht, nähern wir uns dem Modell des gleitenden Durchschnitts.

Die doppelte exponentielle Glättung wird verwendet, wenn in der Zeitreihe ein Trend vorliegt. In diesem Fall verwenden wir diese Technik, bei der es sich lediglich um eine rekursive Anwendung der exponentiellen Glättung zweimal handelt.

Mathematisch:

Beta ist hier der Trendglättungsfaktor und nimmt Werte zwischen Null und Eins an.

Unten können Sie sehen, wie sich unterschiedliche Werte von Alpha und Beta auf die Form der Zeitreihe auswirken.

Diese Methode erweitert die doppelte exponentielle Glättung um einen saisonalen Glättungsfaktor. Dies ist natürlich nützlich, wenn Sie in Ihrer Zeitreihe Saisonalität bemerken.

Mathematisch wird die dreifache exponentielle Glättung ausgedrückt als:

Dabei ist Gamma der saisonale Glättungsfaktor und L die Länge der Saison.

Mehr zu Data Science: Den K-Nearest Neighbor (KNN)-Algorithmus verstehen

SARIMA ist eigentlich die Kombination einfacherer Modelle, die ein komplexes Modell erstellen, das eine Zeitreihe darstellen kann, die instationäre Eigenschaften und Saisonalität aufweist.

Zuerst haben wir die Autoregressionsmodell, AR(p). Dies ist im Grunde eine Regression der Zeitreihe auf sich selbst. Hier gehen wir davon aus, dass der aktuelle Wert mit einer gewissen Verzögerung von seinen vorherigen Werten abhängt. Es braucht einen Parameter p, was die maximale Verzögerung darstellt. Um es zu finden, schauen wir uns das partielle Autokorrelationsdiagramm an und identifizieren die Verzögerung, nach der die meisten Verzögerungen nicht mehr signifikant sind.

Im Beispiel unten, Swären vier.

Als nächstes fügen wir das gleitende Durchschnittsmodell MA(q) hinzu. Dies erfordert einen Parameter qDies stellt die größte Verzögerung dar, nach der andere Verzögerungen im Autokorrelationsdiagramm nicht mehr signifikant sind.

Unten, qwären vier.

Danach fügen wir die Integrationsreihenfolge I(d) hinzu. Der Parameter dstellt die Anzahl der Differenzen dar, die erforderlich sind, um die Reihe stationär zu machen.

Zum Schluss fügen wir die letzte Komponente hinzu: Saisonalität S(P, D, Q, s), wobei s ist einfach die Länge der Saison. Diese Komponente benötigt die Parameter P und Q die mit p und q identisch sind, jedoch für die saisonale Komponente. Schließlich, Dist die Reihenfolge der saisonalen Integration, die die Anzahl der Differenzen darstellt, die erforderlich sind, um die Saisonalität aus der Reihe zu entfernen.

Wenn wir alles kombinieren, erhalten wir die SARIMA (p, d, q)(P, D, Q, s)Modell.

Die wichtigste Erkenntnis ist folgende: Vor der Modellierung mit SARIMA müssen wir Transformationen auf unsere Zeitreihen anwenden, um Saisonalität und instationäre Verhaltensweisen zu beseitigen.

Das war eine Menge Theorie, mit der wir uns beschäftigen mussten. Lassen Sie uns die oben besprochenen Techniken in unserem ersten Projekt anwenden.

Wir werden versuchen, den Aktienkurs eines bestimmten Unternehmens vorherzusagen. Heutzutage ist es praktisch unmöglich, Aktienkurse vorherzusagen. Es bleibt jedoch eine unterhaltsame Übung und eine gute Möglichkeit, das Gelernte in die Praxis umzusetzen.

Wir werden den historischen Aktienkurs des New Germany Fund (GF) nutzen, um zu versuchen, den Schlusskurs in den nächsten fünf Handelstagen vorherzusagen. (Sie können zusammen mit dem Datensatz und dem Notizbuch codieren.)

Zunächst importieren wir einige Bibliotheken, die während unserer Analyse hilfreich sein werden. Außerdem müssen wir den mittleren durchschnittlichen prozentualen Fehler (MAPE) definieren, da dies unsere Fehlermetrik ist.

Anschließend importieren wir unseren Datensatz und die ersten zehn Einträge. Sie sollten Folgendes erhalten:

Wie Sie sehen, haben wir einige Einträge zu einer anderen Aktie als dem New Germany Fund (GF). Außerdem haben wir einen Eintrag zu Intraday-Informationen, aber wir möchten nur End-of-Day-Informationen (EOD).

Zuerst entfernen wir unerwünschte Einträge.

Anschließend entfernen wir unerwünschte Spalten, da wir uns ausschließlich auf den Schlusskurs der Aktie konzentrieren möchten.

Wenn Sie eine Vorschau des Datensatzes anzeigen, sollten Sie Folgendes sehen:

Jetzt sind wir bereit für die explorative Datenanalyse.

Wir zeichnen den Schlusskurs über den gesamten Zeitraum unseres Datensatzes auf.

Du solltest bekommen:

Dies ist eindeutig kein stationärer Prozess und es ist schwer zu sagen, ob es irgendeine Art von Saisonalität gibt.

Lassen Sie uns das Modell des gleitenden Durchschnitts verwenden, um unsere Zeitreihen zu glätten. Dazu verlassen wir uns auf eine Hilfsfunktion, die das Modell des gleitenden Durchschnitts über ein bestimmtes Zeitfenster ausführt und die resultierende geglättete Kurve zeichnet:

Unter Verwendung eines Zeitfensters von fünf Tagen erhalten wir:

Wir können kaum einen Trend erkennen, da er zu nah an der tatsächlichen Kurve liegt. Lassen Sie uns den Vormonat und das Vorquartal glätten, um die Ergebnisse zu vergleichen.

Trends sind jetzt leichter zu erkennen. Beachten Sie, dass die 30-Tage- und 90-Tage-Trends am Ende eine Abwärtskurve zeigen. Dies könnte bedeuten, dass die Aktie in den folgenden Tagen wahrscheinlich fallen wird.

Lassen Sie uns nun die exponentielle Glättung verwendenum zu sehen, ob es einen besseren Trend aufnehmen kann.

Als Werte für den Glättungsfaktor verwenden wir hier 0,05 und 0,3. Probieren Sie gerne andere Werte aus und sehen Sie, welche Ergebnisse erzielt werden.

Wie Sie sehen können, hat ein Alpha-Wert von 0,05 die Kurve geglättet und gleichzeitig die meisten Aufwärts- und Abwärtstrends aufgegriffen.

Lassen Sie uns nun die doppelte exponentielle Glättung verwenden.

Und Sie erhalten:

Experimentieren Sie erneut mit verschiedenen Alpha- und Beta-Kombinationen, um besser aussehende Kurven zu erhalten.

Wie bereits erwähnt, müssen wir unsere Serie in einen stationären Prozess umwandeln, um sie modellieren zu können. Wenden wir daher den Dickey-Fuller-Test an, um zu sehen, ob es sich um einen stationären Prozess handelt:

Das solltest du sehen:

Nach dem Dickey-Fuller-Test ist die Zeitreihe wenig überraschend instationär. Wenn wir uns außerdem das Autokorrelationsdiagramm ansehen, sehen wir, dass es sehr hoch ist und es scheint, dass es keine klare Saisonalität gibt.

Um die hohe Autokorrelation zu beseitigen und den Prozess stationär zu machen, nehmen wir die erste Differenz (Zeile 23 im Codeblock). Wir subtrahieren einfach die Zeitreihe mit einer Verzögerung von einem Tag von sich selbst und erhalten:

Unsere Serie ist nun stationär und wir können mit dem Modellieren beginnen.

Nun müssen wir für SARIMA zunächst einige Parameter und einen Wertebereich für andere Parameter definieren, um eine Liste aller möglichen Kombinationen von p, q, d, P, Q, D, s zu erstellen.

Jetzt haben wir in der Codezelle oben 625 verschiedene Kombinationen. Wir werden jede Kombination ausprobieren und SARIMA mit jeder trainieren, um das Modell mit der besten Leistung zu finden. Dies kann je nach Rechenleistung Ihres Computers eine Weile dauern.

Sobald dies erledigt ist, drucken wir eine Zusammenfassung des besten Modells aus, und Sie sollten Folgendes sehen:

Endlich können wir den Schlusskurs der nächsten fünf Handelstage vorhersagen und den mittleren absoluten prozentualen Fehler (MAPE) des Modells bewerten.

In diesem Fall haben wir einen MAPE von 0,79 Prozent, was sehr gut ist.

Mehr zu Data ScienceC-Means Clustering erklärt

Um nun unsere Vorhersage mit tatsächlichen Daten zu vergleichen, können wir Finanzdaten von Yahoo Finance übernehmen und einen DataFrame erstellen.

Dann erstellen wir eine grafische Darstellung, um zu sehen, wie weit wir von den tatsächlichen Schlusskursen entfernt waren:

Es scheint, dass wir mit unseren Vorhersagen etwas daneben liegen. Tatsächlich ist der prognostizierte Preis im Wesentlichen unverändert, was bedeutet, dass unser Modell wahrscheinlich keine gute Leistung erbringt.

Auch dies liegt nicht an unserem Verfahren, sondern an der Tatsache, dass es im Grunde unmöglich ist, Aktienkurse vorherzusagen.

Im ersten Projekt lernten wir das gesamte Verfahren zum Erstellen einer stationären Zeitreihe, bevor wir SARIMA zur Modellierung verwendeten. Es ist ein langer und mühsamer Prozess mit vielen manuellen Optimierungen.

Nun stellen wir den Propheten von Facebook vor. Es handelt sich um ein Prognosetool, das sowohl in Python als auch in R verfügbar ist. Dieses Tool ermöglicht es sowohl Experten als auch Nicht-Experten, mit minimalem Aufwand qualitativ hochwertige Prognosen zu erstellen.

Der Titel sagt alles: Wir werden Prophet verwenden, um die Luftqualität vorherzusagen. Sie können zusammen mit dem vollständigen Notizbuch und dem Datensatz programmieren.

Wie immer beginnen wir mit dem Import einiger nützlicher Bibliotheken. Anschließend drucken wir die ersten fünf Zeilen aus:

Wie Sie sehen, enthält der Datensatz Informationen über die Konzentrationen verschiedener Gase. Sie wurden jeden Tag zu jeder vollen Stunde aufgezeichnet.

Wenn Sie den Datensatz etwas genauer untersuchen, werden Sie feststellen, dass es mehrere Instanzen des Werts -200 gibt. Natürlich ist eine negative Konzentration nicht sinnvoll, daher müssen wir die Daten vor der Modellierung bereinigen.

Daher müssen wir die Daten bereinigen.

Hier beginnen wir damit, unsere Datumsspalte zu analysieren, um sie in „Datumsangaben“ umzuwandeln.

Dann wandeln wir alle Messungen in Floats um.

Anschließend nehmen wir den Durchschnitt jeder Messung, um die Daten pro Tag zu aggregieren.

Zu diesem Zeitpunkt haben wir noch einige NaN, die wir loswerden müssen. Daher entfernen wir die Spalten, die mehr als acht NaN haben. Auf diese Weise können wir dann Zeilen mit NaN-Werten entfernen, ohne zu viele Daten zu verlieren.

Abschließend aggregieren wir die Daten nach Woche, da dies einen glatteren Trend für die Analyse ergibt.

Wir können die Trends jeder Chemikalie darstellen. Hier zeigen wir das von NOx.

Stickoxide sind sehr schädlich, da sie zu Smog und saurem Regen reagieren und außerdem die Bildung von Feinstaub und bodennahem Ozon verursachen. Da diese schädliche Auswirkungen auf die Gesundheit haben, ist die NOx-Konzentration ein entscheidendes Merkmal der Luftqualität.

Mehr zu Data Science: Die 10 wichtigsten Predictive Analytics-Tools, die Sie kennen sollten

Wir werden uns ausschließlich auf die Modellierung der NOx-Konzentration konzentrieren. Daher entfernen wir alle anderen irrelevanten Spalten.

Dann importieren wir Prophet.

Prophet erfordert, dass die Datumsspalte den Namen ds und die Feature-Spalte den Namen y trägt, daher nehmen wir die entsprechenden Änderungen vor.

Zu diesem Zeitpunkt sehen unsere Daten so aus:

Dann definieren wir einen Trainingssatz. Dafür werden wir die letzten 30 Einträge zur Vorhersage und Validierung bereithalten. Anschließend initialisieren wir Prophet einfach, passen das Modell an die Daten an und treffen Vorhersagen.

Sie sollten Folgendes sehen:

Hier stellt yhat die Vorhersage dar, während yhat_lower und yhat_upper die untere bzw. obere Grenze der Vorhersage darstellen. Mit Prophet können Sie die Prognose ganz einfach zeichnen, und wir erhalten:

Wie Sie sehen können, hat Prophet einfach eine gerade Abwärtslinie verwendet, um die NOx-Konzentration in der Zukunft vorherzusagen.

Anschließend können wir prüfen, ob die Zeitreihe interessante Merkmale aufweist, beispielsweise Saisonalität:

Hier identifizierte Prophet lediglich einen Abwärtstrend ohne Saisonalität.

Wenn wir die Leistung des Modells durch Berechnung seines mittleren absoluten prozentualen Fehlers (MAPE) und des mittleren absoluten Fehlers (MAE) bewerten, sehen wir, dass der MAPE 13,86 Prozent und der MAE 109,32 beträgt, was nicht so schlecht ist. Denken Sie daran, dass wir das Modell nicht verfeinert haben.

Abschließend zeichnen wir nur noch die Prognose mit ihren Ober- und Untergrenzen auf:

Sie haben nun gelernt, wie man eine Zeitreihe zuverlässig analysiert und modelliert, und haben Ihr Wissen in zwei verschiedenen Projekten angewendet.

, .