黃 穎, 楊會杰
(上海理工大學 管理學院, 上海 200093)
股票市場是企業籌集資金的重要渠道之一,也是資本市場的重要組成部分。它的波動同經濟市場的盛衰息息相關,有效的趨勢預測可為企業和個人帶來可觀的利潤。該研究成為學術界一項重要課題。在股市預測中,常見的方法包括前饋神經網絡、反向傳播神經網絡和循環神經網絡等模型,許多學者致力于用此類方法預測金融市場。
在傳統機器學習領域,Prasaddas和Padhy證明支持向量機SVM對未來價格預測的效果優于反向傳播算法[1];Tay和Cao比較了SVM和多層反向傳播算法[2],依然證實SVM效果更佳;Jain等比較XGBoost模型和傳統回歸模型[3],發現XGBoost預測準確率更高;Sawon和Hosen研究XGBoost和線性回歸、隨機森林回歸等算法在大規模數據中的預測效果[4],同樣證實XGBoost算法的優越性。
在神經網絡模型方面,Wilson和Sharda比較了神經網絡和傳統的多元判別分析在公司破產問題上的表現[5];Hsieh等將小波轉換和循環神經網絡RNN結合應用于股市預測[6];Kamijo和Tanigawa用RNN識別股票模式[7];Akita等證明了LSTM比其他模型更能捕捉時間序列信息[8];Chen等用GRU預測金融時間序列并在誤差較小的情況下效果良好[9]。
本文運用預測效果較好的傳統機器學習XGBoost模型對黃金價格進行預測,根據對K線形態因子在歷史數據上回測結果的統計分析、動量因子在模型特征重要性中的表現,優化特征選取,降低特征選取的主觀性;將優化后的特征用于能夠有效記憶長短期信息并克服RNN模型梯度爆炸或梯度消失問題的LSTM模型,探索能否進一步提升預測效果。
XGBoost簡稱為Extreme Gradient Boosting,由華盛頓大學的陳天奇博士提出。它是由若干棵樹集成的模型,每棵樹對樣本預測值之和為XGBoost系統對該樣本的預測值,函數定義為

(1)

模型目標函數為

(2)

目標函數右式的第1項為損失函數,第2項為正則化項。損失函數即訓練誤差,類似于用于回歸的均方誤差MSE,是可微的凸函數;正則化項是為了防止模型過擬合而存在的,是一個懲罰項,控制模型復雜度。因此,模型所要達到的效果是使目標函數L(φ)最小化。
XGBoost優化了GBDT算法。在求解最小化目標函數的模型fx過程中,GBDT只采用一階導數,而XGBoost算法對損失函數做二階泰勒展開;由于傳統的枚舉所有可能分割點以尋找最佳分割點的貪心算法效率太低,XGBoost還提出了根據百分位法列舉幾個候選分割點,再根據公式求解最佳分割點的優化方法。
LSTM模型[10]是對RNN的改進,既能同時儲存長期和短期的信息,又能有效避免RNN模型存在的梯度爆炸或梯度消失問題。主要應用于Nature Language Processing,speech recognition等時間序列數據。
LSTM網絡包括輸入層、隱藏層和輸出層,每一層包含許多單元;隱藏層中每個單元都有記憶細胞,輸出門、遺忘門和輸出門共同決定輸出值的生成。隱藏層單元內部結構[11]如圖1所示。

圖1 隱藏層單元結構




(3)

(4)

此算法可有效解決RNN模型的梯度衰減問題。例如當ft接近1且it接近0,則過去信息將會一直保留,便于更好地捕捉序列中時間步較大的樣本關系。ot越接近1,ct將有越多的信息傳遞至ht,并體現于輸出層結果;反之,越接近0,ct傳輸至ht的信息越少。
由于獲取黃金價格數據2010—2020年為每分鐘線的開盤價、收盤價、最高價、最低價數據,但步長太小時數據波動較少,近似于求解微分方程,訓練效果可信度不高,因此將數據處理為一小時線數據。以第1 min的開盤價為小時線開盤價,第60 min的收盤價為小時線收盤價,60 min內最高價為小時線最高價,60 min內最低價為小時線最低價。刪除有缺失值的數據,并進行歸一化處理,得到樣本量為62 440條數據。
技術因子是以價格、成交量等作為計算因子,通過一定數學計算得到的判斷價格走勢的數據、圖形等,可用于判斷買賣時間和價格。以40個技術指標及黃金的高開收低價作為特征構建XGBoost模型。首先根據每小時的開盤價和收盤價計算收益率qi,計算公式為

(5)
式中:close_pricei為i時刻的收盤價;open_pricei為i時刻的開盤價。根據收益取值分布為樣本漲跌趨勢打標簽,取值分布直方圖如圖2所示。

圖2 股市收益取值分布直方圖
可見大多數樣本集中在[-2.5,2.5]區間內,總體符合正態分布特征。取值為總樣本前20%判為漲,后20%判為跌,其余為震蕩。建立XGBoost模型并用網格搜索法調參,樹的最大深度為10,學習率為0.1,葉子節點最小權重和為3,每棵樹隨機采樣的特征比例為0.7,目標函數使用softmax的多分類器,類別數目為2。輸出模型的特征重要性并剔除掉對結果影響較小的特征,最終保留21個特征,重要性分布均勻,無冗余特征,見表1。

表1 技術因子選取
為使預測結果有統計意義,在前60 000組數據中,以步長為5 000、訓練樣本量為15 000滑動選取樣本,共9次訓練。例如第1次訓練樣本為第1~15 000組,第2次訓練樣本為第5 000~20 000組,以此類推;測試樣本均為后15組數據,對9次結果取均值,平均預測準確率為72%。
K線形態因子又稱蠟燭線,是股票分析的重要工具,有61個指標,包含信息豐富,可直觀表示股價趨勢強弱、買賣雙方力量平衡的情況。從Talib官網獲取K線形態的C語言源代碼,分析各指標對于漲跌趨勢的判斷邏輯。用黃金歷史數據做回測,從不同持倉時間和預測周期的維度,統計各指標出現次數、勝率及平均收益,結果如圖3所示。

圖3 不同維度的指標平均勝率
可見持倉時間越長、預測周期越長,整體勝率越高,在時間維度上,持倉時間為1 h的平均準確率最高。依據一小時線的平均勝率、平均收益率以及總出現次數對各指標進行排序并打分。發現大部分指標的預測準確率在48%~52%,認為概率隨機;選取預測準確率在52%以上的8個指標作為特征,具體指標見表2。

表2 K線形態因子選取
將上述8個特征加入XGBoost模型中進一步訓練,9次訓練的平均準確率為73.5%;觀察特征重要性,發現21個技術因子和8個形態因子的重要度均在0.03左右,無冗余特征。證明勝率較高的形態因子的加入使模型效果提升,但幅度不是很大。
為使XGBoost模型和LSTM模型預測結果具有可比性,在建立LSTM模型時,保持選取的技術因子和形態因子不變,樣本選取和訓練集、測試集劃分方式均不變,構建兩層LSTM和兩層全連接層的模型。通過網格搜索法選取最佳參數。
模型結構設置:第1層LSTM層的輸出神經元數為16,第2層LSTM層的輸出神經元數為4,第1層全連接層輸出神經元數為4,最后為1個神經元的輸出層。參數設置:滑動窗口為22,即每次迭代用前22組特征值預測后一時刻的漲跌趨勢;損失函數為最小均方誤差MSE;優化器為adam;batch_size為200,epoch取10,表示每訓練完200組樣本為一次迭代并更新一次權重,訓練完全部15 000組樣本為一個epoch,訓練完10個epoch則權重更新(15 000/200)×10=750次。此為一次訓練過程完整結束。
以步長5 000滑動選取樣本,9次訓練全部完成后取均值,平均預測準確率達到80%,再次提升了6.5%,且結果具有統計意義。
為了證明特征工程及模型結果的有效性,避免數據選取偶然性帶來的不確定性,選取歐元和浦發銀行股價數據,按照同樣的方法進一步做實證研究。結果見表3。

表3 實證研究結果分析
表3中第1列為選取的3組數據,第2列為根據特征重要性篩選技術因子后的XGBoost模型預測準確率,第3列為根據歷史數據回測篩選出效果較好的形態因子加入XGBoost模型后的預測準確率,第4列為將優化后的特征用于LSTM模型的預測準確率,第5列為3組數據分別加入的形態因子個數。從整體來看,由于歐元的初始分鐘線數據只有104萬條,經處理后的小時線數據量大約為16 000條,因此滑動選取的訓練樣本量為5 000條,預測準確率絕對值低于另外兩組數據。
分別觀察3組數據預測結果變化:黃金數據加入8個形態因子后,預測準確率提升1.5%;歐元數據加入5個形態因子后,預測準確率提升1.2%;浦發銀行數據加入6個形態因子后,預測準確率提升0.7%。比較優化特征后的XGBoost模型和LSTM模型:黃金數據預測準確率提升了6.5%;歐元數據提升了6.8%;浦發銀行數據提升了8.2%。可見,在歷史數據回測中表現優越的少數K線形態因子加入模型對預測效果有一定提升作用,LSTM模型也比XGBoost模型預測準確率更高。
通過對K線形態因子和技術因子的分析及特征優化工作,進一步比較XGBoost和LSTM模型在預測金融時間序列方面的能力,得出以下結論:
1)將K線形態61個因子在歷史數據中做回測,篩選出不同持倉時間和預測周期的平均勝率和收益率較高且出現次數較多的因子僅有不到10個,可見大部分因子的判斷效果近似隨機;但將少部分表現較好的因子作為特征應用到模型中,仍使預測效果提升1%左右,提升力度不大。
2) LSTM模型效果明顯優于XGBoost模型,由于LSTM模型可同時記憶長期和短期信息,并能有效解決梯度消失和梯度爆炸問題,更適用于跨度較長的時間序列數據預測問題。