当贝叶斯模型固守旧序,如何对抗市场的非遍历性?
很多量化研究员的一天,拆开来看,大致是几道工序的串联。
上午跑回归调因子权重,
下午估协方差矩阵,
晚上做组合优化。
每一步都在用新数据更新一套事先定好的判断——哪些因子有效、资产之间怎么联动、市场分几种状态。这些东西,在数据进来之前就已经划定了边界。
这个流程顺畅与否,基本决定了策略的日常表现。顺的时候,一切尽在掌握。但问题就藏在“顺”里。
我们见过不止一次:策略净值突然下跌,而回测上的指标,包括信息系数、预测误差的自相关等,都在正常范围内。
但其实,我们监控的是一套在旧世界里已经自洽、但新世界里根本不成立的东西。它运转得越正常,问题反而越致命。

这套日常流程,说到底就是一套贝叶斯更新。也就是,根据新的数据,将先验概率更新为后验概率的过程。
那么当模型开始“正常地犯错”时,我们怎么才能更早察觉到?而不是等净值曲线跌到眼前才意识到。
预设的边界
整个贝叶斯管道能运转,依赖一个默认前提:我们预设的参数空间是完备、正确的。
贝叶斯更新做的事,本质上是在给定的可能性集合里重新分配概率。但它不问:集合完整吗?这种默认设定,就藏在我们日常的操作里。
1. 因子库
每个团队都维护一个因子字典,少则几百、多则上千列。当因子失效时,我们的第一反应往往是重新做 IC 筛选。但有没有另一种可能:失效的不是那个因子,而是整个因子库能覆盖的“解释空间”?
当市场定价逻辑发生结构性切换,真正驱动收益的新逻辑可能根本不在库里。就好比在一套不包含正确答案的题库里反复抽题,怎么抽都抽不对。
对此,贝叶斯理论中有一个基本结论:模型设定正确时,后验会逐渐逼近真实参数。但如果模型是错的,后验仍然会收敛——只是收敛到“最接近真实分布的错误参数”。也就是说,模型能在它已知的世界里找一个“最好”的答案,但它没能力告诉我们答案是否正确。
在旧因子库里挑最优,数学上收敛,实盘中没有意义。回测报告却常把这样的模型判定为优秀。

2. 协方差矩阵
在风险模型里,最日常的一件事就是用历史数据估算不同资产之间的波动同步程度,然后做“收缩”——把估算结果往一个长期平均水平拉一拉,避免被短期噪声带偏。Ledoit-Wolf 收缩估计是经典做法,它的核心思想很直观:把估计量往一个结构简单、偏差较大但方差很小的目标矩阵拉一把。
这个操作其实就是贝叶斯更新。把长期均值当作先验,历史数据当作新信息,得到收缩后的后验估计。在平稳市场里,这是偏差和方差之间一个有效的折中。
但收缩有一个暗面。当市场结构断裂,当初被当作目标的长期均值就不再适用。每一次收缩,都是在把新数据往旧结构里挤压。
收缩越强,模型对新结构的适应能力越低。它逐渐不再是中性操作,而变成了持续注入系统性偏见的过程。
如果使用的收缩强度是固定的,那么在结构断裂时就等于用旧世界的平均值腐蚀新世界的信号。对此,可以考虑让收缩强度随某种断裂信号动态调整。比如当后面会提到的“状态归属熵”升高时,自动降低对长期先验的依赖。

3. 市场状态的数量
很多模型会预设市场存在几种不同的“状态”:平静期、趋势期、高波动期。然后根据当前数据判断处于哪个状态。
这类模型叫“机制转换模型”,隐马尔可夫模型就是常见例子。这类模型通常都要求在建模时就定好状态的数量:三个、五个、十个?可以用数据去挑最优状态。无论如何,我们必须在数据进来之前告诉模型“世界有几种形态”。这个设定太自然了,但很少有人追问:如果未来出现一种从未被命名的市场形态呢?

