使用神經網路預測上證綜指的漲跌(一)

投資者常常希望能對市場未來的情況有準確的預期,而股票指數或多或少地能反映市場的一些情況,也有相關的衍生品可以買賣。預測股票指數在未來某個特定時間點達到的數值可能不易,相比之下,預測指數的漲跌可能相對容易一些。因此我們決定用神經網路、基於歷史數據對上證綜指的漲跌做出預測。

1. 神經網路簡介

神經網路是一種分類器,特點是可以捕捉非線性特徵,這是傳統的線性回歸方法所做不到的。例如手寫數字識別——1998年,在AT&T圖像處理研究部門的YanLeCun使用神經網路識別郵件上的手寫數字郵編上,準確率高達97%,比起傳統的線性方法提升了不少。

是什麼讓神經網路在圖形識別如此有效呢?這要從神經網路的發明說起了。人們對於人類中樞神經系統有一定認識後,模擬人類的神經網路,統計學家們創造出了「人工神經網路」(ArtificialNeural Network)這一模型。

人工神經網路由一層層相連接的節點(node)組成,節點模擬生物學意義上的神經元的行為。神經網路有輸入層,我們預測上證指數漲跌時需要的數據(與指數本身有關的數據、其他因子的數據)就由這裡輸入。我們使用一個三層神經網路,即只有一個隱藏層。輸入層與隱藏層中的節點由權重兩兩連接,公式具體是 :

其中w_{ij}^{(1)}是連接第一層(輸入層)與第二層(隱藏層)的權重,x_i是輸入層中的節點,a^{(2)}_j為隱藏層(第二層)中的節點的值,g是激勵函數。即隱藏層中的每一個節點都是激勵函數應用到輸入層節點的線性組合得來的。

比如說我們的輸入是上證指數過去五個交易日的收盤價,8月5日至8月11日,那麼在輸入層中就有五個節點,分別是x_1 = 2976.70, x_2 = 3004.28, x_3 = 3025.68, x_4 = 3018.75, x_5 = 3002.64. 假設輸入層到隱藏層的所有權重都是0.1,隱藏層里有三個節點,那麼第二層里的三個節點就都取值相同,為g(0.1*2976.70 + 0.1*3004.28 + 0.1*3025.68 + 0.1*3018.75 + 0.1*3002.64) = g(1502.805). 如果我們使用邏輯乙型函數(logisticsigmoid)作為激勵函數g,那麼就有g(1502.805) = 1/(1+e^(-1502.805)) = 1. 也就是說,隱藏層里所有節點都是1.

同樣,輸出層與隱藏層也通過節點間的權重連接,公式是:

其中w_{ij}^{(2)}是連接第二層(隱藏層)與第三層(輸出層)的權重,a^{(2)}_i是第二層(輸入層)中的節點,a^{(3)}_j為第三層(輸出層)中的節點的值,g仍然是激勵函數。

因此,輸入上證指數相關的數據之後,隱藏層中的三個節點我們都得到了1.為了運算方便,我們假設隱藏層到輸出層的所有權重都是-0.1,輸出層只有一個節點,繼續使用同樣的激勵函數g,那麼輸出層的節點就是g(-0.1*1 - 0.1*1 - 0.1*1) = g(-0.3) = 1/(1+e^(0.3)) = 0.4256, 也就是神經網路的輸出。當然,實際應用中,神經網路的權重是通過訓練不斷調整的,輸出層也可能有不止一個節點。

2. 預測上證指數漲跌的神經網路

那麼要怎麼構造一個能夠通過訓練調整的神經網路呢?這就需要做一系列的決定了:選擇輸入因子、輸入層節點數、隱藏層數、隱藏層節點數、激勵函數、正則化係數、迭代次數。以下逐個討論如何決定。

2.1.1 輸入因子

首先是輸入因子,換句話說,就是選擇我們認為可能與上證綜指有關聯的因子。根據一系列相關文獻,決定採用以下因子,大概可以分為以下八組:

(1)上證綜指的交易數據(日數據):開盤價、收盤價、日內最高價、日內最低價、交易量、交易額

(2)上證綜指的財務數據(日數據):歷史PEG、市盈率、市現率PCF、市銷率PS

(3)上證綜指的財務數據(季數據):凈資產收益率、總資產凈利率、銷售凈利率、銷售毛利率、銷售費用/營業總收入、經營性現金凈流量/營業總收入、資產負債率、流動比率、速動比率、總資產周轉率、存貨周轉天數、應收賬款周轉天數、凈營業周期、凈資產收益率(攤薄)、歸屬母公司股東的凈利潤、營業收入、經營活動產生的現金流量凈額、歸屬母公司的股東的權益、資產總計

