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

如何在python中反转时间序列的季节性日志差异,python,time-series,reverse,difference,Python,Time Series,Reverse,Difference,你能帮我解决这个问题吗,因为我做了很多搜索,但无法解决它。我有一个电力消费的多元数据框架,我正在使用VAR(向量自回归)模型对时间序列进行预测。 我做了预测,但我需要反转时间序列(能量_log _diff),因为我应用了季节性的对数差,使序列平稳,以获得真实的能量值: df['energy_log'] = np.log(df['energy']) df['energy_log_diff'] = df['energy_log'] - df['energy_log'].shift(1) 为此,我首

你能帮我解决这个问题吗,因为我做了很多搜索,但无法解决它。我有一个电力消费的多元数据框架,我正在使用VAR(向量自回归)模型对时间序列进行预测。 我做了预测,但我需要反转时间序列(能量_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天,但我也不确定这一点


我怎样才能做到这一点?

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

  • 差分反变换
  • 对数的逆变换
  • 例如,描述了如何将差异预测转换回来(它有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
    方式,您可以尝试以下方法(仅适用于一阶差):

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

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

    注释/问题:

    • 您提到了365的滞后值,但您将数据移动了1。这是否意味着你有年度数据?或者您想这样做-
      df['energy\u log\u diff']=df['energy\u log']-df['energy\u log'].shift(365)
      (在数据每日粒度的情况下)
    • 你想从预测中得到相反的时间序列,对吗?还是我遗漏了什么?在这种情况下,您将对预测进行逆变换,而不是对我上面用于解释的数据进行逆变换

    我们使用log diff的原因是它们是相加的,所以我们可以使用累积和,然后乘以最后观察到的值

    last_energy=df['energy'].iloc[-1]
    
    df['energy']=(np.exp(df['energy'].cumsum())*last_energy)
    
    根据季节性:如果您对对数差异进行去季节性处理,则只需在执行上述步骤之前进行加法(或乘法),如果您对原始系列进行去季节性处理,则在执行上述步骤之后再进行加法

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