Python: Zeitreihenanalyse

Übersicht über die Zeitreihenanalyse

Daten in chronologischer Reihenfolge

Die Zeitreihenanalyse befasst sich mit Zeitreihendaten. Zeitreihendaten Daten, die sich im Laufe der Zeit ändern.

Speziell

Man kann sagen, dass es sich um Zeitreihendaten handelt.

Die Zeitreihenanalyse prognostiziert Unternehmensverkäufe und Produktverkäufe Darüber hinaus ist es eine sehr wichtige Analysetechnologie im Geschäftsleben, beispielsweise die Vorhersage der Besucherzahl.

Erfahren Sie, wie Sie Zeitreihendaten mit StatsModels von Python analysieren. Schließlich werden wir uns mit dem SARIMA-Modell befassen.

Das ultimative Ziel ist so.

import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas import datetime
import numpy as np

#Laden und Organisieren von Daten
sales_sparkling = pd.read_csv("./5060_tsa_data/monthly-australian-wine-sales-th-sparkling.csv")
index = pd.date_range("1980-01-31","1995-07-31",freq="M")
sales_sparkling.index=index
del sales_sparkling["Month"]

#Modell fit
SARIMA_sparkring_sales = sm.tsa.statespace.SARIMAX(sales_sparkling,order=(0,0, 0),seasonal_order=(0, 1, 1, 12)).fit()

#Pred durch Vorhersagedaten ersetzen
pred = SARIMA_sparkring_sales.predict("1994-7-31","1997-12-31")

#Visualisierung von Pread-Daten und ursprünglichen Zeitreihendaten
plt.plot(sales_sparkling)
plt.plot(pred,color="r")
plt.show()

Darstellung von Zeitreihendaten

Der erste Schritt bei der Zeitreihenanalyse ist die Visualisierung der Zeitreihendaten. Sie können verschiedene Dinge sehen, indem Sie die Daten visualisieren.

Verwenden von Pythons Matplotlib Ich habe versucht, die Kohlendioxidkonzentration des Mauna Loa Observatory in Hawaii mit einem gestrichelten Liniendiagramm darzustellen.

import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm

#Daten lesen(Verwenden Sie StatsModels-Testdaten)
co2_tsdata = sm.datasets.co2.load_pandas().data
#Umgang mit fehlenden Werten
co2_tsdata2 = co2_tsdata.fillna(method="ffill")

#Bestimmen Sie den Titel des Diagramms
plt.title("Mauna Loa Weekly Atmospheric CO2 Data")
#Benennung der x-Achse und der y-Achse des Diagramms
plt.xlabel("date")
plt.ylabel("CO2 Concentration ppmv")
#Die x-Achsenperiode reicht von 1995 bis 2000, und die y-Achse ist der Wert von 355 bis 375, und die Daten werden durch ein gestricheltes Liniendiagramm dargestellt.
plt.plot(co2_tsdata2)
plt.xlim("1995", "2000")
plt.ylim(355, 375)
plt.show()

Grundlagen von Zeitreihendaten

Für Zeitreihendaten

Es gibt drei Muster: (1) Trend, (2) periodische Fluktuation und (3) unregelmäßige Fluktuation.

Trend

Trends repräsentieren langfristige Trends in Daten. Zeitreihendaten, bei denen der Wert der Daten im Laufe der Zeit steigt oder fällt, haben einen "Trend". Wenn der Wert steigt, gibt es einen positiven Trend. Wenn er fällt, gibt es einen negativen Trend.

Periodische Schwankungen

Bei Daten mit periodischen Schwankungen wiederholt sich der Wert der Daten im Laufe der Zeit steigend und fallend. Insbesondere periodische Schwankungen über ein Jahr werden als saisonale Schwankungen bezeichnet.

Unregelmäßige Schwankungen

Unregelmäßige Schwankungen bedeuten, dass der Wert von Daten unabhängig vom Zeitablauf schwankt.

Modellierung von Zeitreihendaten

Was ist Zeitreihendatenmodellierung? Es bezieht sich auf die Formulierung von Zeitreihendaten in irgendeiner Form.

Um die verschiedenen Eigenschaften von Zeitreihendaten erklären zu können Erstellen Sie ein Modell und machen Sie verschiedene Vorhersagen basierend auf diesem Zeitreihenmodell Der Zweck dieser Zeitreihenanalyse ist die Analyse der gegenseitigen Beziehungen.

Durch Beobachtung der tatsächlichen Zeitreihendaten können wir sehen, dass diese drei Muster kombiniert werden.

Arten von Zeitreihendaten

Konvertierung von Zeitreihendaten

Die Zeitreihendaten selbst, die nichts tun

