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

时间序列历史预测正确实现方式咨询:Darts与NeuralForecast应用

解决NeuralForecast历史预测速度问题的正确实现方式

一、优先使用NeuralForecast内置的backtest方法

NeuralForecast针对自身模型架构优化了backtest接口,相比通用交叉验证,它能避免重复训练的冗余开销,是实现历史预测的官方推荐方式。示例代码:

from neuralforecast import NeuralForecast
from neuralforecast.models import NBEATS
import pandas as pd

# 初始化模型与预测器
models = [NBEATS(input_size=24, h=12, max_steps=1000)]
nf = NeuralForecast(models=models, freq='H')

# 执行高效历史回测
backtest_results = nf.backtest(
    df=your_dataframe,
    start_in_sample=pd.Timestamp('2023-01-01'),  # 指定回测起始时间
    h=12,  # 预测步长
    step_size=1  # 滚动步长,按需调整以平衡精度与速度
)

二、优化模型与训练配置提速

  • 启用硬件加速:给模型添加accelerator='gpu'参数(有GPU环境时),大幅缩短训练时间:
    model = NBEATS(input_size=24, h=12, max_steps=1000, accelerator='gpu')
    
  • 精简交叉验证设置:若必须用交叉验证,减少折数(比如从5折降至3折),避免无意义的重复计算。
  • 合理设置输入序列长度:根据预测步长调整input_size,比如预测12步时,input_size设为24或36即可,无需过长的历史序列。
  • 关闭冗余输出:训练时设置verbose=0,并将val_check_interval设为None,减少IO与验证开销。

三、手动实现轻量滚动预测

如果需要高度自定义的历史预测逻辑,可基于predict方法手动实现滚动预测,跳过框架层的交叉验证冗余:

current_date = pd.Timestamp('2023-01-01')
end_date = pd.Timestamp('2023-02-01')
h = 12
predictions = []

while current_date <= end_date:
    # 截取当前时间之前的训练数据
    train_df = your_dataframe[your_dataframe['ds'] <= current_date]
    # 拟合模型
    nf.fit(df=train_df)
    # 预测未来h步
    pred = nf.predict(h=h)
    predictions.append(pred)
    # 滚动到下一个时间节点
    current_date += pd.Timedelta(hours=h)

# 合并所有预测结果
historical_preds = pd.concat(predictions)

四、排查数据层面的性能瓶颈

  • 若数据集过大,先按时间窗口做分块处理或采样,减少单轮训练的数据量;
  • 确保数据格式符合NeuralForecast要求(比如ds列为时间戳、y列为目标值),避免框架内部的额外数据转换开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:00:02