我想对详细数据执行交叉验证。
我尝试在TimeSeriesSplit
学习中使用Scikit
方法。但是它会根据索引创建折叠。
因此,发生火车折叠的情况可能包含来自
'2017-01-01 00:00:00'
至'2019-01-01 10:00:00'
,以及
测试折叠将包含从'2019-01-01 10:01:00'
到'2019-01-02 23:59:00'
的数据。
如您所见,这不是进行交叉验证的准确方法,因为10小时包含在火车和测试折叠中,因此会导致误导性结果。
我想要实现的是对TimeSeriesSplit
进行分组
例如-
train_fold_1 - '2017-01-01 00:00:00' to '2019-01-01 23:59:00'
test_fold_1 - '2019-01-02 00:00:00' to '2019-01-02 23:59:00'
train_fold_2 - '2017-01-01 00:00:00' to '2019-01-02 23:59:00'
test_fold_2 - '2019-01-03 00:00:00' to '2019-01-03 23:59:00'
我有详尽的数据,目前使用XGBoost
来预测明天的每一分钟。
PFA-a screenshot of pandas Dataframe
在以下两种情况下,过去400天都用于执行交叉验证
例如-如果我们要预测从2019-01-01 00:00:00
到2019-01-01 23:59:00
的时间,我们将使用过去400
天到2018-12-31 23:59:00
进行交叉验证。
下图中的第一个值是MSE,第二个值是标准偏差,是使用Scikit Learn中的TimeSeriesSplit计算得出的。
cross validation score 1-January-2019 using TimeSeriesSplit
cross validation score 1-february-2019 using TimeSeriesSplit
您可能会注意到,即使使用了相同数量的数据,当日期范围更改时,我们仍然会观察到MSE和标准差的巨大变化。