auroa99
发布于 2025-06-29 / 69 阅读
0

量化神作:《金融机器学习》核心思想总结

目录

  1. 引言. 作者的写作目的:为何金融机器学习如此特殊?
  2. 数据分析:一切有效策略的基石
  3. 模型构建:打造金融专用的稳健预测机
  4. 回测与风险:量化过拟合这只“房间里的大象”
  5. 有用的金融特征:挖掘阿尔法的源泉
  6. 总结:从“西西弗斯范式”到“元策略范式”的升华

引言. 作者的写作目的:为何金融机器学习如此特殊?

在本书的开篇,作者就一针见血地指出了金融机器学习项目失败的根本原因:将金融问题错误地等同于其他领域的机器学习问题

他批判了两种普遍存在的错误范式:

  • 西西弗斯范式(The Sisyphus Paradigm):这是传统量化团队的典型写照。每个研究员(Quant)都像一个孤胆英雄,各自为战,试图独立地从数据、模型到回测,完整地开发一个策略。这就像希腊神话中不断推着巨石上山的西西弗斯,工作重复、效率低下,且成果难以复用和协作。最终,整个团队的产出仅仅是少数几个“幸存”策略的总和,而大量的重复劳动被浪费。

  • 直接套用范式:许多来自互联网等领域的机器学习专家进入金融界后,习惯性地将图像识别、自然语言处理等领域的SOTA(State-of-the-Art)模型直接应用于金融数据,却发现效果奇差。他们忽视了金融数据独有的“劣根性”:

    • 极低的信噪比:金融市场充满了噪音,真实的信号极其微弱。
    • 非平稳性:市场结构和规律会随时间改变(即结构突变)。
    • 非独立同分布:金融时间序列的样本之间存在高度相关性,尤其是标签的重叠问题。

本书的写作目的,正是要打破这些错误认知,提出一套全新的、工业化的研究框架——元策略范式(The Meta-Strategy Paradigm)

graph TD subgraph "元策略范式 (Meta-Strategy Paradigm) - 工业化研究工厂" A["数据管理(Data Curators)"] --> B["特征分析(Feature Analysts)"]; B --> C["策略研发(Strategists)"]; C --> D["回测评估(Backtesters)"]; D --> E["部署与执行(Deployment Team)"]; E --> F["投资组合监控(Portfolio Oversight)"]; end style A fill:#f9f,stroke:#333,stroke-width:2px style B fill:#ccf,stroke:#333,stroke-width:2px style C fill:#9cf,stroke:#333,stroke-width:2px style D fill:#f99,stroke:#333,stroke-width:2px style E fill:#9c9,stroke:#333,stroke-width:2px style F fill:#fc9,stroke:#333,stroke-width:2px
  • 数据管理员:负责数据的收集、清洗、存储和分发。
  • 特征分析师:负责从原始数据中提取有预测能力的信号(特征),并建立特征库。
  • 策略研究员:利用特征库中的特征,构建投资理论和策略原型。
  • 回测工程师:在严格的框架下评估策略的盈利能力和风险,特别是过拟合的风险。
  • 部署团队:将策略代码优化并整合到生产线中。
  • 投资组合监控:对上线策略进行全生命周期的管理,包括分配、再平衡和最终的退役。

核心思想:强调专业分工协作,将策略研发过程分解为流水线上的不同工序,每个环节的专家专注于自己的领域,通过团队协作,实现规模化、可预测的策略发现,共同构建一个能够大规模、可持续地生产有效策略的“工厂”。这本书的结构,正是围绕这个“工厂”的各个生产环节展开的。


1. 数据分析:一切有效策略的基石

本书在数据处理上花费了大量笔墨,因为这是整个框架的基石。错误的数据处理方式,再先进的模型也无力回天。

1.1. 金融数据结构:告别低效的时间吧!

  • 问题:金融市场的信息流不是按固定的时间间隔(如每分钟、每小时)均匀分布的。在开盘和收盘时段,信息密度极高;而在午休时段,市场则相对平静。传统的时间K线(Time Bars),即按固定时间采样数据,会导致在低活跃度时段过采样(引入大量噪音),在高活跃度时段欠采样(丢失大量信息)。这使得时间序列的统计特性(如波动率)非常不稳定。

  • 解决方案:使用信息驱动K线(Information-Driven Bars)。其核心思想是:当市场信息流动加快时,我们应该更频繁地采样;反之则减少采样频率。

    • 成交笔数K线(Tick Bars):每当成交达到一定笔数(如1000笔)时,形成一个Bar。
    • 成交量K线(Volume Bars):每当成交量达到一定数量(如1000手)时,形成一个Bar。
    • 成交额K线(Dollar Bars):每当成交额达到一定金额(如100万美元)时,形成一个Bar。这是本书较为推荐的一种,因为它同时考虑了成交量和价格的变化,使得每个Bar所包含的“市场价值”相对恒定。

