基于离散型隐马尔可夫模型的股票价格预测

2020-04-09 03:16
浙江工业大学学报 2020年2期
关键词:概率分布股票观测

(1.浙江工业大学 计算机科学与技术学院,浙江 杭州 310023;2.浙江理工大学 信息工程学院,浙江 杭州 310018)

股票价格的预测是金融领域研究的重点。但是由于股市的复杂性使得股价预测成为一个很大的难题。股票的价格受到各个方面的因素影响,如银行存款利率、行业因素[1]和国家政策等。这些复杂的因素导致投资者在判断一支股票的价格走势时出现了较大的偏差,从而产生了巨大的投资风险。所以建立一个可以智能预测股票价格的模型是很有必要的。在1970年初,美国统计学家Box等[2]提出了以一种时间序列模型ARIMA来预测股价。ARIMA模型结构简单,但是它要求输入的数据必须是线性相关的,这与股票价格非线性变化的特点矛盾,使得ARIMA模型在预测股票价格时准确率不高,应用范围有限。随后,Engle[3]提出了自回归条件异方差模型ARCH,很好地描述了股票价格波动的不确定性,在经济学领域被广泛的应用。随着近年来人工智能技术的发展,不少智能化算法被广泛地应用到股票价格预测中。Ke等[4]根据股票价格非线性变化的特点,采用BP神经网络对股票数据进行了实证分析,并且使用遗传算法改进了传统BP神经网络的计算精度和收敛速度,取得了良好的预测结果。但是基于BP神经网络的预测模型,需要优化大量的参数,容易陷入局部极值和产生过拟合的现象。王卫红等[5]提出了PCA-FOA-SVR算法,采用PCA消除股票价格特征的冗余信息,并通过果蝇算法优化SVR的参数,克服了神经网络过拟合、陷入局部最小等缺陷。但是如何选择一个合适的核函数仍缺乏有效的理论指导。

由于股票的价格是一种可观测的时间序列,而决定股票价格的因素属于未知变量。这个特性和隐马尔科夫模型(Hidden Markov Model, HMM)相符,不少学者将其应用到股价预测中。HMM是一个统计模型,最早由Baum等[6-7]提出,目前已经在语音识别[8-9]、生物DNA序列分析[10-11]、图像处理[12-13]和模式识别[14]等领域有了成熟的应用。Hassan等[15]首次将HMM应用在金融数据上,他将股票的开盘价、收盘价、最高价和最低价作为HMM的观测序列,在训练得到HMM的参数后,计算当日股票收盘价在HMM下产生的似然值来寻找历史相似模式,从而对未来股票价格进行了预测。Gupta等[16]利用Hassan的方法,用股票每日最高价和最低价变化的百分比作为特征训练HMM,取得了不错的预测效果。与以上所提出的方法不同,笔者将股票的每日收盘价序列转换为收益率序列,然后将其离散化。对比连续型HMM,离散型HMM模型较为简单,参数个数少,可以降低异常值的影响保证模型的稳定性。在预测阶段,不再通过寻找历史相似模式,而是结合Viterbi[17]算法给出预测结果的概率分布。通过对上证交易所和深圳交易所的部分股票的实证,实验结果表明:笔者提出的方法有着不错的预测效果和指导意义。

1 HMM介绍

1.1 HMM模型概述

HMM主要由隐状态序列(S1,S2,…,Sn)和观测序列(O1,O2,…,On)组成。隐状态序列是一组含有未知变量的状态序列,它的状态是不可见的。每一个隐状态Sn仅与上一个隐状态Sn-1相关,并且与其他状态无关。观测序列是一组直接观测可得的值,对于每一个观测值On,它由与之对应的隐状态Sn在一定的概率分布下产生,如图1所示。

图1 隐马尔可夫过程

1.2 HMM参数

离散型HMM包含5 个参数:λ=(N,M,A,B,π)。其中:

N={q1,q2,…,qn}:状态的有限集合。

M={v1,v2,…,vm}:观察值的有限集合。

A={aij},aij=P(qt=Sj|qt-1=Si):状态转移概率矩阵。

B={bjk},bjk=P(Ot=vk|qt=Sj):观察值概率分布矩阵。

π={πi},πi=P{q1=Si}:初始状态概率分布。

1.3 HMM的3 个基本问题

令λ={A,B,π}为给定HMM的参数,O={O1,O2,…,On}为观察序列,则有关于HMM的3 个基本问题可以描述为

