HMM(隱馬爾科夫模型)在股票上的簡單應用

Ricequant團隊出品,如需轉發請注明且請私信聯系,否則必究。

原文:https://www.ricequant.com/community/topic/788/

今天我們來介紹一下HMM隱馬爾科夫模型)在股票上的簡單應用。

隱馬爾科夫模型,乍一聽起來好高端,完全不知道是什么鬼,那么就讓我們退一步,先看看馬爾科夫鏈

馬爾可夫鏈,因安德烈·馬爾可夫(A.A.Markov,1856-1922)得名(就是下面這家伙),是指數學中具有馬爾可夫性質的離散事件隨機過程。在給定當前知識或信息的情況下,過去(即當前以前的歷史狀態)對于預測將來(即當前以后的未來狀態)是無關的。

該過程中,每個狀態的轉移只依賴于之前的n個狀態,這個過程被稱為1個n階的模型,其中n是影響轉移狀態的數目。最簡單的馬爾科夫過程就是一階過程,每一個狀態的轉移只依賴于其之前的那一個狀態。

用數學表達式表示就是下面的樣子:

舉一個日常生活中的例子,我們希望根據當前天氣的情況來預測未來天氣情況。一種辦法就是假設這個模型的每個狀態都只依賴于前一個的狀態,即馬爾科夫假設,這個假設可以極大簡化這個問題。當然,這個例子也是有些不合實際的。但是,這樣一個簡化的系統可以有利于我們的分析,所以我們通常接受這樣的假設,因為我們知道這樣的系統能讓我們獲得一些有用的信息,盡管不是十分準確的。上面的圖顯示了天氣進行轉移的模型。

注意一個含有N個狀態的一階過程有N2個狀態轉移。每一個轉移的概率叫做狀態轉移概率,就是從一個狀態轉移到另一個狀態的概率。這所有的N2個概率可以用一個狀態轉移矩陣來表示,上面天氣例子的狀態轉移矩陣如下:這個矩陣表示,如果昨天是陰天,那么今天有25%的可能是晴天,12.5%的概率是陰天,62.5%的概率會下雨,很明顯,矩陣中每一行的和都是1。

為了初始化這樣一個系統,我們需要一個初始的概率向量:

這個向量表示第一天是晴天。到這里,我們就為上面的一階馬爾科夫過程定義了以下三個部分:

狀態:晴天、陰天和下雨。

初始向量:定義系統在時間為0的時候的狀態的概率。

狀態轉移矩陣:每種天氣轉換的概率。所有的能被這樣描述的系統都是一個馬爾科夫過程

然而,當馬爾科夫過程不夠強大的時候,我們又該怎么辦呢?在某些情況下,馬爾科夫過程不足以描述我們希望發現的模式。

比如我們的股市,如果只是觀測市場,我們只能知道當天的價格、成交量等信息,但是并不知道當前股市處于什么樣的狀態(牛市、熊市、震蕩、反彈等等),在這種情況下我們有兩個狀態集合,一個可以觀察到的狀態集合(股市價格成交量狀態等)和一個隱藏的狀態集合(股市狀況)。我們希望能找到一個算法可以根據股市價格成交量狀況和馬爾科夫假設來預測股市的狀況。

在上面的這些情況下,可以觀察到的狀態序列和隱藏的狀態序列是概率相關的。于是我們可以將這種類型的過程建模為有一個隱藏的馬爾科夫過程和一個與這個隱藏馬爾科夫過程概率相關的并且可以觀察到的狀態集合,就是隱馬爾可夫模型

隱馬爾可夫模型(Hidden Markov Model) 是一種統計模型,用來描述一個含有隱含未知參數的馬爾可夫過程。其難點是從可觀察的參數中確定該過程的隱含參數,然后利用這些參數來作進一步的分析。下圖是一個三個狀態的隱馬爾可夫模型狀態轉移圖,其中x表示隱含狀態,y表示可觀察的輸出,a表示狀態轉換概率,b表示輸出概率。用一個擲篩子的例子闡述一下:假設我手里有三個不同的骰子。第一個骰子是我們平常見的骰子(稱這個骰子為D6),6個面,每個面(1,2,3,4,5,6)出現的概率是1/6。第二個骰子是個四面體(稱這個骰子為D4),每個面(1,2,3,4)出現的概率是1/4。第三個骰子有八個面(稱這個骰子為D8),每個面(1,2,3,4,5,6,7,8)出現的概率是1/8。

假設我們開始擲骰子,我們先從三個骰子里挑一個,挑到每一個骰子的概率都是1/3。然后我們擲骰子,得到一個數字,1,2,3,4,5,6,7,8中的一個。不停的重復上述過程,我們會得到一串數字,每個數字都是1,2,3,4,5,6,7,8中的一個。例如我們可能得到這么一串數字(擲骰子10次):1 6 3 5 2 7 3 5 2 4

這串數字叫做可見狀態鏈。但是在隱馬爾可夫模型中,我們不僅僅有這么一串可見狀態鏈,還有一串隱含狀態鏈。在這個例子里,這串隱含狀態鏈就是你用的骰子的序列。比如,隱含狀態鏈有可能是:D4 D6 D8 D6 D4 D8 D6 D6 D6 D4。

一般來說,HMM中說到的馬爾可夫鏈其實是指隱含狀態鏈,因為隱含狀態(骰子)之間存在轉換概率。在我們這個例子里,D6的下一個狀態是D4,D6,D8的概率都是1/3。D4,D8的下一個狀態是D4,D6,D8的轉換概率也都一樣是1/3。這樣設定是為了最開始容易說清楚,但是我們其實是可以隨意設定轉換概率的。比如,我們可以這樣定義,D6后面不能接D4,D6后面是D6的概率是0.9,是D8的概率是0.1。這樣就是一個新的HMM。

同樣的,盡管可見狀態之間沒有轉換概率,但是隱含狀態和可見狀態之間有一個概率叫做輸出概率。就我們的例子來說,六面骰子(D6)產生1的輸出概率是1/6。產生2,3,4,5,6的概率也都是1/6。我們同樣可以對輸出概率進行其他定義。比如,我有一個被賭場動過手腳的六面骰子,擲出來是1的概率更大,是1/2,擲出來是2,3,4,5,6的概率是1/10。

其實對于HMM來說,如果提前知道所有隱含狀態之間的轉換概率和所有隱含狀態到所有可見狀態之間的輸出概率,做模擬是相當容易的。但是應用HMM模型時候呢,往往是缺失了一部分信息的,有時候你知道骰子有幾種,每種骰子是什么,但是不知道擲出來的骰子序列;有時候你只是看到了很多次擲骰子的結果,剩下的什么都不知道。如果應用算法去估計這些缺失的信息,就成了一個很重要的問題。

和HMM模型相關的算法主要分為三類,分別解決三種問題:

知道骰子有幾種(隱含狀態數量),每種骰子是什么(轉換概率),根據擲骰子擲出的結果(可見狀態鏈),我想知道每次擲出來的都是哪種骰子(隱含狀態鏈)。

還是知道骰子有幾種(隱含狀態數量),每種骰子是什么(轉換概率),根據擲骰子擲出的結果(可見狀態鏈),我想知道擲出這個結果的概率。

知道骰子有幾種(隱含狀態數量),不知道每種骰子是什么(轉換概率),觀測到很多次擲骰子的結果(可見狀態鏈),我想反推出每種骰子是什么(轉換概率)。

如果要解決上面股市中的問題,我們就需要解決問題1和問題3,下面我們就看看如何實現。

原文及實現:HMM在股票上的簡單應用



最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容