σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft Academy路线图学习路线
Ctrl K
AO
+1.2k 位学习者
登录加入 ↗
路线图学习路线
AO
+1.2k 位学习者
登录
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft Academy路线图学习路线
Ctrl K
AO
+1.2k 位学习者
登录加入 ↗
路线图学习路线
AO
+1.2k 位学习者
登录
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
scikit-learn 学习路线›模块 3 · 诚实的评估›主题 3.4·~1小时高级

带清洗与禁运的交叉验证

路线进度模块 3/4 · 主题 4/6
3.4 带清洗与禁运的交叉验证
—实验得分— / 100总 XP—连续天数—

尊重时间的交叉验证

交叉验证会重复使用数据:把数据切成若干折,在一折上测试,在其余折上训练。对相互独立的行这样没问题,但金融标签在时间上会重叠。若第 jjj 行的标签是从 jjj 到 j+Hj+Hj+H 的收益,它的窗口就是 [j,j+H][j,j+H][j,j+H]。覆盖第 aaa 到 b−1b-1b−1 行的测试折,其标签覆盖 [a,b−1+H][a,b-1+H][a,b−1+H]。任何窗口与此范围相交的训练行(即 a−H≤j≤b−1+Ha-H\le j\le b-1+Ha−H≤j≤b−1+H)都与测试标签共享收益,保留这些行就会让模型看到部分答案。

[j, j+H]∩[a, b−1+H]≠∅  ⟺  a−H≤j≤b−1+H⟹a−H≤j≤b−1+H+e[j,\,j+H]\cap[a,\,b-1+H]\neq\varnothing\iff a-H\le j\le b-1+H\qquad\Longrightarrow\qquad a-H\le j\le b-1+H+e[j,j+H]∩[a,b−1+H]=∅⟺a−H≤j≤b−1+H⟹a−H≤j≤b−1+H+e(1)

清洗去掉重叠的训练行。禁运则在测试折之后再去掉 eee 行,因为收益存在自相关、波动率会聚集,所以测试块之后的头几行仍带有关于它的信息。在滚动前向方案里,训练只发生在测试之前,同样的想法变成一个间隔:用到第 a−H−1a-H-1a−H−1 行为止训练,间隔为 HHH(再加 eee)。scikit-learn 的 TimeSeriesSplit 有 gap 参数就是干这个的。在月度股票面板上,当 H=3H=3H=3 时,滚动前向信息系数无禁运为 0.03260.03260.0326,禁运 333 个月为 0.03270.03270.0327:因为标签重叠很短,清洗带来的变化很小,但不做就无从知道。

数一数行取 n=100n=100n=100 行、标签期限 H=5H=5H=5、测试折 [40,60)[40,60)[40,60)、禁运 e=2e=2e=2。折之前,第 353535 到 393939 行与其标签重叠:555 行。折之后,第 606060 到 666666 行(直到 b−1+H+e=66b-1+H+e=66b−1+H+e=66)被去掉:777 行。该折保留 100−20−12=68100-20-12=68100−20−12=68 个训练行。在同一个测试折的滚动前向版本里,训练行止于第 343434 行,共 353535 行,这正是 scikit-learn 的 TimeSeriesSplit 在间隔为 555 时返回的结果。
  • 先清洗,再禁运:去掉标签与测试标签相交的训练行,再去掉测试之后的几行。
  • 滚动前向中的间隔:只用至少早于测试 HHH 行的数据训练。
  • 即使变化很小也要做:干净的评估只损失几行,泄漏可能毁掉一个策略。

实验:评分内容

  • 折之前被清洗的行10 分
  • 折之后被清洗的行15 分
  • 剩下的训练规模15 分
  • 带间隔的滚动前向折10 分
  • 哪些行要被清洗10 分
  • 带清洗的划分10 分
  • 配对术语15 分
  • 为什么还要禁运15 分
0/ 已答 8 题
任务
1数值作答10 分未作答

第 jjj 行的标签覆盖 [j,j+H][j,j+H][j,j+H](H=5H=5H=5),测试折是第 404040 到 595959 行。折之前满足 j≥a−H=35j\ge a-H=35j≥a−H=35 的训练行与其标签重叠。第 353535 到 393939 行中有多少行被清洗?

k=k =k=允许误差:± 0.01
2数值作答15 分未作答

折之后(b=60b=60b=60),在 H=5H=5H=5、禁运 e=2e=2e=2 时,直到 b−1+H+eb-1+H+eb−1+H+e 的行被去掉。第 606060 到 b−1+H+eb-1+H+eb−1+H+e 行共有多少行被去掉?

k=k =k=允许误差:± 0.01
3数值作答15 分未作答

共有 100100100 行,测试折 202020 行,其前清洗 555 行、其后清洗 777 行。还剩多少训练行?

n=n =n=允许误差:± 0.01
4数值作答10 分未作答

一个滚动前向折测试第 404040 到 595959 行,只用到第 a−H−1a-H-1a−H−1 行为止的数据训练,H=5H=5H=5(间隔为 555)。从第 000 行数起,它有多少训练行?

n=n =n=允许误差:± 0.01
5选择10 分未作答

在带清洗的交叉验证中,哪些训练行会被去掉?

6排列步骤10 分未作答

把构建一个带清洗的折的步骤按正确顺序排列。

拖动以重新排序;也可聚焦某项,按空格抬起,用方向键移动,再按空格放下。

  1. 1去掉窗口与该范围相交的训练行以及禁运部分
  2. 2选择测试行 a 到 b - 1
  3. 3在剩余训练行上拟合并给测试行打分
  4. 4算出测试行所覆盖的标签窗口范围
7配对15 分未作答

把每个术语与其含义配对。

为左侧每一项选择配对项。

标签期限 H
清洗
禁运
TimeSeriesSplit 中的 gap
8用文字解释15 分未作答

清洗已经去掉了标签与测试标签重叠的训练行。用一两句话解释:为什么还要在测试折之后再加一段禁运。

数学模式键盘或 LaTeX 输入第 1/8 题 · Ctrl ⏎ 检查

登录后即可运行你的代码。

所有讲解均可免费阅读。创建账户或登录后,即可运行代码、运行测试并提交此实验。

  • 浏览器内 IDE 与 bash 终端,无需安装
  • 即时评分、XP 以及你在学习路线中的位置
创建账户登录
或
使用 GitHub 继续