通过这种方式采样得到的数据,其收益率分布更接近正态分布,波动率也更加平稳,为后续的建模打下了坚实的基础。

1.2 三重屏障标签法(The Triple-Barrier Method)

问题所在

传统金融文献中,最常见的标签方法是固定时间窗法(Fixed-Time Horizon Method)。即,对于时刻 ​t 的特征,我们用未来 ​t+h 时刻的收益率 ​r\_{t, t+h} 来打标签。例如,如果 ​r\_{t, t+h} > \tau,标签为1(买入);如果 ​r\_{t, t-h} < -\tau,标签为-1(卖出);否则为0。

这种方法的致命缺陷在于它完全脱离了实际交易。任何一个真实的交易策略都包含止盈和止损逻辑。一个策略可能长期看是盈利的,但在短期内可能已经触及止损而被平仓。固定时间窗法会错误地将这种已经失败的交易路径标记为成功,从而给模型提供错误的学习信号。

三重屏障标签

三重屏障法模拟了真实的交易决策过程,它为每一个样本(潜在的交易机会)设置了三个退出关卡:

  1. 止盈屏障(Profit-Taking Barrier):一个向上的水平线,当价格触及时,平仓获利。
  2. 止损屏障(Stop-Loss Barrier):一个向下的水平线,当价格触及时,平仓止损。
  3. 垂直屏障(Time Barrier):一个垂直于时间轴的线,代表最长持仓期限。

标签的生成逻辑是:以最先触碰到的那个关卡为准。

  • 如果价格首先触及止盈线,标签为 +1
  • 如果价格首先触及止损线,标签为 -1
  • 如果在最长持仓期内,价格均未触及水平关卡,则当时间到达垂直关卡时,根据此时的收益率符号来标记(+1-1),或者直接标记为 0
graph TD subgraph "三重关卡标签法决策流程" A("t_0: 产生交易信号,入场") --> B{"价格在[t_0, t_1]内演化"}; B -- "价格上涨" --> C{"触及止盈线?"}; B -- "价格下跌" --> D{"触及止损线?"}; B -- "时间流逝" --> E{"到达最长持仓时间t_1?"}; C -- "是" --> F["<br><b>标签: +1</b><br>平仓离场"]; D -- "是" --> G["<br><b>标签: -1</b><br>平仓离场"]; E -- "是" --> H["根据 sign(r_t1) <br><b>标签: +1 或 -1</b><br>平仓离场"]; C -- "否" --> B; D -- "否" --> B; end

更重要的是,这两个水平关卡(止盈、止损)不应该是固定的,而应该是动态的,例如,可以设置为近期波动率的某个倍数。这使得我们的止盈止损策略能够适应市场环境的变化,这在逻辑上更为严谨。

1.3 元标签(Meta-Labeling)

问题所在

在量化投资中,我们经常面临这样的场景:

  • 我们有一个基础策略(例如,一个基于财报的价值投资模型,或者一个技术分析指标),它能告诉我们应该买什么卖什么(预测方向,Side)。
  • 但是,我们对这个策略的胜率时机没有十足的把握。直接按照这个基础策略交易,可能会因为过多的错误信号而亏损。

我们希望利用机器学习来增强这个基础策略,而不是完全取代它。

本书的解决方案

元标签是一个天才般的两阶段建模框架,它将预测任务解耦:

  1. 第一阶段:基础模型预测方向(Side)

    • 这个模型可以是任何东西:一个简单的移动平均线交叉策略、一个复杂的计量经济学模型,甚至是一位明星基金经理的主观判断。
    • 它的输出是交易的方向,例如 +1 (做多) 或 -1 (做空)。
  2. 第二阶段:元模型(Meta-Model)决定是否下注(Size)

    • 我们构建一个二元分类的机器学习模型。
    • 训练目标:预测基础模型在第一阶段的预测是否正确
    • 标签
      • 如果基础模型预测正确(例如,预测做多,后来确实涨了并触及止盈),则元标签为 1
      • 如果基础模型预测错误(例如,预测做多,结果跌了并触及止损),则元标签为 0
    • 模型输出:元模型会输出一个概率 ​P(label=1)。这个概率可以被用来决定投注的大小。概率越高,说明我们对基础模型的这次预测越有信心,投注规模就越大。