(4)其他中國市場股指的收盤價(日數據):一系列上證與深證的股指

(5)上證綜指的組成中市值最大的五間公司的股價

(6)國債收益率曲線:一系列執行期限不同的國債收益率

(7)宏觀經濟因素(月度數據):CPI、工業增加值、M2供應量、基準存款利率

(8)人民幣對美元匯率、原油價格

2.1.2 數據缺失值

決定了輸入數據之後,需要進行數據預處理。數據預處理包括缺失值處理與標準化。其中,輸入因子中沒有選擇外國股指,也是出於缺失值處理的原因。外國股市的休市日與國內的不同,一個原因是節假日不同。另外,根據研報,在過去較長的一段時期內,外國股指與國內股指的關聯度不高,因此因子中排除了外國股指。

比如說,一個股票在某個交易日的數據缺失了,一般首先嘗試通過工程方法補救:搜索不同的數據源,看看其他數據源是否有記錄。常用的股價數據源有雅虎金融、谷歌金融,以及國內的tushare.無法從其他數據源找到的話,可以從觀測到了的有記錄的數據估計。可以用最近一個觀測值替代,也可以用前後最近的兩個觀測值的平均值。全部數據中的缺失值不多,最後使用了前後最近兩個觀測值的平均值。

2.1.3 數據標準化

處理完數據缺失之後,一般還要進行標準化。標準化的目的是讓不同因子的數據的範圍相近,確保各因子的數據不會因為取值範圍之差導致一些因子在模型訓練中不起作用。

舉一個線性回歸中的例子。有兩個自變數X_1X_2,一個因變數Y.自變數X_1的平均值為1000,自變數X_2的平均值為0.01,因變數Y的平均值為1000,則在計算相關係數時,X_2很可能會比X_1有更大影響,即X_2的係數比X_1大,然而實際X_1X_2可能對Y的影響程度相似。對數據進行標準化可以確保訓練出的模型不受數據範圍差異的影響。

使用了數據集的最大值和最小值來標準化,即用數據點減去數據集的最小值再除以數據集的最大值與最小值之差。數學表達為:

可以看到,進行標準化之後,數據點的取值都落在[0,1]區間之間。對所有因子的數據都進行標準化,則所有數據的取值範圍都在[0,1],避免了數據範圍差距的可能的不良影響。

2.1.4 多重共線性

數據處理尚未完成;數據中的多重共線性也可能成為問題。多重共線性(Multicollinearity)指的是多變數回歸中的變數間存在高度相關關係。例如,我們有變數X_1, X_2, ..., X_5五個變數,其中X_1 = X_2 + 2*X_4, 那麼變數間就存在多重共線性問題。對於有多重共線性的變數,可以理解為不同的變數中包含了相似的信息。在剛剛的例子中,由於X_1 = X_2 + 2*X_4,實際上我們可以用X_2X_4表示X_1, 因此在回歸中可以排除X_1這個變數。在我們使用的數據中,一些因子也明顯具有共線性,例如不同期限的國債收益率。

在線性回歸中,多重共線性會導致高度相關的變數的估計值的標準差過大,即估計值的變動範圍很大,因此影響結果的可靠性。另外,針對神經網路,如果輸入數據中的變數存在共線性,會「浪費」有限的輸入節點數目:即在只有一定數目的輸入節點時,有共線性的變數包含了重複信息,因此把這些共線變數全部包含在輸入節點中並不增加信息量,而原本這些被佔用的節點可以分配給其他因子,因而說浪費了節點數目。

神經網路的輸入節點數目理論上並無上限,然而數據量會限制輸入節點數目的取值。一般建議權重的數量在訓練數據數量的五分之一以下,否則有過擬合的可能性——如果權重數量相比數據量過大,那麼神經網路可能會「記住」輸入的訓練數據,而非真正「訓練」。過擬合的神經網路在訓練集外的數據集上表現往往不佳,因此我們不希望權重數量過大。

上證綜指的數據自1991年起才有記錄,日數據至今也就幾千個數據點,數據量不大。權重數目由輸入層、隱藏層、輸出層節點數目共同決定,而且隱藏層的節點數與輸入層的節點數正相關,因此輸入層的節點數很大程度上影響了權重的數量。之前選定的全部因子,總數有七十多個,全部都使用的話,輸入層節點起碼有70個,而數千個數據點對於一個有70個輸入層節點的神經網路來說,並不足夠。因此必須處理共線性問題。

