【火爐煉AI】機器學習045-對股票資料進行隱馬爾科夫建模

來源:互聯網
上載者:User

標籤:nump   研究   --   python   價值   最佳化   data   ISE   iter   

【火爐煉AI】機器學習045-對股票資料進行隱馬爾科夫建模

(本文所使用的Python庫和版本號碼: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )

股票資料是非常非常典型的時序資料,資料都是按照日期排列好,而且股價就是我們所能觀察到的觀測序列,而股價背後隱藏的變動機理就是我們難以看到的隱藏狀態和狀態轉移機率,所以完全可以用隱馬爾科夫對股票進行建模,並預測出股票後續的變動情況,如果在股票資料研究上有點突破,那麼,銀子就大把大把的到口袋中來。


1. 準備資料集

此處我用tushare提取某隻股票資料,然後用該股票的每日漲幅和成交量來建模,看看能預測出什麼結果。

# 1, 準備資料集,使用tushare來擷取股票資料import tushare as tsstock_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.valuesfeature1=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 GaussianHMMmodel=GaussianHMM(n_components=5,n_iter=1000) # 暫時假設該股票有5個隱含狀態model.fit(dataset_X)

在使用HMM模型建模之後,我們怎麼知道這個模型的好壞了?那麼就需要將其預測的結果和實際的結果進行比較,看看是否一致。

# 使用該模型查看一下效果N=500samples,_=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-對股票資料進行隱馬爾科夫建模

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.