模型不确定性:偶然不确定性与认知不确定性的区别

做量化这几年,我越来越觉得——不确定性才是交易的核心。

很多人以为,模型预测得越准越好。其实不然。你真正需要知道的,是模型什么时候可能不准。这就引出了我们今天要聊的话题:偶然不确定性和认知不确定性。

这两个概念,说白了就是:有些东西你永远测不准,有些东西你只是还没测准

一、先讲个故事

我记得刚入行那会儿,做一个高频策略。回测结果漂亮得不行,夏普比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捕捉的是预测的随机波动——这是偶然不确定性
  • 但模型参数本身的不确定性——这是认知不确定性

要真正区分两者,你需要更高级的方法,比如贝叶斯神经网络。

我曾经踩过的坑:有一次我直接用模型输出的方差来做仓位管理,结果发现方差在训练集上很小,在测试集上却很大。后来才意识到,模型在训练集上「过于自信」了——它低估了认知不确定性。从那以后,我养成了一个习惯:永远用验证集来校准不确定性估计

六、知识体系结构图

下面这张图,帮你理清两种不确定性的关系:

模型不确定性分类 模型不确定性 偶然不确定性 认知不确定性 市场噪声 微观波动 执行偏差 参数不确定 模型结构 数据缺失 应对:风险对冲、仓位管理 应对:主动学习、模型改进 虚线表示:偶然不确定性不可消除,认知不确定性可减少

七、实战中的处理建议

说了这么多理论,来点实际的。我在项目中是怎么处理这两种不确定性的?

  1. 先区分,再处理

    拿到一个预测任务,先问自己:这个不确定性是哪种?如果是偶然不确定性,就别花时间优化模型了,去搞风控。如果是认知不确定性,那就值得投入资源改进模型。

  2. 用集成方法估计认知不确定性

    我常用深度集成(Deep Ensemble)来估计认知不确定性。训练多个模型,看它们预测的差异。差异越大,认知不确定性越高。

  3. 用贝叶斯方法处理偶然不确定性

    对于偶然不确定性,我倾向于用概率模型。比如用正态分布来建模收益率,用方差来衡量不确定性。

  4. 建立不确定性监控体系

    实盘运行时,我会实时监控两种不确定性的变化。如果认知不确定性突然升高,说明市场结构可能变了,需要重新训练模型。如果偶然不确定性升高,说明市场波动加大,需要降低仓位。

一个小技巧:你可以用「预测置信区间」来直观感受两种不确定性。如果置信区间很宽但稳定,那是偶然不确定性。如果置信区间忽宽忽窄,那多半是认知不确定性在作祟。

嗯,关于这两种不确定性的区别,今天就聊到这里。记住一句话:偶然不确定性是老天爷给的,认知不确定性是自己欠的债。搞清楚了这一点,你的量化模型才能走得更稳。


公众号:蓝海资料掘金营,微信deep3321