火炉炼AI机器学习045-对股票数据进行隐马尔科夫建模
Posted raydean
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了火炉炼AI机器学习045-对股票数据进行隐马尔科夫建模相关的知识,希望对你有一定的参考价值。
【火炉炼AI】机器学习045-对股票数据进行隐马尔科夫建模
(本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )
股票数据是非常非常典型的时序数据,数据都是按照日期排列好,而且股价就是我们所能观察到的观测序列,而股价背后隐藏的变动机理就是我们难以看到的隐藏状态和状态转移概率,所以完全可以用隐马尔科夫对股票进行建模,并预测出股票后续的变动情况,如果在股票数据研究上有点突破,那么,银子就大把大把的到口袋中来。
1. 准备数据集
此处我用tushare提取某只股票数据,然后用该股票的每日涨幅和成交量来建模,看看能预测出什么结果。
# 1, 准备数据集,使用tushare来获取股票数据
import tushare as ts
stock_df=ts.get_k_data(‘600123‘,start=‘2008-10-01‘,end=‘2018-10-01‘) # 获取600123这只股票的近十年数据
print(stock_df.info()) # 查看没有错误
print(stock_df.head())
上面只是下载了600123这只股票的最近十年的日数据,但是我们要得到的是收盘价的涨幅,所还需要对数据做进一步处理。
# 准备数据集,此次我们用两个指标来计算HMM模型,股价涨幅和成交量
close=stock_df.close.values
feature1=100*np.diff(close)/close[:-1] # 股票涨幅的计算
print(close[:10])
print(feature1[:10]) # 查看涨幅计算有没问题
-------------------------------------输---------出--------------------------------
[6.775 6.291 6.045 5.899 5.361 5.436 5.299 4.994 4.494 4.598]
[ -7.14391144 -3.91034812 -2.41521919 -9.12018986 1.39899273
-2.52023547 -5.75580298 -10.01201442 2.31419671 9.98260113]
--------------------------------------------完-------------------------------------
# 由于计算涨幅之后的序列比原来的收盘价序列少一个(最开始的股价没法计算涨幅),故而需要减去一个
feature2=stock_df.volume.values[1:]
dataset_X=np.c_[feature1,feature2]
print(dataset_X[:5]) # 检查没错
2. 创建HMM模型
关于HMM模型,我已经在我前面的文章中进行了详细的讲解,请参考【火炉炼AI】机器学习044-创建隐马尔科夫模型
# 创建HMM模型,并训练
from hmmlearn.hmm import GaussianHMM
model=GaussianHMM(n_components=5,n_iter=1000) # 暂时假设该股票有5个隐含状态
model.fit(dataset_X)
在使用HMM模型建模之后,我们怎么知道这个模型的好坏了?那么就需要将其预测的结果和实际的结果进行比较,看看是否一致。
# 使用该模型查看一下效果
N=500
samples,_=model.sample(N)
# 由于此处我使用涨幅作为第一个特征,成交量作为第二个特征进行建模,
# 故而得到的模型第一列就是预测的涨幅,第二列就是成交量
plt.plot(feature1[:N],c=‘red‘,label=‘Rise%‘) # 将实际涨幅和预测的涨幅绘制到一幅图中方便比较
plt.plot(samples[:,0],c=‘blue‘,label=‘Predicted%‘)
plt.legend()
貌似匹配结果不怎么样,再来看看对于成交量的预测:
plt.plot(feature2[:N],c=‘red‘,label=‘volume‘)
plt.plot(samples[:,1],c=‘blue‘,label=‘Predicted‘)
plt.legend()
这两个结果都不怎么样,预测值和实际值都相差比较大,说明模型难以解决这个项目。我们换个角度来想,如果这么简单就能预测股票的走势,那每个人都会从股市捞钱,最终股市只能关门了。读者有兴趣可以优化一下HMM模型的隐含状态数,可能会得到比较好的匹配结果,但是也有可能发生过拟合,所以我觉得优化的用处不大。
########################小**********结###############################
1,此处只是简单的做了一个用HMM模型来分析股票数据的例子,虽然实用价值不大,但可以给其他复杂的算法提供一点思路。
2,还是那句话,远离股市,远离伤害。
#################################################################
注:本部分代码已经全部上传到(我的github)上,欢迎下载。
参考资料:
1, Python机器学习经典实例,Prateek Joshi著,陶俊杰,陈小莉译
以上是关于火炉炼AI机器学习045-对股票数据进行隐马尔科夫建模的主要内容,如果未能解决你的问题,请参考以下文章
火炉炼AI机器学习017-使用GridSearch搜索最佳参数组合