如何对未来的预测结果进行反差分?

问题描述 投票:0回答:2

我正在用 ARIMA 准备一个时间序列模型,我注意到时间序列数据不是平稳的,所以我在 pandas 中使用了 diff(period=1) 。我安装了 ARIMA 模型,看起来不错。当我们实时预测测试值时,由于没有原始数据,如何反转预测? 事实上,我想反转我通过下面的代码计算的预测?

y_transformed = y.diff().dropna() #y is orginal dataset
nobs=12
train, test = y_transformed[0:-nobs], y_transformed[-nobs:]

# Fit ARMA model
model = ARMA(train['Sales'],order=(2,2))
ARMAfit = model.fit()

# Prediction for test values
start=len(train)
end=len(train)+len(test)-1
predictions = ARMAfit.predict(start=start , end=end, dynamic=False).rename('ARMA `Predictions')`
python time-series
2个回答
1
投票

您可以使用 Github 上其他用户发布的代码: https://github.com/tensorflow/tensorflow/issues/41326

def diff_inv(series_diff, first_value):

series_inverted = np.r_[first_value,series_diff].cumsum().astype('float64')

return series_inverted

在我看来,直观地看待它的方法是,由于所有数据都是有差异的(原始+预测),你可以认为预测与原始差异数据具有相同的结构。预测只是估计吧?不完美或确凿的事实数据。因此,如果它们具有与原始差异数据相同的“结构”,那么采用原始数据的最后一个值(未差异)并将其用作上述函数中的“first_value”是合理的。

希望这对您有用!


0
投票

我正在尝试对我正在解决的问题进行反向差分。只要尊重索引,来自 https://stackoverflow.com/a/72780263/16314572 的解决方案就有效。在调用该函数之前,必须正确重置索引。当然,这只是一个示例数据集,但如果您使用 pandas/python 实现,也会出现类似的问题。我稍微编辑了上面的代码。我浏览了答案中提到的链接,那里关于创建数据集而不重置的建议是错误的。这是我的改编:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': np.random.randint(0, 10, 10)})
df_diff = df.diff().dropna().reset_index(drop=True)



def diff_inv(series_diff, first_value):
    series_inverted = np.r_[first_value,series_diff].cumsum().astype('float64')
    return series_inverted

inversed_series = diff_inv(df_diff.A , df.A[0])
© www.soinside.com 2019 - 2024. All rights reserved.