1)评估问题:对于给定HMM模型,求产生某一个观察序列的概率P(O|λ),该问题可以通过前向-后向算法求解。

2)解码问题:对于给定HMM模型和观察序列,求产生此观测序列可能性最大的状态序列maxQ{P(Q|O,λ)},该问题可以通过Viterbi算法求解。

3)学习问题:对于给定的一个观察序列O={O1,O2,…,On},求解参数λ={A,B,π},使得观察序列产生的概率P(O|λ)最大,该问题可以通过Baum-Welch算法求解。

2 算法流程

2.1 数据预处理

将股票的每日收盘价序列CP={CP1,CP2,…,CPn}转换为对应的收益率序列ROR={ROR1,ROR2,…,RORn},即

(1)

当输入的观测序列为连续值时,给定隐状态St=j产生随机观测值Ot的概率bj(Ot)应表示为连续概率密度函数,大部分方法会用正态分布来近似地模拟这种关系。由于股市的复杂性,正态分布无法准确地模拟观测值的概率分布。于是笔者采用将股票收益率离散化的方式,将HMM模型产生的观测值的概率转化为每一个离散值的概率。具体步骤为

1)求得ROR序列中的最大收益率max和最小收益率min。

2)以收益率等于零为中心点,分别向正方向和负方向划分等距离的区间,直到该区间包含max和min。区间的长度如果太长,会导致预测结果误差增大,若区间的长度太短,则区间的数量增多,使得计算量增大。根据实验结果,本文中笔者取区间长度为0.001。

3)将收益率值所落在的区间,将其转换为对应的离散值。其中On表示转换后的离散值,length表示区间长度,即

(2)

2.2 HMM模型训练

将离散化后的观测序列O={O1,O2,…,On}作为HMM的输入来训练HMM的参数λ。将观测序列记作O,并将相应的隐状态序列记作I,那么问题就转换为求一个具有隐变量的概率模型的解,即

(3)

该模型参数可以通过Baum-Welch算法[18-19]计算得到,具体算法为

输入观测数据O={O1,O2,…,On}

输出HMM参数λ={A,B,π}

2)根据公式迭代参数,即

(4)

(5)

(6)

3)当迭代次数达到笔者规定的次数或者参数收敛不再变化即可停止迭代,得到模型最终参数λ(n+1)=(A(n+1),B(n+1),π(n+1))。

Baum-Welch算法受参数初始值影响较大,所以在实验中分别随机初始化10 组不同的参数,对模型进行参数估计,选取logP(O|λ)最大的一组参数作为最终的初始化参数。

2.3 股价预测

在得到训练好的模型后,如何预测未来的股价是一个重要的问题,因为这直接影响到了最后预测的结果。Hassan在历史数据O={O1,O2,…,On-1}中寻找与当天观测值On在λ={A,B,π}下产生的似然值Ln=logP(On|λ)最接近的似然值Li,并认为第i天到第i+1天的收盘价变化和第n天到第n+1天的收盘价变化具有一定的相似性,于是预测出第n+1天的收盘价CPn+1,即

CPn+1-CPn=CPi+1-CPi

(7)

但是这样的预测方法存在一定的问题。Hassan认为:1)似然值相近的两天,它们下一天收盘价的变化相似;2)如果收盘价的变化相似,它们下一天与当天收盘价的差相等,意味着它们的涨跌幅度一样。以上两点都缺乏一定的理论支持,从而会造成最后的预测结果出现较大的误差。于是笔者采取了不同的预测方法:基于模型的状态转移矩阵A和输出概率矩阵B计算出未来一天观测值概率分布。这样使得预测值更有依据,从而得到更加精确的预测值。

具体地,通过Viterbi算法求出观测序列O={O1,O2,…,On}对应的最优隐状态序列S={S1,S2,…,Sn}。Sn即为当天的隐状态,然后通过状态转移矩阵A计算出后一天最有可能的隐状态Sn+1。再结合隐状态Sn+1对应的输出概率矩阵B得到每一个离散值的概率分布。但无论是通过观测隐状态序列S还是状态转移矩阵A,都可以发现状态的转移存在一定的“惯性”。即同一个状态持续的时间长,也就意味着当前状态转移到自身状态的概率会远远大于转移到其他状态的概率。所以通过状态转移矩阵A得到的隐状态Sn+1就等于当天的隐状态Sn。这样就会忽略当前状态转移到其他状态的情况。为了解决这个问题,将当前隐状态Sn转移到下一个隐状态的转移概率aSnj作为权重来计算每一个离散值的概率分布,如图2,3所示。具体的计算方法为

