ARIMA Grundkonzept und Prozesserklärung

Basiskonzept

Bildbeschreibung hier einfügen

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

p: autoregressive Ordnung
q: gleitende Durchschnittsordnung
d: Anzahl der Unterschiede, die gemacht werden, wenn die Zeitreihe stationär wird

AR - Auto Regression, Auto-Regressionsmodell: AR kann die Beziehung zwischen aktuellen Daten und späteren Daten lösen; ausgedrückt als Auto-Regressionsmodell AR( p )
Bildbeschreibung hier einfügenBildbeschreibung hier einfügen

MA - Moving Average, gleitendes Durchschnittsmodell: MA kann das Problem zufälliger Änderungen lösen, dh Rauschen; ausgedrückt als gleitendes Durchschnittsmodell MA(q)
Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

ARMA - Auto Regression and Moving Average, autoregressives gleitendes Durchschnittsmodell. Das autoregressive gleitende Durchschnittsmodell (ARMA) besteht aus zwei Teilen, dem autoregressiven (AR) und dem gleitenden Durchschnittsmodell (MA), ausgedrückt als ARMA(p, d). (Die oben genannten drei Arten von Modellen können direkt auf stationäre Zeitreihenmodelle angewendet werden.)
Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügenBildbeschreibung hier einfügen

ARIMA - Auto Regression Integrete Moving Average, autoregressives gleitendes Differenzmodell. Wie die drei vorangegangenen Modelle basiert auch das ARIMA-Modell auf einer stationären Zeitreihe bzw. ist nach Differentiation stabil, zudem können die vorangegangenen Modelle als Sonderform von ARIMA angesehen werden. Ausgedrückt als ARIMA(p, d, q). (Für die ersten drei Modelle ist d = 0, dh das stationäre Zeitreihenmodell muss nicht differenziert werden.)
Das ARIMA-Modell ist eine Weiterentwicklung des ARMA-Modells, das tatsächlich zuerst die Daten differenziert und dann das ARMA-Modell verwendet; mit anderen Worten, das ARIMA-Modell soll zuerst die nicht-stationären Daten stationär machen (unter Verwendung der Differenz) und dann das ARMA-Modell verwenden, um die stationären Daten zu verarbeitenBildbeschreibung hier einfügenBildbeschreibung hier einfügen

Bildbeschreibung hier einfügen





grundlegender Prozess

Modell importieren

import sys
import os
import warnings
warnings.filterwarnings("ignore")
import pandas as pd
import numpy as np
from arch.unitroot import ADF
import matplotlib.pylab as plt
%matplotlib inline
from matplotlib.pylab import style
style.use('ggplot')
import statsmodels.api as sm
import statsmodels.formula.api as smf
import statsmodels.tsa.api as smt
from statsmodels.tsa.stattools import adfuller 
from statsmodels.stats.diagnostic import acorr_ljungbox 
from statsmodels.graphics.api import qqplot
pd.set_option('display.float_format', lambda x: '%.5f' % x) 
np.set_printoptions(precision=5, suppress=True) 
"""中文显示问题"""
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']

Bildbeschreibung hier einfügen








AR-, MA- und ARMA-Modelle müssen alle "stationäre Sequenzen ohne weißes Rauschen" sein, daher sind "Stationaritätstest" und "Test mit weißem Rauschen" erforderlich

1. Stationärer Test

1) Was ist sequenzstationär?

Bildbeschreibung hier einfügen





2) Prüfen Sie, ob es stabil ist

Der erste und der zweite Weg sind intuitiv, aber auch subjektiv. Sie alle verlassen sich auf das Urteil des bloßen Auges und die Erfahrung, Menschen zu beurteilen.Verschiedene Menschen können unterschiedliche Urteile abgeben, wenn sie die gleichen Grafiken sehen.
Wählen Sie in den meisten Fällen die dritte Methode: Unit-Root-Test




Methode 1: Beobachten Sie das Ablaufdiagramm: Wenn der Einzelwert um den Mittelwert der Folge schwankt und kein Aufwärts- oder Abwärtstrend erkennbar ist, handelt es sich um eine stationäre Folge.