4. 边界之内
贝叶斯更新本身没问题,问题是我们常常忘了它只能在预先划定的边界里运转。上面说的三个操作,每个都有用,但也各自隐含了对市场边界的某种声明。
当市场结构慢慢漂移时,这些边界会从“合理简化”变成“硬性约束”。而当市场发生断裂,它们甚至会系统性地扭曲后验估计。
贝叶斯不用扔。但我们要在它的基础上加一道防线——盯着预设的边界,看它还在不在。
回测的根基,究竟有多脆?
回测给我们信心,这背后有一个默认——过去发生的事,能代表未来可能发生的。
这个默认在统计学里叫遍历性。一个过程是遍历的,意味着时间足够长时,一条历史路径能经历所有可能的状态,时间平均会等于理论平均。几乎所有统计收敛的证明,包括贝叶斯后验收敛,都依赖这个性质。
但市场真的是遍历的吗?一个朴素的看法是,当市场不断有新的参与者、新的规则、新的工具进入时,它的生成过程本身就不稳定。
历史路径只是恰好发生的那一条,不是所有可能路径的全貌。更麻烦的是,当系统切换到新的生成过程,旧数据对新过程没有任何信息量,因为样本来自一个已不存在的世界。
把这个道理放到回测上,结论有些扎心。我们开发了一个策略,三年回测夏普不错,上线不久直接腰斩。风控报告可能说是“遭遇了极小概率事件”。
但如果承认这是一次结构性断裂,这件事在旧过程的概率不是很小,而是零。因为旧过程的“瓮”里根本没有生成这个事件的机制。回测是从历史瓮里抽签,而实盘的瓮可能已经不是同一个。
古典贝叶斯面对这种情况的反应,才是最让人不安的——它并不会预警。参数照常更新,因子权重也照常调整,所有风控指标都显示正常。但它给出的最优配置,其实是旧世界对扭曲信号的勉强拟合罢了。收敛不需要平稳性——数据越多,它就越坚定地相信自己找到了“最优”答案。收敛越坚定,信念就越集中,仓位就越重,而断裂时伤得也越深。

这种事,业内其实常有发生。回测了很久,上线初期净值也走得挺好,但后面短时间内亏了很多。事后复盘,发现参数没变、因子权重也没漂移,但市场好像就是不买账了。
有人可能归咎为运气不好,或市场风格变了。但真正值得追问的是:市场具有遍历性吗?
如果过去的样本路径覆盖不了未来可能的状态,那么过去赚钱的预期,就不能当作未来赚钱的保证。
模型不可信,那怎么下注?
非遍历环境下,单一贝叶斯模型的收敛不可信。模型可能出错,但持仓决策无法回避。那么,在模型本身可能出错的前提下,如何下注才能控制下行风险?
Hansen和Sargent(2001)的鲁棒控制框架,可以帮我们系统思考这个问题。它不假设我们能完全信任参考模型,并为模型可能的偏差留出余地。
具体来说,我们手头有一个参考模型,就是贝叶斯后验给出的预测分布。我们在它周围定义一个“替代模型集合”,用“相对熵”圈定一个半径——也就是留一个误差带,里面包含了各种可能漏掉的分布形态。然后寻找一个策略,使得在最坏的替代模型下,期望收益仍然最高。
这实际上是在一个被悲观扭曲过的概率分布上做普通的收益最大化。我们可以用一个参数控制扭曲的力度。设成零,就完全信任参考模型;参数调大,意味着越来越担心模型可能出错,仓位会自动从集中转向分散。这样,对模型的怀疑就可以写进仓位方程,并非留在事后风控的讨论中。
假设模型预测某资产明天涨 2%,波动率 10%,在给定的风险厌恶系数下最优仓位是 20%。如果加一个鲁棒性调整——相当于对预测收益打个八折,其他不变,新仓位可能降到 16%。折扣越大,仓位降得越多。这样把“对预测有多不自信”变成了一个连续可调的量。
值得注意的是,组合优化中的风险厌恶系数,调节的是对已知波动的容忍度。而我们这里说的,是另一种不确定性——收益分布的结构本身都可能已经变了。两者不在同一个层面上。在具体实现中,后者通常体现为对预测均值的折扣因子。

1921年,经济学家 Knight 做了一个深刻的区分。有些不知道叫“风险”,我们能列出所有可能的结果,还能算出概率;还有一种不知道,后来被称为“奈特不确定性”——连结果的范围都列不全,更别提概率了。量化模型习惯把一切波动都当作风险来处理,但市场断裂迎面撞上的往往是后者。
实际实现中,对预测均值的折扣因子就是处理这种奈特不确定性的一种方式。
当然,这个框架也有它的局限性。替代模型集合从哪来?再宽的误差带,也是围绕着参考模型划的。如果真实世界是一个全新的生成结构——一种从未设想过的形态,那么误差带再宽也够不着。因此,鲁棒控制能帮助我们防范“想到过的错误”,但对“根本没想到的事情”还是能力有限。
一个可行的思路是,回看历史上几次模型明显失效的断裂点,判断它们是否落在我们设定的熵球半径之内。如果没有,那就把半径扩大,直到把这些断裂囊括进来。我们不需要提前预知未来断裂的具体形态,但至少可以确保模型对过去曾发生过的断裂方式是有所准备的。
此外,还可以在仓位上加一道“鲁棒折扣因子”,根据最近一个季度的预测误差波动情况手动调节。
让模型认出没见过的东西
我们说每个框架都在做一件事:给自己预设一个边界。古典贝叶斯预设了参数空间,鲁棒控制预设了替代模型的集合,传统状态切换模型预设了状态的数量。它们共享同一类假设——状态的种类和数量,在观测到来之前就已经确定了。
能不能把状态数量也交给数据?贝叶斯非参数方法就是这个思路。其核心思想是,让模型自己长出状态来。不用事先定好有几个,只需要定义“一个新状态在什么条件下会被创造出来”,其余的交给数据。
这里有一类具体的模型叫“层次狄利克雷过程隐马尔可夫模型”(HDP-HMM)。它的数学机制允许系统在理论上无限多个隐状态间进行概率性切换,状态数量可由数据自适应推断。