Es heißt die Originalserie.

Der Zweck der Zeitreihenanalyse besteht darin, die Natur dieser Originalserie zu untersuchen. Wir werden ein Modell bauen, indem wir verschiedene Merkmale der Originalserie klären. Basierend auf diesem Modell sagen wir dann die Daten voraus und klären die Beziehungen zwischen den Zeitreihendaten.

Die Zeitreihenanalyse befasst sich jedoch selten mit der Originalserie selbst. Tatsächlich verarbeiten wir die Zeitreihendaten zu einer neuen Reihe und analysieren sie, um ein Modell zu erstellen.

von jetzt an

Ich werde es tatsächlich schaffen, indem ich die Daten verarbeite.

Protokollserie

Viele der Zeitreihendaten weisen große Wertschwankungen auf. Es ist die logarithmische Transformation, die solche Datenschwankungen mildert.

Lassen Sie uns tatsächlich eine logarithmische Konvertierung der Daten durchführen. Hier zur logarithmischen Umrechnung

Numpy np.log()Wird genutzt.
np.log()Wie man np benutzt.log(Pandas Dataframe-Typ)Und so weiter
Geben Sie ein Argument an und verwenden Sie es.
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm

import numpy as np

#Daten lesen(Verwenden Sie StatsModels-Testdaten)
macrodata = sm.datasets.macrodata.load_pandas().data
macrodata.index = pd.Index(sm.tsa.datetools.dates_from_range("1959q1","2009q3"))

#Der Wert des realen BIP der Vereinigten Staaten vor der logarithmischen Umrechnung wird aus den gelesenen Daten angezeigt.
print(macrodata.realgdp.head())

#Konvertieren Sie die Prototypspalte in eine logarithmische Reihe.
macrodata_realgdp_log = np.log(macrodata.realgdp)

#Der Wert nach der logarithmischen Konvertierung wird angezeigt.
print(macrodata_realgdp_log.head())

Bodendifferenzserie

Bei der Analyse von Zeitreihendaten beschäftigen wir uns häufig mit der Wertdifferenz gegenüber der vorherigen Zeit.

Die Differenz vom vorherigen Wert auf diese Weise zu nehmen, heißt Differenz nehmen. Die Reihe nach der Differenzierung auf diese Weise wird als Differenzreihe bezeichnet.

Durch diese Konvertierung kann der Trend der Originalserie entfernt werden. (Was ist ein Trend? Ist es aus einer breiten Perspektive ein Aufwärtstrend? Neigt es dazu, sich zu beruhigen? Ist es ein Abwärtstrend? )

Ich werde die Originalserie später erklären, indem ich den Trend entferne Konstanter Prozess (die Eigenschaft, dass sich der Wert der Zeitreihe im Laufe der Zeit insgesamt nicht ändert) Es kann eine wichtige Umwandlung sein.

import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
import numpy as np

#Daten lesen(Verwenden Sie StatsModels-Testdaten)
co2_tsdata = sm.datasets.co2.load_pandas().data

#Umgang mit fehlenden Werten
co2_tsdata2 = co2_tsdata.fillna(method="ffill")

#Nehmen Sie den Unterschied in den Daten
co2_tsdata2_diff = co2_tsdata2.diff()


plt.subplot(2,1,1)
plt.title("Mauna Loa Weekly Atmospheric CO2 Data")
plt.xlabel("date")
plt.ylabel("CO2 Concentration ppmv")
plt.plot(co2_tsdata2)

plt.subplot(2,1,2)
plt.title("Mauna Loa Weekly Atmospheric CO2 Data DIFF")
plt.xlabel("date")
plt.ylabel("CO2 Concentration ppmv DIFF")
plt.plot(co2_tsdata2_diff)

plt.subplots_adjust(wspace=0, hspace=1.0)

plt.show()

Saisonbereinigte Serien

Werfen wir einen Blick auf die Daten zu Änderungen der Kohlendioxidkonzentration am Mauna Loa Observatorium.

Auf diese Weise können periodische Schwankungen in einem Jahreszyklus vorgenommen werden.

Ich sagte, es sei saisonal.

In diesem Liniendiagramm stört dieses saisonale Variationsmuster jedoch. Der Trend der Zeitreihendaten ist schwer zu verstehen.

Suche nach Trends in nicht saisonalen Daten aus solchen saisonalen Daten Saisonale Schwankungen werden häufig aus der Originalserie entfernt, und die Daten, aus denen saisonale Schwankungen entfernt wurden, sind

Es wird eine saisonbereinigte Serie genannt.
Statistik Modelle
tsa.seasonal_decompose()Durch die Nutzung
Trends in der Originalserie, saisonale Schwankungen, unregelmäßige Schwankungen(Restfehler)Es kann unterteilt werden in.

