You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对ARMA模型一阶差分后的预测结果做逆差分还原

一阶差分逆还原实现方案

一阶差分的计算逻辑为 y_diff[t] = y[t] - y[t-1],对应的逆运算逻辑非常明确:当期原始值 = 前一期原始值 + 当期差分值。逆差分不需要全量原始数据,仅需要待预测区间前一个时间点的原始值作为初始基准,即可通过递推完成全部预测结果的还原,适配测试集验证、实时滚动预测两类场景。

针对测试集预测代码的还原实现

首先修正原代码里的笔误:预测结果重命名时多写了嵌套反引号,修正后的基础代码逻辑不变,逆差分操作可按如下步骤实现:

  1. 定位初始基准值:由于做差分后调用了dropna()删除了首行空值,训练集截止位置对应的原始序列值,就是测试集差分预测的递推起点
  2. 遍历差分预测结果逐期递推,得到还原后的原始尺度预测值

完整代码示例:

import pandas as pd

y_transformed = y.diff().dropna() # 原始一阶差分序列
nobs=12
train, test = y_transformed[0:-nobs], y_transformed[-nobs:]

# 拟合ARMA模型
model = ARMA(train['Sales'],order=(2,2))
ARMAfit = model.fit()

# 生成差分尺度的测试集预测结果
start=len(train)
end=len(train)+len(test)-1
predictions = ARMAfit.predict(start=start , end=end, dynamic=False).rename('ARMA Predictions')

# ---------------- 逆差分还原核心代码 ----------------
# 拿到递推初始基准值:测试集第一个点对应的前一期原始值
base_value = y['Sales'].iloc[len(train)]
reverted_pred = []
current_val = base_value
for diff_val in predictions:
    current_val += diff_val
    reverted_pred.append(current_val)
# 转为带原时间索引的Series,方便和测试集真实值对比
reverted_predictions = pd.Series(reverted_pred, index=test.index, name='Reverted ARMA Predictions')

实时预测场景的还原方法

做在线实时预测时不需要留存全量历史原始数据,只需要保存上一个时间点的还原值作为下一次预测的递推基准即可:

  • 假设已得到t时刻的还原预测值y_t,模型输出t+1时刻的差分预测值diff_t1,直接计算y_t1 = y_t + diff_t1就得到t+1时刻的原始尺度预测值
  • 后续每一期预测都以上一期的还原结果为基准递推,不需要依赖更早的历史原始数据

注意事项

  • 不要直接对差分预测结果做全局cumsum()后不加基准值偏移,否则还原出的序列会出现整体平移的错误
  • 如果做了更高阶的差分(比如二阶差分),只需要从最高阶的预测结果开始,按同样的递推逻辑逐层还原即可
  • 当前的建模流程本质是手动实现了ARIMA(2,1,2),如果直接调用statsmodels的ARIMA接口指定order=(2,1,2)拟合原始序列,接口输出的预测结果会自动完成逆差分,不需要手动实现还原逻辑,其内部计算逻辑和上述递推方法完全一致。

内容的提问来源于stack exchange,提问作者metti021

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:39:15