python 利用SVM預測股票漲跌
最近接了一個私活,指導學妹完成畢業設計。核心思想就是利用SVM模型來預測股票漲跌,並完成策略構建,自動化選擇最優秀的股票進行資產配置。
在做這個項目的過程中,我體會到想成為一個合格的數據分析或者數據挖掘工程師不僅技術要過關,還需要了解所要挖掘數據涉及到的領域的相關知識。舉個例子,在做數據預處理的時候,不知道超額收益率是怎麼個意思,查閱資料才了解,超額收益率是股票行業里的一個專有名詞,指大於無風險投資的收益率,在我國無風險投資收益率即是銀行定期存款。
廢話少說,言歸正傳。這裡有關SVM、PCA等等這些與項目相關的數學知識不會提及,我以後會在演算法專題里詳細描述。
本項目用pycharm + anaconda3.6開發,涉及到的第三方庫有pandas,numpy,matplotlib,skllearn。
流程圖
Quotation Flowchart.jpg
參數設置
這個就是參數的初始化,沒有什麼要說的。
數據讀取以及標記
代碼的基本功能注釋里也寫了一些,不過不夠全面,我再詳細說一下。這三部分代碼所實現的功能是讀取數據,並對數據進行預處理。我已經把最原始的數據整理好放在了excel表格里,並且將第一個月的全部股票的參數放在一個excel里,並將其命名為1.csv,以此類推,我爬取了157個月的數據,總共有157個excel。因此代碼里循環的便是excel的文件名,也就是依次讀取excel文件。因為數據量太大,所以我一般調試的時候只跑12個月。所以我在參數初始化階段,訓練集(1,8),測試集(8,12)。
數據截面.png
將數據讀取到DataFrame表格里後,並不是全部使用,而是取超額收益值最好的前百分之三十,以及最差的後百分之三十,並在表格後追加一列,列名叫return_bin,將最好最差的百分之三十的股票的return_bin列各賦值1,0。然後將每個讀取並加工的excel表格拼接在一起形成一個大表格,從總抽取70個因子作為X_in_sample,抽取return_bin作為y_in_sample作為訓練集。
訓練模型
這個也比較好理解,就是選擇sklearn庫里的svm模塊對數據進行訓練。svm模型是集成封裝好的,拿來用就可以。
模型預測與評價
現在模型就訓練好了,然後就那訓練好的模型在測試集上來跑,看看情況到底如何。
模型評價.png
可以看到參數並不是多好,這是訓練集上數據太少的原因。那我們來改動一下,把訓練集改成(1,10),測試集改成(10,12)看看有沒有改變。
模型評價2.png
訓練集從只有6個月變成9個月(1-10在代碼上體現為1-9),參數情況大有改觀。可見數據對機器學習模型訓練的重要性。
策略構建以及策略評價
所謂策略構建就是選擇什麼樣的股票,代碼里將股票按照超額收益率進行排序,然後我設置para.n_stcok_select = 3意思就是選擇超額收益率前三名進行購買。
所謂策略評價這裡採用的評價體系就是將選擇的三支股票的每月超額收益率取平均值乘12,來作為這三隻股票在該月的年化收益率。
Figure_1.png
Figure_2.png
以上兩張圖是選擇不同月份做訓練集後,模型策略的表現。
在這裡還要提及的是這行代碼,month_test = np.array(para.month_test)
month_test = month_test - 1。這個涉及到了np數組的高階用法。一般數組是無法和數字做運算的,可是將普通數組用np.array()加工過後,變成了np數組,他擁有一個廣播屬性,可以直接與數字運算。該行代碼就是將數組裡每個元素都減1。
TAG:51軟體測試網 |