元标签的深刻意义在于:

  • 关注于提高精确率(Precision):基础模型可能召回率(Recall)很高(找到了很多机会),但精确率低(很多是假信号)。元模型的任务就是过滤掉这些假信号,只在真正高胜率的机会上下注。
  • 人机结合的完美范式:它为融合基本面分析师的“智慧”和机器的“智能”提供了一条清晰的路径。分析师提供方向(Side),机器学习模型决定时机和规模(Size)。
  • 降低模型复杂度:预测“对或错”的二分类问题,远比直接预测“涨或跌”的三分类问题要简单,这大大降低了模型的过拟合风险。

1.4 样本权重与序列自助法:驯服“非独立同分布”这头猛兽

问题所在

金融数据最大的特点之一就是样本不独立。在使用三重关卡法时,由于持仓时间的存在,不同样本的标签期会相互重叠。例如,样本A的收益依赖于第1-10天的数据,样本B的收益依赖于第3-15天的数据。这意味着第3-10天的数据同时影响了A和B的标签。

如果直接将这些数据喂给模型,那些被高频重用的数据点(通常是市场剧烈波动的时期)会被模型过度学习,导致模型在这些特定模式上表现虚高,而在其他模式上表现很差。

本书的解决方案

本书提出了一套精密的流程来解决这个问题:

  1. 计算并发性(Concurrency):对于时间轴上的每一个点,计算有多少个样本的标签期覆盖了这一点。这个数量就是该时间点的并发数 ​c\_t
  2. 计算样本唯一性(Uniqueness):对于一个样本 ​i,其唯一性 ​\bar{u}\_i 是其整个持仓期间所有时间点唯一性 ​u\_t = 1/c\_t 的平均值。这个值反映了该样本信息的“稀有”程度。
  3. 构建样本权重(Sample Weights):在训练模型时,不能再简单地认为每个样本同等重要。样本的权重应该是其唯一性重要性的函数。本书建议使用归因收益率(即,将样本的绝对收益率除以其并发性后求和)作为权重,这样既考虑了样本的独立性,也考虑了其盈亏的重要性。
  4. 序列自助法(Sequential Bootstrap):这是对随机森林等Bagging方法的重大改进。
    • 传统Bootstrap:有放回地随机抽样。在金融数据上,这会大概率抽到大量重叠的样本,使得森林中的每棵树都非常相似,失去了集成的效果。
    • 序列自助法:这是一种无放回的、概率不均等的抽样方法。它逐个抽取样本,每抽取一个样本后,会动态降低与之重叠度高的其他样本在下一次被抽中的概率。这样可以确保生成的每个训练子集都尽可能地多样化和独立。

1.5 分数阶差分:在记忆与平稳间的“极限拉扯”

问题所在

几乎所有的统计和机器学习模型都基于一个前提:输入数据是平稳的(即其统计特性如均值、方差不随时间改变)。

  • 价格序列:具有长程记忆性,但非平稳。
  • 收益率序列(一阶差分):是平稳的,但记忆性几乎被完全抹除。

在平稳性和记忆性之间,似乎存在一个不可调和的矛盾。而记忆性,恰恰是均值回归等策略的生命线。

本书的解决方案

**分数阶差分(Fractional Differentiation)**提供了一个优雅的解决方案。它允许我们进行非整数阶的差分。

其核心思想是:寻找一个最小的差分阶数 d in [0, 1],使得差分后的序列恰好通过平稳性检验(如ADF检验),同时最大程度地保留原始序列的记忆。

一个整数阶差分 ​d=1 的权重序列是 [1, -1, 0, 0, ...],它只考虑了当前和前一个值。而一个分数阶差分,例如 ​d=0.5,其权重序列会缓慢衰减 [1, -0.5, -0.125, -0.0625, ...],这意味着它保留了对过去很长一段时间的记忆。

通过这种方式处理后的特征,既是平稳的,又富含记忆,是输入给机器学习模型的理想形态。


2. 模型构建:打造金融专用的稳健预测机

2.1 金融场景下的集成方法

本书推崇Bagging方法(如随机森林),因为它主要解决方差问题(即过拟合)。在金融这种低信噪比的环境中,模型非常容易被噪音迷惑而产生过拟合,因此降低方差是首要任务。相比之下,Boosting方法主要解决偏差问题(欠拟合),但它通过串行学习来不断修正错误,这在金融领域更容易导致对噪音的过拟合。

