如何反转python中时间序列的季节性对数差异

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

由于我进行了很多搜索但无法解决,请问这个问题可以帮助我。我有一个用于电力消耗的多元数据框,并且正在使用时间序列的VAR(向量自动回归)模型进行预测。我做出了预测,但是我需要反转时间序列(energy_log_diff),因为我应用了季节性对数差异以使意甲稳定,以便获得真实的能量值:

df['energy_log'] = np.log(df['energy'])
df['energy_log_diff'] = df['energy_log'] - df['energy_log'].shift(1)

为此,我首先做了:

df['energy'] = np.exp(df['energy_log_diff']) 

这应该使365天落后的2个值之间存在能量差,但是我不确定这也不是。

我该怎么做?

python time-series reverse difference
1个回答
0
投票

简短的回答-您必须以相反的顺序运行逆向转换,这对您而言意味着:

  1. 差分的逆变换
  2. 对数的逆变换

例如,如何将差异化的预测转换回here(它具有R标志,但是没有代码,即使对于Python,想法也相同)。在您的帖子中,您需要计算指数,但是在执行此操作之前,您必须首先求逆。

您可以尝试以下方法:

energy_log_diff_rev = []
v_prev = v_0
for v in df['energy_log_diff']:
    v_prev += v
    energy_log_diff_rev.append(v_prev)

或者,如果您喜欢pandas方式

,则可以尝试执行此操作(仅针对一阶差):
energy_log_diff_rev = df['energy_log_diff'].expanding(min_periods=0).sum() + v_0

注意v_0值,它是原始值(在对数转换后,差值之前),在上面的链接中进行了描述。

然后,在此步骤之后,您可以进行指数(对数的倒数):

energy_orig = np.exp(energy_log_diff_rev)

注意/问题:

  • 您提到的滞后值是365,但您正在将数据移动1。这是否意味着您有年度数据?还是您想这样做-改为df['energy_log_diff'] = df['energy_log'] - df['energy_log'].shift(365)(在每天的数据粒度情况下)?
  • 您想从预测中获得相反的时间序列,对吗?还是我错过了什么?在这种情况下,您将对预测进行逆变换,而不是对我上面用于解释的数据进行逆变换。
© www.soinside.com 2019 - 2024. All rights reserved.