当相邻样本共享标签时
假设第 t 天的标签是从第 t 天收盘到第 t+h 天收盘的收益,h=5。那么第 t 天和第 t+1 天的标签共享五个日收益中的四个:它们几乎是同一个数。把第 t 天放进训练集、第 t+1 天放进测试集的 K 折,会让模型看到被测试的答案。像最近邻这样灵活的模型,只靠记忆就显得很有本事。泄漏的形状很精确:第 i 行的标签要到第 i+h 行才已知,所以当 i+h≥t₀ 且 i≤t₁ 时,第 i 行与测试块 [t₀,t₁] 重叠。
清除(purge)会删去所有与测试块重叠的训练行。禁运(embargo)会在测试块之后再多删几行,因为像 20 日收益这样的慢特征会继续向前携带信息。scikit-learn 的分割器是任何带有 split(X)(产生 (train, test) 索引数组)和 get_n_splits() 的对象,可作为 cv= 传给 cross_val_score 或 GridSearchCV。对 5,340 天的 SPY、四个慢特征和五日标签,最近邻模型在打乱折下的 R 方为 0.039,在清除折下为 -0.36。模型没有能力,打乱折的数字是泄漏在说话。不打乱的普通 K 折好得多,但在四个边界上仍有 120 对重叠;清除后的分割器一对也没有。
- 重叠标签在分割两侧放入近乎相同的样本,打乱 K 折于是奖励记忆。
- 清除 i+h≥t₀ 且 i≤t₁ 的行,并对 t₁ 之后的几行禁运。
- 分割器只是
split和get_n_splits:同时具备两者的对象都可作为cv=。
实验:评分内容
- 清除与禁运25 分
- 分割器25 分
- 评分函数10 分
- 统计重叠15 分
- 泄漏研究25 分