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



您能否帮助我解决此问题,因为我进行了许多搜索但无法解决。我有一个电力消耗的多变量数据框,我正在使用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 个值之间的能量差异,但我不确定这两者都不确定。

我该怎么做?

我们使用对数差异的原因是它们是相加的,因此我们可以使用累积总和,然后乘以最后一个观测值。

last_energy=df['energy'].iloc[-1]
df['energy']=(np.exp(df['energy'].cumsum())*last_energy)

根据季节性:如果您取消了对数差异的调味,则只需在执行上述步骤之前添加(或乘法(,如果您对原始系列进行了去调味,则

在之后添加

简短回答 - 您必须以相反的顺序运行逆变换,在您的情况下意味着:

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

例如,这里描述了如何将差异预测转换回来(它有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)代替(在数据每日粒度的情况下(?
  • 您想从预测中获取反向时间序列,对吗?还是我错过了什么?在这种情况下,您将对预测进行逆变换,而不是对我上面用于解释的数据进行逆变换。

最新更新