Python自回归移动平均和自回归综合移动平均及快速预测每月飞机乘客

理解并在 Python 中实现 ARMA 和 ARIMA 模型以进行时间序列预测。

ARMA(自回归移动平均)模型

回想一下, p p p阶的自回归过程定义为:

y t = c + ϕ 1 y t − 1 + ϕ 2 y t − 2 + … + ϕ p y t − p + ϵ t y_{t}=c+\phi_{1} y_{t-1}+\phi_{2} y_{t-2}+\ldots+\phi_{p} y_{t-p}+\epsilon_{t} yt=c+ϕ1yt1+ϕ2yt2++ϕpytp+ϵt

其中, p p p是阶数, c c c是常数, ϵ \epsilon ϵ是噪音

还记得移动平均过程 q q q 定义为:

y t = c + ϵ t + θ 1 ϵ t − 1 + θ 2 ϵ t − 2 + . . θ q ϵ t − q y_{t}=c+\epsilon_{t}+\theta_{1} \epsilon_{t-1}+\theta_{2} \epsilon_{t-2}+. . \theta_{q} \epsilon_{t-q} yt=c+ϵt+θ1ϵt1+θ2ϵt2+..θqϵtq

其中, q q q是阶数, c c c是常数, ϵ \epsilon ϵ是噪音

ARMA(p,q) 只是将两个模型组合成一个方程:

y t = c + ϵ t + θ 1 ϵ t − 1 + θ 2 ϵ t − 2 + … θ q ϵ t − q + ϕ 1 y t − 1 + ϕ 2 y t − 2 + … + ϕ p y t − p 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} yt=c+ϵt+θ1ϵt1+θ2ϵt2+θqϵtq+ϕ1yt1+ϕ2yt2++ϕpytp

因此,该模型可以解释时间序列与随机噪声(移动平均部分)和前一步(自回归部分)本身的关系。

模拟此过程

让我们从移动平均和自回归部分的 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 ϵ t − 1 + 1 + 0.33 y t − 1 y_{t}=1+0.9 \epsilon_{t-1}+1+0.33 y_{t-1} yt=1+0.9ϵt1+1+0.33yt1

我们现在可以绘制前 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 图:

模拟 ARMA(2,2) 过程

ARIMA(自回归综合移动平均)模型

项目1:每季收益额建模

预测误差估计量

ps = range(0, 8, 1)
d = 1
qs = range(0, 8, 1)
# Create a list with all possible combination of parameters
parameters = product(ps, qs)
parameters_list = list(parameters)
order_list = []
for each in parameters_list:
    each = list(each)
    each.insert(1, 1)
    each = tuple(each)
    order_list.append(each)
    
result_df = optimize_ARIMA(order_list, exog=data['data'])
result_df

项目2:快速预测每月飞机乘客

源代码

详阅 - 亚图跨际

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用ARMA模型或者ARIMA模型来进行时间序列预测。ARMA模型是自回归移动平均模型,ARIMA模型是差分自回归移动平均模型。以下是使用ARIMA模型进行时间序列预测的示例代码: 首先,导入所需库: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt from statsmodels.tsa.arima_model import ARIMA ``` 然后,读取数据并将其转换为时间序列: ```python data = pd.read_csv('sales.csv', index_col='date', parse_dates=True) ts = data['sales'] ``` 接着,对时间序列进行差分和平稳性检验: ```python ts_diff = ts.diff().dropna() from statsmodels.tsa.stattools import adfuller result = adfuller(ts_diff) print('ADF Statistic:', result[0]) print('p-value:', result[1]) ``` 如果p-value小于0.05,则可以认为时间序列是平稳的。如果不是,则需要进行差分处理,直到时间序列变为平稳序列。在这个例子中,差分一次就使时间序列变为平稳序列。 然后,绘制自相关图和偏自相关图,以确定ARIMA模型的参数: ```python from statsmodels.graphics.tsaplots import plot_acf, plot_pacf fig, ax = plt.subplots(2,1,figsize=(10,6)) plot_acf(ts_diff, ax=ax[0]) plot_pacf(ts_diff, ax=ax[1]) plt.show() ``` 根据自相关图和偏自相关图,可以选择p=2,q=1作为ARIMA模型的参数。然后,拟合ARIMA模型并进行预测: ```python model = ARIMA(ts, order=(2,1,1)) model_fit = model.fit(disp=0) forecast = model_fit.forecast(steps=12) ``` 这里使用order=(2,1,1)来创建ARIMA模型,然后使用forecast()方法进行预测。steps参数指定要预测的未来时间步数,这里设置为12。 最后,将预测结果绘制成图表: ```python plt.plot(ts) plt.plot(forecast[0], color='r') plt.show() ``` 这将绘制原始时间序列和预测的未来一年销量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值