1.自回归移动平均模型(ARMA)
自回归移动平均模型(ARMA)是在时间序列模型中常用的一种模型,它能够用来预测时间序列中未来的数值,同时也可以用来分析时间序列的性质和结构。
ARMA模型包含两个部分,一个是自回归(AR)模型部分,另一个是移动平均(MA)模型部分,AR部分描述了当前值与过去值的相关性,MA部分描述了当前值与过去的误差的相关性。
ARMA模型可以表示为:
ARMA(p,q):
其中,p表示自回归模型中包含多少个滞后项,q表示移动平均模型中包含多少个滞后误差项。而ARMA(1,1)模型可以写成:
ARMA(1,1):
其中,a和b分别是AR部分和MA部分的系数。
ARMA模型通常是通过最大似然估计来确定模型中的参数。然而,ARMA模型有一个很大的限制,就是所有的滞后项必须是已知的和固定的。
2.自回归移动平均模型的扩展(ARIMA)
2.1 ARIMA模型
ARIMA(Autoregressive Integrated Moving Average)模型是对ARMA模型的一个扩展,它在ARMA模型的基础上增加了对时间序列差分的处理,从而能够处理非平稳时间序列。
ARIMA模型包含三个部分,分别是自回归(AR)模型、差分(I)模型和移动平均(MA)模型。其中,差分模型用于将非平稳时间序列转化为平稳时间序列。
ARIMA模型可以表示为:
ARIMA(p,d,q):
其中,p表示自回归模型中的滞后项数,q表示移动平均模型中的滞后误差数,d表示时间序列差分的阶数。
2.2 ARIMA模型的调参
在实际应用中,我们需要手动选择ARIMA模型的参数p、d、q,以得到最好的模型拟合结果。
ARIMA模型的调参过程可以分为以下几个步骤:
2.2.1 数据可视化
首先,我们需要对时间序列进行可视化,了解其整体趋势和波动性。
以下是一个时间序列的可视化图表:
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv('data.csv', index_col=0)
# 绘制时间序列图
plt.figure(figsize=(12,6))
plt.plot(data)
plt.title('Time Series')
plt.xlabel('Time')
plt.ylabel('Value')
plt.show()
2.2.2 差分次数确定
如果时间序列是非平稳的,我们需要对其进行差分处理,将其转化为平稳时间序列。差分的次数可以通过时间序列的自相关图(ACF)和偏自相关图(PACF)来确定。
以下是一个时间序列的ACF图和PACF图:
import statsmodels.api as sm
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# 绘制ACF和PACF图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 4))
plot_acf(data, ax=ax1)
plot_pacf(data, ax=ax2)
plt.show()
通过观察ACF和PACF图,我们可以发现时间序列的差分次数为1,因为在差分一次后时间序列的自相关和偏自相关均已消失。
2.2.3 ARIMA(p,d,q)参数确定
在确定差分次数后,我们就可以通过观察ACF和PACF图来确定ARIMA(p,d,q)模型的参数。
如果ACF图在滞后项k处截尾,PACF图在滞后项j处截尾,那么我们就可以选择ARIMA(p,d,q)模型的参数为:
ARIMA(p = j, d, q = k):
以下是一个时间序列的ARIMA模型训练过程的代码:
import statsmodels.api as sm
# ARIMA模型拟合
arma_model = sm.tsa.ARIMA(data, order=(1, 1, 1)).fit()
# 打印模型的AIC和BIC值
print('AIC:', arma_model.aic)
print('BIC:', arma_model.bic)
2.3 ARIMA模型的预测
在训练好ARIMA模型后,我们可以用其来进行未来数值的预测。
以下是一个时间序列的ARIMA模型预测过程的代码:
# ARIMA模型预测
pred = arma_model.predict(start='2021-09-27', end='2021-10-27')
# 绘制原时间序列和预测结果图表
plt.figure(figsize=(12, 6))
plt.plot(data)
plt.plot(pred, color='red')
plt.title('Time Series Prediction')
plt.xlabel('Time')
plt.ylabel('Value')
plt.show()
3.自回归移动平均模型的扩展(ARMA模型)
ARMA(Autoregressive Moving Average)模型是ARIMA模型的一个特殊情况,它省略了差分(I)模型,适用于一类平稳时间序列。
ARMA模型可以表示为:
ARMA(p,q):
以下是一个时间序列的ARMA模型训练过程的代码:
import statsmodels.api as sm
# ARMA模型拟合
arma_model = sm.tsa.ARMA(data, order=(1, 1)).fit()
# 打印模型的AIC和BIC值
print('AIC:', arma_model.aic)
print('BIC:', arma_model.bic)
3.1 ARMA模型的预测
在训练好ARMA模型后,我们可以用其来进行未来数值的预测。
以下是一个时间序列的ARMA模型预测过程的代码:
# ARMA模型预测
pred = arma_model.predict(start='2021-09-27', end='2021-10-27')
# 绘制原时间序列和预测结果图表
plt.figure(figsize=(12, 6))
plt.plot(data)
plt.plot(pred, color='red')
plt.title('Time Series Prediction')
plt.xlabel('Time')
plt.ylabel('Value')
plt.show()
3.2 ARMA模型参数的选择
在选择ARMA模型的参数p和q时,我们可以通过观察ACF和PACF图来确定。
以下是一个时间序列的ACF图和PACF图:
import statsmodels.api as sm
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# 绘制ACF和PACF图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 4))
plot_acf(data, ax=ax1)
plot_pacf(data, ax=ax2)
plt.show()
根据ACF和PACF图,我们可以选择较好的ARMA(p, q)模型参数。例如,在上面的ACF和PACF图中,我们可以观察到,ACF在1处截尾,PACF在1处截尾,因此我们可以选择ARMA(1,1)模型,然后进行模型训练和预测。
4.总结
自回归移动平均模型是时间序列模型中常用的一种模型。ARMA模型和ARIMA模型是ARMA模型的一个扩展,它们可以用于预测和分析时间序列的性质和结构。在选择ARMA模型和ARIMA模型的参数时,我们可以通过时间序列的ACF和PACF图来确定。在实际应用中,我们可以使用Python中的statsmodels库来拟合和预测ARMA模型和ARIMA模型。