为了让随机森林在金融数据上更稳健,他建议:

  • 使用前面提到的序列自助法和样本权重。
  • 设置 max_features=1:在构建每棵树的每个节点时,只随机考虑一个特征。这可以强制树之间的差异性,防止某些强特征被所有树反复使用。
  • 设置 min_weight_fraction_leaf:设置一个较高的叶节点最小权重样本比例(如5%),这是一种有效的正则化手段,可以防止树生长得过深,从而避免对个别样本的过拟合。

2.2 净化-隔离K折交叉验证(Purged and Embargoed K-Fold CV)

问题所在

标准的K折交叉验证是金融机器学习的“头号杀手”。由于它随机划分数据,导致训练集和测试集之间存在严重的信息泄露。

  • 泄露源1:标签重叠。样本A(在训练集)的标签期是[t1, t10],样本B(在测试集)的标签期是[t5, t15]。模型在训练A时,实际上已经利用了[t5, t10]这段属于测试样本B未来的信息。
  • 泄露源2:特征本身。即使标签不重叠,如果一个特征是基于历史数据计算的(如移动平均线),测试集的最后一个点会影响到紧随其后的训练集的第一个点的特征值。

本书的解决方案

sequenceDiagram participant Train1 as 训练集1 participant Test as 测试集 participant Embargo as 隔离期 participant Train2 as 训练集2 rect rgb(255, 230, 230) note over Train1, Test: 净化(Purging) Train1->>Test: 训练集1中,所有标签期与测试集标签期重叠的样本被移除 end rect rgb(230, 230, 255) note over Test, Embargo: 隔离(Embargoing) Test->>Embargo: 在测试集结束后,设置一个h个bar的隔离期 Embargo->>Train2: 隔离期内的所有数据点都不能用于训练 end Note right of Train2: 最终的训练集 = 净化后的Train1 + 净化后的Train2
  1. 净化(Purging):对于每一个测试样本,检查其标签期。然后,遍历所有训练样本,如果某个训练样本的标签期与该测试样本的标签期有任何交集,就将这个训练样本从训练集中剔除
  2. 隔离(Embargoing):在整个测试集的时间段结束后,设定一个固定的时间窗口(例如,占总数据长度的1%)。这个窗口内的所有数据点既不用于测试,也不用于训练。这就像在测试集和未来的训练集之间建立了一条“护城河”,彻底切断了信息泄露的路径。

只有通过这种严格的交叉验证得到的结果,才是对模型泛化能力相对可靠的评估。

2.3 特征重要性:从“炼丹”到“科学”的核心

本书强调一个核心观点:不要用回测来指导你的研究,而要用特征重要性。

问题所在

传统的量化研究流程是:有一个想法 -> 构建策略 -> 回测 -> 发现不好 -> 调整参数/模型 -> 再回测... 这个循环本质上就是在对历史数据进行暴力搜索,最终找到的“圣杯”几乎100%是过拟合的产物。

本书的解决方案

科学的流程应该是:数据 -> 特征工程 -> 特征重要性分析 -> 理解经济学逻辑 -> 构建策略 -> 回测验证。

他详细介绍了三种主要的特征重要性评估方法:

  • MDI (Mean Decrease Impurity)

    • 原理:基于树模型,计算一个特征平均在所有树中降低了多少不纯度(Gini或Entropy)。
    • 优缺点:计算快,但仅适用于树模型,是样本内(In-Sample)度量,且在处理相关特征时会稀释重要性。
  • MDA (Mean Decrease Accuracy)

    • 原理:模型无关的样本外(Out-of-Sample)方法。在通过交叉验证得到一个基准性能后,将某一特征列的数据随机打乱,再次评估模型性能。性能下降的幅度就代表了这个特征的重要性。
    • 优缺点:最可靠、最通用。但计算量大,且同样会受共线性影响(打乱一个特征,其相关特征可以部分替代它的作用,从而低估其重要性)。
  • SFI (Single Feature Importance)

    • 原理:每次只用一个特征来训练模型,并评估其OOS性能。
    • 优缺点:完全不受共线性影响。但它忽略了特征之间的交互作用,一个单独看没用但在组合中有用的特征会被误判。

最佳实践

  1. 先对特征做正交化处理(如PCA)。
  2. 在正交特征上运行MDA或MDI,得到特征重要性排名。
  3. 比较这个排名和PCA给出的特征排名(由特征值大小决定)。如果两者高度相关,说明机器学习模型发现的模式与数据内在的结构是一致的,这极大地增强了我们对模型没有过拟合的信心。

3. 回测与风险:量化过拟合这只“房间里的大象”

3.1 投注大小(Bet Sizing)