Wenn es einen Aufwärts- oder Abwärtstrend gibt, muss die ursprüngliche Sequenz differentiell stabilisiert werden.In 3) dem Teil der Umwandlung der instabilen Sequenz in eine stabile Sequenz werden wir darüber sprechen, wie die Differenz stabilisiert werden kann

Bildbeschreibung hier einfügen






Methode 2: Beobachten Sie das Autokorrelationsdiagramm: Das Autokorrelationsdiagramm (ACF) und das Teilkorrelationsdiagramm (PACF) einer stationären Sequenz sind entweder gesäumt oder abgeschnitten.

Tailing: Es gibt immer einen Wert ungleich Null, und er wird nicht gleich Null sein (oder zufällig um 0 schwanken), nachdem k größer als eine bestimmte Konstante ist. Wie der Name schon sagt, klingt die Sequenz langsam ab und der "Tail" gleitet langsam nach unten, :
Cut Tail: Nachdem es größer als eine bestimmte Konstante k ist, tendiert es schnell zu 0, was k-Ordnung abgeschnitten ist, plötzlich abgeschnitten, wie eine Klippe

Bildbeschreibung hier einfügen
Aus diesem Bild ist ersichtlich, dass das linke Bild (Autokorrelationsfunktionsdiagramm) Tailing-Eigenschaften (Tailing zweiter Ordnung) darstellt, während das rechte Diagramm (teilweises Autokorrelationsfunktionsdiagramm) Trunkierungseigenschaften (Truncation zweiter Ordnung) darstellt.

Bildbeschreibung hier einfügen
Aus diesem Bild ist ersichtlich, dass das linke Bild (Autokorrelations-Funktionsdiagramm) abgeschnittene Merkmale (Abschneiden erster Ordnung) darstellt, während das rechte Diagramm (teilweises Autokorrelations-Funktionsdiagramm) Tailing-Merkmale (Tailing erster Ordnung) darstellt.

Bildbeschreibung hier einfügen
Aus diesem Bild ist ersichtlich, dass das linke Bild (Autokorrelations-Funktionsdiagramm) Tailing-Eigenschaften (Tailing 2. Ordnung) und das rechte Bild (teilweises Autokorrelations-Funktionsdiagramm) ebenfalls Tailing-Eigenschaften (Tailing 1. Ordnung) zeigt.







Methode 3: Einheitswurzeltest: Wenn eine Lag-Operator-Polynomgleichung einer Zeitreihe eine Einheitswurzel hat, betrachten wir die Zeitreihe als nicht stationär; umgekehrt, wenn die Gleichung keine Einheitswurzel hat, betrachten wir die Zeitreihe stationär sein.Bildbeschreibung hier einfügen

Übliche Unit-Root-Testmethoden umfassen DF test , ADF test und PP test . Heute werden wir ADF test verwenden, um es Ihnen zu demonstrieren.
In Python gibt es zwei häufig verwendete Pakete, die ADF-Tests bereitstellen, nämlich statsmodel und arch.

Die erste Methode: Die Methode zur Verwendung von statsmodel ist:
from statsmodels.stats.diagnostic import unitroot_adf

unitroot_adf(df.pct_chg)
输出为:
这里包含了检验值、p-value、滞后阶数、自由度等信息。
我们看到了检验统计量为-14.46,远小于1%的临界值-3.47,即p值远小于0.01,因此我们拒绝原假设,认为该时间序列是平稳的。(这里原假设是存在单位根,即时间序列为非平稳的。)



Die zweite Methode: Die Methode zur Verwendung von Arch ist:
from arch.unitroot import ADF

ADF(df.pct_chg)

Seine Ausgabeinformationen stimmen grundsätzlich mit statsmodel überein.

oder

Andere Fälle verwenden Methode 2

print("单位根检验:\n")
print(ADF(data.diff1.dropna()))  
单位根检验:

   Augmented Dickey-Fuller Results   
=====================================
Test Statistic                 -3.156
P-value                         0.023
Lags                                0
-------------------------------------

Trend: Constant
Critical Values: -3.63 (1%), -2.95 (5%), -2.61 (10%)
Null Hypothesis: The process contains a unit root.
Alternative Hypothesis: The process is weakly stationary.