Vom Ergebnis
Ovserved(Zuerst)Ist die Originalserie
Trend   (Zweite)Ist eine Trendkomponente
Seasonal(Der dritte)Ist saisonal
Residual(Vierte)Ist der Rest
Repräsentiert.
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from numpy import nan as na
import numpy as np

#Daten lesen(Verwenden Sie StatsModels-Testdaten)
co2_tsdata = sm.datasets.co2.load_pandas().data
co2_tsdata2 = co2_tsdata.fillna(method="ffill")
#Passen Sie die Originalserie saisonal an und geben Sie sie aus, indem Sie sie in Trends, saisonale Schwankungen und Residuen unterteilen.
fig = sm.tsa.seasonal_decompose(co2_tsdata2, freq=52).plot()
plt.show()

image.png

Statistiken in Zeitreihendaten

Erwarteter Wert (Durchschnitt)

Von hier aus werde ich ein wenig Mathematik verwenden. Konzentrieren wir uns darauf, was jeder Wert bedeutet.

Die Daten werden auch anhand grundlegender Statistiken in der Zeitreihenanalyse beschrieben.

image.png

Angenommen, solche Daten werden beobachtet. Zu diesem Zeitpunkt beispielsweise die Daten des dritten Tages

image.png Es wird ausgedrückt als.

Die grundlegendste Statistik ist die erwartete oder durchschnittliche Statistik.

image.png

Es wird ausgedrückt als und zeigt den Durchschnittswert des Wertes der Zeitreihendaten. Apropos

Was ist E?(Erwarteter Wert)Ist eine Abkürzung für.

Lassen Sie uns den Durchschnittswert der Daten ermitteln.

Der Durchschnittswert ist np.mean()Sie finden es unter.
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
import numpy as np

#Daten lesen(Verwenden Sie StatsModels-Testdaten)
co2_tsdata = sm.datasets.co2.load_pandas().data
#Umgang mit fehlenden Werten
co2_tsdata2 = co2_tsdata.fillna(method="ffill")
#Finden Sie den Durchschnittswert der Daten
np.mean(co2_tsdata2)

Dispersion / Standardabweichung

Eine der Statistiken, die zeigt, wie stark die Zeitreihendaten vom erwarteten Wert abweichen Es wird verteilt. Die Dispersion verwendet erwartete Werte

image.png

Es wird ausgedrückt als.

Die Quadratwurzel der Varianz wird als Standardabweichung bezeichnet.

image.png

Es wird vertreten durch. Auch vor allem im Finanzbereich diese Standardabweichung Es heißt Volatilität. Die Standardabweichung ist ein wichtiges Maß für das Risiko im Finanzbereich.

Selbstkovarianz / Autokorrelationskoeffizient

Als nächstes werde ich die Statistiken und die Selbstkovarianz vorstellen, die für Zeitreihendaten typisch sind. Selbstverteilung ist die gemeinsame Verteilung zwischen verschiedenen Zeitpunkten in denselben Zeitreihendaten. Die durch k Punkte getrennte Selbstkovarianz wird als Selbstkovariation k-ter Ordnung bezeichnet.

image.png

Es wird ausgedrückt als. Darüber hinaus sehen wir als Funktion von k diese Selbstkovarianz. Es wird eine selbstkovariante Funktion genannt.

Es ist möglich, diese Selbstkovarianz zwischen verschiedenen Werten zu vergleichen. Es wird als Autokorrelationskoeffizient bezeichnet.

image.png

Es wird ausgedrückt als. Ähnlich wie bei der Selbstkovarianz wird dieser Autokorrelationskoeffizient als Funktion von k angesehen. Es wird eine Autokorrelationsfunktion genannt. Und ein Diagramm dieser Autokorrelationsfunktion

Es wird ein Cholerogramm genannt.
Der Autokorrelationskoeffizient ist einfach ein Wert, der zeigt, wie ähnlich er früheren Werten ist.

Ausgabe des Autokorrelationskoeffizienten

Wir werden den eingeführten Autokorrelationskoeffizienten ausgeben und visualisieren.

Autokorrelationskoeffizient(ACF:Autocorrelation Function)Ist

sm.tsa.stattools.acf()
Das erste Argument sind Daten
Das zweite Argument ist nlags(Standard 40, optional)Gefragt
Die Grafik ist

sm.graphics.tsa.plot_acf()
Das erste Argument sind Daten
Das zweite Argument sind Verzögerungen, mit denen Sie Diagramme berechnen und erstellen können.

