对于模型参数选择,我们总是使用交叉验证进行网格搜索,以测试哪些参数比其他参数更好。
它适用于一般培训数据,例如this one,但如果数据之间存在时间关系,例如销售数天或库存数天,那么直接进行交叉验证是错误的吗? / p>
由于交叉验证将使用在训练数据中随机分割的kFold,这意味着对于时间序列数据,最近几天的信息将用于过去的训练。
我的问题是,如何对时间序列数据进行参数选择或交叉验证?
答案 0 :(得分:0)
是的,更常见的是使用回测或滚动预测,您可以在之前的N个时间段或所有时段中训练最多N个,然后测试时段N + k(k> = 1) ,甚至可能甚至测试一系列未来时期。 (例如,培训过去60个月的数据,然后预测未来12个月)。但细节实际上取决于您使用的模型和问题域。 Rob Hyndman给出a concrete example,你可以通过搜索“讨价还价比赛时间序列数据交叉验证”找到更多。
在某些情况下,按时间分层执行随机拆分是有意义的。然后如上所述在列车拆分上进行滚动训练和CV评估,并分别对随机测试保持进行滚动测试评估。
在某些情况下,你可以逃避执行普通的随机CV,其中时间只是另一个特征值(通常编码为许多工程时间特征,例如cos(2 pi hour_of_day / 24)
,sin(2 pi hour_of_day / 24)
,{{1}等等)。对于像XGBoost这样的模型,这可以更好地工作,允许模型发现数据中的时间依赖性,而不是在训练/测试方案中对它们进行编码。