Einheitswurzeltest: Führen Sie einen Einheitswurzeltest für die Differenz erster Ordnung durch und erhalten Sie: 1 %, %5, %10 verschiedene Ablehnungsgrade der Nullhypothese und den Vergleich des ADF-Testergebnisses. In diesen Daten ist die P- Wert ist 0,023, was nahe bei 0 liegt, das ADF-Testergebnis ist gleichzeitig weniger als 5% und 10%, was bedeutet, dass die Hypothese gut zurückgewiesen wird.In diesen Daten ist das ADF-Ergebnis -3,156, was die zurückweist Nullhypothese, d. h. die Daten sind nach der Differenz erster Ordnung stabil.





Methode 4: Kombinieren Sie die oben genannten Methoden, dh führen Sie mehrere Methoden durch: Das Ergebnis ist überzeugender
1. Zeichnen Sie ein Zeitreihendiagramm, um zu beobachten, ob es Schwankungen und Aufwärts- oder Abwärtstrends gibt.
2. Erstellen Sie ein Korrelationskoeffizientendiagramm, wenn das Zeitintervall k Steigt er, fällt der Autokorrelationskoeffizient schnell ab und die Folge ist stabil, steigt er mit dem Zeitintervall k, fällt der Autokorrelationskoeffizient langsam ab und die Folge ist nicht stabil 3. Einheitswurzeltest durchführen, wenn P-Wert<
α , die Nullhypothese ablehnen, dass es eine Einheitswurzel gibt, ist die Folge stationär.





3) Die nichtstationäre Sequenz wird in eine stationäre Sequenz umgewandelt

Das Logarithmieren kann den Trend größer werdender Datenfluktuationen eliminieren, und das Bilden der Differenz
der Reihen kann den Datenwachstumstrend und die Saisonabhängigkeit eliminieren .

Wenn bei einer instationären Sequenz das Ergebnis nach der ersten Differenz nicht den Anforderungen entspricht, muss die Differenz auf der ursprünglichen Basis fortgesetzt werden, bis das Ergebnis nach der Differenz zur stationären Sequenz gehört

Methode: Differenzielle Transformation

fig = plt.figure(figsize=(12,8))
ax1= fig.add_subplot(111)
diff1 = dta.diff(1)
diff1.plot(ax=ax1)

Bildbeschreibung hier einfügen
Wie aus der folgenden Abbildung ersichtlich, ist der Graph nach dem Logarithmieren der vorhergesagten Folge und dem Bilden der Differenz erster Ordnung
Bildbeschreibung hier einfügen

Wählen Sie eine der Testmethoden aus, und nach dem Test stellt sich heraus, dass
die grafische Anzeige nach dem Logarithmieren der Vorhersagesequenz und dem Bilden der Differenz erster Ordnung den Einfluss des langfristigen Trends im Wesentlichen eliminiert, tendenziell stabil ist und erfüllt die grundlegenden Anforderungen der ARIMA-Modellmodellierung.





2. Test mit weißem Rauschen

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

from statsmodels.stats.diagnostic import acorr_ljungbox
acorr_ljungbox(data.diff1.dropna(), lags = [i for i in range(1,12)],boxpierce=True)
(array([11.30402, 13.03896, 13.37637, 14.24184, 14.6937 , 15.33042,
        16.36099, 16.76433, 18.15565, 18.16275, 18.21663]),
 array([0.00077, 0.00147, 0.00389, 0.00656, 0.01175, 0.01784, 0.02202,
        0.03266, 0.03341, 0.05228, 0.07669]),
 array([10.4116 , 11.96391, 12.25693, 12.98574, 13.35437, 13.85704,
        14.64353, 14.94072, 15.92929, 15.93415, 15.9696 ]),
 array([0.00125, 0.00252, 0.00655, 0.01135, 0.02027, 0.03127, 0.04085,
        0.06031, 0.06837, 0.10153, 0.14226]))

Durch P < αP < α (α ist normalerweise 0,05) wird die Nullhypothese verworfen, sodass die Sequenz nach der Differenz eine stationäre Sequenz ohne weißes Rauschen ist und der nächste Schritt der Modellierung durchgeführt werden kann








3. Modellreihenfolge: Berechnen der Autokorrelationsfunktion ACF und der partiellen Autokorrelationsfunktion PACF

