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()
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()
Für Zeitreihendaten
Es gibt drei Muster: (1) Trend, (2) periodische Fluktuation und (3) unregelmäßige Fluktuation.
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.
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 bedeuten, dass der Wert von Daten unabhängig vom Zeitablauf schwankt.
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.
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.
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())
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()
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()
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.
Angenommen, solche Daten werden beobachtet. Zu diesem Zeitpunkt beispielsweise die Daten des dritten Tages
Es wird ausgedrückt als.
Die grundlegendste Statistik ist die erwartete oder durchschnittliche Statistik.
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)
Eine der Statistiken, die zeigt, wie stark die Zeitreihendaten vom erwarteten Wert abweichen Es wird verteilt. Die Dispersion verwendet erwartete Werte
Es wird ausgedrückt als.
Die Quadratwurzel der Varianz wird als Standardabweichung bezeichnet.
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.
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.
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.
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.
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.
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()
Recommended Posts