sklearn.model_selection.TimeSeriesSplit的gap参数原理与取值问题咨询
TimeSeriesSplit gap参数的设计逻辑与取值规则
无gap设置的核心问题:数据泄露
时间序列任务中通常会用历史滞后值作为特征来预测未来值,假设你使用过去k个时间步的观测值作为特征,预测当前时间步的标签:
- 若训练集的时间范围是[1, T],验证集的时间范围是[T+1, T+n],无gap时,验证集第一个样本的特征会用到[T -k +1, T]区间的观测值
- 而T时间步的标签本身已经包含在训练集中,相当于模型在训练阶段已经提前接触到了验证集特征用到的部分真实数据,最终得到的验证分数会严重偏高,和模型上线后的实际表现完全不符
gap的作用就是在训练集末尾和验证集开头之间留出空白区间,彻底切断训练集信息向验证集泄露的路径。
gap的取值方法
gap的取值完全由你的特征构造逻辑和预测逻辑决定:
- 单步预测场景:如果你的特征最多用到了过去
k步的历史观测值,gap直接设为k即可 - 多步预测场景:如果你需要一次性预测未来
m步的结果,gap需要设为k + m
举两个常见场景的例子:
- 用前1天的销量、温度数据预测次日销量,最大滞后步长k=1,单步预测,gap设为1
- 用过去7天的访问量数据预测未来3天的访问量,k=7,m=3,gap设为10
代码调用示例
sklearn中配置gap参数的方式如下:
from sklearn.model_selection import TimeSeriesSplit # 5折拆分,gap=3,验证集大小为30个时间步 tscv = TimeSeriesSplit(n_splits=5, gap=3, test_size=30)
内容的提问来源于stack exchange,提问作者user15568232
相关产品推荐
相关产品推荐

