能耗时间序列预测的逆变换实现疑问:测试集逆差分与逆对数变换的前置值选取及操作方法
解决时间序列逆变换:从差分log值回到原始能耗
你遇到的问题很典型——当对时间序列做了log+差分的平稳化变换后,逆变换的关键就是找到差分操作的“起始锚点”,也就是训练集最后一个未差分的log值。我来一步步给你讲清楚怎么实现:
核心逻辑回顾
你对训练集的变换顺序是:原始能耗 → 取log → 一阶差分 → 平稳序列
所以逆变换必须严格倒序执行:预测的差分序列 → 逆差分(还原log序列) → 取exp(还原原始能耗)
第一步:找到逆差分的前置锚点
逆差分需要的前置值,是训练集原始数据取log之后、还没做差分的最后一个值。
举个例子,假设你最初的训练集是train_original(2011-05-01至2018-12-30的日度数据),那么你需要先重新计算这个锚点值:
import numpy as np import pandas as pd # 重新计算训练集的log值(如果之前没保存的话) train_log = train_original["energy_val"].apply(np.log) # 取训练集最后一个log值,这就是逆差分的起始锚点 initial_log_val = train_log.iloc[-1]
为什么是这个值?因为一阶差分的定义是diff_t = log_t - log_{t-1},测试集的第一个预测值对应2019-02-01的差分,它的前一个时刻是训练集最后一天2018-12-30,这个时刻的log值就是我们的锚点。
第二步:对测试集预测结果执行逆变换
现在用这个锚点来处理你的测试集预测数据:
# 假设你的测试集预测结果存在test_pred DataFrame中 # 1. 逆差分:累加预测的差分序列,再加上起始锚点 test_pred["log_energy"] = initial_log_val + test_pred["energy_val"].cumsum() # 2. 逆log变换:还原到原始能耗尺度 test_pred["original_energy"] = np.exp(test_pred["log_energy"])
关键注意事项
- 确保测试集的预测结果是按时间顺序排列的,
cumsum()是按行的顺序累加,所以日期不能乱序。 - 如果你的测试集里有缺失日期(比如你例子里的2019-02-03),只要预测的差分是对应正确时间点的,就不影响逆变换——因为差分本身就是相邻时间点的差值,缺失的日期意味着没有对应的预测,所以不需要处理。
这样处理后,test_pred["original_energy"]就是还原到原始尺度的能耗预测值了。
内容的提问来源于stack exchange,提问作者enterML
相关产品推荐
相关产品推荐

