Das ARIMA-Modell ist ein Modell, das von vorherigen Werten beeinflusst wird Mit dem AR-Modell AR (p), das mit den letzten p-Werten korreliert Ein MA-Modell MA (q), das von den vorherigen q-Werten in einem vom vorherigen Fehler betroffenen Modell beeinflusst wird, wurde synthetisiert. ARMA (p, q) wurde an die Differenzreihe vor dem d-Punkt angepasst.
Und Was ist das SARIMA-Modell? Das ARIMA-Modell wird auch für Zeitreihendaten mit einem saisonalen Zyklus verwendet Es ist ein Modell, das erweitert werden kann.
Das SARIMA-Modell verfügt zusätzlich zu (p, d, q) -Parametern Es hat auch die Parameter (sp, sd, sq, s).
sp :Saisonale Autokorrelation
sd :Ableitung der Saisonalität
sq :Saisonaler gleitender Durchschnitt
Es heißt.
Übrigens ARIMA(p,d,q)Vom Modell
・ P.:Es wird der Grad der Autokorrelation genannt und ob das Modell unter Verwendung der letzten p-Werte vorhergesagt wird.
・ D.:Es wird Induktion genannt und die Tatsache, dass die Differenz d-ter Ordnung notwendig war, um die Zeitreihendaten stabil zu machen.
・ Q.:Dies wird als gleitender Durchschnitt bezeichnet und die Tatsache, dass das Modell von den letzten q-Werten beeinflusst wird
Es stellte dar.
Die Grundbedeutungen von sp, sd und sq ändern sich nicht. jedoch Für sp, sd, sq werden die aktuellen Daten von historischen Daten beeinflusst, die eine oder mehrere saisonale Perioden durchlaufen haben.
Beispielsweise repräsentiert bei Daten mit saisonalen Schwankungen des 12-Monats-Zyklus der Parameter von s den Zyklus. Es wird s = 12.
Wenn sq = 1, Daten für genau 12 Monate (vor 1 Zyklus) Wenn sq = 2 ist, bedeutet dies, dass das Modell von den Daten vor 12 Monaten und den Daten vor 24 Monaten betroffen ist.
Wenn es schwer zu verstehen ist, ersetzen Sie einfach q durch sq.
SARIMA-Modellparameter (p, d, q) (sp, sd, sq, s) für Python Es gibt keine Funktion, die es automatisch am besten geeignet macht.
Daher ist die Informationsmenge Standard(BIC in diesem Fall(Bayesianischer Informationsmengenstandard) )Durch
Sie müssen ein Programm schreiben, um herauszufinden, welcher Wert am besten geeignet ist.
Ich werde diesmal nicht auf den Standard der Informationsmenge eingehen. Beachten Sie bei BIC, dass der Parameterwert umso geeigneter ist, je niedriger dieser Wert ist.
#Daten in chronologischer Reihenfolge:DATA,Parameter s(Zeitraum):Geben Sie s ein, um die besten Parameter und deren BIC auszugeben.
def selectparameter(DATA,s):
p = d = q = range(0, 1)
pdq = list(itertools.product(p, d, q))
seasonal_pdq = [(x[0], x[1], x[2], 12) for x in list(itertools.product(p, d, q))]
parameters = []
BICs = np.array([])
for param in pdq:
for param_seasonal in seasonal_pdq:
try:
mod = sm.tsa.statespace.SARIMAX(DATA,
order=param,
seasonal_order=param_seasonal)
results = mod.fit()
parameters.append([param, param_seasonal, results.bic])
BICs = np.append(y,results.bic)
except:
continue
return print(parameters[np.argmin(BICs)])
Um auf den Inhalt der Funktion einzugehen, ist jeder Parameter Für 0,1 (diesmal wird die Obergrenze des Parameters der Einfachheit halber auf 1 gesetzt) Der BIC des SARIMA-Modells wird berechnet und der Fall angezeigt, in dem der BIC am kleinsten ist.
In Bezug auf die Parameter s, Zeitreihendaten und Lassen Sie es uns untersuchen, indem wir die unten beschriebene partielle Autokorrelation visualisieren.
import warnings
import itertools
import pandas as pd
import numpy as np
import statsmodels.api as sm
#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"]
#Es sind die Daten für ein Jahr
sales_sparkling = sales_sparkling[:12]
#Funktionsdefinition
def selectparameter(DATA,s):
p = d = q = range(0, 2)
pdq = list(itertools.product(p, d, q))
seasonal_pdq = [(x[0], x[1], x[2], s) for x in list(itertools.product(p, d, q))]
parameters = []
BICs = np.array([])
for param in pdq:
for param_seasonal in seasonal_pdq:
try:
mod = sm.tsa.statespace.SARIMAX(DATA,
order=param,
seasonal_order=param_seasonal)
results = mod.fit()
parameters.append([param, param_seasonal, results.bic])
BICs = np.append(BICs,results.bic)
except:
continue
return parameters[np.argmin(BICs)]
#Setzen Sie den Zyklus in das zweite Argument
selectparameter(sales_sparkling,12)
Autokorrelation war die Korrelation mit früheren Daten. Eine andere Möglichkeit, Zeitreihendaten zu analysieren
Der Wert der partiellen Autokorrelation ist wichtig.
Apropos Autokorrelation k-ter Ordnung, sie repräsentiert die Korrelation zwischen yt und yt-k. Die partielle Autokorrelation k-ter Ordnung sind die Daten zwischen yt und yt - k, d. H. Die Korrelation wird erhalten, indem der Einfluss von yt - k + 1 von yt - 1 entfernt wird.
Ich werde im Detail erklären. Angenommen, Sie finden den Autokorrelationskoeffizienten für eine Differenz von 7 Tagen. Wenn jedoch die Daten eines Tages mit den Daten des vorherigen Tages korrelieren, vor 7 Tagen → vor 6 Tagen → vor 5 Tagen ... Es kann durch die Daten von vor 1 Tag bis heute korreliert werden.
Die Korrelation, die durch Entfernen des Einflusses während dieses Zeitraums erhalten wird, wird als partielle Autokorrelation bezeichnet.
Lassen Sie uns den Autokorrelationskoeffizienten und den partiellen Autokorrelationskoeffizienten mit Python visualisieren. Wenn die monatlichen Daten saisonabhängig sind, beträgt der Zyklus im Allgemeinen 12.
#Der Graph des Autokorrelationskoeffizienten ist
sm.graphics.tsa.plot_acf(DATA)
#Der Graph der partiellen Autokorrelation ist
sm.graphics.tsa.plot_pacf(DATA)
#Sie können mit ausgeben.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas import datetime
#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"]
#Visualisierung der Autokorrelation / partiellen Autokorrelation
fig=plt.figure(figsize=(12, 8))
#Gibt ein Diagramm des Autokorrelationskoeffizienten aus
ax1 = fig.add_subplot(211)
fig = sm.graphics.tsa.plot_acf(sales_sparkling, lags=30, ax=ax1)
#Gibt ein Diagramm des partiellen Autokorrelationskoeffizienten aus
ax2 = fig.add_subplot(212)
fig = sm.graphics.tsa.plot_pacf(sales_sparkling, lags=30, ax=ax2)
plt.show()
Hier fasse ich das Verfahren zur Analyse von Zeitreihendaten mit dem SARIMA-Modell zusammen.
Daten lesen
Daten organisieren
Datenvisualisierung
Den Datenzyklus verstehen (Parameter bestimmen)
Andere Parameter als s bestimmen
Erstellen Sie ein Modell
Vorhersage mit Daten und deren Visualisierung
Es wird im Fluss gemacht.
Schließlich lernen wir in diesem Abschnitt von der Modellkonstruktion bis zur Vorhersage. Sobald Sie das Optimum (p, d, q) (sp, sd, sq, s) kennen, ist es Zeit, das Modell zu erstellen. Dieses Mal verwenden wir Daten für 15 Jahre (180 Monate).
#Ein Modell bauen
sm.tsa.statespace.SARIMAX(DATA,order=(p, d, q),seasonal_order=(sp, sd, sq, s)).fit()
#Wird genutzt.
Lassen Sie uns ein SARIMA-Modell der Verkaufsdaten von Sekt erstellen.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas import datetime
#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()
#Geben Sie den BIC des konstruierten SARIMA-Modells aus
print(SARIMA_sparkring_sales.bic)
Das Abrufen von Vorhersagedaten für das Modell ist einfach
Modellname.predict("Zu Beginn der Vorhersage","Am Ende der Prognose")Wird genutzt.
"Zu Beginn der Vorhersage" muss jedoch die Zeit in den ursprünglichen Zeitreihendaten sein. Beispielsweise müssen die Verkaufsdaten für den diesmal verwendeten Sekt vor dem 31.07.1995 liegen.
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from pandas import datetime
#Laden und Organisieren von Daten
sales_sparkling = pd.read_csv("./5060_tsa_data/monthly-australian-wine-sales-th-sparkling.csv")
print(sales_sparkling.head())
print(sales_sparkling.tail())
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-07-31","1997-12-31")
#Visualisierung von Pred-Daten
plt.plot(pred)
plt.show()
Als nächstes werden nur Prognosedaten ausgegeben Vergleichen wir die ursprünglichen Zeitreihendaten und Prognosedaten, indem wir sie gleichzeitig ausgeben.
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 Prädaten und ursprünglichen Zeitreihendaten
plt.plot(sales_sparkling)
plt.plot(pred, color="r")
plt.show()
Recommended Posts