首页
/ Darts时间序列预测中的超参数优化与验证集划分策略

Darts时间序列预测中的超参数优化与验证集划分策略

2025-05-27 08:01:21作者:宣海椒Queenly

概述

在时间序列预测项目中,合理的超参数优化和验证集划分是确保模型性能的关键环节。本文将详细介绍如何在Darts框架中实现时间序列预测模型的超参数优化,特别是验证集的正确使用方法。

时间序列数据划分的特殊性

与传统机器学习不同,时间序列数据具有时间依赖性,因此不能简单地随机划分数据集。Darts框架提供了灵活的方法来处理这种特殊性。

典型的时间序列数据划分方案

对于时间范围从2020-01-01到2023-12-31的数据集,推荐采用以下划分方式:

  1. 训练集:2020-01-01至2022-01-01
  2. 验证集:2022-01-01至2022-12-31
  3. 测试集:2023-01-01至2023-12-31

这种划分保持了时间顺序,确保模型不会"看到"未来的数据。

超参数优化实现方法

在Darts中,可以通过以下步骤实现超参数优化:

  1. 定义目标函数:使用验证集评估模型性能
  2. 设置搜索空间:为每个超参数指定可能的取值范围
  3. 运行优化过程:使用Optuna等工具寻找最佳参数组合

关键代码实现

以下是超参数优化阶段的典型代码结构:

def objective(trial):
    # 定义超参数搜索空间
    forecast_horizon = 24
    fc_lags_dict = {}
    for feature in future_cov:
        future_cov_lags_lower_bound = trial.suggest_int(f'fc_lb_{feature}', -96, -1)
        future_cov_lags_upper_bound = trial.suggest_int(f'fc_up_{feature}', 1, 72)
        fc_lags_dict[feature] = list(range(future_cov_lags_lower_bound, future_cov_lags_upper_bound))
    
    # 构建模型
    model = LinearRegressionModel(
        lags=list(range(target_lags_lower_bound, 0)),
        lags_past_covariates=None,
        lags_future_covariates=fc_lags_dict,
        output_chunk_length=forecast_horizon,
        multi_models=True,
    )
    
    # 在验证集上评估模型
    hf_results = model.historical_forecasts(
        series=target_hf[:val_end],
        past_covariates=None,
        future_covariates=future_cov_hf,
        start=val_start,
        retrain=30,
        forecast_horizon=24,
        stride=24,
        train_length=2160,
        verbose=True,
        last_points_only=False,
    )
    
    return return_metrics(hf_results)

最终测试阶段

完成超参数优化后,应在独立的测试集上评估模型性能:

# 使用优化后的参数构建最终模型
final_model = LinearRegressionModel(
    lags=best_lags,
    lags_past_covariates=None,
    lags_future_covariates=best_fc_lags,
    output_chunk_length=24,
    multi_models=True,
)

# 在测试集上评估
test_results = final_model.historical_forecasts(
    series=target_hf,
    past_covariates=None,
    future_covariates=future_cov_hf,
    start=test_start,
    retrain=30,
    forecast_horizon=24,
    stride=24,
    train_length=2160,
    verbose=True,
    last_points_only=False,
)

高级应用:滚动窗口验证

对于需要更频繁更新超参数的情况,可以考虑实现滚动窗口验证策略:

  1. 定义多个连续的验证窗口
  2. 在每个窗口上独立进行超参数优化
  3. 汇总各窗口的优化结果

这种方法虽然计算成本较高,但能更好地适应时间序列中的概念漂移问题。

最佳实践建议

  1. 确保验证集足够大,能够代表数据的整体特性
  2. 考虑季节性因素,验证集应包含完整的季节性周期
  3. 记录每次实验的参数和结果,便于分析比较
  4. 在计算资源允许的情况下,增加验证集的数量或大小

通过合理的数据划分和超参数优化策略,可以在Darts框架中构建出性能优异的时间序列预测模型。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
22
6
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
192
270
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
909
541
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
341
1.21 K
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
142
188
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
377
387
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Jupyter Notebook
63
58
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.1 K
0
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
87
4