理解并在 Python 中实现 ARMA 和 ARIMA 模型以进行时间序列预测。
https://embed.notionlytics.com/wt/ZXlKd1lXZGxTV1FpT2lKak5tWXlNMlE1TkdFNU56azBaR1l6WVdFMk56SmlNVGN5TlRVeFltTXdPU0lzSW5kdmNtdHpjR0ZqWlZSeVlXTnJaWEpKWkNJNklsZHNTR2hsVEZSUFdXeHpaVmRhUW1ZNU1YQmxJbjA9
回想一下,$p$阶的自回归过程定义为:
$$ y_{t}=c+\phi_{1} y_{t-1}+\phi_{2} y_{t-2}+\ldots+\phi_{p} y_{t-p}+\epsilon_{t} $$
其中,$p$是阶数,$c$是常数,$\epsilon$是噪音
还记得移动平均过程 $q$ 定义为:
$$ y_{t}=c+\epsilon_{t}+\theta_{1} \epsilon_{t-1}+\theta_{2} \epsilon_{t-2}+. . \theta_{q} \epsilon_{t-q} $$
其中,$q$是阶数,$c$是常数,$\epsilon$是噪音
ARMA(p,q) 只是将两个模型组合成一个方程:
$$ y_{t}=c+\epsilon_{t}+\theta_{1} \epsilon_{t-1}+\theta_{2} \epsilon_{t-2}+\ldots \theta_{q} \epsilon_{t-q}+\phi_{1} y_{t-1}+\phi_{2} y_{t-2}+\ldots+\phi_{p} y_{t-p} $$
因此,该模型可以解释时间序列与随机噪声(移动平均部分)和前一步(自回归部分)本身的关系。
让我们从移动平均和自回归部分的 1 阶 ARMA 过程的简单示例开始。
from statsmodels.graphics.tsaplots import plot_pacf
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.tsa.arima_process import ArmaProcess
from statsmodels.stats.diagnostic import acorr_ljungbox
from statsmodels.tsa.statespace.sarimax import SARIMAX
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.stattools import pacf
from statsmodels.tsa.stattools import acf
from tqdm import tqdm_notebook
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
然后,我们将模拟以下 ARMA 流程:
$$ y_{t}=1+0.9 \epsilon_{t-1}+1+0.33 y_{t-1} $$
我们现在可以绘制前 200 个点,可视化生成的时间序列:
plt.figure(figsize=[15, 7.5]); # Set dimensions for figure
plt.plot(simulated_ARMA_data)
plt.title("Simulated ARMA(1,1) Process")
plt.xlim([0, 200])
plt.show()
然后,我们可以看一下 ACF 和 PACF 图: