傅航聰++張偉
摘要:結合K近鄰算法、支持向量機算法和時間序列算法的優點,整合其結果提出一種綜合預測算法,并將其應用到滬深300指數的漲跌預測中。首先通過時間序列預測出股票未來一段時間內的走勢圖,然后結合K近鄰算法判斷該走勢圖的總體漲跌趨勢,最后將漲跌趨勢量化作為一變量引入到支持向量機算法中,通過支持向量機算法預測最終的股票漲跌。該方法能夠彌補3種算法的不足,能夠更加準確地預測股市的漲跌趨勢。
關鍵詞:股票預測;K近鄰算法;支持向量機;時間序列
DOIDOI:10.11907/rjdk.171549
中圖分類號:TP312文獻標識碼:A文章編號:16727800(2017)010003104
0引言
隨著經濟的快速發展,股票市場受到了投資者的普遍關注,掌握股市變化規律并預測其走勢,一直是投資者和投資公司關注的熱點,對于預測股市未來收益方法的探索也從來沒有中斷過。由于涉及到金融領域,因此最開始僅從金融工程、數理統計方面進行挖掘,探索相關方法,在文獻[1][3]中提到了其中的部分金融模型與方法。然而,由于發現金融模型一定程度上無法滿足人們對于預測準確性的要求,因此對于金融模型而言,更多地是建立在假設上。之后人們提出了機器算法模型,其實踐性更強,適用范圍更廣,模型準確率更高[46]。至21世紀初期,金融市場發展迅速,同時也衍生出了更多金融產品。因此,單一的金融模型算法和機器學習算法已經滿足不了市場需求,人們便將金融模型算法與機器學習算法結合起來,以達到更好的效果[78]。對于金融工程方面的股市量化預測分析,機器學習算法的優點[9]是能夠最大程度地模擬對象的具體特征,另外在處理數據量及復雜度方面也有更大優勢。另外一種預測手段是結合多種算法,能夠一定程度上彌補單獨算法存在的缺陷。
本文采用的即是機器學習和金融模型算法相結合的綜合算法,其中包括K近鄰算法、支持向量機算法(SVM)、時間序列算法。K近鄰算法主要應用于分類方面,通過近鄰算法將相似的樣本歸為一類;SVM支持向量機算法可以有效解決神經網絡無法避免的局部最小化問題,而且對于小樣本容量、非線性及高維數模式,以及在克服維數過大和過度擬合學習方面具有優勢[9];時間序列算法能夠很好地展示一定時間內事物的發展變化趨勢與規律,從而對未來的變化進行有效預測。
本文將通過滬深300數據,結合K近鄰算法、支持向量機算法(SVM)、時間序列算法的優點,以達到最好的股指預測效果。本文首先結合近鄰算法和時間序列算法,得到一個未來趨勢的漲跌變量,通過圖像處理將圖片轉換成二維碼數字,用近鄰算法分析識別時間序列預測的曲線圖是漲還是跌;然后將該變量輸入到支持向量機算法中,得到最終的綜合算法;最后與單一的SVM算法、時間序列算法進行比較,得到最終的準確率。
1.3時間序列
由于股票價格隨著時間不斷發生變換,而且有著非常明顯的時間先后順序。這種按照時間序列排列起來的一系列觀測值稱為時間序列,因此可以認為時間序列包含了某一個或某幾個統計指標特征。一個時間序列里一般包含4種信息:長期趨勢、循環、季節變換、不規則變換。常用的時間序列模型主要有自回歸模型(AR)、移動平均模型(MA)、自回歸移動平均模型(ARMA)、齊次非平穩模型(ARIMA)等。時間序列模型又分為傳統時間序列模型和現代時間序列模型。傳統時間序列模型把時間序列看成是長期趨勢、季節變動、循環變換、不規則變換的復合體。現代時間序列模型則將時間序列看作一個隨機概率過程,ARIMA模型算法即是這類模型的代表[15]。
下面將結合3種單獨的算法得到最終的綜合算法。
2綜合算法預測模型
2.1算法模型概括
綜合算法預測模型主要分為3部分,首先在相同的數據條件下分別計算出支持向量機算法、時間序列算法與綜合算法的準確率,然后對其進行比較。具體步驟為:①首先對數據進行標準化處理;②經過歸一化處理,分別計算出在支持向量機算法、時間序列算法下的準確率;③按照相同像素大小的圖片,隨機截取20個間隔為30天的滬深300歷史漲跌圖作為樣本集。將20個曲線圖分為兩類,即漲和跌,每一類的樣本數量為10;④按照支持向量機選取的變量日期,畫出時間序列未來30天的預測曲線圖, 按照相同的像素大小截取預測曲線;⑤通過近鄰算法進行比對,識別出時間序列未來30天的曲線圖是漲還是跌,并將漲定義為1,跌定義為-1;⑥將通過近鄰算法得到的結果作為其中一個支持向量機變量輸入其中,最后計算出綜合算法的預測準確率;⑦比較支持向量機算法、時間序列算法和綜合算法的準確率,得到最后的結論。
2.2綜合算法原理
本文中的綜合算法用到了圖像處理技術以及時間序列算法、近鄰算法、支持向量機算法。
對于圖像處理技術而言,因為在股票市場某一階段并不能通過肉眼準確地判斷漲跌,因此將圖像處理技術和機器學習算法相結合能夠避免肉眼帶來的局限性,同時還避免了重復工作帶來的錯誤率。通過MATLAB軟件對彩色圖片進行二值化處理,使圖片只顯示黑白兩色。通過使用MATLAB里的imread()函數讀取需要操作的圖片,然后調用MATLAB中的二值化處理函數使圖片轉換為二值化圖片,并且輸出二值化圖片的二進制數據。二值圖像也稱為黑白圖像,因為其中的每個像素都只有黑白兩色,并且沒有中間的過渡顏色,其中輸出的二進制矩陣中的0和1也代表了二值圖像的黑白值,其中黑色像素塊代表0,白色像素塊代表1。
按照相同的像素大小截取漲跌圖片,得到滬深300漲跌圖如圖1所示。圖中隨機從樣本集中挑選了2張截取的圖片,一張代表上漲趨勢,一張代表下跌趨勢。然后將兩張圖對應的黑色方格計為1,白色方格計為0。算法中按照相同像素大小的圖片隨機截取20個間隔為30天的滬深300歷史漲跌圖作為樣本集,將20個曲線圖分為兩類,即漲和跌,每一類的樣本數量為10。然后將這20個樣本集圖片轉化為二值圖片后,再通過程序以二進制矩陣的數據形式輸出,并且貼上“漲”、“跌”兩類標簽分別保存。endprint
圖1滬深300漲跌圖
通過時間序列算法預測未來30天的股市漲跌,然后再截取相同像素的漲跌圖片,進行二值化并將其轉換為二進制數據矩陣。相對于其它算法,時間序列算法具有能反應未來股市漲跌趨勢的功能,并且能夠最大限度地把握股市周期性。之后通過截取時間序列預測圖,將其轉化成二進制數據,作為K近鄰算法的測試集。
之后通過K近鄰算法訓練樣本集,然后輸入測試集判斷該組二進制矩陣數據是漲還是跌。將漲的狀態定義為1,將跌的狀態定義為-1,儲存作為支持向量機的輸入量之一。通過K近鄰算法計算測試集和樣本集數組之間的距離,以此區分測試集表示的狀態是漲還是跌,然后將得到的實驗結果作為支持向量機的輸入變量。同時采用支持向量機的其它變量,即滬深300 在2015~2016年間循環每前3天的日收盤價和日交易量,預測第4天的股指漲跌比率[16],因為在這樣的條件下得到的預測結果更準確,實驗效果更好。得到了所需的變量數據后,分別對其進行歸一化處理,使實驗結果更加準確。
因此對于SVM算法而言,主要有3個輸入參數,第一個參數是通過時間序列預測的漲跌數據,第二個是提前1、2、3天的日收盤價,第三個是提前1、2、3天的日交易量。將訓練集單日的漲跌狀態定義為1或-1。然后通過算法計算測試集,通過測試集得到的結果計算該綜合算法的最終準確率。
3實驗結果及討論
3.1圖像識別處理
在綜合算法中,首先需要通過MATLAB軟件對圖片進行二值化處理,得到只有黑白像素的圖片,然后得到二值圖片通過二進制表示的矩陣數據,其中黑色表示“1”,白色表示“0”。其最終的實驗結果如圖2所示,圖中包含了彩色圖片與二值圖片。
3.2SVM算法仿真結果
本文通過使用滬深300指數2015~2016年的數據輸入向量為提前1、2、3天的日收盤價和日交易量來預測第4天的股指漲跌比率[16]。其過程通過SPSS Modeler來實現最終的算法,并且將數據的60%作為訓練集,剩下的40%作為測試集。將訓練集單日的漲跌狀態定義為1或-1,其最終的預測準確率如表1所示。因為只是單一的SVM算法,對核函數非常敏感而且更加適合處理二類問題,并且里面沒有整合股市的周期性規律變換。因此SVM仿真預測股票漲跌的率結果并不是非常理想,約67.5%。
3.3時間序列仿真結果
時間序列算法在進行運算前,首先要對原型圖進行平穩化,并且去周期化。在SPSS Modeler里會自動建模,選擇最佳的一階差分次數和一階季節差分次數。本文通過輸入滬深300在2015年的收盤價、開盤價交易量來預測最后的股市。本文沒有考慮引進季節差分,通過軟件自動得到ARIMA(1,0,2)模型。
圖3為按日為周期時間序列訓練預測結果圖。由于股票交易存在周末與節假日,對于以日為周期,需要重新編排日期,因此跳過了周末,相比于按月為周期,其最終日期會提前。由圖可見,時間序列的訓練效果較好。從表2分析結果中也能看到,其相關性為99.1%左右。
效果較好,但預測集的效果不太令人滿意。而且這里的準確率指的是漲跌概率,并沒有精確到漲跌比率。其中可能的原因是模型沒有加入季節性,而且參數的輸入可能過少,不能完全反映股市的整體現狀。對于時間序列算法而言,完全依據歷史數據,對于未來的預測范圍將缺乏一定準確性,并且其中的隨機性因素也較大。但是時間序列算法的優勢是可以大致研判未來股市的總體周期趨勢。因此,時間序列算法還需要與其它算法相結合,才能更好地提高預測準確率。
3.4綜合算法仿真結果
按照綜合算法原理,隨機選取20張漲跌圖,分別轉換為二進制矩陣數據,并且分為兩類,分別是漲和跌。然后通過時間序列預測后面一個月的圖,最后一個月即是預測的圖像,然后不斷往后推一天,通過SPSS軟件保存預測得到的未來一個月漲跌圖。然后通過圖像處理得到二值圖像,并且輸出保存每張圖像的二進制矩陣數據。SVM算法每一組數據都對應預測一個月未來漲跌的圖像。
得到KNN算法所需的樣本集和測試集,便可以調用KNN算法判斷每一個測試集最終的類別是漲還是跌,然后將其保存作為SVM算法的輸入變量。最后支持向量機算法需要輸入的參數便是1、2、3日的日收盤價和日交易量,結合時間序列算法和KNN算法預測其未來一個月的漲跌趨勢,并和之前的SVM算法一樣,將其60%的數據作為訓練集,剩下的40%作為測試集,只是在其中添加了一組變量參數,總體框架并沒有改變。綜合算法的最終仿真結果如表2所示。
從實驗結果可以看出,單獨的SVM算法和時間序列算法得到的準確率并不是很高,普遍只有70%左右,而綜合算法的準確率接近80%。因此,相比于單一算法,綜合算法的效果更好。因為綜合算法結合了時間序列和SVM算法的優點,使SVM算法能夠考慮到時間序列上的時間特性比如季節性等,又結合了SVM算法的優點,即其自身的錯誤率較低,而且計算開銷小,適合運行大批量數據,得到的結果也更加直觀具體。
4結語
本文結合K近鄰算法、支持向量機算法和時間序列算法的優點,提出了一種綜合預測算法,并將其應用到滬深300指數的漲跌預測中,取得了較好效果。然而,綜合算法雖然相比于單一算法,準確率有改善,但是未來提升的空間還有很大,需要通過發掘探索,不斷組合一些更高效的算法,以得到更高的準確率。
參考文獻:
[1]何永沛.ARMA模型參數估計算法改進及在股票預測中的應用[J].重慶工學院學報:自然科學版,2009(2):68.
[2]于志軍,楊善林.基于誤差校正的GARCH股票價格預測模型[J].中國管理科學,2013(S1):2832.
[3]費時龍,任洪光.多重馬氏鏈模型在股市預測中的應用[J].德州學院學報,2016(8):2835.
[4]王領,胡揚.基于C4.5決策樹的股票數據挖掘[J].計算機與現代化,2015(10):3851.
[5]張鵬.基于 SVR 的股市預測與擇時研究[J].重慶文理學院學報,2016(3):148155.
[6]孫海波,王麗敏.引入趨勢因子的BP模型在股市預測中應用[J].統計與決策,2015(19):8789.
[7]李雁.基于ARIMA模型和神經網絡模型的股票價格預測[J].金融商務,2014(4):7780.
[8]劉海玥,白艷萍.時間序列模型和神經網絡模型在股票預測中的分析[J].管理科學,2011(4):2231.
[9]金得寶.基于支持向量機的股市預測研究[D].杭州:浙江大學出版社,2010:210.
[10]PETER HARRINGTON.機器學習實戰[M].北京:人民郵電出版社,2013:1520.
[11]王波,程福云.KNN算法在股票預測中的應用[J]. 武漢:科技創業月刊,2015(16):1015.
[12]張晨希,張燕平.基于支持向量機的股票預測[J].計算機技術與發展,2006,16(6):3435.
[13]PANG NING TAN, MICHAEL STEINBACH.數據挖掘導論[M].北京:人民郵電出版社,2011:157170.
[14]BURGERS B C.A tutorial on support vector machines for pattern recognition[J].Data Mining and Knowledge Discovery ,1998,2(2):121167.
[15]張文彤,董偉.SPSS統計分析高級教程[M].北京:高等教育出版社,2013:393395.
[16]林利敏.基于支持向量機的股價短期預測研究[D].杭州:杭州電子科技大學,2010:4550.
責任編輯(責任編輯:黃健)endprint