Python Darts中的未来协变量错误

0 投票
1 回答
44 浏览
提问于 2025-04-14 16:13
mydata_train = X_train.copy()
mydata_train['y_train'] = y_train

mydata_test = X_test.copy()
mydata_test['y_test'] = y_test

# Convert your DataFrame to TimeSeries objects for the target variable and covariates
train_series = TimeSeries.from_dataframe(mydata_train, value_cols=['y_train'], fill_missing_dates=True, freq='h')
test_series = TimeSeries.from_dataframe(mydata_test, value_cols=['y_test'], fill_missing_dates=True, freq='h')

train_covariates = TimeSeries.from_dataframe(mydata_train, value_cols=[col for col in mydata_train.columns if col != 'y_train'], fill_missing_dates=True, freq='h')
test_covariates = TimeSeries.from_dataframe(mydata_test, value_cols=[col for col in mydata_test.columns if col != 'y_test'], fill_missing_dates=True, freq='h')

# Initialize the TFT model
model = TFTModel(
    input_chunk_length=24,
    output_chunk_length=12,
    hidden_size=16,  # Example size, adjust based on dataset size and complexity
    lstm_layers=2,  # Number of LSTM layers
    num_attention_heads=4,  # Number of attention heads
    dropout=0.1,  # Dropout rate
    batch_size=16,  # Batch size for training
    n_epochs=1,  # Number of epochs to train
    add_relative_index=False,  # Whether to add a relative index as a feature
    add_encoders=None,  # Additional encoder settings can be specified here
    likelihood=None,  # Can specify a likelihood for probabilistic forecasting
    random_state=42  # Seed for reproducibility
)

# Fit the model
model.fit(series=train_series, past_covariates=None, future_covariates=train_covariates, verbose=True)

# Predict using the model and future covariates
# n = 160 #len(mydata_test)  # Set the forecast horizon
predicted = model.predict(n=12, series=test_series, future_covariates=test_covariates)

有没有人能帮我解决这个错误?

错误信息是:ValueError: 对于给定的预测时间范围 n=12,在数据集索引 0 中提供的未来变量没有足够延伸到未来。因为 n <= output_chunk_length,未来变量必须在时间点 2022-10-01 16:00:00 结束,而现在它们在时间点 2022-10-01 04:00:00 结束。

我只想预测接下来的12天,而且我提供了很多未来变量的信息——几乎有10个月的数据,而且我的数据是每小时收集的。

我不知道这个错误到底是什么意思,我完全搞不懂。根据这个错误,它的意思是我需要有数据一直到2022-10-01 16:00:00这个时间点。但是,为什么我需要到这个时间呢?

我还改变了输入和输出的时间长度,尝试了很多不同的数字,但没有任何变化,还是得到了同样的错误。

1 个回答

-1

输入块长度和输出块长度这两个参数决定了模型在做预测时会参考多少历史和未来的信息。输入块长度是指用作输入历史的时间步数,而输出块长度则是模型将预测的未来时间步数。

你看到的错误信息表明,模型希望未来的相关数据至少要延续到输出块长度的结束(也就是12小时),也就是在最后一个训练数据点之后。在你的例子中,最后一个训练数据点是2022年10月1日04:00:00,所以模型希望未来的相关数据能提供到2022年10月1日16:00:00。

解决这个问题的一种方法是调整输入块长度和输出块长度的参数,使其与数据的时间范围相匹配。

比如说,如果你的数据是每小时收集一次,并且你想预测接下来的12小时,你可以设置:

input_chunk_length = 12 * 24  # 12 days of historical data
output_chunk_length = 12  # 12 hours of forecasting horizon

不过,如果你没有足够的未来相关数据来覆盖所需的时间范围,你可能需要重新考虑你的数据收集策略,或者调整预测的时间范围。

请记住,这个错误与模型在做预测时所期望的上下文窗口有关。模型需要足够的历史和未来信息来进行预测,而错误信息正是指出上下文窗口没有满足要求。

撰写回答