从饮食习惯知天气冷暖——浅谈隐马尔可夫模型
1
引言
明天的世界只与今天有关,而与昨天无关。
”这句话是对马尔可夫模型的一个很好的诠释。在概率论中,马尔可夫模型是一个非常重要的状态空间随机模型(stochastic state space model)。该模型假设一个系统或随机变量在下一时刻的状态仅和当前的状态有关,而与任何过去的历史状态都无关,即当前的状态已经包括了预测未来所需的所有信息。这个特性被称为马尔可夫性质(Markov property),也被称为无记忆性(memorylessness)。
马尔可夫模型由俄罗斯数学家安德雷 • 马尔可夫(Андрей Андреевич Марков)提出(就是下面这位帅哥,漂亮的实力派)。该模型在预测建模方面有着广泛的应用。近年来,也有越来越多的人将它用在量化投资领域。
根据在时间上以及在状态空间中是否连续,马尔可夫模型又有不同的版本,比如连续的马尔可夫过程(Markov process)和离散的马尔可夫链(Markov chain)。本文中,为了便于介绍,我们考虑最简单的离散模型,即模型在时间和状态上都是离散的。
时间上离散意味着系统仅在特定的时间点上发生状态的变化(比如每小时或者每天发生一次变化);状态空间上离散意味着系统状态的取值是非连续的。此外我们假设状态的取值个数是有限的。离散模型虽然简单,但在本文最后一节可以看出,它在量化投资领域同样有重要的应用价值。
在正常的马尔可夫模型中,系统的状态对于观察者来说是直接可见的,我们关心的是诸如系统在不同时刻处于不同状态的概率这类问题。遗憾的是,在一些应用中(比如量化投资中的一些问题),我们并不能直接观测到系统的状态——这些状态对我们来说是隐形的。虽然无法直接观测到状态,但是受这些状态影响的观测量的取值对我们来说是可见的;我们需要透过这些观测量的取值来推测系统所处的状态。这样的模型称为隐马尔可夫模型(Hidden Markov Models,简称 HMM)。
仍然觉得晦涩?来看马尔可夫和隐马尔可夫模型各自的例子。
2
马尔可夫模型的一个例子
假设我们要分析的系统是城市 S 的每天的气温。为了简化问题,令气温分为冷和热两个状态。在马尔可夫模型的框架下,该系统有两个状态,且状态间的转移由下面四个条件概率来表示:
prob( 明天天冷 | 今天天热 ) = α
prob( 明天天热 | 今天天热 ) = 1 - α
prob( 明天天热 | 今天天冷 ) = β
prob( 明天天冷 | 今天天冷 ) = 1 - β
这个系统可以由下面这个马尔可夫链表示,其中 1 和 2 分别代表了热和冷两个状态,箭头表明了状态之间的转移、旁边的数字表明了转移发生的概率。
这四个条件概率又被称为状态之间的转移概率。一般的,一个具有 K 个状态的马尔可夫过程,对于所有的 i, j ∈ {1, 2, …, K},其在 t – 1 到 t 时刻从状态 i 到状态 j 的转移概率便构成了转移矩阵(transition matrix)中。因此转移矩阵中第 i 行第 j 列的元素为:
对于一个离散的马尔可夫过程来说,转移矩阵包括了刻画其状态变换随机性的全部信息。有了转移矩阵,我们可以方便的求解各种关于系统状态的概率问题。
比如,在本节的例子中,如果城市 S 今天的天气是热,那么我们可以方便的计算出明天(乃至任意若干天之后)天气情况的概率;我们也可以回答例如未来五天连续出现天冷(或热)的概率。总之,有了这个转移矩阵,一切关于系统状态的问题都可以计算。
3
隐马尔可夫模型的一个例子
在隐马尔可夫模型中,系统的状态并不是直接可见的,但受状态影响的某些观测量则是可见的。这些观测量受不同状态的影响不同,即不同状态下,这些观测量有着不同的概率分布。因此通过分析观测量序列,我们可以对系统的状态做出判断。
为了解释隐马尔可夫模型,仍然考虑城市 S 的天气的例子。假设天气仍然只有冷、热两个状态。但与前面例子不同的是,你无法直接获得关于 S 的天气信息(比如你不生活在该城且没有它的天气预报)。 所幸的是,你有一个好朋友 c 居住在 S 城。他根据当天的天气情况,每天从火锅、拉面和冰激凌三种食品中以不同的概率挑选一种来吃,并把吃了什么告诉你。具体的,在不同天气下,朋友 c 选择这三种食品的概率如下:
因此,虽然你不知道 S 城的天气, 但是知道 c 每天的饮食。因此你可以通过朋友的饮食信息判断 S 城的冷暖。比如 c 告诉你他连续吃了五天火锅,那么你可以判断出过去五天 S 城的天气很可能都处于冷的状态,因为在天冷时 c 吃火锅的概率远大于天热时。这就是隐马尔可夫模型要解决的问题之一。
在数学上,隐马尔可夫模型如下图所示。其内在的马尔可夫过程仍然由转移矩阵 A 来刻画,只不过状态对你来说它是不可见的。除了 A 之外,状态与观测值之间的关系——即观测值在不同状态下不同的概率分布——由发散概率(emission probability)B 来决定。值得一提的是,虽然在本例中,观测值(火锅、拉面、冰激凌)在不同状态(天冷、热)下的概率分布是离散的,但是这个概率分布也完全可以是连续的。这完全由待考察的问题决定。
在任意时刻 t,系统处于未知的状态 X_t,根据对应的发散概率产生相应的观测值 O_t,这对于你来说是可见的。如何根据观测值序列来推测状态序列,或者如何根据转移概率和发散概率计算某个观测值出现的概率,这些都是隐马尔可夫模型想要回答的问题。
4
三类问题
在隐马尔可夫模型(HMM)中,视要解决的问题而定,A 和 B 对你来说可以是已知的或未知的。具体的,我们可以解决三类问题。
问题一(似然性——Likelihood):假设 HMM 的参数 A 和 B 已知,并且知道观测序列 O,计算观测序列产生的概率。
问题二(解码——Decoding):假设 HMM 的参数 A 和 B 已知,并且知道观测序列 O,计算最有可能产生该观测序列的状态序列。
问题三(学习——Learning):假设观测序列 O 已知,且知道马尔可夫过程的状态个数(但是 A 和 B 未知),从数据中学习并推测出 HMM 模型中 A 和 B 的参数。
对于量化投资来说,在建模时,A 和 B 基本上都是未知的,因此第三类问题是我们最关心的。下面分别对这三类问题做简要介绍。
前两类问题看似非常接近,都是知道 A,B 和 O,然后求一个概率。但是他们又略有不同。我们用上一节的那个气温和饮食的例子做一个解释。
假设连续三天 c 的饮食都是火锅;而这三天的天气冷、热状态一共有 8 种可能,如下表所示。
在这 8 中情况下,朋友 c 均有可能连续吃三天火锅,只不过在不同的状态序列下,他连续吃三天火锅的概率不同(概率见上表)。如果连续三天都很冷,那么他都吃火锅的概率为 0.125,如果三天都很热,那么他吃火锅的概率则仅为 0.001。
在第一类问题中,我们不关心产生吃三天火锅这个观测序列的具体状态序列;我们关心的是在所有可能的状态序列下,发生这个观测序列的总的概率。这个概率就是上面八种情况的加权总和,权重为每个状态序列出现的概率,这个概率可以通过状态的初始概率分布以及转移矩阵 A 求出。
在第二类问题中,我们关心的是,在所有能够产生连吃三天火锅这个观测序列的状态序列中,产生该观测序列的可能性最大的那个——即在何种状态序列下,发生这个观测序列的概率最高。例如在上面这个问题中,最有可能产生连吃三天火锅的气温状态序列是冷冷冷。
对于这两类问题的求解,上面这个例子也许也许给你一个错觉:只要罗列出状态所有的排列组合就行了。但不要忘了,这个例子中仅考虑了两个状态和三个观测值,因此仅有 2^3 = 8 种情况。在实际问题中,如果有 N 个状态和 T 个观测值,可能的状态序列为 N^T 个。因此,对于计算机来说,穷举法的计算量级为 O(N^T),当 N 和/或 T 很大时,列出所有的可能是低效甚至是不切实际的(比如你可能需要为了一个计算结果而等待几天甚至几周)。
好消息是,我们可以使用更有效的算法来代替穷举法。对于第一类问题,一个有效的算法为向前算法(forward algorithm);对于第二类问题,一个有效的算法为维特比算法(Viterbi algorithm)。这两种算法都属于动态规划算法,计算量级要比穷举的计算量级小得多。感兴趣的读者可以进一步参考相关资料。
最后,来看第三类问题。它事实上是一个模型训练问题。HMM 就是我们的模型,观测序列就是我们的数据。机器学习需要通过数据训练模型,得到 HMM 的最佳参数 A 和 B。比如,在上面这个例子中,我们的饮食观测序列可以是 { 火锅、拉面、拉面、火锅、冰激凌、冰激凌、……、拉面、火锅 },另外我们知道天气的状态有两个。这些信息便是我们所有的输入,机器学习将通过它们训练 HMM 模型。
训练 HMM 模型的标准算法是 Baum-Welch 算法(又称为 forward-backward 算法),它属于一种最大期望算法(Expectation-Maximization algorithm,EM 算法)。它通过迭代算法,不断的改进对 A 和 B 的估计,直到参数收敛。
得到 A 和 B 之后,就可以用它们计算和回答有关状态序列的一系列问题。下面就来看一个量化投资领域的例子。
5
HMM 在量化投资领域的应用
HMM 在量化投资中有哪些作用呢?也许我们最关心的问题是:它能否被用来预测收益率或者价格呢?从马尔可夫性质出发,我并不看好这种可能性。虽然 HMM 的无记忆性可以支持(弱)有效市场假说(即当前价格就包含了对其未来做预测所需的全部信息),但种种经验表明,弱有效市场假说并不成立。由于信息对不同投资者的扩散速度不同,以及行为金融学中的反应过度和反应不足,价格或收益率的历史数据在预测未来时也能起到一定的作用。这显然与 HMM 的无记忆性不符合。
举例来说,如果已知今天上涨了 1% 来预测明天的收益率,我们仍然会看一看过去一段时间的涨跌情况:连涨 3 天和连跌 5 天后发生的 1% 的上涨对投资者的感受显然是不同的,收益率的历史轨迹将影响未来的收益率。
虽然也许无法直接预测收益率,但是 HMM 模型可以被用来进行市场状态监测(market regime detection)。每当新的监管或政策的出台,市场的状态可能发生系统性的转变。这将对投资策略产生本质的影响。从这个意义上说,监测市场状态十分必要。由于市场的“真实状态”对于我们来说是未知的——其实就连市场有几个状态都需要我们在建模中给定——因此它是一个无监督学习问题。
下面仅以一个非常简单的例子说明 HMM 在这方面的应用。
假设市场有两个状态;观测序列为上证指数的日对数收益率(观测期为 2011 年 1 月到 2017 年 7 月)。此外,我们需要指定发散概率分布的形态。由于对数收益率近似的满足正态分布,因此我们假设在给定的市场状态下,观测值满足不同参数的正态分布(即它是连续的分布,这与上面那个天气和饮食例子中离散的发散概率分布不同)。
我们希望通过训练 HMM 模型,根据收益率序列来估计 HMM 的参数,并以此判断每个交易日市场所处的状态。这无疑属于第三类问题。使用最大期望算法,得到的结果如下图所示。
从图中可以推测出 HMM 将市场划分为平静(状态 1)和高波动(状态 2)两个状态。在 2014 年底之前,市场在绝大多数时间处于平静状态,但也不时出现高波动状态。在 2014 年底开始至 2016 年初结束的牛熊周期中,市场处于高波动状态之中。自股灾结束之后,市场则完全处于平静状态。
虽然使用 HMM 直接预测收益率并不实际,但是对市场状态的正确判断无疑对资产配置和风险控制至关重要。无独有偶,从 2016 年第一季度开始,美股也进入了“百年不遇”的低波动周期,恐慌指数 VIX 屡创新低。在最近的研究中,高盛就对美股的低波动性进行了剖析。
无论我们多么小心,低波动率都会在我们还没有准备好时戛然停止;unknown unknowns 也一定会到来。想要应对这些,首先必须对市场状态有正确的认知,这便是 HMM 在量化投资领域的价值之一。
6
结语
我非常喜欢马尔可夫模型,它的假设虽然简单但作用十分强大;无记忆性使得很多复杂的问题变得易于分析和计算,因此在生活中有着非凡的应用。
也许你不从事量化投资,且认为气温和饮食的例子过于简单,那么下面这个情况也许适合你并让你认识到隐马尔可夫模型的作用。
假如你有一个小宝宝,因为她还不会说话,所以无法准确的表达自己的心情。因此,她的心情对你来说就是不可观测的状态。你需要根据她的举动(对你来说是观测值,比如大哭,大笑,睡觉,发脾气,撕书,满地打滚……)来推断她的心情。这便是一个可以使用隐马尔可夫模型来解决的问题。毕竟,了解她的诉求对你和她都非常重要。
不是么?