Wenn Sie Methode 2 als Testmethode wählen, haben Sie ACF und PACF bereits erhalten, aber es ist am besten, den Unit-Root-Test als Testmethode zu wählen

Prozess:

1. Gemäß der Beurteilung des ACF-Diagramms und des PACF-Diagramms, welches Modell unter AR, MA und ARMA verwendet werden sollte, nachdem die Sequenz stabilisiert ist. 2. Bestimmen der
Reihenfolge von p und q

(die ersten beiden Schritte werden beurteilt durch Betrachten der ACF- und PACF-Diagramme )
3. Es ist möglich, dass ARMA mehrere Modelle hat, die durch p und q bestimmt sind (weil es möglich ist, dass mehrere p und q in den ACF- und PACF-Diagrammen zu sehen sind), zu diesem Zeitpunkt die Informationsstandard AIC und BIC sollten verwendet werden, um bei der Auswahl des Modells zu helfen, den Mindestwert von AIC und
BIC auszuwählen Ja, denn je kleiner AIC und BIC, desto besser das Modell

Es sollte jedoch beachtet werden, dass diese Kriterien die Genauigkeit eines bestimmten Modells nicht erklären können, das heißt, für die drei Modelle A, B und C können wir beurteilen, dass das C-Modell das beste ist, aber es gibt keine Garantie dafür das C-Modell kann genau sein. Charakterisieren Sie die Daten gut, da es möglich ist, dass alle drei Modelle schlecht sind.

Akaike-Informationskriterium (Akaike-Informationskriterium): AIC fördert die Güte der Datenanpassung, versucht jedoch, eine Überanpassung (Overfitting) zu vermeiden. Daher sollte das bevorzugte Modell dasjenige mit dem kleinsten AIC-Wert sein.
Bildbeschreibung hier einfügen

Bayessches Informationskriterium:
Bildbeschreibung hier einfügen

Dabei ist L die maximale Wahrscheinlichkeit unter dem Modell, n die Anzahl der Daten und k die Anzahl der Variablen im Modell.




Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen




Bildbeschreibung hier einfügen

Modell ACF PACF
AR Abstrich zensiert
MA zensiert Abstrich
ARMA Abstrich Abstrich







Untersuchen Sie die Diagramme der Autokorrelation und der partiellen Autokorrelation für eine stationäre Zeitreihe. Erhalten Sie Grafiken
über sm.graphics.tsa.plot_acf und sm.graphics.tsa.plot_pacf
, wobei Lags die Reihenfolge der Lags darstellen und das ACF-Diagramm bzw. das PACF-Diagramm oben erhalten werden

Beispiel 1:

1) Beobachten Sie die ACF- und PACF-Diagramme, um festzustellen, um welches Modell es sich handelt

dta= dta.diff(1)#我们已经知道要使用一阶差分的时间序列,之前判断差分的程序可以注释掉
fig = plt.figure(figsize=(12,8))
ax1=fig.add_subplot(211)
fig = sm.graphics.tsa.plot_acf(dta,lags=40,ax=ax1)
ax2 = fig.add_subplot(212)
fig = sm.graphics.tsa.plot_pacf(dta,lags=40,ax=ax2)

Bildbeschreibung hier einfügen

Dies kann anhand von zwei Grafiken beobachtet werden:

  • Das Autokorrelationsdiagramm zeigt, dass drei Verzögerungsordnungen außerhalb der Vertrauensgrenze liegen;
  • Das partielle Korrelationsdiagramm zeigt, dass der partielle Autokorrelationskoeffizient bei Lags 1 bis 7 (Lags 1, 2, ..., 7) die Konfidenzgrenze überschreitet und der Wert des partiellen Autokorrelationskoeffizienten nach Lag 7 auf 0 schrumpft. Die folgenden Modelle können sein ausgewählt :
  1. ARMA(0,1)-Modell: Das heißt, der Autokorrelationsgraph schrumpft nach einer Verzögerung von 1 Ordnung auf 0, und die partielle Autokorrelation schrumpft auf 0, was ein gleitendes Durchschnittsmodell mit der Ordnung q=1 ist;
  2. ARMA(7,0)-Modell: Das heißt, der partielle Autokorrelationsgraph schrumpft nach einer Verzögerung von 7 Ordnungen auf 0, und die Autokorrelation schrumpft auf 0, was ein autoregressives Modell mit einem Niveau von p = 3 ist;
  3. ARMA(7,1)-Modell: Auch wenn die Autokorrelation und die partielle Autokorrelation beide auf Null reduziert werden. ist ein gemischtes Modell.




