σμ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.5·~50分钟中级

防泄漏的管道

路线进度模块 1/4 · 主题 5/5
1.5 防泄漏的管道
—实验得分— / 100总 XP—连续天数—

无声的泄漏

泄漏是指测试行的信息在被评分之前就到达了模型。显眼的形式很容易避免(用明天的价格构造特征)。无声的形式藏在预处理里:你用所有行去挑选最佳列、做缩放或填补缺口,然后才为交叉验证划分。每个测试折都已经影响了这个选择,分数因此偏高。特征选择是最大的元凶,因为一百个噪声列在任何样本里总有几个看起来有预测力;如果在全部数据上挑选,测试折在一定程度上就被“恰好拟合这些折”的列预测了。结构性的解决办法是 Pipeline:把整个管道交给 cross_val_score,它会在每个训练窗口上重新拟合缩放、选择和模型,然后才对测试窗口打分。

本实验有意提出一个很难的问题:60 个其他资产的昨日收益能否预测 SPY 今天是否上涨?几乎没有什么可发现的。有泄漏的评估(在全部行上用 SelectKBest(f_classif, k=5),再做 TimeSeriesSplit 交叉验证)得到 AUC 0.534。诚实的评估(缩放器、选择器和逻辑回归放在一条管道里,每个窗口重新拟合)得到 0.512。二者之间的 0.022 纯属泄漏。你还可以看里面:cross_validate(model, X, y, cv=..., return_estimator=True) 返回已拟合的管道,estimator.named_steps['select'].get_support(indices=True) 列出每个折选中的列。五个折里只有一列每次都被选中,这就是对噪声做选择的样子。用管道算出的分数你能为之辩护;“对所有数据先做一点预处理”之后算出的分数则不能。

  • 先划分,再学习:缩放、选择和填补都应放在交叉验证循环之内。
  • Pipeline 是防泄漏的护栏:把整个管道交给 cross_val_score,每一步都会在每个训练窗口上重新拟合。
  • 看看每个折选了什么:在折与折之间变化的列是噪声,而不是信号。

实验:评分内容

  • 有泄漏的评估15 分
  • 管道10 分
  • 诚实的评估15 分
  • 每个折的选择20 分
  • 泄漏的大小10 分
  • 真实数据的比较30 分
资源管理器 · lab-sl-15
▾ lab-sl-15
▾ data
…
bash · 浏览器内
learner@quantcraft:~/lab-sl-15$
Python 尚未加载PythonLn 1, Col 1Spaces: 4UTF-8

要重置此主题吗?

lab-sl-15 中的所有内容将恢复为初始文件,终端也会被清空。你当前的解答将丢失,且无法撤销。

将被重置
  • main.py → 初始代码
  • 终端历史与测试输出
  • 未提交的更改
将被保留
  • 实验最高得分
  • 你的 XP 与连续天数
  • 讲解进度与笔记

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

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

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