朱雪超
【摘要】股票市場是一個高風險高收益的投資領域,為了不斷降低投資風險進而獲取最大的投資效益,投資者做了大量的研究,從不同的角度探究股票市場運行的內(nèi)在規(guī)律,不斷完善股票投資的分析方法、尋找理想的分析工具?;诖耍疚睦肦軟件統(tǒng)計方法對上海證券交易所提供的2016年1月4日-2017年12月31日平安銀行732天的相關數(shù)據(jù)建立BP神經(jīng)網(wǎng)絡模型,然后將其用于股票交易系統(tǒng)產(chǎn)生市場上的交易決策。本文選用的R軟件處理的智能方法能夠為投資者提供客觀信息,預測準確度較高,在股票預測等方面具有一定的優(yōu)越性。
【關鍵詞】BP神經(jīng)網(wǎng)絡 R軟件 價格預測 交易決策
一、前言
理論上來說,股票市場可以被看作是一個非常復雜的非線性動態(tài)系統(tǒng),對股票價格進行相關的分析與預測非常困難且極具有挑戰(zhàn)性。然而基于對巨大利益的追求以及對一些未知規(guī)律的求知欲望,人們一直堅持不懈的對股票市場進行探索與研究。近年來人工智能方法迅速發(fā)展起來,并被廣泛應用于智能控制、機器學習、存儲與管理等科學領域,它在股票預測中的應用也受到人們追捧?,F(xiàn)代智能技術(shù)中一個重要的研究就是數(shù)據(jù)的機器學習,數(shù)據(jù)的機器學習目的是希望能夠通過計算機對已知數(shù)據(jù)進行反復的自主學習,使計算機能夠找到數(shù)據(jù)間的相互關系,從而使其能夠完成對未知數(shù)據(jù)的判斷和預測。
二、BP神經(jīng)網(wǎng)絡原理
人工神經(jīng)網(wǎng)絡系統(tǒng)的基本構(gòu)成單元是神經(jīng)元,它是一個非線性、動態(tài)處理系統(tǒng),可以實現(xiàn)多輸入、單輸出的過程。我們可以依據(jù)神經(jīng)元的這種功能與特征,將神經(jīng)元抽象成較為簡便的數(shù)學模型。人工神經(jīng)網(wǎng)絡中的神經(jīng)元主要包含三個要素;一組連接、一個求和單元以及一個非線性激活函數(shù)。人工神經(jīng)元三要素如圖1所示。
(1)一組連接,權(quán)值wij表示系統(tǒng)中神經(jīng)元j到神經(jīng)元i的連接權(quán)值,它主要表現(xiàn)的是一組連接中的連接強度,系統(tǒng)中一個正的權(quán)值表示激活,而負的權(quán)值則表示抑制。
BP神經(jīng)網(wǎng)絡的突出特點是信號的正向傳遞與誤差的反向傳遞。在信號的正向傳遞過程中,數(shù)據(jù)信號通過輸入層進行多層輸入,再經(jīng)過隱含層的逐步處理后經(jīng)過輸出層輸出。系統(tǒng)中每一層神經(jīng)元都只會影響到它下一層的神經(jīng)元,當然也只會受它上一層神經(jīng)元的影響。若經(jīng)過輸出層輸出的結(jié)果距離我們的期望輸出有比較大的偏差,系統(tǒng)則自動轉(zhuǎn)入信號的反向傳遞階段。系統(tǒng)將根據(jù)輸出與期望的誤差對網(wǎng)絡權(quán)值以及閥值進行自動的調(diào)整,使得系統(tǒng)誤差信號最后能夠達到一個精度要求,從而使BP神經(jīng)網(wǎng)絡的輸出最終達到我們的期望。BP神經(jīng)網(wǎng)絡中神經(jīng)元的之間的傳遞函數(shù)為s型函數(shù),輸出量為0到1之間的連續(xù)量。
三、運用R軟件BP神經(jīng)網(wǎng)絡方法的股票預測
BP神經(jīng)網(wǎng)絡因為可以較為便捷準確的處理高度非線性問題,所以被很多研究者廣泛的應用于經(jīng)濟預測中,在R軟件中的添加包nnet可以實現(xiàn)BP神經(jīng)網(wǎng)絡。本文就是基于BP神經(jīng)網(wǎng)絡方法對相關股票數(shù)據(jù)進行建模,并利用R軟件中的nnet添加包編程實現(xiàn)BP神經(jīng)網(wǎng)絡的建模過程。
在將數(shù)據(jù)應用到BP神經(jīng)網(wǎng)絡之前,我們首先需要對股票相關數(shù)據(jù)進行建模前預處理。也就是對相關數(shù)據(jù)進行相應的尺度轉(zhuǎn)換,這樣可以有效的避免變量的尺度對神經(jīng)網(wǎng)絡模型的性能產(chǎn)生影響。在本文中們我們先將數(shù)據(jù)進行標準化處理,使所有股票相關數(shù)據(jù)的均值為0標準差為1。R軟件中函數(shù)scale()可以實現(xiàn)上面的數(shù)據(jù)標準化過程。在數(shù)據(jù)處理完,我們可以用函數(shù)unscale()將以上標準化后的數(shù)據(jù)進行逆運算,得到原始尺度的數(shù)據(jù)。
加載nnet包后,在默認的情況下,函數(shù)nnet()以區(qū)間[-0.5,0.5]中的隨機值來設置結(jié)點之間鏈接的初始權(quán)重。選擇出的值即為結(jié)點之間鏈接的初始權(quán)重,這表示我們在連續(xù)運行后所得到的結(jié)果極有可能是不相同的。在此本文加入了set.seed()函數(shù),這個函數(shù)可以將隨機發(fā)生器中的種子數(shù)進行初始化,這樣就避免了選擇出的權(quán)值相同的情況。
在平安銀行732天的數(shù)據(jù)中,我們以其中前600個相關數(shù)據(jù)作為訓練集觀測值來創(chuàng)建神經(jīng)網(wǎng)絡模型,再應用其中后132個相關數(shù)據(jù)作為觀測值來測試這個預測模型。將訓練集標準化之后,在程序中調(diào)用函數(shù)nnet()建立BP神經(jīng)網(wǎng)絡模型,然后利用函數(shù)predict()獲得測試數(shù)據(jù)集的BP神經(jīng)網(wǎng)絡預測值。取得預測值之后,調(diào)用函數(shù)unscale()將數(shù)據(jù)轉(zhuǎn)化為標準化之前的數(shù)據(jù)。在設定我們所期望的買入與賣出界限值以后,再應用函數(shù)trading.signals()將所預測的數(shù)值轉(zhuǎn)換為信號。最后通過函數(shù)sigs.PR()獲得我們關心的兩類事件以及決策精確度和回溯精確度矩陣。
在R軟件中執(zhí)行以上命令得到?jīng)Q策精確度與回溯精確度矩陣,如表1所示:
所得到的三行兩列矩陣就是決策精確度與回溯精確度矩陣,在這個矩陣中行‘s表示賣出、‘b表示買入、‘s+b表示保持持有,列‘precision表示的是決策精確度、‘recall表示的是回溯精確度。我們可以從這個矩陣中發(fā)現(xiàn)BP神經(jīng)網(wǎng)絡模型的決策精確度較好,回溯精確度的值較低,但是回溯度值較低所導致的問題不是很嚴重,因為它意味著失去機會而不是有成本損失。