2) AIC BIC wählt unter ihnen das beste Modell aus

dta ist die Sequenz nach der Differenz
, da das ARMA-Modell verwendet wird

arma_mod20 = sm.tsa.ARMA(dta,(7,0)).fit() # dta是差分后的序列
print(arma_mod20.aic,arma_mod20.bic,arma_mod20.hqic)
arma_mod30 = sm.tsa.ARMA(dta,(0,1)).fit()
print(arma_mod30.aic,arma_mod30.bic,arma_mod30.hqic)
arma_mod40 = sm.tsa.ARMA(dta,(7,1)).fit()
print(arma_mod40.aic,arma_mod40.bic,arma_mod40.hqic)
arma_mod50 = sm.tsa.ARMA(dta,(8,0)).fit()
print(arma_mod50.aic,arma_mod50.bic,arma_mod50.hqic)

Bildbeschreibung hier einfügen

Es ist ersichtlich, dass AIC, BIC und HQIC von ARMA(7,0) am kleinsten sind, also ist es das beste Modell.




Beispiel 2:

1) Beobachten Sie die ACF- und PACF-Diagramme, um festzustellen, um welches Modell es sich handelt

Bildbeschreibung hier einfügen

Aus dem Autokorrelationsdiagramm und dem partiellen Autokorrelationsdiagramm der Differenzfolge erster Ordnung lässt sich Folgendes entnehmen:

  • Autokorrelations-Plot-Tailing oder Zensierung erster Ordnung
  • Das partielle Autokorrelationsdiagramm wird nach erster Ordnung abgeschnitten,
  • Wir können also ARIMA(1,1,0), ARIMA(1,1,1), ARIMA(0,1,1)-Modelle erstellen.




2) AIC BIC wählt unter ihnen das beste Modell aus

data["xt"] ist eine Sequenz ohne Unterschiede,
da das ARIMA-Modell verwendet wird

arma_mod20 = sm.tsa.ARIMA(data["xt"],(1,1,0)).fit() # data["xt"]是没有差分的数据
arma_mod30 = sm.tsa.ARIMA(data["xt"],(0,1,1)).fit()
arma_mod40 = sm.tsa.ARIMA(data["xt"],(1,1,1)).fit()
values = [[arma_mod20.aic,arma_mod20.bic,arma_mod20.hqic],[arma_mod30.aic,arma_mod30.bic,arma_mod30.hqic],[arma_mod40.aic,arma_mod40.bic,arma_mod40.hqic]]
df = pd.DataFrame(values,index=["AR(1,1,0)","MA(0,1,1)","ARMA(1,1,1)"],columns=["AIC","BIC","hqic"])
df

AIC BIC hqic
AR(1,1,0) 253.09159 257.84215 254.74966
MA(0,1,1) 251.97340 256.72396 253.63147
ARMA(1,1,1) 254.09159 258.84535 259.74966

Wählen Sie das Modell MA(0, 1, 1), dh ARIMA(0, 1, 1)




4. Parameterschätzung

from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(data["xt"], order=(0,1,1))
result = model.fit()
print(result.summary())
                             ARIMA Model Results                              
==============================================================================
Dep. Variable:                   D.xt   No. Observations:                   36
Model:                 ARIMA(0, 1, 1)   Log Likelihood                -122.987
Method:                       css-mle   S.D. of innovations              7.309
Date:                Tue, 22 Dec 2020   AIC                            251.973
Time:                        09:11:55   BIC                            256.724
Sample:                    01-01-1953   HQIC                           253.631
                         - 01-01-1988                                         
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
const          4.9956      2.014      2.481      0.013       1.048       8.943
ma.L1.D.xt     0.6710      0.165      4.071      0.000       0.348       0.994
                                    Roots                                    
=============================================================================
                  Real          Imaginary           Modulus         Frequency
