4. HMM三大核心问题
隐马尔可夫模型(HMM)之所以能成为市场状态识别的主力工具,核心在于它把“看不见的市场状态”与“看得见的行情观测”用概率链条连接起来。围绕这条链条,HMM 提出了三个经典问题:评估问题、解码问题和学习问题。理解它们的定义、数学表达以及在金融时序中的对应含义,是后续做状态识别与策略切换的根基。
一、核心原理:三个问题分别解决什么
设 HMM 由参数 \(\lambda=(A,B,\pi)\) 描述:\(A\) 是状态转移矩阵,\(B\) 是观测发射矩阵,\(\pi\) 是初始状态分布。隐藏状态序列记为 \(Q=\{q_1,q_2,\dots,q_T\}\),观测序列记为 \(O=\{o_1,o_2,\dots,o_T\}\)。三个问题恰好对应“已知什么、求什么”的不同组合。
- 评估问题(Evaluation):已知模型 \(\lambda\) 和观测序列 \(O\),求该观测序列出现的概率 \(P(O|\lambda)\)。它回答“这个模型有多像当前这段行情”。
- 解码问题(Decoding):已知模型 \(\lambda\) 和观测序列 \(O\),求最可能的隐藏状态序列 \(Q^*=\arg\max_Q P(Q|O,\lambda)\)。它回答“当前行情最可能处于哪个状态、状态如何切换”。
- 学习问题(Learning):已知观测序列 \(O\)(可能多段),求使 \(P(O|\lambda)\) 最大的模型参数 \(\lambda^*=\arg\max_\lambda P(O|\lambda)\)。它回答“怎样从历史数据中训练出状态划分”。
二、数学表达与算法对应
评估问题若直接枚举所有状态路径,复杂度为 \(O(N^T)\),不可行。前向算法通过动态规划把复杂度降到 \(O(N^2T)\),定义前向变量 \(\alpha_t(i)=P(o_1,\dots,o_t,q_t=i|\lambda)\),递推为:
α_1(i) = π_i · b_i(o_1)
α_{t+1}(j) = [ Σ_i α_t(i) · a_ij ] · b_j(o_{t+1})
P(O|λ) = Σ_i α_T(i)
解码问题由 Viterbi 算法求解,定义 \(\delta_t(i)=\max_{q_1..q_{t-1}} P(q_1..q_{t-1},q_t=i,o_1..o_t|\lambda)\),递推并记录回溯指针:
δ_1(i) = π_i · b_i(o_1)
δ_t(j) = max_i [ δ_{t-1}(i) · a_ij ] · b_j(o_t)
ψ_t(j) = argmax_i [ δ_{t-1}(i) · a_ij ]
Q* = 回溯 ψ 得到最优状态路径
学习问题通常用 Baum-Welch(EM 算法)迭代:E 步计算状态占用与转移的后验期望 \(\gamma_t(i)\)、\(\xi_t(i,j)\),M 步据此更新 \(A,B,\pi\),直到对数似然收敛。
三、金融时序中的对应含义
把观测 \(o_t\) 设为日收益率、波动率或量价特征,隐藏状态 \(q_t\) 就是“牛市、震荡、熊市”或“低波动、高波动”等市场状态。三个问题在量化场景中的含义如下表:
| 问题 | 数学目标 | 算法 | 金融含义 |
|---|---|---|---|
| 评估 | \(P(O|\lambda)\) | 前向算法 | 模型对当前行情的拟合优度,用于模型选择与异常检测 |
| 解码 | \(\arg\max_Q P(Q|O,\lambda)\) | Viterbi | 识别每日市场状态,生成策略切换信号 |
| 学习 | \(\arg\max_\lambda P(O|\lambda)\) | Baum-Welch | 从历史数据训练状态划分与转移规律 |
例如,用沪深300日收益率训练一个 3 状态 HMM 后,Viterbi 解码出的状态序列可直接映射为仓位规则:低波动状态满仓、震荡状态半仓、高波动状态空仓或对冲。评估概率则用于监控模型是否失效——当新数据的 \(P(O|\lambda)\) 持续走低,说明市场结构可能已变化,需要重新学习。
四、案例场景:从训练到切换的完整链路
假设我们用 2018—2023 年某指数日收益率训练 3 状态 HMM,流程如下:
- 学习:用 Baum-Welch 迭代 100 次,得到转移矩阵 \(A\) 与发射参数 \(B\),观察状态 0/1/2 分别对应低波动、中波动、高波动。
- 评估:在样本外滚动计算 \(P(O|\lambda)\),若连续 20 日低于训练期 5% 分位,触发模型重训。
- 解码:每日用 Viterbi 更新状态路径,取最后一日状态作为当日信号。
- 切换:状态 0 满仓、状态 1 半仓、状态 2 空仓,回测对比买入持有。
五、误区与复盘
- 误区一:把解码状态当真实状态。Viterbi 给出的是“最可能路径”,不是客观真相,状态标签需结合经济含义人工校验。
- 误区二:忽略评估问题。只训练不解码、只解码不评估,都会导致模型失效后仍在使用。
- 误区三:状态数越多越好。状态数过多会过拟合,金融时序通常 2~4 个状态即可,需用 AIC/BIC 或样本外似然选择。
- 复盘要点:定期检查转移矩阵是否退化(某状态自转移概率接近 1),以及发射分布是否与当前波动水平匹配。