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)\)。它回答“怎样从历史数据中训练出状态划分”。
评估是“打分”,解码是“定位”,学习是“训练”。三者构成 HMM 从建模到应用的完整闭环:先学习参数,再评估拟合,最后解码出可交易的状态序列。

二、数学表达与算法对应

评估问题若直接枚举所有状态路径,复杂度为 \(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)\) 持续走低,说明市场结构可能已变化,需要重新学习。

HMM三大核心问题与金融时序映射 评估问题 P(O|λ) 前向算法 解码问题 argmax P(Q|O,λ) Viterbi 学习问题 argmax P(O|λ) Baum-Welch 模型拟合优度 异常检测 / 模型选择 每日状态识别 策略切换信号 历史状态划分 转移规律训练 闭环:学习参数 → 评估拟合 → 解码状态 → 策略切换

四、案例场景:从训练到切换的完整链路

假设我们用 2018—2023 年某指数日收益率训练 3 状态 HMM,流程如下:

  1. 学习:用 Baum-Welch 迭代 100 次,得到转移矩阵 \(A\) 与发射参数 \(B\),观察状态 0/1/2 分别对应低波动、中波动、高波动。
  2. 评估:在样本外滚动计算 \(P(O|\lambda)\),若连续 20 日低于训练期 5% 分位,触发模型重训。
  3. 解码:每日用 Viterbi 更新状态路径,取最后一日状态作为当日信号。
  4. 切换:状态 0 满仓、状态 1 半仓、状态 2 空仓,回测对比买入持有。
实操中建议用对数概率计算,避免 \(T\) 较大时 \(P(O|\lambda)\) 下溢;Viterbi 回溯时保存指针矩阵,便于批量解码。

五、误区与复盘

  • 误区一:把解码状态当真实状态。Viterbi 给出的是“最可能路径”,不是客观真相,状态标签需结合经济含义人工校验。
  • 误区二:忽略评估问题。只训练不解码、只解码不评估,都会导致模型失效后仍在使用。
  • 误区三:状态数越多越好。状态数过多会过拟合,金融时序通常 2~4 个状态即可,需用 AIC/BIC 或样本外似然选择。
  • 复盘要点:定期检查转移矩阵是否退化(某状态自转移概率接近 1),以及发射分布是否与当前波动水平匹配。
HMM 假设观测在给定状态下条件独立,且状态转移满足马尔可夫性。金融数据存在长记忆与波动聚集,必要时可改用 HSMM 或引入 GARCH 残差作为观测,但三大问题的框架不变。