σμ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 学习路线›模块 1 · 估计器的工作方式›主题 1.3·~50分钟中级

金融中的数据划分与泄漏

路线进度模块 1/4 · 主题 3/5
1.3 金融中的数据划分与泄漏
—实验得分— / 100总 XP—连续天数—

为什么划分就是一切

模型要在没见过的数据上评判。金融中有三组数据:用于拟合的训练集、用于选择设置的验证集,以及只使用一次、用来报告结果的测试集。它们必须遵循时间:用过去训练,用接下来的一段验证,用最后一段测试。随机划分会把同一场风暴里的日子同时放进两组,模型于是记住了邻居而不是学到规则。泄漏是指验证期或测试期的信息进入了训练步骤,常见有四种:在所有日子上拟合的缩放器、用到未来价格的特征、事后才知道的类目标列,以及在时间上重叠的标签。

重叠的标签需要特别小心。若标签是未来 HHH 个月的收益,则训练行 iii 与测试行 jjj 的标签只要 i+H>ji+H>ji+H>j 就共享月份,所以测试期之前的最后 H−1H-1H−1 个训练行已经知道了一部分测试结果。解决办法是清洗(去掉这些行)和禁运(留出安全间隔),后面的主题会讲。用一个小数字看看规模:有 100010001000 个月度行时,60/20/2060/20/2060/20/20 的划分把测试期放在第 800800800 行,当 H=3H=3H=3 时,每个边界附近有两个训练行发生重叠。

(i, i+H]∩(j, j+H]≠∅  ⟺  i+H>j(i<j)(i,\,i+H]\cap(j,\,j+H]\neq\varnothing\iff i+H>j\qquad(i<j)(i,i+H]∩(j,j+H]=∅⟺i+H>j(i<j)(1)
数字与真实例子若训练值为 2,4,6,82,4,6,82,4,6,8,缩放器学到均值 555。若在包含测试值 202020 的所有日子上拟合,它会学到均值 888,这 333 的差异来自未来。再看真实数据:用 SPY,让随机森林根据近期波动率预测未来 202020 天的波动率。打乱的 5 折划分给出 R2=0.60R^{2}=0.60R2=0.60,按时间排序、带 202020 天清洗的滚动前向划分给出 R2=−2.10R^{2}=-2.10R2=−2.10。打乱后的得分高出 2.702.702.70,因为相邻日子的 202020 个标签日里有 191919 个相同,而且按时间排序的测试必须面对它没见过的风暴。
  • 按时间划分:用过去训练,用下一段验证,用最后一段测试,且只看一次测试。
  • 四种泄漏:已拟合的预处理、未来特征、类目标列和重叠标签。
  • 打乱后的得分是警示信号:如果打乱日子使得分大幅上升,说明模型在记邻居。

实验:评分内容

  • 测试期从哪里开始10 分
  • 训练集的大小10 分
  • 缩放器从未来学到的10 分
  • 重叠的标签15 分
  • 打乱抬高了多少10 分
  • 时间序列的正确划分10 分
  • 无泄漏的流程10 分
  • 泄漏的种类10 分
  • 为什么打乱会抬高得分15 分
0/ 已答 9 题
任务
1数值作答10 分未作答

有 100010001000 个按时间排序的月度行,按 60%60\%60% 训练、20%20\%20% 验证、20%20\%20% 测试划分。测试期从哪个行索引(从 000 计)开始?

i=i =i=允许误差:± 0.5
2数值作答10 分未作答

在同样划分 100010001000 行的情况下,训练集有多少行?

n=n =n=允许误差:± 0.5
3数值作答10 分未作答

训练值为 2,4,6,82,4,6,82,4,6,8(均值 555),测试值为 202020。在全部五个值上拟合的缩放器学到均值 888。它与诚实均值相差多少?

d=d =d=允许误差:± 0.01
4数值作答15 分未作答

第 iii 行的标签是未来 H=3H=3H=3 个月的收益。训练行 iii 与第一个测试行 j=600j=600j=600 在 i+H>ji+H>ji+H>j 时共享月份。有多少个训练行 i<600i<600i<600 与第 600600600 行的标签重叠?

k=k =k=允许误差:± 0.01
5数值作答10 分未作答

在 SPY 上,预测未来 202020 天波动率的随机森林在打乱划分下得 R2=0.60R^{2}=0.60R2=0.60,在带清洗的滚动前向划分下得 R2=−2.10R^{2}=-2.10R2=−2.10。打乱抬高了多少?保留两位小数。

g=g =g=允许误差:± 0.02
6选择10 分未作答

你想诚实地评判一个日收益模型,该用哪种划分?

7排列步骤10 分未作答

把无泄漏评估的步骤按正确顺序排列。

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

  1. 1只看一次测试得分并报告
  2. 2按时间排序,再切成训练、验证和测试
  3. 3用验证数据选择设置
  4. 4在训练数据上拟合预处理和模型
8配对10 分未作答

把每种泄漏与其例子配对。

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

预处理泄漏
前视特征
目标泄漏
标签重叠
9用文字解释15 分未作答

用一两句话解释:当目标是未来 202020 天的收益时,为什么打乱划分比按时间排序的划分得分更好。

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

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

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

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