◎隋金城
最近幾年,越來越多的專家學(xué)者利用神經(jīng)網(wǎng)絡(luò)算法進(jìn)行股票預(yù)測,但普遍存在選取的輸入屬性過少,預(yù)測天數(shù)普遍過短的問題。因此,本文在選擇輸入屬性時,不僅僅使用所選股票金陵藥業(yè)自身的指標(biāo),還增加了深證成指和中國生物醫(yī)藥指數(shù)連續(xù)5天共計135個輸入屬性,預(yù)測金陵藥業(yè)接下來5天的收盤價。使用遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的初始權(quán)值和閾值,構(gòu)建遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的股票預(yù)測模型。不僅提高了預(yù)測的準(zhǔn)確度,而且縮短了模型的運行時間。
BP神經(jīng)網(wǎng)絡(luò)由多個網(wǎng)絡(luò)層構(gòu)成,分別是輸入層、隱含層和輸出層。它的運行過程包含前饋傳播和反向傳播兩個部分。在前饋傳播中,信息從輸入層,經(jīng)過隱含層,到達(dá)輸出層。每一層的狀態(tài)只能影響其下一層的狀態(tài),而不能對其它層產(chǎn)生任何影響。若輸出層沒有獲得理想的輸出,則開始反向傳播,誤差信號將沿著原網(wǎng)絡(luò)返回,每一層的連接權(quán)值和閾值會逐一修改。該過程不斷迭代,直到誤差信號滿足標(biāo)準(zhǔn)。
由于BP神經(jīng)網(wǎng)絡(luò)初始神經(jīng)元之間的權(quán)值和閾值是隨機選擇的,容易陷入局部最小值。因此本文使用遺傳算法對初始神經(jīng)元之間的權(quán)值和閾值進(jìn)行優(yōu)化。
遺傳算法是一種特殊的進(jìn)化算法,包含了遺傳、變異等生物學(xué)知識??梢哉f,遺傳算法是一種優(yōu)化技術(shù),它試圖找出產(chǎn)生最佳輸出的輸入值。
首先要產(chǎn)生初始種群。編碼長度為輸入屬性的數(shù)量,用二進(jìn)制方法編碼,編碼值為“0”或“1”。隨機產(chǎn)生 n個個體,即 n 個初始種群。
然后計算適應(yīng)度函數(shù)。適應(yīng)度函數(shù)是遺傳算法獲得最佳結(jié)果的關(guān)鍵,適應(yīng)度越大,則個體遺傳進(jìn)入下一代的概率也就越高。本文選擇誤差平方和作為適應(yīng)度函數(shù)。
選擇運算選用輪盤賭方法,個體適應(yīng)度越大,被選擇的可能性就越大。交叉運算使用算術(shù)交叉算子,將個體兩兩隨機配對獲得新個體。變異運算采用非均勻變異算子,隨機產(chǎn)生變異點,防止陷入局部最優(yōu),維持種群豐富性。
遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的步驟如下:
(1)初始化種群。
(2)計算適應(yīng)度函數(shù)。
(3)用輪盤賭方法選擇個體。
(4)交叉、變異,獲得新個體。
(5)計算新個體的適應(yīng)度。
(6)如果獲得符合預(yù)期的個體或超過設(shè)置的最大迭代次數(shù),繼續(xù)下一步。否則,返回(2)繼續(xù)執(zhí)行。
(7)解碼,獲得優(yōu)化的權(quán)值和閾值。
利用Python從開放金融大數(shù)據(jù)平臺Tushare獲取金陵藥業(yè)(000919)、深證成指(399001)和生物醫(yī)藥指數(shù)(399441)的股票數(shù)據(jù)。使用2013年1月17日到2019年3月20日共計1500個交易日的數(shù)據(jù)進(jìn)行訓(xùn)練。共選擇135個輸入屬性(金陵藥業(yè)、深證成指和中國生物醫(yī)藥指數(shù)連續(xù)5天的開盤價、收盤價、最高價、最低價、漲跌幅、成交額、成交量、5日均值及5日均量)。用GA-BP模型預(yù)測2019年3月21日到2019年3月27日期間5個交易日的股票收盤價。
本文特別選擇將深證成指(深圳證券交易所成份股價指數(shù))和中國生物醫(yī)藥指數(shù)加入到訓(xùn)練數(shù)據(jù)。深證成指代表了所有深圳證券交易所上市公司的股票價格波動;而生物醫(yī)藥指數(shù)是一個行業(yè)指數(shù),它可以衡量中國生物醫(yī)藥行業(yè)股票的表現(xiàn)??紤]這兩個指數(shù)是因為深證成指提供了中國股市的總體情況,而生物醫(yī)藥指數(shù)則提供了中國生物醫(yī)藥行業(yè)的特定情況。
使用平均絕對誤差(MAE)、平均絕對百分比誤差(MAPE)和均方根誤差(RMSE)來衡量模型預(yù)測股價的性能。
它們的計算公式如式(1)-(3)所示。
其中,xi代表第 i個樣本預(yù)測值,ti代表第i個樣本實際值,N為樣本數(shù)目。
共有135個輸入屬性,預(yù)測未來5天收盤價,隱藏層為1層,神經(jīng)元個數(shù)為50個,建立3層BP神經(jīng)網(wǎng)絡(luò),拓?fù)浣Y(jié)構(gòu)為135-50-5。傳遞函數(shù)方面,隱藏層使用S型正切函數(shù)tansig,輸出層使用線性函數(shù)purelin。為了消除不同數(shù)據(jù)間量級差異大而造成的預(yù)測誤差,需要對原始數(shù)據(jù)進(jìn)行歸一化處理,使用matlab中的premnmx函數(shù)將網(wǎng)絡(luò)的輸入數(shù)據(jù)和輸出數(shù)據(jù)歸一化到[-1,1]。訓(xùn)練算法選擇 Levenberg-Marquardt算法,可以獲得更快的訓(xùn)練速度。神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)速率設(shè)為0.1,最大訓(xùn)練次數(shù)1000,目標(biāo)誤差0.00001。利用遺傳算法進(jìn)行優(yōu)化,染色體長度設(shè)置成135,種群大小40,最大迭代次數(shù)100。對比分析BP神經(jīng)網(wǎng)絡(luò)模型和遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)模型,得到股價預(yù)測圖如圖3所示。預(yù)測性能的優(yōu)劣通過MAE、MAPE、RMSE及模型的運行時間評判,對比結(jié)果如表1所示。
?
相比BP神經(jīng)網(wǎng)絡(luò)模型,遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)模型預(yù)測準(zhǔn)確度更高,建模時間也更短。
本文用遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的初始權(quán)值和閾值,構(gòu)建了遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的預(yù)測模型,預(yù)測中國生物醫(yī)藥公司金陵藥業(yè)連續(xù)5天的股價,相較BP神經(jīng)網(wǎng)絡(luò)獲得了更好的預(yù)測效果。數(shù)據(jù)準(zhǔn)備和初步分析是提高股票價格預(yù)測模型準(zhǔn)確性的一個有效方法。在以后的研究中,可以嘗試加入更多相關(guān)的輸入屬性進(jìn)行預(yù)測,以求獲得更好的預(yù)測效果。