跳转至

清除交叉验证与禁运

定义

标签占用的收益区间若和测试集重叠,这些训练样本要清除。测试集之后再留一段禁运,避免紧挨着的标签泄漏。

公式

\[ \text{清除}=\{\,i:\ \text{标签区间}_i\cap\text{测试区间}\ne\emptyset\,\} \]

清除名单和禁运名单分开保存。验证按时间向前,不打乱月份。若把当期收益本身当成特征,教学序列的样本外 \(R^2\) 可以变成 1。

直觉

预测下个月,训练里就不能含有「已经用到下个月价格」的行。禁运是在测试窗后面再空一截,因为长标签会伸过去。

实务要点 / 常见误区

  • 个股样本外 \(R^2\) 和组合夏普不是同一个格子。Gu、Kelly 与 Xiu 的 NN3 是 0.40% 和夏普 1.20;夏普 1.35 属于 NN4。
  • \(R^2\) 的分母是超额收益平方和,可以为负。
  • 本章不调用未安装的学习库。生成的代码只作草稿。

相关概念

代码

def embargo_end(test_end: int, horizon: int) -> int:
    # 禁运从测试集结束后开始,长度至少覆盖标签还要向前看的期数。
    return test_end + horizon

教材:M16 机器学习与 AI 量化