模型不确定性:偶然不确定性与认知不确定性的区别
做量化这几年,我越来越觉得——不确定性才是交易的核心。
很多人以为,模型预测得越准越好。其实不然。你真正需要知道的,是模型什么时候可能不准。这就引出了我们今天要聊的话题:偶然不确定性和认知不确定性。
这两个概念,说白了就是:有些东西你永远测不准,有些东西你只是还没测准。
一、先讲个故事
我记得刚入行那会儿,做一个高频策略。回测结果漂亮得不行,夏普比3.5,年化收益40%。我兴冲冲地上了实盘。
结果呢?
第一周就亏了8%。
我当时百思不得其解。后来复盘才发现,问题出在交易延迟上。回测时我假设成交延迟是0,但实盘里至少50毫秒。这50毫秒,就是认知不确定性——我压根不知道这个因素存在。
而就算我考虑了延迟,成交价格依然会有随机波动。这就是偶然不确定性——你永远无法精确预测下一笔成交价。
二、偶然不确定性:本质是随机性
偶然不确定性,也叫aleatoric uncertainty。它来自系统本身的随机性。
举个例子:
- 抛硬币,你永远不知道下一次是正面还是反面
- 股票下一分钟的涨跌,受无数微观因素影响
- 订单簿上的买卖盘口,时刻在变化
这些不确定性,你收集再多数据也消除不了。它就是系统的一部分。
核心特征:偶然不确定性是不可约减的。你只能量化它,不能消除它。
在量化模型里,偶然不确定性通常表现为:
- 预测的置信区间宽度
- 残差的方差
- 收益率的波动率
我个人习惯,在构建风险模型时,会把偶然不确定性单独拎出来。比如用GARCH模型估计波动率,本质上就是在量化偶然不确定性。
三、认知不确定性:本质是知识缺失
认知不确定性,也叫epistemic uncertainty。它来自你不知道的东西。
比如:
- 你不知道某个因子是否真的有效
- 你不知道模型参数该取多少
- 你不知道市场结构是否发生了变化
这些不确定性,理论上可以通过收集更多数据、改进模型来减少。
一个判断技巧:如果你觉得「再多给我一些数据,我就能解决这个问题」,那多半是认知不确定性。如果你觉得「就算给我全宇宙的数据,这个问题也解决不了」,那就是偶然不确定性。
我在做因子研究时,经常遇到认知不确定性的问题。比如发现一个因子在A股市场有效,但不知道在港股是否也有效。这就是认知不确定性——你需要更多数据来验证。
四、两者的核心区别
| 维度 | 偶然不确定性 | 认知不确定性 |
|---|---|---|
| 来源 | 系统内在随机性 | 知识缺失 |
| 可消除性 | 不可消除 | 可通过数据减少 |
| 随数据量变化 | 不变 | 减少 |
| 典型例子 | 交易噪声、微观波动 | 模型参数、因子选择 |
| 量化方法 | 方差、置信区间 | 贝叶斯后验、集成方法 |
你想想看,这个区分为什么重要?
因为应对策略完全不同。
- 面对偶然不确定性,你要做的是风险对冲和仓位管理
- 面对认知不确定性,你要做的是主动学习和模型改进
五、在量化模型中的实际体现
我们来看一个具体的例子。假设你训练了一个LSTM模型来预测股票收益率:
import torch
import torch.nn as nn
class UncertaintyLSTM(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super().__init__()
self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True)
# 输出均值和方差
self.fc_mu = nn.Linear(hidden_size, output_size)
self.fc_logvar = nn.Linear(hidden_size, output_size)
def forward(self, x):
lstm_out, _ = self.lstm(x)
last_out = lstm_out[:, -1, :]
mu = self.fc_mu(last_out)
logvar = self.fc_logvar(last_out)
return mu, logvar
这个模型同时输出预测值(mu)和不确定性(logvar)。但注意:这个不确定性是偶然不确定性还是认知不确定性?
答案是:它混合了两种。
- logvar捕捉的是预测的随机波动——这是偶然不确定性
- 但模型参数本身的不确定性——这是认知不确定性
要真正区分两者,你需要更高级的方法,比如贝叶斯神经网络。
我曾经踩过的坑:有一次我直接用模型输出的方差来做仓位管理,结果发现方差在训练集上很小,在测试集上却很大。后来才意识到,模型在训练集上「过于自信」了——它低估了认知不确定性。从那以后,我养成了一个习惯:永远用验证集来校准不确定性估计。
六、知识体系结构图
下面这张图,帮你理清两种不确定性的关系:
七、实战中的处理建议
说了这么多理论,来点实际的。我在项目中是怎么处理这两种不确定性的?
先区分,再处理
拿到一个预测任务,先问自己:这个不确定性是哪种?如果是偶然不确定性,就别花时间优化模型了,去搞风控。如果是认知不确定性,那就值得投入资源改进模型。
用集成方法估计认知不确定性
我常用深度集成(Deep Ensemble)来估计认知不确定性。训练多个模型,看它们预测的差异。差异越大,认知不确定性越高。
用贝叶斯方法处理偶然不确定性
对于偶然不确定性,我倾向于用概率模型。比如用正态分布来建模收益率,用方差来衡量不确定性。
建立不确定性监控体系
实盘运行时,我会实时监控两种不确定性的变化。如果认知不确定性突然升高,说明市场结构可能变了,需要重新训练模型。如果偶然不确定性升高,说明市场波动加大,需要降低仓位。
一个小技巧:你可以用「预测置信区间」来直观感受两种不确定性。如果置信区间很宽但稳定,那是偶然不确定性。如果置信区间忽宽忽窄,那多半是认知不确定性在作祟。
嗯,关于这两种不确定性的区别,今天就聊到这里。记住一句话:偶然不确定性是老天爷给的,认知不确定性是自己欠的债。搞清楚了这一点,你的量化模型才能走得更稳。
公众号:蓝海资料掘金营,微信deep3321