You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中从对数差分后的时间序列数据还原原始预测值

预测值还原操作步骤

首先明确你使用的预处理变换逻辑:
原始订单量为 $Y_t$,预处理流程为:

  1. 对数变换:$lnY_t = log(Y_t)$
  2. 一阶差分:$difflnY_t = lnY_t - lnY_{t-1}$

你得到的所有预测值都是difflnY_t格式的结果,还原需要按逆差分→逆对数的顺序执行,无需使用未来的原始数据。


一、测试集预测值还原

测试集为数据集最后30天,记训练集最后一天的原始值为 $Y_{train_end}$,对应的对数变换值为 $lnY_{train_end} = log(Y_{train_end})$,按以下步骤还原:

  • 第一步:逆差分还原对数序列
    记测试集第i天的对数差分预测值为 $pred_diffln_i$(i从1到30),对应的对数预测值计算方式为:
    pred_ln_1 = lnY_train_end + pred_diffln_1
    pred_ln_2 = pred_ln_1 + pred_diffln_2
    ...
    pred_ln_i = pred_ln_{i-1} + pred_diffln_i
    
    本质是对差分预测值做累加后,加上训练集末尾的基准对数数值。
  • 第二步:逆对数还原原始量级
    对每一个pred_ln_i做指数运算即可得到原始订单量预测值:
    pred_Y_i = exp(pred_ln_i)
    

二、未来30天(数据集外)预测值还原

直接用测试集最后一天的还原结果作为基准即可,无需未来原始数据:

  • 如果你已经完成了测试集预测值的还原,直接取测试集最后1天的对数预测值 $pred_ln_{test_end}$ 作为基准
  • 如果你不需要还原测试集,也可以直接用原始数据集最后1天的对数变换值 $lnY_{all_end}$ 作为基准
  • 后续计算逻辑和测试集还原完全一致:先累加差分预测值得到对数序列,再做指数运算得到原始量级预测值

代码实现示例

一阶差分的逆操作本质是累积和,可直接用numpy的cumsum函数批量计算,无需循环:

import numpy as np

# 测试集还原示例
base_ln = np.log(train_data.iloc[-1])  # 训练集末尾的对数值
pred_diffln_test = [] # 替换为你的测试集对数差分预测值数组
pred_ln_test = base_ln + np.cumsum(pred_diffln_test)
pred_ori_test = np.exp(pred_ln_test)

# 未来30天还原示例
base_ln_future = pred_ln_test[-1] # 用测试集末尾的对数值作为基准
pred_diffln_future = [] # 替换为你的未来30天对数差分预测值数组
pred_ln_future = base_ln_future + np.cumsum(pred_diffln_future)
pred_ori_future = np.exp(pred_ln_future)

注意事项

如果你的对数变换是带常数平移的(比如原始数据有0值,做了$log(Y_t + C)$的处理),逆运算时需要在指数运算完成后减去对应的常数C。


相关参考示意图

  • 对数变换操作:对数变换
  • 差分操作:差分操作
  • 测试集预测结果:测试集预测结果
  • 未来时段预测结果:未来预测结果

内容的提问来源于stack exchange,提问作者iota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:24:02