假如一开始给市场设了三个状态:低波动、高波动和危机。现在突然来了一批和这三个状态都不像的数据。如果是固定状态数的模型,会强行把它塞进最接近的那个状态,把不匹配的部分当作随机误差。它不知道自己在污染参数估计。
如果我们去掉“只有三个状态”的限制。当一条数据与所有现有状态差异过大时,它不会被强行分配,而是自动触发“新状态”。这个新状态一开始只有极少的数据点支撑,所以估计很不确定。如果接下来持续有新数据落进这个模式,新状态的概率就会上升,它的参数也逐渐清晰;要是只是一次孤立的跳点,这个新状态很快会消失。
这个框架可以回答一个认知问题:当市场出现的并非属于“预期外的波动”,而是“超出类别的存在”时,我们的系统是强行归类,还是能承认自己遇到了不认识的东西?
当然,这套方法有一定工程成本。模型推断的计算量较大,如果逐日调仓,运行起来可能较吃力。同时,新状态的判定也存在灵敏度的权衡。阈值设低了,容易把正常波动误判为新结构;高了,又可能漏掉真正的断裂。实践中,可以通过历史回溯来校准。
值得一试的方法
上面提到的方法各有侧重,有的偏理论,有的偏工程。还有一些方法,现在就能上手。
1. 用对抗性场景标定鲁棒半径
与其列一堆压力场景,不如直接问:什么样的数据分布变化,会让策略夏普率降到某个预设阈值?测量这个变化与参考模型之间的“距离”,就是鲁棒半径。
我们可以用块状 bootstrap 打乱收益率序列的时间结构,或者对因子值添加不同幅度的噪声,观察夏普率的下降速度。比如当因子值的信噪比被随机扰动降低 20% 时,夏普率腰斩,那这个 20% 的扰动幅度就可以作为鲁棒半径的初始参考。如果实盘中数据分布的变化幅度逼近这个值,就不是参数微调能解决的,而是需要在结构上重审策略。

2. 在监控面板上加一个“状态归属确定性”指标
传统监控盯着预测误差,但预测误差可能只是参数漂移。真正危险的是,误差没怎么变,但数据已经系统性地不属于任何一个现有状态。
除了贝叶斯非参数,还有一个更轻量级的做法。如果我们已经在用隐马尔可夫模型或类似的状态分类器,那么每天都能算出当前状态归属概率的熵值。这个熵值可以衡量我们对“现在是什么状态”有多确定。当熵从低位(非常确定)走向高位(模棱两可),就是“现有分类体系的解释力在衰退”的量化前兆。
这个熵值指标不能直接判断是否遇到一个全新的状态类型——这需要比较边际似然才能做出更严格的判断。
但它至少能告诉我们,当前数据与现有状态的匹配度在下降,分类体系正在退化。这比预测误差更能说明问题:我们需要重新考虑的,或许是模型框架本身,而不只是参数。
但它至少能提示我们,当前数据与现有状态的匹配度在下降,分类体系正在退化。这个信号比单纯的预测误差更值得警惕。我们需要重新考虑的,或许是模型框架本身,而不只是参数。
3. 在组合优化中给认知不确定性留一个位置
如果我们把鲁棒贝叶斯的思想落地到操作层面,可以简化为一个规则:设定一个阈值,当模型不确定性指标,比如状态归属熵或预测误差的长期移动平均,越过这条线时,就自动下调 alpha 策略的权重,让组合向更能应对认知真空的配置回缩(如更均衡、更分散)。这并非主观干预,而是把“知道自己不知道”写进了优化器的目标函数。
在正常市场环境下,这样做几乎不损失收益;但在市场风格切换的那几周,能显著减少回撤。

时间在验证
前面聊到的这些方法,说到底,背后是两条线。
-
模型的状态空间并非客观事实,而是我们人为划定的边界。
-
一旦市场运行越过了这条边界,模型会以“看起来正常”的方式犯错——指标尚且正常,但实盘表现已经崩了。
鲁棒控制管的是“在现有状态内该信谁”,贝叶斯非参数管的是“我们是否还在那个状态里”。分清这两层,认知才算上了台阶。
从封闭转向开放,不是摒弃贝叶斯框架。贝叶斯的核心就是用数据更新信念。数据都能调参数了,为什么不能告诉我们要换框架?这才是对贝叶斯精神的彻底执行。
海德格尔说,
❝
时间是理解存在的关键。
放在量化里,市场过去的样子不等于未来的样子,而时间本身就是那个让“新东西”冒出来的维度。
最终,是时间在验证我们和模型——能否承认自己的不知道、发现从未见过的形态,然后在未知面前活下来。
感兴趣的读者,可添加星球小助理:feisuiji001