(8)

式中:N表示隐状态个数;Pi表示每一个离散值的概率。

图2 利用状态转移矩阵A和概率输出矩阵B求得第n+1天所有离散值的概率分布

图3 所有离散值的概率分布

每一个离散值对应一个收益率区间,最后将每个区间的中位数mRORi与其对应的概率Pi的乘积的累加得到最后预测的收益率RORn+1,即

(9)

式中M表示离散值个数。

再将式(1)变形,计算出最终的预测收盘价CPn+1,即

CPn+1=RORn+1×CPn+CPn

(10)

3 实验结果

笔者选取了3 支上证指数的股票作为实证研究的样本数据。这3 支股票分别为伊利股份(SH600887),中国平安(SH601318)以及招商银行(SH600036)。将3 支股票2015年至2016年的交易数据作为训练集来训练HMM的参数,选取2017年的交易数据作为测试集来验证模型的有效性。实验中,为了保证预测结果的准确性以及合理性,使用滑动窗口的方式来训练HMM参数并进行预测。具体地,将2015年1月1日—2016年12月31日的数据用来训练模型参数,预测2017年1月1日的收盘价;然后用2015年1月2日—2017年1月1日的数据用来训练模型参数,预测2017年1月2日的收盘价,以此类推,直到2017年12月31日。最终得到2017年所有的预测结果,如图4~6所示。

图4 伊利股份(SH600887)2017年股价预测值与真实值对比

图5 中国平安(SH601318)2017年股价预测值与真实值对比

图6 招商银行(SH600036)2017年股价预测值与真实值对比

为了验证模型的有效性,选取了连续型HMM模型(即用正态分布近似模拟输出概率矩阵)、Hassan提出的方法以及SVM模型作为对比模型。并且使用了常见的预测评估指标,即相对误差绝对值平均MAPE(Mean absolute percentage error)来评价不同模型预测结果的有效性。MAPE定义为

(11)

各个模型的预测结果和预测误差如表1~4所示。

表1 不同模型对SH600887的预测值

表2 不同模型对SH601318的预测值

表3 不同模型对于SH600036预测值

表4 不同模型的预测误差

根据实验结果,发现离散型HMM对不同股票价格的预测误差均低于其他3 种模型,说明离散型HMM在股价预测上有着比其他方法更高的精度和稳定性。与此同时,选取了100 支深圳交易所上市的股票(SZ300开头)和100 支上证交易所的股票(SH60开头),利用笔者所提出的方法进行实验。

以每支股票的市值(亿元)作为X轴,预测误差指标MAPE作为Y轴建立直角坐标系,如图7所示。从图7中可以发现:当股票市值大于240 亿元时,笔者提出方法的预测误差可以控制在1%之内,当股票市值小于240 亿元时,预测误差会在0~6%之间波动。实验结果表明笔者方法在股票市值大于240 亿元时有着较高的预测精度。

另外从表5中可以发现:对比来自上证交易所的股票,笔者的预测误差明显小于来自深圳交易所的股票。所以综合以上可知:离散型HMM模型对于来自上证交易所中市值较大的股票有着更好的预测精度。

表5 不同交易所的股票预测误差

4 结 论

提出了一种离散型HMM模型,通过将股票的收盘价转换为收益率,再对收益率离散化作为HMM的输入。在训练HMM参数时,通过选取多组初始化参数来保证得到更好训练结果。在预测阶段,通过状态转移矩阵和输出概率矩阵计算出后一日预测结果的概率分布,从而得出预测结果。实验结果表明离散型HMM比起现有方法具有更好的预测精度,并且适用于上证交易所中市值较大的股票,可以为投资者提供合理有效的参考。但是,笔者方法仍旧存在部分缺点需要解决,比如利用Baum-Welch算法训练参数容易陷入局部最优值,训练集的样本长度选取缺乏理论统计等,这些问题将是未来如何改进模型所研究的内容。

猜你喜欢
概率分布股票观测
一类摸球问题及其解法
天文动手做——观测活动(21) 软件模拟观测星空
弹性水击情况下随机非线性水轮机的概率分布控制
2018年18个值得观测的营销趋势
关于概率分布函数定义的辨析
风速概率分布对风电齿轮
本周创出今年以来新高的股票
本周创出今年以来新高的股票
本周连续上涨3天以上的股票
近期连续涨、跌3天以上的股票