◎隋金城
最近幾年,越來越多的專家學者利用神經網絡算法進行股票預測,但普遍存在選取的輸入屬性過少,預測天數普遍過短的問題。因此,本文在選擇輸入屬性時,不僅僅使用所選股票金陵藥業自身的指標,還增加了深證成指和中國生物醫藥指數連續5天共計135個輸入屬性,預測金陵藥業接下來5天的收盤價。使用遺傳算法優化BP神經網絡的初始權值和閾值,構建遺傳算法優化BP神經網絡的股票預測模型。不僅提高了預測的準確度,而且縮短了模型的運行時間。
BP神經網絡由多個網絡層構成,分別是輸入層、隱含層和輸出層。它的運行過程包含前饋傳播和反向傳播兩個部分。在前饋傳播中,信息從輸入層,經過隱含層,到達輸出層。每一層的狀態只能影響其下一層的狀態,而不能對其它層產生任何影響。若輸出層沒有獲得理想的輸出,則開始反向傳播,誤差信號將沿著原網絡返回,每一層的連接權值和閾值會逐一修改。該過程不斷迭代,直到誤差信號滿足標準。
由于BP神經網絡初始神經元之間的權值和閾值是隨機選擇的,容易陷入局部最小值。因此本文使用遺傳算法對初始神經元之間的權值和閾值進行優化。
遺傳算法是一種特殊的進化算法,包含了遺傳、變異等生物學知識??梢哉f,遺傳算法是一種優化技術,它試圖找出產生最佳輸出的輸入值。
首先要產生初始種群。編碼長度為輸入屬性的數量,用二進制方法編碼,編碼值為“0”或“1”。隨機產生 n個個體,即 n 個初始種群。
然后計算適應度函數。適應度函數是遺傳算法獲得最佳結果的關鍵,適應度越大,則個體遺傳進入下一代的概率也就越高。本文選擇誤差平方和作為適應度函數。
選擇運算選用輪盤賭方法,個體適應度越大,被選擇的可能性就越大。交叉運算使用算術交叉算子,將個體兩兩隨機配對獲得新個體。變異運算采用非均勻變異算子,隨機產生變異點,防止陷入局部最優,維持種群豐富性。
遺傳算法優化BP神經網絡的步驟如下:
(1)初始化種群。
(2)計算適應度函數。
(3)用輪盤賭方法選擇個體。
(4)交叉、變異,獲得新個體。
(5)計算新個體的適應度。
(6)如果獲得符合預期的個體或超過設置的最大迭代次數,繼續下一步。否則,返回(2)繼續執行。
(7)解碼,獲得優化的權值和閾值。
利用Python從開放金融大數據平臺Tushare獲取金陵藥業(000919)、深證成指(399001)和生物醫藥指數(399441)的股票數據。使用2013年1月17日到2019年3月20日共計1500個交易日的數據進行訓練。共選擇135個輸入屬性(金陵藥業、深證成指和中國生物醫藥指數連續5天的開盤價、收盤價、最高價、最低價、漲跌幅、成交額、成交量、5日均值及5日均量)。用GA-BP模型預測2019年3月21日到2019年3月27日期間5個交易日的股票收盤價。
本文特別選擇將深證成指(深圳證券交易所成份股價指數)和中國生物醫藥指數加入到訓練數據。深證成指代表了所有深圳證券交易所上市公司的股票價格波動;而生物醫藥指數是一個行業指數,它可以衡量中國生物醫藥行業股票的表現??紤]這兩個指數是因為深證成指提供了中國股市的總體情況,而生物醫藥指數則提供了中國生物醫藥行業的特定情況。
使用平均絕對誤差(MAE)、平均絕對百分比誤差(MAPE)和均方根誤差(RMSE)來衡量模型預測股價的性能。
它們的計算公式如式(1)-(3)所示。

其中,xi代表第 i個樣本預測值,ti代表第i個樣本實際值,N為樣本數目。
共有135個輸入屬性,預測未來5天收盤價,隱藏層為1層,神經元個數為50個,建立3層BP神經網絡,拓撲結構為135-50-5。傳遞函數方面,隱藏層使用S型正切函數tansig,輸出層使用線性函數purelin。為了消除不同數據間量級差異大而造成的預測誤差,需要對原始數據進行歸一化處理,使用matlab中的premnmx函數將網絡的輸入數據和輸出數據歸一化到[-1,1]。訓練算法選擇 Levenberg-Marquardt算法,可以獲得更快的訓練速度。神經網絡的學習速率設為0.1,最大訓練次數1000,目標誤差0.00001。利用遺傳算法進行優化,染色體長度設置成135,種群大小40,最大迭代次數100。對比分析BP神經網絡模型和遺傳算法優化BP神經網絡模型,得到股價預測圖如圖3所示。預測性能的優劣通過MAE、MAPE、RMSE及模型的運行時間評判,對比結果如表1所示。

?
相比BP神經網絡模型,遺傳算法優化BP神經網絡模型預測準確度更高,建模時間也更短。
本文用遺傳算法優化BP神經網絡的初始權值和閾值,構建了遺傳算法優化BP神經網絡的預測模型,預測中國生物醫藥公司金陵藥業連續5天的股價,相較BP神經網絡獲得了更好的預測效果。數據準備和初步分析是提高股票價格預測模型準確性的一個有效方法。在以后的研究中,可以嘗試加入更多相關的輸入屬性進行預測,以求獲得更好的預測效果。