Improved Hidden Markov Model Stock Price Prediction Analysis
Based on the Hidden Markov Model (HMM), this paper selects the historical data of the Shanghai Composite Index in the past 10 years (opening price, high price, low price and closing price) for empirical analysis, and concludes that the HMM model has certain feasibility in stock prediction. At the same time, through the improvement of the input and prediction methods of the traditional HMM model, more accurate predictions are made for stock price changes. The main steps are: 1) Data processing. The stock price series is tested and processed, and the stock price volatility is used as the input to the HMM model. 2) The number of optimal hidden states is fixed according to the Pooling Information Criterion (AIC) and Bayesian Information Criterion (BIC), and the parameters are determined by training the model. 3) Forecasting. Compared with the traditional HMM model, which directly obtains the forecast data based on the stock price series, the improved HMM model further improves the prediction obtained by calculating the stock price volatility.
Hidden Markov Model
股票市场作为社会经济生活中不可忽视的一部分,股票市场的发展不仅反映出国家经济的发展状况,同时也是经济运行的“晴雨表”,对股票市场运行规律的研究一直是各国政府、学术界、企业投资者努力追求的目标。
隐马尔可夫模型(Hidden Markov Model,简称HMM)是由Baum和Petrie (1966)提出的一种用于信号检测的模型。是一种含有隐状态的马尔可夫过程,隐状态代表股票市场在一段时间内所处的状态。HMM模型是关于时序数据的概率模型,描述含有隐状态的马尔可夫链随机生成一个不可观测的状态序列,再由每个状态生成一个观测序列。股票市场可以看作是一个隐马尔可夫过程,投资者只能看到股票价格走势,而股票市场在当前时刻所处的状态是未知的。由于数据形式的不同,隐马尔可夫模型分为离散型和连续型,其中连续型的HMM又称为高斯隐马尔可夫模型(GHMM)。在本文中,由于股票数据是时间序列数据,因此采用的是高斯隐马尔可夫模型。
近年来,国内外有很多基于HMM模型对股票价格预测的研究。瞿惠和肖斌卿
我们选取上证指数(000001.SS) 2014年12月12日至2023年12月11日(近十年)的股票数据作为观测序列。通过python爬取上证指数每日的股价(开盘价、收盘价、最高价、最低价)作为分析数据。
HMM是一种生成式的概率模型。由初始状态概率向量 、状态转移概率矩阵A和观测概率矩阵B确定。因此,隐马尔可夫模型可以用三元符号表示,即 。HMM模型主要解决三个问题:1) 概率计算问题。给定模型 和观测序列 ,计算在模型 下的观测序列O出现的概率 。2) 学习问题。已知观测序列 ,估计模型 参数,使得在该模型下观测序列概率 最大,即用极大似然估计的方法估计参数。3) 预测问题,也称为解码(decoding)问题。已知模型 和观测序列 ,求对给定观测序列条件概率 最大的状态序列 。这三个问题的解决分别对应着HMM模型的三个算法。概率问题采用前向算法;学习问题(即参数估计)运用Baum-Welch算法;预测问题运用Viterbi算法。
定义前向概率:给定隐马尔可夫模型 ,定义到时刻t部分观测序列为 且状态为 的概率为前向概率,记作:
(1)
可以递推求得前向概率 及观测序列概率 。
输入:隐马尔可夫模型 ,观测序列O;
输出:观测序列概率 。
1) 初值:
(2)
2) 递推:对 ,
(3)
3) 终止:
(4)
假设给定训练数据集只包含S个长度为T的观测序列 而没有对应的状态序列,并由观测序列数据优化HMM模型 的参数。
输入:观测数据 ;
输出:隐马尔可夫模型参数。
1) 初始化:对 ,选取 ,得到模型:
(5)
2) 递推:对 ,
、 、 右端各值按观测 和模型 计算。式中, 由前向算法中的期望计算得到,文中未详细推导。
3) 终止:得到模型参数:
(6)
维特比算法实际是用动态规划求解隐马尔可夫模型预测问题,即用动态规划求概率最大路径。此时,一条路径对应着一个状态序列。
输入:模型 和观测数据 ;
输出: 。
1) 初始化:
(7)
2) 递推:对 ,
(9)
(10)
3) 终止:
(11)
(12)
4) 最优路径回溯:对 ,
(13)
求得最优路径 。
本文选取上证指数2014年12月12日至2023年12月11日的股票开盘价、最高价、最低价和收盘价作为分析特征。将最近100天的观测数据用于测试模型准确性,其余数据作为训练数据估计模型参数。
我们首先通过相关矩阵来分析观测序列的相关性,从
开盘价 |
最高价 |
最低价 |
收盘价 |
|
开盘价 |
1.00 |
0.99 |
0.99 |
0.98 |
最高价 |
0.99 |
1.00 |
0.99 |
0.99 |
最低价 |
0.99 |
0.99 |
1.00 |
0.99 |
收盘价 |
0.98 |
0.99 |
0.99 |
1.000 |
HMM模型隐状态数目的确定一定程度上影响预测的准确性。我们通常是使用池化信息准测AIC和贝叶斯信息准测BIC,首先设置多组不同的隐状态数目,然后把不同的隐状态数目放入模型训练,根据AIC和BIC的值来检验不同的隐状态数目的HMM模型的性能。这两种检验的方法都适用于HMM,因为在Baum-Welch算法中,EM方法是最大化模型的对数似然。由于隐状态的数目均对应着实际含义,因此对应到股市现实状态,我们将隐状态数目设定在2~4之间,以保证模型的简洁性和股票预测的可能性。通常隐状态数为2代表“牛市”和“熊市”;数目3代表股市处于“上涨”、“震荡”、“下跌”。AIC和BIC的计算公式为:
(14)
(15)
其中,L表示的是模型的对数似然函数,k是模型中估计参数的个数,M是观测点的个数。在本文中,每个隐藏状态对应的分布为高斯分布。因此,参数的个数 ,其中N为隐状态的个数。
隐状数 |
似然函数值 |
AIC |
BIC |
说明 |
2 |
−43860.07 |
87732.14 |
87766.28 |
4状态时,AIC与BI最小 |
3 |
−42832.71 |
85689.42 |
85757.72 |
|
4 |
−42152.09 |
84344.19 |
84458.01 |
根据
本节中,我们将使用HMM模型来预测股票价格。根据上节确定的隐状态数目,下面的分析采用固定状态数为4的固定模型。预测过程主要分为三个步骤。首先通过Baum-Welch算法估计出模型的参数,计算出股票价格序列每日的似然函数值。其次,找到历史数据中的似然函数值与当前一天的似然函数值最接近的股票价格序列。最后,采用历史似然法,将找出的历史数据中似然函数值最接近的股票价格与其后一天之差作为股价变化值,再将变化值加上当前的股票价格,即作为第二天股票价格的预测值。用式子表示为: ,其中 为当前股票价格, 为历史数据中与当前股价似然函数值最接近的股价, 为 后一天的股价, 为预测的股价。
我们将运用此方法对未做处理的股票数据和处理后股票数据分别进行预测,通过预测误差和预测值与真实值的拟合效果来对比两种情况下预测的准确性。
我们将python爬取到的股票数据(开盘价、最高价、最低价、收盘价)最近100天的数据作为测试数据,其余作为训练数据输入HMM模型中进行训练,估计出模型的参数并进行预测。HMM的隐状态数目为4,得到预测之后的股票价格拟合图与预测误差。
(16)
(17)
(18)
其中,n为预测点的个数。预测误差分析结果如
指标 |
MAPE |
MSE |
RMSE |
开盘价 |
0.0108363 |
2398.3590 |
48.9730 |
最高价 |
0.0082474 |
1296.0316 |
36.0004 |
最低价 |
0.0083075 |
1268.4298 |
35.6150 |
收盘价 |
0.0095636 |
1406.6549 |
37.5053 |
由
综上所述,HMM模型对上证指数股票价格的预测表现出很好的性能,具有较高的现实意义。考虑到HMM对模型的输入数据有一定的要求,即要求观测数据之间相互独立,在上述的拟合过程中,我们并未对数据做处理,也得到不错的预测效果,但是下面我们对数据做简单的变形处理,让模型输入的观测序列之间满足独立性,以期得到更为准确的预测。
从
(19)
其中,op表示开盘价,cp、hp、lp分别为收盘价、最高价和最低价,计算得到的fc为收盘价波动率,fh为最高价波动率,fl为最低价波动率。
从
然后我们将处理后得到的收盘价波动率、最高价波动率、最低价波动率作为观测值输入高斯HMM模型进行股票价格预测。如此通过输入下一日的波动率对下一日的股票价格进行预测。具体的预测方法是将波动区间划分为50个小区间,根据积分的方式计算出波动率在每个小区间的概率,概率值最大的区间两端点的均值作为波动率的预测值,最后将得到的波动率值分别与第n日的收盘价进行计算,即得到第n + 1日的收盘价、最高价和最低价。
将2014年12月12日至2023年7月16日的数据作为样本数据训练模型参数,并将HMM模型的隐状态数目固定为4,预测得到2023年7月17日到2023年12月11日(100天)的股票收盘价、最低价和最高价。预测得到的上证指数股票价格的预测值与真实值的走势对比图如
从
指标 |
MAPE |
MSE |
RMSE |
最高价 |
0.004859 |
411.690044 |
20.290146 |
最低价 |
0.005554 |
544.742399 |
23.339717 |
收盘价 |
0.005739 |
626.800099 |
25.035976 |
本文对上证指数历史股票数据进行分析,选取了开盘价、最高价、最低价和收盘价作为观测数据,基于HMM模型对股票价格进行预测。实证的过程主要包括数据选取及检验、隐状态数目确定、参数估计、预测和对比分析等步骤。得到如下两个结论:
1) 隐马尔可夫模型进行股票预测分析有一定的可行性,但股票观测序列(开盘价、最低价、最高价、收盘价)之间具有较强的相关性,传统的HMM模型并不能很好地刻画股票价格的走势。
2) 改进后的HMM模型在预测性能上有显著的提升,预测的精度有明显提高。同时,也说明对HMM模型进行合理的改进能够更好地刻画股市的波动。相信随着研究的不断深入,应用HMM模型对股市做预测将得到更好的效果。
本论文工作由北京市属高校基本科研业务费(No. 110052971921/103)资助。