PyCaret时间序列交叉验证:滑动窗口与扩展窗口

PyCaret时间序列交叉验证:滑动窗口与扩展窗口

【免费下载链接】pycaret An open-source, low-code machine learning library in Python 【免费下载链接】pycaret 项目地址: https://gitcode.com/gh_mirrors/py/pycaret

PyCaret是一个开源的低代码机器学习库,专为Python用户设计。在时间序列预测中,交叉验证是评估模型性能的关键步骤,而PyCaret提供了强大的滑动窗口和扩展窗口两种交叉验证方法,帮助用户快速构建可靠的预测模型。

时间序列交叉验证的重要性

时间序列数据具有时间依赖性,传统的随机交叉验证方法会破坏数据的时间顺序,导致模型评估结果不准确。PyCaret的时间序列模块通过滑动窗口扩展窗口两种专门设计的交叉验证策略,有效解决了这一问题,确保模型在未来数据上的泛化能力。

PyCaret时间序列交叉验证演示 PyCaret时间序列预测快速演示,展示了交叉验证在模型训练中的应用

滑动窗口交叉验证:平衡历史与近期数据

滑动窗口(Sliding Window)交叉验证通过固定训练集大小,随着时间推移不断滑动窗口来更新训练数据。这种方法适合处理具有稳定趋势的时间序列数据,能够平衡历史信息和近期变化。

在PyCaret中,滑动窗口实现于pycaret/utils/time_series/forecasting/model_selection.py文件,核心代码使用SlidingWindowSplitter类:

from sktime.split import SlidingWindowSplitter
cv = SlidingWindowSplitter(window_length=24, fh=12, step_length=12)

关键参数

  • window_length:训练窗口大小
  • fh:预测 horizon(预测步长)
  • step_length:窗口滑动步长

扩展窗口交叉验证:利用全部历史数据

扩展窗口(Expanding Window)交叉验证从初始训练集开始,随着时间推移不断将新数据添加到训练集中。这种方法适合趋势变化明显的时间序列,能够充分利用历史数据信息。

PyCaret通过ExpandingWindowSplitter实现扩展窗口策略:

from sktime.split import ExpandingWindowSplitter
cv = ExpandingWindowSplitter(initial_window=24, fh=12, step_length=12)

适用场景

  • 数据量有限时最大化训练样本
  • 长期趋势预测任务
  • 非平稳时间序列分析

如何在PyCaret中选择交叉验证策略

PyCaret的时间序列模块将交叉验证逻辑封装在cross_validate函数中(位于pycaret/utils/time_series/forecasting/model_selection.py),支持两种窗口策略的灵活切换:

# 扩展窗口交叉验证示例
test_scores, cutoffs = cross_validate(
    pipeline=forecaster,
    y=y,
    X=X,
    cv=ExpandingWindowSplitter(initial_window=24, fh=12),
    scoring={'mae': 'neg_mean_absolute_error', 'rmse': 'neg_root_mean_squared_error'},
    fit_params={'fh': ForecastingHorizon([1,2,3], is_relative=True)}
)

选择建议

  • 短期预测优先选择滑动窗口
  • 长期预测优先选择扩展窗口
  • 可通过cv_results_属性比较两种策略的评估指标

实战技巧:交叉验证参数调优

PyCaret提供ForecastingGridSearchCVForecastingRandomizedSearchCV类(位于同一文件),支持结合交叉验证进行超参数调优:

from pycaret.utils.time_series.forecasting.model_selection import ForecastingGridSearchCV

grid_search = ForecastingGridSearchCV(
    forecaster=pipeline,
    cv=SlidingWindowSplitter(window_length=24, fh=12),
    param_grid={'forecaster__model__alpha': [0.1, 0.5, 0.9]},
    scoring='smape'
)
grid_search.fit(y)

最佳实践

  • 窗口大小通常设置为数据周期的2-3倍(如月度数据用24-36个月窗口)
  • 预测步长(fh)不宜超过窗口大小的50%
  • 使用coverage参数设置预测区间(如coverage=0.95表示95%置信区间)

通过PyCaret的时间序列交叉验证工具,即使是机器学习新手也能轻松实现专业级的时间序列预测评估。无论是滑动窗口还是扩展窗口策略,都能帮助你构建更稳健、更可靠的预测模型。

【免费下载链接】pycaret An open-source, low-code machine learning library in Python 【免费下载链接】pycaret 项目地址: https://gitcode.com/gh_mirrors/py/pycaret

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值