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