基于TSLM的预测逆变换:还原Open变量水平值方法
还原TSLM预测值为原始Open水平值
你当前的模型预测的是对数Open的一阶差分(dl0pen),要还原成原始Open的水平值,需要逆向执行数据预处理的步骤:先还原差分得到对数水平,再取指数得到原始数值。具体操作如下:
步骤1:获取还原的起点值
从训练数据中提取最后一个观测的对数Open值(lopen),作为还原差分序列的基准:
# 提取训练集最后一个lopen值 last_lopen <- df %>% filter(Date < "2015-12-23") %>% pull(lopen) %>% last()
步骤2:还原差分序列为对数水平
对预测得到的dl0pen做累加计算,加上起点的对数Open,得到预测期的对数Open值:
# 处理预测结果,计算对数Open的预测值 xd_with_lopen <- xd %>% mutate( # 累加差分得到对数水平,第一个预测值的差分对应训练集最后一个值的变化 lopen_pred = last_lopen + cumsum(.pred) )
步骤3:转换为原始Open水平值
对对数Open的预测值取指数,得到原始Open的预测水平:
# 指数转换得到原始Open的预测值 xd_final <- xd_with_lopen %>% mutate(Open_pred = exp(lopen_pred))
完整代码示例
把上述步骤整合起来:
# 1. 获取训练集最后一个对数Open值 last_lopen <- df %>% filter(Date < "2015-12-23") %>% pull(lopen) %>% last() # 2. 处理预测结果,还原为原始Open水平 xd_final <- xd %>% mutate( lopen_pred = last_lopen + cumsum(.pred), Open_pred = exp(lopen_pred) ) # 查看结果 xd_final %>% select(Date, .pred, lopen_pred, Open_pred)
补充说明
dl0pen = difference(log(Open), 1)等价于dl0pen[t] = lopen[t] - lopen[t-1],所以还原时lopen[t] = lopen[t-1] + dl0pen[t],累加所有预测的差分就能得到从起点开始的对数序列。- 确保预测结果的时间索引连续,
cumsum的顺序才会正确对应日期。
内容的提问来源于stack exchange,提问作者douseik
相关产品推荐
相关产品推荐

