过拟合与正则化:ML 的中心问题
数据泄漏、泛化差、策略脆弱,都是同一件事的不同长相。正则化能压住方差,压不住坏数据,也压不住你自己想让策略成立的那股劲。
过拟合:中心问题
如果你从机器学习里只记住一件事,记住这个:一个完美拟合你训练数据的模型就是坏的。永远是。
过拟合是把记忆当成了学习。模型看过训练集,把每个样本连同它的噪声一起背下来,然后报出惊艳的表现。验证集讲的是另一个故事:模型在新数据上失败,因为它记住了,没有泛化。
在量化金融里,过拟合是策略的头号杀手。你在 Medium 文章里看到的那些「前景光明」的回测,几乎确定是过拟合的;每一个跑赢五年然后突然死掉的因子都是过拟合的;那些被当作「秘密」卖的信号也多半是过拟合的——有时是卖方过拟合的,更常见的是买方拿回去自己过拟合的。这篇文章要细读,因为后面几乎所有关于验证的内容都是它的推论。
核心张力
每个模型都有参数。线性回归有 个系数,神经网络有几千到几百万个,梯度提升集成有几百棵树带几千片叶子。参数越多越灵活,越灵活就越能拟合训练数据里的 pattern——包括那些纯噪声、根本不会重复的 pattern。
于是有三种状态。参数太少,模型抓不住真正的 pattern,训练误差高、测试误差也高,这是欠拟合。参数太多,模型既能抓真 pattern 又能把噪声背下来,训练误差接近零、测试误差高,这是过拟合。刚刚好的时候,模型抓到 pattern 并忽略噪声,训练误差适中、测试误差低,这才叫泛化。
你的活是找到中间那个点。你靠正则化、交叉验证和自律去找。
先学会量化你过拟合了多少
过拟合最有诊断意义的症状是训练表现和测试表现之间的大差距。具体长这样:训练 MSE 0.001(看起来惊人,模型好像学得完美),测试 MSE 0.10(比直接猜均值还差),测试误差是训练误差的 100 倍。发生的事情是模型太灵活,把训练数据拟合得严丝合缝,包括每个样本特有的噪声;换到新数据上,噪声的 pattern 不一样了,于是它那些自信的预测系统性地错。
把这个直觉变成一个能盯的数:
健康的模型 Gap Ratio 落在 。超过 2 是过拟合,超过 5 是严重过拟合。而 Gap Ratio 小于 1.1 但绝对误差很高,说明你在另一边——欠拟合,模型简单到连训练数据里的规律都没抓住。
Sharpe 有对应的版本:
Retention 在 是正常的,模型样本外总要掉点东西。低于 0.3 表示严重过拟合。高于 1.0 反而更该警惕——样本外比样本内还好,通常意味着有未来信息泄漏。
每个训出来的模型都跟踪这两个比值。Retention 低于 0.3 的,扔掉从头来,别试图抢救。
偏差-方差分解
上面那些启发式的形式化版本是这个。对平方误差,模型的期望测试误差可以分解成三部分:
其中 是不可消除的噪声,也就是 在真函数 周围的方差。任何模型都消不掉它,这是地板。
另外两项是你能动的。偏差²是模型平均上有多错:一个线性模型去拟合二次函数就是高偏差,它表达不了真函数,哪怕给它无穷多训练数据也会系统性地错。方差是如果换一批数据训练、模型会变多少:一个 100 次多项式去拟合 30 个点是低偏差(什么都能拟合)加高方差(换个数据集就面目全非)。
权衡是简单模型高偏差低方差、复杂模型低偏差高方差,而甜蜜点最小化偏差² 加方差。注意这跟最小化训练误差不是一回事——训练误差只衡量拟合,不衡量泛化。
(Hastie, Tibshirani, Friedman, The Elements of Statistical Learning, 第 2 版, 第 7 章。ISBN 978-0387848570。)
把它画出来更直观。想象 30 个数据点 ,其中 ,然后拟合三个模型。线性拟合 完全错过曲率,对 预测 ,测试误差高是因为模型本身就是错的,这是高偏差。100 次多项式穿过每一个点,训练误差基本为零,但点与点之间的曲线是野的——它有 99 个拐点专门用来精确命中每个样本,测试误差是灾难性的,这是高方差。3 次多项式 用刚刚够的复杂度抓住曲率,放过了一部分噪声,测试误差比两个极端都低得多。
100 次多项式「学」了噪声,线性模型「忽略」了信号,三次方把平衡搞对了。而实践中大多数过拟合问题,就是研究者选了 100 次多项式,因为它在训练图上看起来更好。
两张图告诉你自己在哪一边
学习曲线画的是训练误差和验证误差随训练集大小的变化。两条线都高、并且收敛到差不多的值,是欠拟合的签名——加更多数据没用,模型太简单了。训练误差远低于验证误差、并且加数据能收窄这个差距,是过拟合的签名——模型还有空间从它没见过的数据里学到更多信号。训练误差略低于验证误差、两条都低、差距小,是健康拟合。
验证曲线画的是训练误差和验证误差随某一个超参(比如正则化强度)的变化。对一个行为良好的超参,两条曲线都应该是 U 形,最优值在它们靠拢的地方。
这两张图是 ML 里最便宜也最有信息量的诊断。每个你训的模型都画一遍。
过拟合在实践中的五种长相
它穿很多件衣服,下面五件你会反复遇到。
参数爆炸是最直白的一种:参数相对数据点太多。经典场景是 1000 个特征、500 个训练样本、拟合一个无正则化的线性回归——设计矩阵 秩亏或近乎秩亏,OLS 解不稳定,模型只能去拟合噪声。经验法则是每个参数至少配 10 个样本,而这还是对线性模型说的;神经网络和 boosting 树这类灵活模型,你要 100 个以上。
训练太久是第二种。把神经网络或 boosting 模型一直训到训练损失为零,恭喜,你把训练集背下来了,而验证损失可能 50 个 epoch 前就不动了。早停——验证损失不再下降就停——是你能找到的最便宜的正则化。
超参过度调优是第三种,而且它伪装得像在做正经工作。试 1000 个超参组合、在验证集上评估每一个、报最好的那个:最好的那个是对验证集过拟合的,验证集现在已经是你训练过程的一部分,你报的性能往上偏了。修法是再留出第三个集合——测试集——只在最后碰一次,或者用嵌套交叉验证(见交叉验证那篇)。
特征选择偏差是第四种,也是最容易被辩护的一种。你有 500 个候选特征,在训练集上算每个跟目标的相关性,挑出前 50 个,用这 50 个训模型,然后在测试集上评估,表现很赞。问题在于那前 50 个是基于训练集表现挑的,里面必然混着一些纯属碰巧相关的特征;选择这个动作本身就消耗了统计显著性,而你的测试集评估并没有为这次消耗记账。修法是把特征选择放进交叉验证循环里,每一折只在它自己的训练数据上选特征。
未来信息泄漏是第五种,也是最致命的:用明天的数据预测今天,模型好得不真实,因为它拿到了答案。它是一种过拟合,因为模型拟合的是它在部署时永远不会拥有的未来。数据泄漏那篇讲得更细,但这句话值得单独重复一遍——未来信息泄漏就是过拟合。
正则化工具箱
正则化是一组通过惩罚模型复杂度来防止过拟合的技术。有很多,下面七种是你必须知道的。
最基础的是 L2 正则化(Ridge),在损失里加上系数平方大小的惩罚:
这个惩罚把所有系数往零缩,而且解有闭式:
它缩小系数但不会把它们压到精确的零,所有特征都留在模型里、影响变小。当你认为所有特征都多少有点贡献时这正合适。 控制强度,靠交叉验证调。
L1 正则化(Lasso)换成绝对值惩罚:
L1 有个 L2 没有的属性:它把一部分系数压到精确的零,等于顺手做了自动特征选择,产出一个只用一部分特征的稀疏模型。你怀疑大多数特征是噪声时该用它。代价是当特征之间相关时,lasso 倾向于挑一个、忽略其余,这让它不太稳定。
Elastic Net 把两者加在一起:
拿 L1 的稀疏性配 L2 的稳定性,是两者之间常用的折中(sklearn 里就是 ElasticNet)。特征之间明显相关时,它通常比纯 L1 或纯 L2 更稳。
以上三种是给线性模型的。神经网络那边的主力是 Dropout:训练时随机把每一层 20–50% 的激活置零,逼着网络不去依赖任何单个神经元——每个神经元必须在多个上下文里都有贡献。测试时 dropout 关掉、所有神经元都用。效果类似于训练了一个共享参数的网络集成,而算力成本几乎为零。
早停跨模型通用,也是最省事的一个:验证损失不再改善就停。没有惩罚项,除了「耐心」(停之前再等几个 epoch)之外没有额外超参。boosting 模型直接支持它,神经网络框架也全都支持。用它。
数据增强换个思路:拿不到更多数据就造假数据。图像做旋转、翻转、裁剪、颜色抖动;文本做复述、回译、同义词替换;表格数据给特征加噪声、做 mixup(一对样本的线性组合)。它管用是因为模型看到的分布更宽了,没法再去背单个样本,而它基本是免费的。
最后一种最简单,也最常被跳过:降低模型容量。更少的参数、更浅的网络、更少的特征。如果你的模型过拟合,第一件该试的事是把它做小。大多数初学者的反射动作是加更多正则化,而正确的反射动作是先减模型。
(Goodfellow, Bengio, Courville, Deep Learning, 第 7 章。ISBN 978-0262035613。)
这些方法背后是同一个赌注
所有正则化方法共享一句话:给定两个训练损失相等的模型,选更简单的那个。这是形式化的奥卡姆剃刀——更简单的模型更可能在抓真信号而不是噪声,它有更少的自由度用来记忆,它会更好地泛化。
为什么这个赌在实践中赢面大?因为世界是稀疏的。生成你数据的那个真函数,几乎肯定比你拟合的模型有效参数少得多,剩下的部分是噪声。正则化就是在赌你的模型应该长得更像世界、而不是更像你手上这批数据。
同一件事还有一个贝叶斯的说法,值得知道,因为它能告诉你正则化什么时候会失灵。参数上的先验分布编码了「参数应该多大」的信念:L2 正则化对应权重上的高斯先验,L1 对应拉普拉斯先验,最大似然是均匀先验下的 MAP 估计。这不只是理论上的雅致——它说明正则化本质上是先验知识,先验对(或者至少合理)时它管用,先验大错特错时它伤你。Ridge 回归假设系数都不大;如果你手上真有一个系数是 100 的强信号,ridge 会把它往零缩,代价直接体现在表现上。
对量化数据,「大多数系数小、少数几个大」这个先验通常是合理的:市场噪声大,大多数特征效果弱,价值来自少数强信号加上很多弱信号。Ridge 类的先验匹配这个形状,这就是它在金融里好使的真正原因。
顺带说一句这套工具的来历,因为它解释了为什么这些名字听起来来自完全不同的年代。Ridge 回归是 Hoerl & Kennard (1970) 把 L2 正则化引入线性回归;Lasso 是 Tibshirani (1996) 引入带稀疏性的 L1;神经网络里的权重衰减等价于 L2,1980 年代就在用了;Dropout(Hinton et al., 2012)是神经网络正则化的现代突破;早停被非正式地知道了几十年,1990 年代才被形式化;Batch normalization(Ioffe & Szegedy, 2015)附带一点轻微的正则化效果。正则化在统计学和 ML 的历史上被反复重新发明过好几次,每一次都是真实贡献,但没有哪一次改变了根本事实:正则化是拿训练拟合去换泛化,而这笔交易的汇率由偏差-方差分解决定。
正则化的强度取决于你有多少数据
最优正则化强度随样本量变。粗略地说,噪声越大、特征数相对样本数越多,你需要的正则化就越强;样本量涨上去,最优强度就该降下来。同一个方向在其他工具上也成立:数据集越小 dropout 率该越高,权重衰减该随训练集变大而变小。这些是定性关系,具体数值一律靠交叉验证定,别去套一个记得不太准的闭式公式。
这也顺带解释了迁移学习为什么 work:一个在巨大数据集(图像、文本)上预训练过的模型,在小数据集上 fine-tune 时需要的正则化更少,因为预训练本身已经充当了一个很强的正则化器,也就是一个信息量很大的先验。
对量化 ML,你的数据集跟图像或文本比通常很小,所以正则化该激进一些。1 万样本的数据集上用 0.5 的 dropout 是合理的;同样的 dropout 放到 1000 万样本上就是浪费容量。
不过这里要说清楚一件事:正则化是数据的替代品,而且替代得不完美。100 个样本配 10 个特征,正则化有帮助;10 个样本配 10 个特征,多少正则化都救不了你,你需要的是更多数据。正则化能给你的有效样本量提升是有限的,而更多数据给你的是没有上限的。所以当你在「用更多正则化拟合手上的数据」和「去拿更多数据、然后用一个正则化更弱的模型」之间选择时,通常该选后者。
在量化里,「更多数据」常常意味着更长的历史或更高的频率。两条路都有天花板——市场会变,微观结构效应在很高频率下会占主导——但凡有可能,更多数据都是过拟合最干净的修法。
信息准则:AIC 和 BIC
对参数模型还有另一条正则化路线:用闭式惩罚在拟合和复杂度之间做权衡。
其中 是似然, 是参数数量, 是样本量。两者都惩罚复杂度,BIC 在 大时惩罚得更狠。它们的目标其实不同——AIC 瞄准的是样本外预测误差,BIC 瞄准的是某个特定先验下的边际似然——但在嵌套模型之间做选择时,两者通常给出一致的结论。
AIC 和 BIC 在现代 ML 里不算常用(交叉验证占了主导),但在快速模型选择上仍然有用,计量经济学里尤其如此。限制是它们要求模型用最大似然拟合,这对线性和广义线性模型直接可行,对神经网络或 boosting 集成就不好办了。
正则化帮不上忙的四种情况
有些时候,多少正则化都救不了你,而认出这些情况能省下几个月。
信噪比太低是第一种。如果你目标的总体 ,任何模型都找不到可靠信号,正则化只会把你的系数往零缩、让你欠拟合。问题不在正则化,是没东西可找。特征没信息是第二种:如果 500 个特征全是噪声,正则化会把所有系数压到零——这是正确行为,不是过拟合。标签错了是第三种:如果 30% 的训练标签是错的(比如因为你没为某些公司行为做调整),任何模型都学不到真 pattern,而正则化在这里只会帮倒忙。关系非平稳是第四种:如果特征和目标的关系在 2010–2015 稳定、到 2020 已经变了,那么任何在老数据上训的模型在 2020 都不会 work,正则化跟这件事没关系,数据才是问题。
四种情况下正确的反应都一样:去修底层问题——更好的数据、更干净的标签、regime 感知的建模。正则化不是它们的替代品。
「智能」正则化的神话
2010 年代初有过一波关于「智能」正则化的论文:给每个特征学一个正则化强度、训练中自适应调整惩罚、用 meta-learning 选正则化调度。这些方法里的大部分是对特定基准的过拟合。
老实话是,简单正则化(L2、dropout、早停)配上一个选对的强度,跟任何花哨方法效果相当。真正重要的超参就是你已经知道的那几个——学习率、正则化强度、模型容量——用交叉验证选出来。
花哨的正则化方法能给你的提升是边角料级别的;老老实实做验证给你的样本外表现改善是另一个量级。这个对比不是修辞,它直接决定你该把时间花在哪儿:花在验证上。
量化研究员额外要躲的坑
以上都是通用 ML 的内容。量化还有一批在标准 ML 基准上根本不存在的过拟合风险。
发表偏差排第一。已发表的因子是幸存者:你看到了赢家——价值、动量、质量——但看不到那 1000 个不 work 的输家。如果你拿已发表的因子去样本外数据上复现,相当一部分会失败,而这不是因为原研究者错了,是因为你只看到了在原始样本里 work 的那些。
多重检验排第二,机制跟发表偏差是同一个。在历史数据上试 1000 个策略、报最好的那个,它当然在回测上 work——你跑了 1000 次,至少有一个看起来极佳的概率接近 1。Deflated Sharpe Ratio(López de Prado, 2014)就是为这件事存在的:它按试验次数、收益的偏度和峰度、以及试验之间的相关性来调整。这里有个常见的误读要纠正:DSR 输出的是一个概率——在「真技能为零」的零假设下观测到这么高 Sharpe 的可能性——不是一个「打完折的 Sharpe 数值」。所以正确的说法不是「50 个策略里的 Sharpe 2.0 相当于 deflated Sharpe 0.5」,而是「50 次试验之后,一个 Sharpe 2.0 常常连显著都算不上」。标题数字让你拿到这份工,DSR 决定你是不是真赚钱。
如果你要做的是更一般的多重检验修正,标准工具有三个:Bonferroni 把显著性阈值除以试验次数,保守,而且假设检验之间独立;Holm-Bonferroni 没那么保守,序贯地调整阈值;Benjamini-Hochberg(FDR)控制的是错误发现率而不是总族错误率,当你在乎的是「我的发现里有多大比例是假阳性」时通常更合适。对 Sharpe 这个特定的量,Deflated Sharpe Ratio 才是对的修正。
样本内调优排第三:选那些最大化回测 Sharpe 的超参就是过拟合。在你回测上 work 最好的超参不是未来 work 最好的超参,它们只是最贴合你用的那段特定历史时期的超参。
Regime 切换排第四。你的模型学了 2010–2019 的 pattern,2022 年的市场不一样,而模型对此毫不知情。滚动窗口重训有帮助,加 regime 特征(波动率、趋势强度、行业轮动)有帮助,但根本问题——pattern 在变——不会因此消失。
(López de Prado, M., Advances in Financial Machine Learning, 第 7–8 章。ISBN 978-1119482086。)
还有四种泄漏,长得不像 bug
上面那些是过拟合的风险,下面这些是泄漏的通道,它们在别的领域不存在。
幸存者偏差:你的数据集只包括今天还存在的股票,破产或退市的都缺席,而它们的缺席同时扭曲了特征分布和目标分布。修法是用一个包含退市名字的 point-in-time 数据库。大部分免费数据集都有幸存者偏差,用之前先确认。
公司行为:拆股、合并、分拆、分红。不为这些做调整,你的「价格」特征在不同时间点就不是同一个东西,任何有意义的分析都需要一条拆股调整后的价格序列。
报告滞后:基本面数据(盈利、资产负债表)是滞后报出来的。8 月报的 Q2 盈利对应的是 6 月 30 日结束的那个期间;如果你在 6 月就把报告值当作预测收益的特征,你用的是未来。基本面数据前后至少要滞后一个报告期。
指标定义随时间变:很多技术指标和因子定义在历史上改过。如果你用 1980 年代版本的公式回测「标普 500 上的 RSI(14)」,你用的可能不是今天的标准公式。修法是把公式精确写死,在整个回测里始终用同一个。
这四条都不是传统意义上的「bug」——它们是数据的固有特性,需要被小心对待。大部分已发表的量化研究会在其中一条或多条上翻车,所以对任何现成的回测保持怀疑。
一次解剖:过拟合的回测长什么样
为了把上面这些落到实处,走一遍一个虚构但完全真实的例子。研究者叫她 Maya,在试图用 2000 到 2023 年的美股预测 5 日前瞻收益。
第一步,组装数据。Maya 下载 Russell 3000 从 2000 到 2023 的日价,算了 87 个特征:多个 horizon 的动量、价值倍数、技术指标、行业哑变量。目标是 5 日前瞻收益。到这里一切正常。
第二步,train/test 切分。Maya 把数据 70/30 随机切:Train 是 2000–2016 加上 2017–2023 里随机的 30%,Test 是 2017–2023 减去进了 train 的那部分。已经过拟合了——随机切分让未来泄漏进了 train。
第三步,特征选择。Maya 在训练集上算每个特征跟目标的相关性,挑了前 30 个。又一次过拟合——特征选择在训练数据上做,没进 CV 循环。
第四步,模型训练。Maya 训了一个 XGBoost,在训练集上用 5 折交叉验证调超参,试了 200 个学习率、深度、min_child_weight 的组合。边缘过拟合——同一份数据上试了太多次。
第五步,评估。测试 Sharpe 2.8,胜率 57%,信息系数 0.08。Maya 狂喜。
第六步,现实检验。Maya 把模型放进一个 6 个月的 paper trading 账户。实盘 Sharpe 0.4,IC 0.01,胜率 51%。
哪里出错了?每一步都出错了。 随机切分泄漏了未来信息,特征选择用了整个训练集,超参调优烧掉了 200 次试验。报出来的性能过拟合了 5 到 10 倍。而注意 Maya 用的算法本身没有任何问题——XGBoost 是好工具,5 折 CV 是好做法,87 个特征也不多。错的全是流程。
所以修法不是换个算法,是纪律:数据按日期排序,做 walk-forward 切分(Train 2000–2015、Validation 2016–2018、Test 2019–2023),测试集碰一次;在每个 walk-forward 步内部,只在那一步的训练数据上做特征选择;把超参试验数限制在 20 次左右,用贝叶斯优化或随机搜索;部署之后跟踪实盘表现,在滚动基础上更新模型。
这更费事,给出的标题数字也更小。但小数字是真的。
衰减曲线:过拟合会在时间上暴露自己
Maya 那个例子里,实盘六个月就露馅了。这不是巧合——过拟合有一条相当稳定的时间签名,量化研究员会盯着样本外衰减曲线看:模型被 holdout 得越久,表现衰减得多快。
一个粗略的经验参照是这样的:健康模型样本外第 1 年的 Sharpe 大概是样本内的七八成,第 2 年六到八成,第 3 年五到七成,第 5 年三到五成;而过拟合模型第 1 年就掉到三到五成,第 2 年剩一两成,第 3 年接近零。这些区间是启发式的量级参照,不是测出来的常数——具体数字会随策略类型、资产类别和样本期变化,你应该在自己的数据上重新估。
这条曲线有时被叫做「Sharpe 半衰期」:样本外表现掉到样本内一半要多久。健康模型的半衰期以年计,过拟合模型的半衰期以月计。
它也解释了为什么在承诺资金之前先跑 6 到 12 个月的 live paper trading 是标配——衰减曲线在那段时间里会展现出完整形状。回测好看但半衰期只有 3 个月的策略,会在这段时间里自己露馅,而这比任何事后归因都便宜。
生产环境是怎么防的
在生产里,过拟合不是靠某一个技术挡住的,是靠一套流程:
- Holdout 测试集在时间上真正样本外,不是随机切出来的。
- Walk-forward 重训按固定节奏跑(每周、每月、每季度)。
- Champion-challenger 框架:新模型跟现有模型一起部署,验证出超额表现之后才升级。
- Deflated 表现指标,把试过的策略数算进去。
- 实盘 paper trading跑一个固定评估期,然后才承诺资金。
- 仓位管理按模型置信度缩放,而这个置信度本身要被诚实地估计。
这六条加起来基本就是「生产纪律」的全部内容,而它们全在防同一件事。花哨的模型只是这套系统里很小的一块。纪律才是系统。
上线前的清单
在你能信一个回测之前:
- 把数据切成 train / validation / test(60/20/20)
- 在 train 上训练,在 validation 上调,在 test 上评估——恰好一次
- 用 walk-forward 分析(时间序列不要随机切)
- 算 Deflated Sharpe Ratio(对多重检验做调整)
- 样本外 Sharpe 应该 > 样本内 Sharpe 的 50%,理想 > 70%
- 如果样本外 < 样本内的 30%,你过拟合了
- 任何特征、超参、训练窗口变了之后重新验证
- 如果你碰测试集超过一次,它就不再是测试集了
(Bishop, Pattern Recognition and Machine Learning, 第 3、5 章。ISBN 978-0387310732。)
最后:这不完全是个技术问题
大多数 ML 教程把过拟合当成一个有技术解法的技术问题——正则化更狠、拿更多数据、用交叉验证。这些说法都对,但不完整。
在量化研究里,过拟合同时是个心理学问题。研究者想要这个策略 work。于是他会合理化「就再碰一次」测试集;会加上那些上个季度碰巧 work 的特征;会一直训练到指标看起来对了为止。老老实实验证的纪律,需要每天跟这些冲动打一架,而且没有任何技术手段能替你打。
这也是为什么量化里的”验证”跟学术 ML 里的不是一个词。学术 ML 里验证的意思是「在同分布的 holdout 集上测一下」;量化里验证的意思是「估计实盘交易下的表现,把 regime 变化、交易成本、市场冲击、容量约束全算进去」。前者是必要条件,不是充分条件。后者还要再加一句:估计回测和实盘之间的差距,按比例把回测 Sharpe 折下来,只信那些在多个样本外时期都活下来的东西。
这是一道高得多的杠,大部分研究过不了。过得了的研究稀有,也因此值钱。而解药从来不是更聪明的算法——是愿意放弃那些没能通过诚实验证的想法。这是个人技能,不是技术技能,而它恰好是这份工作里最难教的部分。
(Hastie, Tibshirani, Friedman, The Elements of Statistical Learning, 第 2 版, 第 3、7 章。ISBN 978-0387848570。)
(López de Prado, M., Advances in Financial Machine Learning, 第 7–8 章。ISBN 978-1119482086。)
参考文献
- Hastie, Tibshirani, Friedman, The Elements of Statistical Learning, 第 2 版, 第 3、7 章。ISBN 978-0387848570。
- Goodfellow, I., Bengio, Y., Courville, A., Deep Learning, 第 7 章。ISBN 978-0262035613。
- Bishop, C. M., Pattern Recognition and Machine Learning, 第 3、5 章。ISBN 978-0387310732。
- López de Prado, M., Advances in Financial Machine Learning, 第 7–8 章。ISBN 978-1119482086。
- López de Prado, M. (2014). “The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting and Non-Normality.” 完整推导在 AFML §14.7.3。