如何基于Python拟合的ARIMA参数编写手动预测公式?
手动ARIMA预测公式编写与对比指南
1. 拆解ARIMA模型的预测逻辑
ARIMA(p,d,q)的预测分为差分转换、平稳序列预测、原始序列还原三个核心步骤,完全对应Python拟合出的参数(以statsmodels的输出为例)。
第一步:明确d阶差分的转换关系
假设原始时序为 $y_t$,d阶差分后的平稳序列为 $z_t$:
- d=1时:$z_t = y_t - y_{t-1}$,还原公式为 $y_t = z_t + y_{t-1}$
- d=2时:$z_t = (y_t - y_{t-1}) - (y_{t-1} - y_{t-2}) = y_t - 2y_{t-1} + y_{t-2}$,需先还原一阶差分序列 $w_t = y_t - y_{t-1}$,再还原原始序列
第二步:用拟合参数写平稳序列的预测公式
Python拟合后会输出三类关键参数:
- 截距项(记为 $c$,对应输出的
intercept) - AR(p)系数:$\phi_1, \phi_2,...,\phi_p$(对应
ar.L1、ar.L2...) - MA(q)系数:$\theta_1, \theta_2,...,\theta_q$(对应
ma.L1、ma.L2...)
平稳序列的超前k步预测公式为:
$\hat{z}{t+k} = c + \phi_1 \hat{z}{t+k-1} + \phi_2 \hat{z}{t+k-2} + ... + \phi_p \hat{z}{t+k-p} + \theta_1 \epsilon_{t+k-1} + \theta_2 \epsilon_{t+k-2} + ... + \theta_q \epsilon_{t+k-q}$
关键注意点:残差项的处理
- 已知残差:仅 $\epsilon_t, \epsilon_{t-1}, ..., \epsilon_{t-q+1}$ 是已发生的残差($\epsilon_i = z_i - \hat{z}_i$,即差分序列实际值减拟合值),可直接代入
- 未来残差:$\epsilon_{t+1}, ..., \epsilon_{t+k-1}$ 是未发生的残差,全部取0(无法提前获取,这是ARIMA多步预测的通用规则)
第三步:还原为原始序列的预测值
根据d的阶数反向递推:
- d=1:$\hat{y}{t+k} = \hat{z}{t+k} + \hat{y}_{t+k-1}$($\hat{y}_t$ 是原始序列的最后一个已知值)
- d=2:先还原一阶差分 $\hat{w}{t+k} = \hat{z}{t+k} + \hat{w}{t+k-1}$($\hat{w}t$ 是一阶差分的最后一个已知值),再还原原始序列 $\hat{y}{t+k} = \hat{w}{t+k} + \hat{y}_{t+k-1}$
2. 实例演示(对应Python参数)
假设你拟合的是ARIMA(2,1,1),参数如下:
- 截距 $c=0.5$
- AR系数 $\phi_1=0.3, \phi_2=-0.1$
- MA系数 $\theta_1=0.2$
- 已知最后一个原始值 $y_t=10$,最后两个差分序列值 $z_t=0.8, z_{t-1}=0.6$,最后一个残差 $\epsilon_t=0.1$
超前1步预测(k=1)
- 计算平稳序列预测值:
$\hat{z}_{t+1} = 0.5 + 0.3*0.8 + (-0.1)0.6 + 0.20.1 = 0.5 + 0.24 -0.06 +0.02 = 0.7$ - 还原原始序列:
$\hat{y}_{t+1} = 0.7 +10 =10.7$
超前2步预测(k=2)
- 计算平稳序列预测值(未来残差取0):
$\hat{z}_{t+2} =0.5 +0.3*0.7 + (-0.1)0.8 +0.20 =0.5+0.21-0.08=0.63$ - 还原原始序列:
$\hat{y}_{t+2}=0.63 +10.7=11.33$
3. 与Python forecast结果对比的验证要点
- 严格使用Python输出的所有参数,包括是否包含截距(若模型无截距,$c=0$)
- 残差计算必须和Python内部逻辑一致:用差分序列的实际值减去模型拟合的差分序列值
- 多步预测需按递推方式计算,每一步的预测值作为下一步的输入,和Python的forecast函数逻辑完全对齐
内容的提问来源于stack exchange,提问作者fofa
相关产品推荐
相关产品推荐