模型给出的概率需要被转化为实际的头寸大小。一个简单而有效的方法是利用正态分布的累积分布函数(CDF)。

  • 逻辑:将模型预测的概率 ​p 转化为一个 ​z 值,然后通过 ​m = 2 \cdot Z(z) - 1 计算出投注大小 m in [-1, 1]。
  • 效果:当 ​p=0.5(完全不确定)时,​z=0​m=0(不下注)。当 ​p \to 1(极度确定)时,​z \to \infty​m \to 1(满仓)。这符合我们的直觉:信心越足,仓位越重。

3.2 回测过拟合(Backtest Overfitting)

问题所在

任何单一的回测结果都是有偏的。一个夏普率为2.5的回测,可能是策略牛逼,也可能只是因为你试了1000次,运气好碰上的。这就是选择性偏差,也是回测过拟合的核心。

本书的解决方案

  1. 组合净化交叉验证(CPCV):如前所述,CPCV通过生成多条回测路径,得到一个夏普率的分布。这个分布的均值和方差,远比单一的回测结果更能反映策略的真实水平。

  2. 回测上合成数据(Backtesting on Synthetic Data)

    • 首先,从真实历史数据中估计出其底层的随机过程参数(例如,一个Ornstein-Uhlenbeck过程的均值回归速度 ​\theta、波动率 ​\sigma 等)。
    • 然后,利用这些参数生成成千上万条合成的价格路径
    • 在这些合成数据上测试你的策略。
    • 目的:如果你的策略只在真实历史这条路径上表现好,而在大量统计特性相同的合成路径上表现平平,那么你的策略几乎可以肯定是过拟合了。一个稳健的策略,应该在大量的合成数据上都能表现出统计显著的盈利能力。

3.3 回测统计量:超越夏普率的认知

  • 问题:如何量化一个策略的回测结果是“凭实力”还是“靠运气”?

  • 解决方案

    • 回撤相关统计量:计算最大回撤(Maximum Drawdown)水下时间(Time under Water),这些指标比单一的收益率更能反映策略的风险。
    • 概率夏普率(Probabilistic Sharpe Ratio, PSR):计算观测到的夏普率超过某个基准(如0)的概率,考虑了收益率的偏度和峰度。
    • 紧缩夏普率(Deflated Sharpe Ratio, DSR):这是PSR的升级版,它进一步考虑了回测的次数。DSR回答了这样一个终极问题:“在进行了N次策略尝试后,我们观测到的这个最高夏普率,有多大可能性只是一个统计假象?” 它是衡量回测过拟合风险的“照妖镜”。

4. 有用的金融特征:挖掘阿尔法的源泉

4.1 结构突变(Structural Breaks)

市场在不同时期遵循不同的规律(Regime)。识别这些政权更迭的时刻至关重要。

  • 方法:使用SADF(Supremum Augmented Dickey-Fuller)检验。它可以在时间序列上滚动地检测是否存在“爆炸性”行为(即泡沫)。
  • 应用:SADF检验的输出序列本身就是一个强大的特征。当SADF值飙升时,可能预示着一个趋势的形成或加强。

4.2 熵与微观结构(Entropy & Microstructure)

  • 熵特征

    • 信息熵度量了价格序列的无序性不可预测性
    • 低熵市场意味着存在较强的模式(如趋势或均值回归),市场效率较低,交易机会更多。
    • 高熵市场则接近随机游走,难以预测。
    • 计算滚动窗口内的熵,可以作为判断市场状态的特征。
  • 微观结构特征:这些特征直接从订单簿数据中提取,是高频和中频策略的“弹药库”。

    • VPIN:衡量市场中知情交易的比例,是流动性枯竭和闪崩的有效预警指标。
    • Kyle's & Amihud's Lambda:衡量价格冲击和流动性成本。
    • 订单簿失衡、订单流相关性等,都是揭示市场真实供需和参与者意图的关键信息。

5. 总结:从“西西弗斯范式”到“元策略范式”的升华

《金融机器学习》这本书的伟大之处在于,它提供了一套完整、严谨且经过实战检验的方法论。它教会我们的不仅仅是几个模型或技巧,而是一种全新的思维方式:

  1. 正视金融数据的独特性:放弃直接套用,为金融场景量身定制解决方案。
  2. 工业化的研究流程:用团队协作和专业分工的“元策略范式”取代单打独斗的“西西弗斯范式”。
  3. 以特征为核心:将研究重心从无尽的回测循环转移到对有效特征的深度挖掘和理解上。
  4. 科学地管理过拟合:通过净化交叉验证、组合回测、紧缩夏普率等工具,系统性地对抗回测过拟合。