多重共線性的嚴重程度可以由一個叫做方差膨脹因子(VarianceInflation Factor, 簡稱VIF)的統計量衡量。VIF是一個純粹基於自變數(X_1, X_2, ..., X_p)的量,與因變數(Y)無關。也就是說,我們可以用七十個因子的數據就計算出VIF,並不需要上證綜指的漲跌數據。對於一個自變數X_i,相應的方差膨脹因子的數學定義為1/(1-R_i^2),其中R_i^2是一個以自變數X_i作為因變數、其餘自變數(X_1, X_2, ..., X_{i-1}, X_{i+1}, ..., X_p)作為自變數的線性回歸的回歸係數。一個自變數的方差膨脹因子數值越大,則這個自變數與其餘自變數的多重共線性就越大。一般來說,VIF的值在5以上,就認為數據間有一定程度的共線性。

還記得我們分成了八組的因子嗎?由於我們是按照因子的經濟學/金融學意義分類的,我們認為同一組內的因子的關聯可能更強。比如說宏觀經濟指標組、國債收益率組,等等。因此計算VIF時,我們也是分組計算的。

通過VIF選擇保留因子的時候,並沒有排除全部VIF大於5的因子,因為這樣可能會排除掉一系列有共線性的因子,然而如果只保留這些因子中的一兩個的話,保留的因子的VIF可能會降低。換句話說,具有共線性的因子仍然是有一些信息量的,就此全部刪去的話會損失這部分信息量,因此決定選擇性地保留其中一些。

最終決定保留以下因子:

(1)上證綜指的交易數據(日數據):開盤價、收盤價、日內最高價、日內最低價、交易量

(2)上證綜指的財務數據(日數據):歷史PEG、市盈率、市現率PCF、市銷率PS

(3)上證綜指的財務數據(季數據):凈資產收益率、總資產凈利率、銷售凈利率、銷售毛利率、經營性現金凈流量/營業總收入、速動比率、存貨周轉天數、應收賬款周轉天數、凈資產收益率(攤薄)、歸屬母公司股東的凈利潤、營業收入、經營活動產生的現金流量凈額

(4)其他中國市場股指的收盤價(日數據):深證成份B股指數(399003.XSHG)、深證採掘指數(399232.XSHG)、深證IT指數(399239.XSHG)

(5)上證綜指的組成中市值最大的五間公司的股價

(6)國債收益率曲線:1M,3Y, 15Y, 30Y

(7)宏觀經濟因素(月度數據):CPI、工業增加值、M2供應量、基準存款利率

(8)人民幣對美元匯率、原油價格

至此,輸入因子算是決定了,數據預處理完成。下一篇將討論其他特徵的選定、特徵選擇以及訓練結果。

====================================

廣告時間,RQ量化大賽正在進行中,點擊查看實時排名:

ricequant.com/contest_l

====================================

Reference:

Lecun, Y., L. Bottou, Y. Bengio, and P. Haffner. "Gradient-based Learning Applied to Document Recognition." Proceedings of the IEEE Proc. IEEE 86.11 (1998): 2278-324. Web.

Mcculloch, Warren S., and Walter Pitts. "A Logical Calculus of the Ideas Immanent in Nervous Activity." The Bulletin of Mathematical Biophysics Bulletin of Mathematical Biophysics 5.4 (1943): 115-33. Web.

Niaki, Seyed Taghi Akhavan, and Saeid Hoseinzade. "Forecasting S&P 500 Index Using Artificial Neural Networks and Design of Experiments."Journal of Industrial Engineering International J Ind Eng Int 9.1 (2013): 1. Web.

Hecht-Nielsen,Robert. Neurocomputing. Reading, MA: Addison-Wesley Pub., 1990. Print.

Kaastra,Iebeling, and Milton Boyd. "Designing a Neural Network for ForecastingFinancial and Economic Time Series." Neurocomputing 10.3 (1996): 215-36.Web.

Labuszewski,John W. "Asian Stock Index Correlations." Asian Stock IndexCorrelations. CME GROUP, 17 Mar. 2014. Web. 24 June 2016.

推薦閱讀:

券商APP炒股,使用漲樂財富通是怎麼樣的體驗?
樂視出了什麼問題?還有救嗎?
12.12兩融新規下藏雷標的——第一天

TAG:股票 | 神经网络 |