本發(fā)明涉及股票數(shù)據(jù)挖掘技術(shù)領(lǐng)域,尤其是涉及一種基于長短期記憶深度學(xué)習(xí)網(wǎng)絡(luò)的股票近期走勢預(yù)測方法。
背景技術(shù):
股票市場在今天的金融市場中起著很重要的作用。近年來,股票市場吸引了越來越多人的關(guān)注。股票投資是為了獲得更大的收益,有效地進(jìn)行股票價(jià)格的預(yù)測,最大程度規(guī)避股票風(fēng)險(xiǎn),增加投資收益,是股票投資者最關(guān)注的熱點(diǎn)問題。
目前,股票預(yù)測方法主要有回歸分析法、時(shí)間序列法、馬爾柯夫預(yù)測等傳統(tǒng)方法,還有就是支持向量機(jī)、神經(jīng)網(wǎng)絡(luò)等人工智能的預(yù)測方法等。為了進(jìn)一步提高股票價(jià)格預(yù)測的精度,一些改進(jìn)的算法和學(xué)習(xí)策略也被應(yīng)用到股票價(jià)格預(yù)測的問題上。
深度學(xué)習(xí)是目前機(jī)器學(xué)習(xí)領(lǐng)域一個(gè)新的研究方向,它可以學(xué)習(xí)多個(gè)表示和抽象層次,較好的提取樣本的特征,在人工智能的相關(guān)領(lǐng)域已取得了廣泛的應(yīng)用成果。在本發(fā)明中,將基于長短期記憶深度學(xué)習(xí)網(wǎng)絡(luò),對股票的近期走勢進(jìn)行預(yù)測。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明公開提出了一種基于長短期記憶深度學(xué)習(xí)網(wǎng)絡(luò)的股票近期走勢預(yù)測方法。方法是一個(gè)通用的模型,可進(jìn)行不同項(xiàng)目的預(yù)測,可預(yù)測項(xiàng)目包括收盤價(jià)、漲跌幅、開盤價(jià)、最高價(jià)、最低價(jià)、成交量、換手率等。不同項(xiàng)目之間沒有關(guān)聯(lián),每個(gè)項(xiàng)目單獨(dú)訓(xùn)練,單獨(dú)預(yù)測。
以收盤價(jià)預(yù)測為例,方法分為訓(xùn)練和預(yù)測兩個(gè)階段。
對于某只股票,方法首先獲取該股票某個(gè)時(shí)間點(diǎn)以來至今的所有收盤價(jià),形成一個(gè)時(shí)間序列;之后以一定的步長循環(huán)重疊截取該時(shí)間序列,形成短序列,對每個(gè)短序列進(jìn)行標(biāo)準(zhǔn)化處理后,選取一定比例的短序列作為訓(xùn)練數(shù)據(jù),其余部分作為驗(yàn)證數(shù)據(jù)。
在訓(xùn)練階段,定義模型的結(jié)構(gòu),構(gòu)建長短期記憶深度學(xué)習(xí)網(wǎng)絡(luò),選擇損失函數(shù)及優(yōu)化器后,輸入訓(xùn)練數(shù)據(jù),經(jīng)過多輪模型訓(xùn)練后,以驗(yàn)證數(shù)據(jù)驗(yàn)證模型的性能。
在預(yù)測應(yīng)用階段,以該股票近期的收盤價(jià)走勢類似構(gòu)建短序列和標(biāo)準(zhǔn)化處理后,輸入模型進(jìn)行預(yù)測,預(yù)測是逐步進(jìn)行的,將第二天的預(yù)測結(jié)果放到原輸入后,再進(jìn)行下一天的預(yù)測,以此類推形成近期的預(yù)測序列。最后對預(yù)測結(jié)果進(jìn)行反標(biāo)準(zhǔn)化處理并輸出。
本發(fā)明方法的步驟如下:
(1)獲取某只股票待預(yù)測項(xiàng)目相關(guān)數(shù)據(jù)的時(shí)間序列;
(2)以固定步長循環(huán)重疊截取時(shí)間序列,構(gòu)建短序列并進(jìn)行標(biāo)準(zhǔn)化處理;
(3)構(gòu)建長短期記憶深度學(xué)習(xí)網(wǎng)絡(luò),并進(jìn)行模型訓(xùn)練和性能驗(yàn)證;
(4)以近期待預(yù)測項(xiàng)目的數(shù)據(jù)輸入模型后進(jìn)行單步預(yù)測;
(5)將單步預(yù)測結(jié)果與之前輸入加在一起后,作為下一步預(yù)測的輸入,以此類推形成近期的預(yù)測序列;
(6)對預(yù)測結(jié)果進(jìn)行反標(biāo)準(zhǔn)化處理后并輸出。
其中,步驟(1)中獲取某只股票待預(yù)測項(xiàng)目相關(guān)數(shù)據(jù)的時(shí)間序列,具體為:待預(yù)測項(xiàng)目以收盤價(jià)預(yù)測為例,獲取該只股票獲取某個(gè)時(shí)間點(diǎn)以來(如2005年1月1日),到當(dāng)前交易日的前l(fā)個(gè)交易日的收盤價(jià),形成一個(gè)數(shù)組,記為a,a=[a1,a2,…,ai,…ak]。數(shù)組a是一個(gè)時(shí)間序列。
其中,步驟(2)中以固定步長循環(huán)重疊截取時(shí)間序列,構(gòu)建短序列并進(jìn)行標(biāo)準(zhǔn)化處理,具體為從數(shù)組a中第一個(gè)元素開始,到k-t+1結(jié)束,以步長t循環(huán)重疊截取時(shí)間序列,最終形成如下的二維數(shù)組。
data=[[a1,a2,…,at],[a2,a3,…,at+1],[a3,a4,…,at+2],…,[ak-t+1,ak-t+2,…,ak]]。
數(shù)組是由一序列的短序列組成的。接著對短序列進(jìn)行標(biāo)準(zhǔn)化處理,有兩種可選方式進(jìn)行標(biāo)準(zhǔn)化處理方式。(a)以短序列的第一個(gè)元素作為基準(zhǔn)的標(biāo)準(zhǔn)化處理過程。以短序列[a1,a2,…,at]為例,處理結(jié)果為:[0,a2/a1-1,a3/a1-1,…,at/a1-1]。(b)以整個(gè)時(shí)間序列的均值和方差為基礎(chǔ)的標(biāo)準(zhǔn)化處理過程。處理結(jié)果為:[(a1-μ)/σ,(a2-μ)/σ,…,(at-μ)/σ]。
對所有的短序列都進(jìn)行標(biāo)準(zhǔn)化處理。之后根據(jù)二維數(shù)組data的長度len大小,取個(gè)比例p,如p=0.9,將0.9*len之前的短序列作為訓(xùn)練集,之后的短序列作為驗(yàn)證集。
其中,步驟(3)中構(gòu)建長短期記憶深度學(xué)習(xí)網(wǎng)絡(luò),并進(jìn)行模型訓(xùn)練和性能驗(yàn)證,具體為長短期記憶深度學(xué)習(xí)網(wǎng)絡(luò)(lstm)單個(gè)神經(jīng)單元cell的模型包括三個(gè)控制門,分別是輸入門(inputgate)、遺忘門(forgetgate)和輸出門(outputgate)。在單個(gè)神經(jīng)元的基礎(chǔ)上,構(gòu)建基于長短期記憶深度學(xué)習(xí)模型的結(jié)構(gòu)。模型由兩層lstm層和一層全連接層dence組成。第一層lstm層的輸入為(none,step,1)型的數(shù)組,輸出為(none,step,30)型的數(shù)組;第二層lstm層的輸入為(none,step,30)型的數(shù)組,輸出為(none,30)型的數(shù)組;第三層全連接層dence的輸入為(none,30)型的數(shù)組,輸出為(none,1)型的數(shù)組;另外在每個(gè)lstm層里帶了dropout操作。模型的損失函數(shù)定義為最小均方誤差mse,模型的優(yōu)化過程使用rmsprop。對于每個(gè)短序列,轉(zhuǎn)置后輸入到模型中進(jìn)行多輪的訓(xùn)練,最后得到優(yōu)化模型。
其中,步驟(4)中以近期待預(yù)測項(xiàng)目的數(shù)據(jù)輸入模型后進(jìn)行單步預(yù)測,具體為以收盤價(jià)預(yù)測為例,獲取該只股票近l個(gè)交易日的收盤價(jià),形成一個(gè)數(shù)組,記為b,b=[b1,b2,…,bi,…bl]。數(shù)組b是一個(gè)短序列,直接應(yīng)用步驟二的標(biāo)準(zhǔn)化處理方法對其進(jìn)行標(biāo)準(zhǔn)化處理。處理后對其進(jìn)行轉(zhuǎn)置,作為模型的輸入,通過模型計(jì)算后,可得一步預(yù)測結(jié)果的輸出。
其中,步驟(5)中將單步預(yù)測結(jié)果與之前輸入加在一起后,作為下一步預(yù)測的輸入,以此類推形成近期的預(yù)測序列,具體為假設(shè)當(dāng)前的測試輸入短序列b,對其進(jìn)行標(biāo)準(zhǔn)化處理后的結(jié)果為:c=[c1,c2,…,ci,…cl],將其輸入到模型中,得到一個(gè)單步的預(yù)測輸出o1;將其添加到短序列c的后面,并順序移除第一個(gè)元素,得到新的輸入短序列c=[c2,…,ci,…cl,o1]繼續(xù)輸入給優(yōu)化模型,得到第二步預(yù)測輸出o2;以此類推,假設(shè)想要預(yù)測的交易日數(shù)n=10,則進(jìn)行10次的循環(huán)預(yù)測。最后o=[o1,o2,…,on]即為初步的輸出結(jié)果。
其中,步驟(6)中對預(yù)測結(jié)果進(jìn)行反標(biāo)準(zhǔn)化處理后并輸出,具體為對于初步的輸出序列o=[o1,o2,…,on],如第(2)步驟中采用以短序列的第一個(gè)元素作為基準(zhǔn)的標(biāo)準(zhǔn)化處理,則輸出序列o的反標(biāo)準(zhǔn)化處理過程和結(jié)果為:ofinal=[b1(1+o1),b1(1+o2),…,b1(1+on)]。如第(2)步驟中采用以整個(gè)時(shí)間序列的均值和方差為基礎(chǔ)的標(biāo)準(zhǔn)化處理,則輸出序列o的反標(biāo)準(zhǔn)化處理過程和結(jié)果為:ofinal=[μ+σo1,μ+σo2,…,μ+σon]。
附圖說明
圖1是本發(fā)明基于長短期記憶深度學(xué)習(xí)網(wǎng)絡(luò)的股票近期走勢預(yù)測方法流程圖。
圖2長短期記憶深度學(xué)習(xí)網(wǎng)絡(luò)單個(gè)神經(jīng)單元的模型構(gòu)成。
圖3本發(fā)明構(gòu)建的基于長短期記憶的深度學(xué)習(xí)網(wǎng)絡(luò)模型。
圖4是基于本發(fā)明方法輸出的某一股票近期走勢的預(yù)測結(jié)果。圖中預(yù)測項(xiàng)目為上證指數(shù)。其它不同項(xiàng)目,如漲跌幅、開盤價(jià)、收盤價(jià)、最高價(jià)、最低價(jià)、成交量、換手率等,通過構(gòu)造相應(yīng)的數(shù)據(jù)輸入進(jìn)行模型訓(xùn)練和預(yù)測后,類似可得。這里序列長度t取30,預(yù)測交易日數(shù)n取20。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)例,對本發(fā)明進(jìn)行詳細(xì)的描述。
本發(fā)明方法是一個(gè)通用的模型,可進(jìn)行不同項(xiàng)目的預(yù)測,可預(yù)測項(xiàng)目包括收盤價(jià)、漲跌幅、開盤價(jià)、最高價(jià)、最低價(jià)、成交量、換手率等。不同項(xiàng)目之間沒有關(guān)聯(lián),每個(gè)項(xiàng)目單獨(dú)訓(xùn)練,單獨(dú)預(yù)測。方法近期預(yù)測的長度一般為5-20天,可作為近期走勢的一個(gè)趨勢。
假設(shè)股票列表為s,s=[s1,s2,…,si,…,sn],n為股票池中股票的數(shù)量,如中國上市股票的數(shù)量或美國上市股票的數(shù)量。
對于每只股票,假設(shè)待預(yù)測的股票為sm,m=1,…,n,以收盤價(jià)預(yù)測為例,具體預(yù)測步驟如下。其它項(xiàng)目的預(yù)測,如收盤價(jià)、漲跌幅、開盤價(jià)、最高價(jià)、最低價(jià)、成交量、換手率等,類似可得。
一、獲取某只股票待預(yù)測項(xiàng)目相關(guān)數(shù)據(jù)的時(shí)間序列。
假設(shè)對于股票列表s中的每只股票有如下數(shù)據(jù)字段:開盤價(jià)open,收盤價(jià)close,最高價(jià)high,最低價(jià)low,漲跌幅change,成交量volume,換手率turnover等,這些數(shù)據(jù)字段每項(xiàng)將作為單獨(dú)的預(yù)測項(xiàng)目。以收盤價(jià)預(yù)測為例,其中收盤價(jià)close為前復(fù)權(quán)價(jià)格。
獲取該只股票獲取某個(gè)時(shí)間點(diǎn)以來(如2005年1月1日),到當(dāng)前交易日的前l(fā)個(gè)交易日的收盤價(jià),形成一個(gè)數(shù)組,記為a,
a=[a1,a2,…,ai,…ak],
其中,k為該股票數(shù)組的長度,每只股票的長度k是不一定相等的,因?yàn)楣善敝虚g有停牌等因素的影響。
數(shù)組中每個(gè)元素都有對應(yīng)的交易日期,數(shù)組a是一個(gè)時(shí)間序列。
二、以固定步長循環(huán)重疊截取時(shí)間序列,構(gòu)建短序列并進(jìn)行標(biāo)準(zhǔn)化處理。
假設(shè)序列的步長為t,該值為一整數(shù),一般取值范圍在10-30區(qū)間。下面構(gòu)建短序列。從數(shù)組a中第一個(gè)元素開始,到k-t+1結(jié)束,以步長t循環(huán)重疊截取時(shí)間序列,最終形成如下的二維數(shù)組,數(shù)組由一序列的短序列組成,
data=[[a1,a2,…,at],[a2,a3,…,at+1],[a3,a4,…,at+2],…,[ak-t+1,ak-t+2,…,ak]]。
接下來對短序列進(jìn)行標(biāo)準(zhǔn)化處理,為適應(yīng)后續(xù)步驟中長短期記憶深度學(xué)習(xí)網(wǎng)絡(luò)的輸入,這里有兩種可選方式進(jìn)行標(biāo)準(zhǔn)化處理。
(1)以短序列的第一個(gè)元素作為基準(zhǔn)的標(biāo)準(zhǔn)化處理過程。
以短序列[a1,a2,…,at]為例,將每個(gè)元素除以第一個(gè)元素并減1,標(biāo)準(zhǔn)化處理結(jié)果為:
[0,a2/a1-1,a3/a1-1,…,at/a1-1]。
(2)以整個(gè)時(shí)間序列的均值和方差為基礎(chǔ)的標(biāo)準(zhǔn)化處理過程。
假設(shè)數(shù)組a的均值為μ,方差為σ,以短序列[a1,a2,…,at]為例,將每個(gè)元素減去均值后,除以方差,標(biāo)準(zhǔn)化處理結(jié)果為:
[(a1-μ)/σ,(a2-μ)/σ,…,(at-μ)/σ]。
所有的短序列都進(jìn)行如上的標(biāo)準(zhǔn)化處理。
之后,根據(jù)二維數(shù)組data的長度len大小,取個(gè)比例p,如p=0.9,將0.9*len之前的短序列作為訓(xùn)練集,之后的短序列作為驗(yàn)證集。
三、構(gòu)建長短期記憶深度學(xué)習(xí)網(wǎng)絡(luò),并進(jìn)行模型訓(xùn)練和性能驗(yàn)證。
長短期記憶深度學(xué)習(xí)網(wǎng)絡(luò)(longshort-termmemory,lstm)是一種時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)。相對于傳統(tǒng)的循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrentneuralnetwork,rnn),lstm模型通過在隱層引入多個(gè)閾值變量來存儲(chǔ)信息,因此其在模型訓(xùn)練的過程中,梯度不會(huì)很快消失。lstm模型單個(gè)神經(jīng)單元cell的模型構(gòu)成如圖2所示,包括三個(gè)控制門,分別是輸入門(inputgate)、遺忘門(forgetgate)和輸出門(outputgate)。輸入門用于表示是否允許歷史的信息加入到當(dāng)前記憶單元中;遺忘門表示是否保留當(dāng)前隱藏節(jié)點(diǎn)存儲(chǔ)的歷史信息;輸出門表示是否將當(dāng)前節(jié)點(diǎn)的輸出值輸出到下一層。關(guān)于lstm模型的介紹可參考其他文獻(xiàn)。
接下來構(gòu)建基于長短期記憶深度學(xué)習(xí)模型的結(jié)構(gòu)。模型結(jié)構(gòu)如圖3所示。模型基于keras神經(jīng)網(wǎng)絡(luò)庫進(jìn)行構(gòu)建,keras由純python編寫而成并基tensorflow或theano。模型由兩層lstm層和一層全連接層dence組成。每層的輸入輸出設(shè)置如圖中所示。step代表序列的步長為t,none代表數(shù)組在該維度的數(shù)值是動(dòng)態(tài)的,根據(jù)上一步驟的輸入設(shè)置,該維度的數(shù)值將為短序列二維數(shù)組data的長度。dropout是指在模型訓(xùn)練時(shí)隨機(jī)讓網(wǎng)絡(luò)某些隱含層節(jié)點(diǎn)的權(quán)重不工作,工作的那些節(jié)點(diǎn)可以暫時(shí)認(rèn)為不是網(wǎng)絡(luò)結(jié)構(gòu)的一部分,但是它的權(quán)重得保留下來。其數(shù)值代表不工作節(jié)點(diǎn)的比例,模型根據(jù)該數(shù)值在每個(gè)批次的訓(xùn)練過程中自動(dòng)隨機(jī)讓部分節(jié)點(diǎn)不工作。
模型的損失函數(shù)定義為最小均方誤差mse,模型的優(yōu)化過程使用rmsprop,rmsprop是一種改進(jìn)的隨機(jī)梯度下降算法。
對于每個(gè)短序列,轉(zhuǎn)置后輸入到模型中。對所有短序列數(shù)據(jù)經(jīng)過幾輪的訓(xùn)練后,得到優(yōu)化后的模型。將驗(yàn)證數(shù)據(jù)輸入到模型中驗(yàn)證模型的性能,直到獲得滿意的優(yōu)化模型。
四、以近期待預(yù)測項(xiàng)目的數(shù)據(jù)輸入模型后進(jìn)行單步預(yù)測。
以收盤價(jià)預(yù)測為例,獲取該只股票近l個(gè)交易日的收盤價(jià),形成一個(gè)數(shù)組,記為b,
b=[b1,b2,…,bi,…bl],
其中,bi代表近l-i的交易日的收盤價(jià)。l的取值為前面序列定義的步長t。
數(shù)組b是一個(gè)短序列,直接應(yīng)用步驟二的標(biāo)準(zhǔn)化處理方法對其進(jìn)行標(biāo)準(zhǔn)化處理。處理后對其進(jìn)行轉(zhuǎn)置,作為模型的輸入,通過模型計(jì)算后,可得一步預(yù)測結(jié)果的輸出。
五、將單步預(yù)測結(jié)果與之前輸入加在一起后,作為下一步預(yù)測的輸入,以此類推形成近期的預(yù)測序列。
假設(shè)當(dāng)前的測試輸入短序列b,對其進(jìn)行標(biāo)準(zhǔn)化處理后的結(jié)果為:
c=[c1,c2,…,ci,…cl]。
將其輸入到模型中,經(jīng)過優(yōu)化模型計(jì)算后得到第一次單步的預(yù)測輸出,記為o1。將其添加到短序列c的后面,并順序移除第一個(gè)元素,得到新的輸入短序列,為:
c=[c2,…,ci,…cl,o1]。
繼續(xù)輸入給優(yōu)化模型,得到第二步預(yù)測輸出o2。以此類推,假設(shè)想要預(yù)測的交易日數(shù)n=5,則進(jìn)行5次的循環(huán)預(yù)測。最后o=[o1,o2,…,on]即為初步的輸出結(jié)果。
六、對預(yù)測結(jié)果進(jìn)行反標(biāo)準(zhǔn)化處理后并輸出。
對于初步的輸出序列o=[o1,o2,…,on],根據(jù)第二步驟中所采用的標(biāo)準(zhǔn)化處理方式,相應(yīng)的有對應(yīng)的反標(biāo)準(zhǔn)化處理過程。
(1)以短序列的第一個(gè)元素作為基準(zhǔn)的反標(biāo)準(zhǔn)化處理過程。
這種情況下,這時(shí)的基準(zhǔn)元素是測試輸入短序列b的第一個(gè)元素b1,反標(biāo)準(zhǔn)化過程和最終輸出為:
ofinal=[b1(1+o1),b1(1+o2),…,b1(1+on)]。
(2)以整個(gè)時(shí)間序列的均值和方差為基礎(chǔ)的反標(biāo)準(zhǔn)化處理過程。
假設(shè)數(shù)組a的均值為μ,方差為σ,反標(biāo)準(zhǔn)化過程和最終輸出為:
ofinal=[μ+σo1,μ+σo2,…,μ+σon]。
綜上所述,本發(fā)明公開了一種基于長短期記憶深度學(xué)習(xí)網(wǎng)絡(luò)的股票近期走勢預(yù)測方法。方法首先基于歷史數(shù)據(jù),通過巧妙的構(gòu)建短序列來作為長短期記憶深度學(xué)習(xí)網(wǎng)絡(luò)的輸入;之后構(gòu)建并訓(xùn)練優(yōu)化模型;最后以近期的短序列數(shù)據(jù),通過應(yīng)用模型,逐步循環(huán)獲取輸出的預(yù)測結(jié)果。方法可為用戶股票的短線操作提供決策支持。
本發(fā)明方法同樣可應(yīng)用于證券類具有時(shí)間序列特征的數(shù)據(jù),如基金、期貨等。因此,盡管為說明目的公開了本發(fā)明的具體實(shí)施例和附圖,其目的在于幫助理解本發(fā)明的內(nèi)容并據(jù)以實(shí)施,但是本領(lǐng)域的技術(shù)人員可以理解:在不脫離本發(fā)明及所附的權(quán)利要求的精神和范圍內(nèi),各種替換、變化和修改都是不可能的。因此,本發(fā)明不應(yīng)局限于最佳實(shí)施例和附圖所公開的內(nèi)容。當(dāng)前公開的實(shí)施例在所有方面應(yīng)被理解為說明性的而非對其請求保護(hù)的范圍的限制。