-----------------------------------------------------------------------------
MA.1           -1.4902           +0.0000j            1.4902            0.5000
-----------------------------------------------------------------------------





5. Modellprüfung

Bildbeschreibung hier einfügen

1) Signifikanztest der Parameter

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

P < α (α ist normalerweise 0,05), die Nullhypothese wird verworfen und der Parameter wird als signifikant ungleich 0 angesehen. Das MA(2)-Modell passt zu der Sequenz, und die Restsequenz hat weißes Rauschen erreicht




2) Signifikanztest des Modells

Bildbeschreibung hier einfügen

resid = result.resid#残差
fig = plt.figure(figsize=(12,8))
ax = fig.add_subplot(111)
fig = qqplot(resid, line='q', ax=ax, fit=True)

Bildbeschreibung hier einfügen

Das qq-Diagramm zeigt, dass wir sehen können, dass die rote KDE-Linie parallel zu N(0,1) ist, was ein guter Indikator für die Normalverteilung des Rests ist, was darauf hinweist, dass die Restsequenz eine Sequenz mit weißem Rauschen ist, und die Information des Modells vollständig extrahiert Sie können die LB-Statistik verwenden, um die zuvor eingeführte Methode des weißen Rauschens zu testen

Ein ARIMA(0,1,1)-Modell wurde an die Sequenz angepasst, und die Restsequenz hat weißes Rauschen erreicht, und die Parameter sind alle signifikant ungleich Null. Erklären Sie, dass das ARIMA(0,1,1)-Modell ein effektives Anpassungsmodell für die Folge ist





6. Modellvorhersage

pred = result.predict('1988', '1990',dynamic=True, typ='levels')
print (pred)
1988-01-01   278.35527
1989-01-01   283.35088
1990-01-01   288.34649
Freq: AS-JAN, dtype: float64
plt.figure(figsize=(12, 8))
plt.xticks(rotation=45)
plt.plot(pred)
plt.plot(data.xt)
plt.show()

Bildbeschreibung hier einfügen






7. Analyse der Vorhersageergebnisse

Bildbeschreibung hier einfügen
Durchschnittlicher absoluter Fehler:
Bildbeschreibung hier einfügen
Durchschnittlicher relativer Fehler: Mittlerer
Bildbeschreibung hier einfügen
quadratischer Vorhersagefehler:
Bildbeschreibung hier einfügen
Darunter sind y_i die tatsächlichen Daten der Folge und\widehat{y}_ies sind die Modellvorhersagedaten.

Zum Beispiel:
Bildbeschreibung hier einfügen

Aus der Gegenüberstellung der Vorhersageergebnisse in der obigen Tabelle und verschiedener Bewertungsindikatoren ist ersichtlich, dass die Vorhersageergebnisse des ARIMA-Modells deutlich besser sind als die des gleitenden Durchschnittsverfahrens.Aus Sicht des durchschnittlichen relativen Fehlers ist das ARIMA-Modell deutlich besser 6,93 %, was fast 15 % höher ist als bei der Methode des gleitenden Durchschnitts. Der mittlere quadratische Fehler von ist ebenfalls kleiner, nämlich nur 0,4298. Es ist ersichtlich, dass das Modell den Änderungstrend des Ersatzteilverbrauchs genau vorhersagen und eine Basis für die Vorhersage des Ersatzteilverbrauchs liefern kann.










Referenz:
https://blog.csdn.net/qixizhuang/article/details/86716149
https://zhidao.baidu.com/question/288273884.html
https://zhuanlan.zhihu.com/p/343617191
https:/ /blog.csdn.net/qq_43613793/article/details/109908418
https://blog.csdn.net/qq_45176548/article/details/116771331
https://blog.csdn.net/weixin_41555408/article/details/117218
457https: //blog.csdn.net/weixin_41636030/article/details/89138638
https://www.zhihu.com/question/48447779/answer/112330897
https://blog.csdn.net/u010414589/article/details/49622625
https ://wiki.mbalib.com/wiki/ARIMA%E6%A8%A1%E5%9E%8B
https://blog.csdn.net/qq_45176548/article/details/111504846

Guess you like

Origin blog.csdn.net/m0_46262108/article/details/122806515