时间序列分析中的交叉验证是一种评估模型在未见过的未来数据上的泛化能力,同时保持观察的时间顺序的方法。与 k 折等标准交叉验证技术(随机打乱数据)不同,时间序列交叉验证尊重事件的顺序,以避免数据泄漏——未来信息无意中影响过去的训练。这一点至关重要,因为时间序列数据通常包含趋势、季节性或依赖关系,需要模型在按时间顺序发生在训练期之后的数据上进行测试。例如,在训练中使用未来数据预测股票价格会人为地夸大性能,从而导致不可靠的现实世界预测。
一种常见的方法是扩展窗口方法。在这里,初始训练集从数据的子集开始,测试集是下一个紧邻的时期。每次迭代时,训练窗口都会扩展以包含先前的测试集,并选择更靠后的新测试集。例如,如果您有 2018 年到 2023 年的月度销售数据,则第一个折叠可能会在 2018 年至 2020 年进行训练,并在 2021 年进行测试。下一个折叠在 2018 年至 2021 年进行训练,并在 2022 年进行测试,依此类推。像 scikit-learn 的 TimeSeriesSplit
这样的工具可以自动化此过程,使开发人员能够系统地验证多个时间范围内的模型。这种方法确保模型在“未来”数据上重复评估,模拟现实世界的部署,其中预测仅依赖于历史信息。
但是,时间序列交叉验证存在挑战。如果数据发生突变(例如,大流行扰乱了销售趋势),即使使用扩展窗口,在较旧数据上训练的模型在较新的测试集上的表现也可能不佳。开发人员还必须决定在每个折叠中包含多少历史数据——太少可能无法捕获模式,而太多可能会降低计算速度。对于超参数调整,折叠之间的交叉验证指标(如 MAE 或 RMSE)有助于识别稳健的配置。例如,在调整 SARIMA 模型的季节性参数时,所有折叠中的一致性能表明设置具有良好的泛化能力。最终,目标是确保模型适应时间变化而不会过度拟合,这需要根据数据集的独特特征仔细设计交叉验证策略。