规范化时间序列的验证集是一种前瞻性偏差吗?

数据挖掘 时间序列 lstm 偏见 数据泄露
2022-02-02 13:28:34

这是一篇关于使用 LSTM 进行股票预测的论文中时间序列的数据归一化过程:

  1. 根据时间拆分训练集和测试集(例如训练集:2001-2010,测试集:2011-2012)。这对我来说看起来不错。

  2. 通过减去均值并将它们除以训练集的标准差来归一化训练集。

  3. 使用 20% 的样本作为验证集来训练数据。Keras 的模型默认使用最后 20% 进行验证。

因此,在训练阶段,模型通过步骤 2 中的均值和标准差对验证集有所了解。

一方面,该模型正在使用一些未来信息进行训练。另一方面,没有测试集的信息泄露给模型。这是一种前瞻性偏见吗?

在这种情况下,最佳实践是什么?

1个回答

为了阻止步骤(2)中从验证集到训练集的数据泄漏,

  1. 我们应该首先将数据拆分为训练集和验证集,然后
  2. 仅使用训练集计算均值和标准差,最后
  3. 使用这个均值和标准差来规范化训练集和验证集。

这样一来,验证集就不会泄露任何信息到训练集,尽管验证集几乎是标准化的。这种偏差表示验证集和训练集分布之间的信息差异,后来 [正确地] 导致验证错误大于训练错误。

我们可能会考虑分别对集合进行归一化,但是这样我们可能会失去验证集和训练集分布之间的潜在差异。

例如,在价格的一维时间序列中,如果训练集中的平均价格为1.0$,我们期望一个平均的验证集2.0$导致根据周围价格训练的模型出现问题1.0$. 但是,通过将验证集分别标准化为1.0$,我们错误地将验证集带到了训练模型已经期望的范围,这导致了验证错误的低估。

编辑

在训练数据本身——不是每个例子都会受到未来的影响吗?——阿隆·古德曼

正确的。如果训练集是[Pt1,...,PtN],那么对于n[1,N)归一化点P^tn会偏向点(包含点的信息)[Ptn+1,...,PtN],但这不是泄漏,因为整个训练集都是我们所知道的,因此我们可以用它做任何我们想做的事情。从另一个角度来看,这种看似欺骗性的转换会被证明是好的,因为(1)规范化的缺点将在验证错误(更多作弊,更多验证错误)中暴露出来,因此我们不会被误导,(2)规范化可以通过降低验证错误使我们受益(否则,我们不会标准化)