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

LSTM时间序列预测中预测曲线相对实际曲线右移问题排查

问题描述

我使用LSTM进行时间序列预测,输入特征为过去5小时的空气污染水平,预测目标是下一小时的空气污染水平。模型看似运行正常,但实际数据与预测数据存在严重偏差,表现为预测曲线相对实际曲线向右偏移(见下图)。请问该问题的成因可能是什么?

预测曲线向右偏移

代码实现
# 归一化
main_scaled=sc.fit_transform(dataset_main)
print("main-scaled : \n",main_scaled)

# 划分数据集
training_set_scaled = main_scaled[0:16560]
print("train_scaled: \n",training_set_scaled)

validation_set_scaled=main_scaled[16560:23160]
print("validation_scaled: \n",validation_set_scaled)

test_set_scaled=main_scaled[23160:28200]
print("test_scaled: \n",test_set_scaled)

# 构造x_train和y_train
x=[]
x_train = []
y_train = []
time_step=5
for i in range(time_step, 16560):
    x=training_set_scaled[i-time_step:i,0]
    y=training_set_scaled[i,0]

    if(np.isnan(x).any()==False and math.isnan(y)==False):
      x_train.append(x)
      y_train.append(y)
x_train, y_train = np.array(x_train), np.array(y_train)
print("x_train is :",(x_train))

x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))
print("x-train: \n",x_train ,"\n y-train:",y_train)

# 构造x_val和y_val(验证集)
inputs1 = main_scaled[len(training_set_scaled)-5:len(training_set_scaled)+len(validation_set_scaled):]
print("inputs1 :\n ", inputs1) # 把训练集最后5条数据加到验证集开头

x2=[]
x_val = []
y_val = []
time_step=5
for i in range(time_step, 6605):
    x2=inputs1[i-time_step:i,0]
    y2=inputs1[i,0]
    if(np.isnan(x2).any()==False and math.isnan(y2)==False):
      x_val.append(x2)
      y_val.append(y2)
x_val, y_val = np.array(x_val), np.array(y_val)
x_val = np.reshape(x_val, (x_val.shape[0], x_val.shape[1], 1))

# 定义模型
model = Sequential()
model.add(LSTM(units = 32, return_sequences = True, input_shape = (x_train.shape[1], 1)))
model.add(Dropout(0.2))

model.add(LSTM(units = 16, return_sequences = False))
model.add(Dropout(0.2))

model.add(Dense(units = 1))

model.compile(optimizer = 'adam', loss = 'mean_squared_error' , metrics=['mae'])

history=model.fit(x_train, y_train, epochs = 9, batch_size = 32, validation_data=(x_val,y_val))
可能的成因分析
  • 数据对齐错误:验证集构造时,range(time_step, 6605)的终点有误。验证集原始长度是6600,加上训练集最后5条后inputs1总长度为6605,i的有效范围应该是range(time_step, 6604),否则会超出索引范围,导致部分样本输入输出错位,最终预测曲线偏移。同时要确认原始数据的时间戳是否完全连续,无间隔不一致的情况。
  • 数据泄露(归一化错误):直接用整个数据集拟合归一化器sc,再转换所有数据集,会让模型在训练时间接获取到验证集、测试集的统计信息,导致泛化能力下降,预测时出现偏移。正确做法是用训练集单独拟合scaler,再分别转换训练、验证、测试集。
  • 模型拟合不足:当前LSTM单元数量较少(32、16),且训练轮次仅9次,模型可能还未充分学习到时间序列的依赖关系,只能拟合出滞后的趋势。可以尝试增加训练轮次,或者提升LSTM单元规模,暂时去掉Dropout观察拟合效果。
  • 特征单一:仅用过去5小时的污染值作为输入,无法捕捉影响空气污染的其他关键因素(如气象条件、排放源变化等),模型只能依赖历史值的自相关,容易生成滞后的预测结果。
  • 预测逻辑问题:如果预测阶段采用滚动预测(用前一次预测值作为下一次输入),会导致误差累积,曲线逐渐偏移。需确认预测时是否始终使用真实历史数据构造输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:02:14