Bei täglichen Daten kann die Verzögerung um eins verschoben und die Autokorrelation bestätigt werden. Sie können sehen, wie sich der Wert vor einem Tag heute auswirkt.

Die Anzahl der Schritte der verschobenen Daten wird als Verzögerung bezeichnet. Der Autokorrelationskoeffizient Lag 0 ist immer 1. Lag 0 verschiebt keine Daten Dies liegt daran, dass zwischen denselben Werten eine Korrelation besteht. Dies ist eine Richtlinie für die Stärke und Schwäche des (Selbst-) Korrelationskoeffizienten.

image.png

Als Beispiel ist der Autokorrelationskoeffizient der Mauna Loa-Kohlendioxidkonzentrationsdaten

import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
import numpy as np

#Daten lesen(Verwenden Sie StatsModels-Testdaten)
co2_tsdata = sm.datasets.co2.load_pandas().data

#Umgang mit fehlenden Werten
co2_tsdata2 = co2_tsdata.fillna(method="ffill")

#Finden Sie den Autokorrelationskoeffizienten der Daten
co2_tsdata2_acf = sm.tsa.stattools.acf(co2_tsdata2, nlags=40)
print(co2_tsdata2_acf)

#Autokorrelationskoeffizient(ACF)Erstellen Sie ein Diagramm von
sm.graphics.tsa.plot_acf(co2_tsdata2,lags=40)
plt.show()

image.png

Recommended Posts

Python: Zeitreihenanalyse
Python: Zeitreihenanalyse: Vorverarbeitung von Zeitreihendaten
Python-Zeitreihenfrage
RNN_LSTM1 Zeitreihenanalyse
Zeitreihenanalyse 1 Grundlagen
Python: Zeitreihenanalyse: Erstellen eines SARIMA-Modells
Python: Zeitreihenanalyse: Konstanz, ARMA / ARIMA-Modell
Zeitreihenanalyse Teil 4 VAR
Zeitreihenanalyse Teil 3 Prognose
[Python] Zeichnen Sie Zeitreihendaten
Zeitreihenanalyse Teil 1 Autokorrelation
Python 3.4 Windows7-64bit-Umgebung erstellen (für die Analyse finanzieller Zeitreihen)
Umsatzprognose für die Zeitreihenanalyse
Zeitreihenplot gestartet ~ Python Edition ~
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Erster Python
Datenanalyse Python
Zeitreihenzerlegung
Python-Zeitmessung
Erster Python
Zeitreihenanalyse 2 Stabilität, ARMA / ARIMA-Modell
Ich habe versucht, Zeitreihen zu analysieren! (AR-Modell)
Zeitreihenanalyse Teil 2 AR / MA / ARMA
[Python] Beschleunigt das Laden von Zeitreihen-CSV
Zeitreihenanalyse 4 Konstruktion des SARIMA-Modells
Zeitreihenanalyse Nr. 6 Gefälschte Rückkehr und republikanischer Teil
Holen Sie sich mit Python Zeitreihendaten von k-db.com
Datenanalyse mit Python 2
Zeitvariationsanalyse von Schwarzen Löchern mit Python
Funktionsausführungszeit (Python)
Datenanalyse Übersicht Python
Sprachanalyse mit Python
Überlebensanalyse mit Python 2-Kaplan-Meier-Schätzung
Ausführungszeit für Python ausgeben
Timefloor-Funktion (Python)
Python-Datenanalysevorlage
Assoziationsanalyse in Python
Sprachanalyse mit Python
Python Aktuelle Zeit abrufen
Datenanalyse mit Python
TOPIX-Zeitreihen anzeigen
Zeitreihendiagramm / Matplotlib
Regressionsanalyse mit Python
Einführung in die Zeitreihenanalyse ~ Saisonales Anpassungsmodell ~ In R und Python implementiert
[Zeitreihen mit Handlung] Dynamische Visualisierung mit Handlung [Python, Aktienkurs]
Mein Python-Datenanalyse-Container
[Python] Morphologische Analyse mit MeCab
Python-Anwendung: Pandas Teil 2: Serie
Python 2-Serie und 3-Serie (Anaconda Edition)
Memo zur Messung der Python-Ausführungszeit
[Analyse des gemeinsamen Auftretens] Einfache Analyse des gemeinsamen Auftretens mit Python! [Python]
Python für die Datenanalyse Kapitel 4
Python: Japanischer Text: Morphologische Analyse
[Einführung in die Elementzerlegung] Lassen Sie uns Zeitreihenanalysemethoden in R und Python arrange anordnen
Python Statistical Techniques-Statistische Analyse gegen Python-
Emotionsanalyse von Python (word2vec)