綦方中 林少倩 俞婷婷
1(浙江工業(yè)大學(xué)管理學(xué)院 浙江 杭州 310023)2(杭州國信大數(shù)據(jù)應(yīng)用研究院 浙江 杭州 310023)
隨著我國改革開發(fā)的推進(jìn),我國的股票市場在快速發(fā)展。股票市場的運(yùn)行影響著國民經(jīng)濟(jì)的發(fā)展,對未來的股票走勢進(jìn)行準(zhǔn)確的預(yù)測能夠降低投資者的風(fēng)險(xiǎn),同時在適當(dāng)時引導(dǎo)金融市場經(jīng)濟(jì),使得我國經(jīng)濟(jì)更健康的發(fā)展。
股票預(yù)測的基本思想一般是利用股票價格的歷史數(shù)據(jù)對股票未來的價格進(jìn)行預(yù)測判斷[1]。最初,技術(shù)分析法被用于股票的價格預(yù)測,通過長期觀察股票價格的日線圖、周線圖,歸納總結(jié)股價的波動規(guī)律。后來,國內(nèi)外學(xué)者建立時間序列預(yù)測模型實(shí)現(xiàn)預(yù)測。李麗莎[2]建立ARCH模型驗(yàn)證了上海股市的可預(yù)測性,并得出上海股市具有杠桿效應(yīng)、波動集群性和波動持續(xù)性的結(jié)論。馮盼等[3]通過建立ARMA模型,對招商銀行的股票歷史數(shù)據(jù)進(jìn)行分析,并預(yù)測出未來三天的股價情況。
但是,由于股票價格(指數(shù))具有非線性的波動,在股票價格(指數(shù))原有趨勢發(fā)生反轉(zhuǎn)時,時間序列模型難以應(yīng)對。此時,人工智能技術(shù)開始興起,給股票價格的預(yù)測帶來新的方向。其中,BP神經(jīng)網(wǎng)絡(luò)由于其強(qiáng)大的噪聲數(shù)據(jù)承受能力和非線性映射能力而受到了廣泛的應(yīng)用。王莎[4]運(yùn)用改進(jìn)的BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)了湖南三一重工的股價預(yù)測。李杰等[5]利用神經(jīng)網(wǎng)絡(luò)并結(jié)合主成分分析對中國石化天股票歷史指標(biāo)數(shù)據(jù)的收盤價進(jìn)行了預(yù)測,并通過圖像仿真擬合驗(yàn)證了該方法的準(zhǔn)確性。但是,傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)在股票價格預(yù)測時,存在容易陷入局部、訓(xùn)練時間過長、預(yù)測數(shù)據(jù)不準(zhǔn)確的問題。針對上述問題,本文構(gòu)建了基于PCA和IFOA-BP神經(jīng)網(wǎng)絡(luò)的股票預(yù)測模型。
主成分分析(PCA)是一種廣泛應(yīng)用的無監(jiān)督線性數(shù)據(jù)轉(zhuǎn)換技術(shù),其作用是實(shí)現(xiàn)有效的數(shù)據(jù)降維,并從最大程度上保留原始數(shù)據(jù)信息[5]。在實(shí)際的應(yīng)用中,PCA經(jīng)常應(yīng)用于數(shù)據(jù)的預(yù)處理,其能夠降低由于影響因素過多而造成的信息冗余。
果蠅優(yōu)化算法(FOA)是2011年潘文超教授受果蠅覓食行為的啟發(fā)而推演出的一種群體智能算法[6]。與其他群智能算法相比,F(xiàn)OA算法容易理解,參數(shù)設(shè)置較少,程序代碼易于實(shí)現(xiàn)且運(yùn)行效率高,有較強(qiáng)的尋優(yōu)能力[6]。本文首先將采用PCA對預(yù)處理后的樣本數(shù)據(jù)進(jìn)行降維,并利用改進(jìn)的果蠅算法(IFOA)優(yōu)化BP神經(jīng)網(wǎng)絡(luò),得到最優(yōu)的初始權(quán)值和閾值,接著建立PCA-IFOA-BP神經(jīng)網(wǎng)絡(luò)股票預(yù)測模型,最后實(shí)現(xiàn)股票價格預(yù)測,并與其他模型的對比,從而驗(yàn)證模型的有效性。
PCA是一種廣泛應(yīng)用的無監(jiān)督線性數(shù)據(jù)轉(zhuǎn)換技術(shù),其作用是實(shí)現(xiàn)有效的數(shù)據(jù)降維。在實(shí)際的股票價格預(yù)測中,通過使用PCA來對數(shù)據(jù)進(jìn)行預(yù)處理,能夠降低由于股票因素較多而造成的信息冗余,最大程度上反映原始數(shù)據(jù)信息。
以下是PCA算法的主要流程[5]:
假設(shè)有一個樣本集,樣本數(shù)為n,變量維數(shù)為d,將其用數(shù)據(jù)矩陣表示為:
(1)
(1) 對原始d維數(shù)據(jù)做標(biāo)準(zhǔn)化處理,假定標(biāo)準(zhǔn)化后的矩陣為Z。
(2)
(2) 構(gòu)造樣本的協(xié)方差矩陣。
(3)
(3) 求解協(xié)方差矩陣R的特征向量u1,u2,…,ud,特征根λ1,λ2,…,λd。
(4) 選擇與前k個最大特征值對應(yīng)的特征向量,其中k為新特征空間的維度(k≤d)。前k個主成分的累積貢獻(xiàn)率為:
(4)
(5) 通過前k個特征值構(gòu)建映射矩陣W。
(6) 通過映射矩陣W將d維的輸入數(shù)據(jù)矩陣Z轉(zhuǎn)換到新的k維特征子空間,假定映射后的主成分矩陣為Y。
Y=ZW
(5)
果蠅算法是一種基于果蠅覓食行為推演出的尋求全局優(yōu)化的新方法[7]。果蠅在視覺與嗅覺上的先天優(yōu)秀特性能夠幫助其找到遠(yuǎn)距離的食物[8],果蠅在搜尋食物時,先用靈敏的嗅覺尋找空氣中的各種氣味,捕捉食物源的大致位置,然后飛往那個位置,接近食物時,再利用敏銳的視覺確定同伴聚集的位置,直到找到食物,覓食過程如圖1所示[9]。
圖1 果蠅覓食過程
FOA作為一種新型群智能算法,具有結(jié)構(gòu)簡單、優(yōu)化過程易于理解的優(yōu)點(diǎn)[8]。但是果蠅算法也存在以下的缺陷:果蠅算法取得的最優(yōu)值均為正數(shù);對于極值點(diǎn)為零點(diǎn)的優(yōu)化問題,果蠅算法難以解決;果蠅算法極易陷入局部極值點(diǎn)。為了使FOA的優(yōu)化性能得到提高,在本文中將引入以下的改進(jìn)策略:
(1) 在味道濃度判定值中加入一個逃逸參數(shù)[10],使得候選集Si能夠取到負(fù)值。
(2) 將果蠅個體的搜索半徑改為自適應(yīng)值[11]來平衡算法的全局搜索能力和局部搜索能力,提高算法執(zhí)行效率。
(3) 將細(xì)菌覓食算法中的細(xì)菌遷徙操作自適應(yīng)地引入到果蠅算法[12]中來提高算法跳出局部極值的能力。
改進(jìn)果蠅算法的迭代尋優(yōu)步驟如下[10-14]:
Step1設(shè)定初始參數(shù),包括果蠅種群規(guī)模Sizepop,迭代次數(shù)Maxgen,可行閾值范圍內(nèi)隨機(jī)設(shè)定果蠅群體的初始位置。
Step2設(shè)定果蠅個體利用嗅覺器官尋找食物的隨機(jī)方向和距離。
Xi=X_axis+L
Yi=Y_axis+L
Zi=Z_axis+L
(6)
Step3計(jì)算個體果蠅到原點(diǎn)(0,0)的距離Di,將Di的倒數(shù)賦值給味道濃度判定值Si。
(7)
式中:δ是[0,1]之間的隨機(jī)數(shù)。
Step4求解味道濃度Smelli。將上個步驟中求得的Si代入到味道濃度判定函數(shù)Function中進(jìn)行計(jì)算,求得Smelli。
Smelli=Function(Si)
(8)
Step5根據(jù)個體果蠅對應(yīng)的味道濃度值,得到味道濃度的最小值、最大值以及最小值、最大值所在的位置。
[bestSmellbestIndex]=min(Smell)
[worstSmellworstIndex]=min(Smell)
(9)
Step6將味道濃度最小的值及其位置分別賦值給相應(yīng)的變量,其余的果蠅利用視覺飛向該位置。
Smellbest=bestSmell
Smellworst=worstSmell
X_axis=X(bestIndex)
Y_axis=Y(bestIndex)
Z_axis=Z(bestIndex)
(10)
Step7記錄并保留最佳味道濃度值bestSmell,更新進(jìn)化停滯步數(shù)t,記錄并且保留最差味道濃度值worstSmell。
if(bestSmell {Smellbest=bestSmell;t=0} else{t=t+1;Smellworst=worstSmell} (11) Step8判斷t P(i)=(Smellbest-Smell(i))/ ((Smellbest-Smellworst)×P) (12) 計(jì)算得到每個果蠅個體的遷徙概率P(i),并根據(jù)遺傳算法中的輪盤賭方式來選擇需要遷徙的個體,將需遷徙的個體重新分配至尋優(yōu)空間,而未遷徙的個體轉(zhuǎn)向Step 9。 Step9更新果蠅個體位置Xi、Yi、Zi。 Xi=XbestIndex+L Yi=YbestIndex+L Zi=ZbestIndex+L (13) Step10進(jìn)入迭代尋優(yōu),重復(fù)執(zhí)行Step 3-Step 7。判斷最佳味道濃度是否達(dá)到精度要求。若是,結(jié)束算法;否則,判斷當(dāng)前迭代次數(shù)小于最大迭代數(shù)Maxgen,若是則執(zhí)行Step 8-Step 9。 BP神經(jīng)網(wǎng)絡(luò)是基于誤差反向傳播的多層前饋神經(jīng)網(wǎng)絡(luò),利用BP神經(jīng)網(wǎng)絡(luò)的非線性和動態(tài)性,可以通過調(diào)整網(wǎng)絡(luò)連接的權(quán)值和閾值,以任意精度逼近任何一個連續(xù)函數(shù)[13]。因此可應(yīng)用BP神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)和模擬股票市場的交易模式,發(fā)現(xiàn)股票的內(nèi)在運(yùn)行規(guī)律,從而得到股票價格隨時間的變化的函數(shù)關(guān)系[15]。 然而,BP神經(jīng)網(wǎng)絡(luò)在訓(xùn)練時容易出現(xiàn)以下問題:BP神經(jīng)網(wǎng)絡(luò)對隱含節(jié)點(diǎn)、初始的權(quán)重和閾值十分敏感,一旦初始權(quán)值和閾值選取不當(dāng),可能導(dǎo)致在搜索全局最小值時陷入局部極小值;在訓(xùn)練數(shù)據(jù)集較大的情況下,由于學(xué)習(xí)速率值較小導(dǎo)致系統(tǒng)收斂速度下降和訓(xùn)練周期延長。上述的問題在一定程度上都將影響模型的預(yù)測精度,為改善上述問題,引入改進(jìn)果蠅算法,通過改進(jìn)果蠅算法在一定范圍內(nèi)搜索出一組使得味道濃度判定值(適應(yīng)度值)最小的網(wǎng)絡(luò)連接權(quán)值和閾值作為BP神經(jīng)網(wǎng)絡(luò)的初始值[15],降低BP神經(jīng)網(wǎng)絡(luò)的預(yù)測誤差,提高預(yù)測精度。 采用改進(jìn)果蠅算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的計(jì)算流程如圖2所示。 圖2 IFOA優(yōu)化BP神經(jīng)網(wǎng)絡(luò)流程圖 采用IFOA對BP神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化的過程包括BP神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的確定、果蠅算法優(yōu)化和BP 神經(jīng)網(wǎng)絡(luò)的訓(xùn)練預(yù)測。首先,為了實(shí)現(xiàn)IFOA對BP神經(jīng)網(wǎng)絡(luò)的優(yōu)化,必須確定BP神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)。其次,采取改進(jìn)的果蠅算法對BP神經(jīng)網(wǎng)絡(luò)的權(quán)值和閾值迭代尋優(yōu),得到IFOA優(yōu)化后的最優(yōu)權(quán)值和閾值。最后,通過對樣本數(shù)據(jù)的訓(xùn)練建立BP神經(jīng)網(wǎng)絡(luò)預(yù)測模型并實(shí)現(xiàn)股票價格的預(yù)測。 基于PCA-IFOA-BP神經(jīng)網(wǎng)絡(luò)的股票價格預(yù)測算法步驟如下: (1) 選取股票歷史數(shù)據(jù),確定股票價格影響指標(biāo),并歸一化處理樣本數(shù)據(jù)。 (2) 對歸一化處理后的樣本數(shù)據(jù)進(jìn)行主成分分析,根據(jù)各主成分解釋總方差的占比,選擇主成分的個數(shù)。根據(jù)主成分的個數(shù),確定 BP神經(jīng)網(wǎng)絡(luò)的輸入變量、輸出變量以及輸入層、隱含層以及輸出層的各層神經(jīng)元個數(shù)。 (3) 初始化模型參數(shù)。確定IFOA的種群規(guī)模Sizepop,最大迭代次數(shù)Maxgen,初始步長L1,細(xì)菌遷徙概率P,進(jìn)化停滯步數(shù)T。確定改進(jìn)果蠅算法濃度判定函數(shù)為: (14) (4) 采用改進(jìn)的果蠅算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)。通過計(jì)算果蠅味道濃度值的大小,尋找使得濃度判定函數(shù)值最小的最優(yōu)果蠅個體,記錄其位置及最優(yōu)果蠅味道濃度值,并根據(jù)果蠅群體進(jìn)化停滯情況,判斷是否進(jìn)行遷徙操作[12]。迭代循環(huán),直至最優(yōu)味道濃度值小于指定值或達(dá)到最大迭代次數(shù),即找到最優(yōu)的權(quán)值和閾值。 (5) 利用得到的最優(yōu)的權(quán)值和閾值對樣本數(shù)據(jù)進(jìn)行訓(xùn)練,得到BP神經(jīng)網(wǎng)絡(luò)預(yù)測模型后,對測試樣本數(shù)據(jù)進(jìn)行測試。 本文選取了2014年9月24日至2017年2月24日之間的共605天的上證指數(shù)交易數(shù)據(jù)作為實(shí)驗(yàn)數(shù)據(jù)。輸入變量中包括股票價格歷史數(shù)據(jù)以及技術(shù)指標(biāo),分別為股票的開盤價、收盤價、最高價、最低價、漲跌、漲跌幅、成交額、成交量MACD(平滑異同移動平均線)、KDJ(隨機(jī)指數(shù))、RSI(相對強(qiáng)弱指數(shù))、W&R(威廉指標(biāo))、DMI(動向指標(biāo))、BIAS(乖離率)、OBV(能量潮)、CCI(順勢指標(biāo))、ROC(變動速率指標(biāo))、CR(中間意愿指標(biāo))、BOLL(布林線)。部分股票交易數(shù)據(jù)如表1所示。 選取原始數(shù)據(jù)前550天的股票歷史數(shù)據(jù)作為訓(xùn)練樣本,后55天的數(shù)據(jù)作為測試樣本。股票預(yù)測可選取5天、10天、15天等作為一個預(yù)測周期,為實(shí)現(xiàn)較為精確的預(yù)測,將選取5天為一個周期實(shí)現(xiàn)股票價格的分析預(yù)測,即通過前五天的股票數(shù)據(jù)來預(yù)測后一天的收盤價格,所以最終形成的訓(xùn)練樣本為545組,測試樣本為50組。 表1 股票交易數(shù)據(jù)表 BP神經(jīng)網(wǎng)絡(luò)所輸入的初始值可能會影響模型的收斂速度以及預(yù)測精度。所以,在采用BP神經(jīng)網(wǎng)絡(luò)建立模型前,需要對輸入數(shù)據(jù)進(jìn)行歸一化處理。針對每一個輸入變量采用如下歸一化處理公式進(jìn)行處理,從而將數(shù)據(jù)轉(zhuǎn)化成[0,1]之間的數(shù)字。 (15) 式中:x′是歸一化后數(shù)據(jù),x為樣本數(shù)據(jù),xmax和xmin分別為x的最大值和最小值。 按照主成分分析的步驟對歸一化后的19個輸入變量進(jìn)行主成分分析,表2是經(jīng)過PCA提取后,各個主成分總共能解釋原始變量總方差的百分比。 表2 主成分分析結(jié)果表 由表2可以看出,前5個主成分的累積百分比達(dá)到了92.474%,即共能解釋原始變量的總方差占比達(dá)到90%以上,可以概括原始數(shù)據(jù)的大部分信息,故只采用前面5個主成分進(jìn)行后續(xù)實(shí)驗(yàn)。 采用改進(jìn)果蠅算法對BP神經(jīng)網(wǎng)絡(luò)的初始閾值和權(quán)值進(jìn)行迭代尋優(yōu),使用Python3.6編程實(shí)現(xiàn)模型算法。算法相關(guān)參數(shù)的設(shè)置如下: 改進(jìn)果蠅算法的參數(shù)設(shè)置為:果蠅群體隨機(jī)初始化位置為[-5,5],最大迭代次數(shù)Maxgen=500,果蠅群體初始規(guī)模Sizepop=50,初始步長L1=4,遷徙概率P=0.25,進(jìn)化停滯步數(shù)T=5。 BP神經(jīng)網(wǎng)絡(luò)算法的參數(shù)設(shè)置為:采用3層結(jié)構(gòu),由PCA輸出的主成分為5個,以5天為一周期實(shí)現(xiàn)價格預(yù)測結(jié)果可知輸入層神經(jīng)元個數(shù)設(shè)置為25個;通過誤差計(jì)算,求得最佳隱藏層神經(jīng)元個數(shù)為8個;輸出層神經(jīng)元個數(shù)為1個,表示收盤指數(shù)。設(shè)置隱含層和輸出層的激活函數(shù)分別為tanh和purelin,系統(tǒng)訓(xùn)練誤差為1e-5,學(xué)習(xí)率為0.4,最大訓(xùn)練次數(shù)為1 000次。 為了更好地說明本文提出的PCA-IFOA-BP神經(jīng)網(wǎng)絡(luò)模型具備有更好的預(yù)測性能,本文還將采用傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò),PCA-BP神經(jīng)網(wǎng)絡(luò)以及PCA-FOA-BP神經(jīng)網(wǎng)絡(luò)三種模型對股票價格進(jìn)行預(yù)測。 圖3為訓(xùn)練集在果蠅尋優(yōu)過程中適應(yīng)度值隨著迭代次數(shù)變化的情況。 圖3 適應(yīng)度值變化圖 由圖3可知,在迭代初期,相比于FOA,采用IFOA時,適應(yīng)度值能夠快速收斂到一個較小值,隨著迭代次數(shù)的增加,改進(jìn)的果蠅算法能夠在一定程度上跳出局部最優(yōu),搜尋全局最優(yōu)。此外,IFOA的最優(yōu)適應(yīng)度值(收斂值)明顯優(yōu)于FOA的最優(yōu)適應(yīng)度值(收斂值)。綜上,IFOA較FOA有著更快的收斂速度和更好的全局尋優(yōu)能力。 在采用IFOA和FOA分別對BP神經(jīng)網(wǎng)絡(luò)的權(quán)值和閾值參數(shù)優(yōu)化后,得到了最優(yōu)的初始權(quán)值和閾值,將權(quán)值和閾值代入到BP神經(jīng)網(wǎng)絡(luò)中進(jìn)行模型訓(xùn)練,并對股票價格進(jìn)行預(yù)測。BP神經(jīng)網(wǎng)絡(luò)、PCA-BP神經(jīng)網(wǎng)絡(luò)、PCA-FOA-BP神經(jīng)網(wǎng)絡(luò)以及PCA-IFOA-BP神經(jīng)網(wǎng)絡(luò)四種算法的訓(xùn)練曲線和預(yù)測結(jié)果分別如圖4和圖5所示。 圖4 BP網(wǎng)絡(luò)訓(xùn)練曲線 圖5 預(yù)測結(jié)果圖 由圖4可以看出,經(jīng)過IFOA優(yōu)化后的BP神經(jīng)網(wǎng)絡(luò)的收斂速度最快,且IFOA優(yōu)化后的BP神經(jīng)網(wǎng)絡(luò)具有更小的訓(xùn)練誤差。由圖5可以看出,采用PCA-IFOA-BP神經(jīng)網(wǎng)絡(luò)的股票預(yù)測結(jié)果的總體趨勢與實(shí)際股票價格趨勢基本一致,且相較于PCA-FOA-BP神經(jīng)網(wǎng)絡(luò)模型、 PCA-BP神經(jīng)網(wǎng)絡(luò)模型、BP神經(jīng)網(wǎng)絡(luò)模型的預(yù)測結(jié)果,PCA-IFOA-BP神經(jīng)網(wǎng)絡(luò)模型的預(yù)測結(jié)果更加接近實(shí)際值,具有更小的預(yù)測誤差,其更好地實(shí)現(xiàn)了股票價格的預(yù)測。 本文將采用均方誤差MSE(Mean Square Error)和平均絕對誤差(Mean Absolute Error)作為評價指標(biāo)來評價模型的有效性。MSE和MAE的定義分別為: (16) (17) 式中:fi表示模型的預(yù)測結(jié)果,yi表示真實(shí)值。各個模型的預(yù)測誤差值如表3所示。 表3 均方誤差和平均絕對誤差結(jié)果表 由表3可知,從MSE和MAE兩個評價指標(biāo)來看,BP、PCA-BP、PCA-FOA-BP、PCA-IFOA-BP的預(yù)測誤差均逐漸降低。故相比于BP、PCA-BP、PCA-FOA-BP,本文提出的PCA-IFOA-BP具有更高的預(yù)測精度。 本文提出了一種基于PCA和IFOA-BP神經(jīng)網(wǎng)絡(luò)的股價預(yù)測模型。首先,采用主成分分析法對樣本數(shù)據(jù)進(jìn)行降維處理,有效減少BP神經(jīng)網(wǎng)絡(luò)的輸入個數(shù)。其次,通過改進(jìn)的FOA算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)參數(shù),相比于FOA,IFOA的收斂速度和求解精度均有明顯的提升。將基于PCA和IFOA-BP神經(jīng)網(wǎng)絡(luò)模型應(yīng)用于股票價格預(yù)測,同時將該模型與BP神經(jīng)網(wǎng)絡(luò)模型、PCA-BP模型、PCA-FOA-BP模型進(jìn)行了對比。從仿真結(jié)果可知,PCA-IFOA-BP神經(jīng)網(wǎng)絡(luò)模型較其他模型具有更快的收斂速度和更高的預(yù)測精度,能夠較好地反映股票價格的漲跌情況,為投資者提供合理有效的參考。1.3 基于IFOA的BP神經(jīng)網(wǎng)絡(luò)參數(shù)優(yōu)化
2 股票價格預(yù)測步驟
3 實(shí)驗(yàn)仿真
3.1 數(shù)據(jù)選取
3.2 歸一化處理
3.3 PCA
3.4 改進(jìn)果蠅算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)
3.5 股票價格預(yù)測
3.6 模型預(yù)測性能對比分析
4 結(jié) 語