溫伍正宏,潘 甦,張 坤
(南京郵電大學,江蘇 南京210009)
深度學習在語音識別[1,2]、圖像識別[3,4]以及自然語言處理[5,6]等領域不斷取得突破性的進展,表現(xiàn)出巨大的潛力。隨著 AI 技術在各個應用領域的落地及實踐,金融科技也將迎來一個智能化的新時代,銀行系統(tǒng)的交易平臺擁有海量的數(shù)據(jù),運用深度學習算法發(fā)現(xiàn)交易量的漸變趨勢并進行預測,提前通知業(yè)務人員和系統(tǒng)運維人員可能的流量變化,并為領導者提供精準的決策支持,越來越受到關注。
圖1 網(wǎng)銀用戶增長曲線
本文的主要研究內(nèi)容和貢獻如下:
1)研究歷史交易量數(shù)據(jù)的周期性的變化趨勢和特征,包括:分鐘級別、小時級別、日級別、鄰近時間截面、鄰近時間區(qū)域、特殊日等;
2)通過特征工程對241天的歷史數(shù)據(jù)進行處理,生成的特征向量維度為[347040, 20];
3)基于長短期記憶網(wǎng)絡LSTM設計并實現(xiàn)了交易量預測模型LSTM-WP;
訓練模型,超參數(shù)調(diào)優(yōu)并進行預測結果對比分析,結果表明LSTM-WP模型在節(jié)假日的準確度比線性算法提高了約8%。
循環(huán)神經(jīng)網(wǎng)絡(RNN:Recurrent Neural Network)[8]是一類用于處理序列數(shù)據(jù)的神經(jīng)網(wǎng)絡。它通過每層之間節(jié)點(也稱為RNN cell)的連接結構來記憶之前的信息,并利用這些信息來影響后面節(jié)點的輸出。RNN可充分挖掘序列數(shù)據(jù)中的時序信息以及語義信息,它在處理時序數(shù)據(jù)時比全連接神經(jīng)網(wǎng)絡和卷積神經(jīng)網(wǎng)絡更具有深度表達能力,這使得RNN已廣泛應用于語音識別、語言模型、機器翻譯和時序分析等各個領域。
RNN的設計原理如圖2所示,RNN網(wǎng)絡在時間維度上展開,輸入xt(t時刻的特征向量),并經(jīng)過輸入層到隱藏層連接的有權重矩陣U參數(shù)化后,結合上一時刻該節(jié)點的狀態(tài)h(t-1)計算出該時刻的h(t),計算公式如式(1)所示,其中,隱藏到隱藏的循環(huán)連接由權重矩陣W參數(shù)化,函數(shù)f表示神經(jīng)網(wǎng)絡中的激活函數(shù)。
圖2 RNN設計原理
h(t)=f(U×xt+W×h(t-1))
(1)
隱藏到輸出的連接由權重矩陣V參數(shù)化,之后便得到了由x值得輸入序列映射后的輸出值o的對應序列,損失函數(shù)L衡量每個o與相應的訓練目標y的距離,再利用反向傳播算法和梯度下降算法訓練模型,由于每個時刻的節(jié)點都有一個輸出,所以通常情況下,RNN的總損失為所有時刻(或部分時刻)上的損失和。然而,如果時間序列過長,RNN并不能夠很好的將這些上下文信息關聯(lián)起來,產(chǎn)生“長期依賴”的問題,這是因為經(jīng)過許多階段傳播后的梯度傾向于消失(大部分情況)或爆炸(很少,但對優(yōu)化過程影響很大)[9]。
長短期記憶網(wǎng)絡(LSTM:Long Short Term Memory Network)是一種特殊的RNN,它由Hochreiter等人在1997年提出[10],主要解決了上面提到的RNN的“長期依賴”問題。它將原始的RNN cell替換成了LSTM cell,原始RNN cell僅適用單一tanh循環(huán)體,但LSTM cell使用三個“門(Gate)”結構來控制不同時刻的狀態(tài)和輸出[11],分別為“遺忘門”、“輸入門”和“輸出門”,對比如圖3圖4所示。這里的“門”結構可以實現(xiàn)有選擇性地讓信息通過,它使用了sigmoid激活函數(shù)的全連接神經(jīng)網(wǎng)絡和一個按位做乘法的操作來實現(xiàn)。
圖3 RNN cell內(nèi)部結構
圖4 LSTM cell內(nèi)部結構
“遺忘門”的計算公式如式(2)所示,它使得LSTM cell可以決定讓哪些信息通過,它的輸入是ht-1和xt,輸出是一個向量長度與Ct相同的、數(shù)值都在0和1之間的向量,表示讓Ct-1的各部分信息通過的比重,其中,0表示不讓任何信息通過,1表示讓所有信息通過。
ft=σ(Wf·[ht-1,xt]+bf)
(2)
“輸入門”使得LSTM可以決定當前t時刻的輸入數(shù)據(jù)中哪些信息留下來,它的操作分為兩步:①選取更新信息內(nèi)容(計算公式如式(3)所示)與更新量(計算公式如式(4)所示);②更新cell狀態(tài),計算公式如式(5)所示。
(3)
it=σ(Wi·[ht-1,xt]+bi)
(4)
(5)
通過“輸入門”的第二步操作,首先將不想保留的信息刪除掉,再加入需要保留的新添加的信息。在得到最新的節(jié)點狀態(tài)Ct后,“輸出門”結合上一時刻節(jié)點的輸出ht-1和當前時刻節(jié)點的輸入xt來決定當前時刻節(jié)點的輸出,具體計算公式如式(6)和式(7)所示。
ot=σ(Wo·[ht-1,xt]+bo)
(6)
ht=ot×tanh(Ct)
(7)
原始數(shù)據(jù)集共包含241個文本文件,每個文本文件記錄了關于中銀開放平臺當天每分鐘的用戶交易量,即每個文本文件是由1440條記錄構成,因此共有347040條記錄。
每條記錄格式為:
日期(date)時間(time)交易量(count)
在這241個文本文件中,有若干文件的記錄是異常的,如交易量為0或交易量與其它相同時間段內(nèi)的記錄顯著不同,因此首先通過刪除替換的方法對離異樣本點進行了處理。
分析原始數(shù)據(jù)發(fā)現(xiàn)交易量有如下特征:
1)分鐘級別和小時級別的周期性變化特征:通常情況下,每天的每分鐘和每小時的交易量的變化趨勢大致相同,如圖5所示。
圖5 分鐘和小時級別的交易量變化趨勢
2)日級別的周期性變化特征:通常情況下,周一到周五每一天的交易量的變化趨勢大致相同,如圖6中“—”線所示,周六和周日的交易量的變化趨勢大致相同,如圖6中“:”線所示,這里將周一到周五定義為工作日,周六和周日定義為休息日。
圖6 日級別交易量變化趨勢
3)鄰近時間截面交易量的變化特征:通常情況下,如果當天是工作日,那么其交易量與上周5天工作日的交易量的均值以及和上周該天的交易量大致相同;如果當天是休息日,那么其交易量與上周2天休息日的交易量的均值以及和上周該天的交易量大致相同。
4)鄰近時間區(qū)域交易量的變化特征:當前時刻的瞬時交易量與該時刻之前一段時間范圍內(nèi)的交易量變化存在關系。
5)特殊日的變化特征:特殊日包括節(jié)假日(比如:春節(jié)、國慶等)、重要日(比如:重大促銷日等)以及這些天前后的日期,特殊日的變化往往與日級別的周期性變化特征相反,比如,如果當天是工作日,但同時又是節(jié)假日,那么當天的交易量通常要比其它工作日要低很多,如圖7所示,“—”線代表正常的工作日交易量,“:”線代表特殊的工作日的交易量,可以看出,特殊的工作日由于該天實際上是假期,所以導致其交易量比正常的工作日要低;如果當天是休息日,但同時又是實際上需要工作的日期,那么當天的交易量通常要比其它休息日高很多,如圖8所示,“—”線代表正常的休息日交易量,“:”線代表特殊的休息日的交易量,可以看出,特殊的休息日由于該天實際上是工作日,所以導致其交易量比正常的休息日要高很多。
圖7 特殊工作日交易量變化趨勢
圖8 特殊休息日交易量變化趨勢
綜合以上分析,在特征工程階段,將每條記錄擴展為20維(feature_size=20)的特征向量,這里將第i條記錄記為Xi,Xi={fj,j=1,…,feature_size-1},其中,第2個特征即交易量是重點關注的,記為Yi。具體每一維的含義如表1所示。
表1 特征向量的特征含義
數(shù)據(jù)量共有241天×1440分鐘-time_step=346980條,這里time_step取60,表示每連續(xù)60條分鐘級別的記錄作為1個樣本Si,即Si是由[X0,X1,X2,…X59]組成,因此Si的維度為[time_step,feature_size]=[60, 20],樣本Si的組成如圖9所示,Y0為下一時刻的交易量值,以此來生成訓練集和測試集,這里將其中的90%作為訓練集(312282條),其余數(shù)據(jù)作為測試集(34698條),具體如圖10所示。
圖9 樣本Si的組成
圖10 訓練集與測試集的Si、Yi
由于LSTM對數(shù)據(jù)尺度敏感,所以根據(jù)特征的性質(zhì)將20維特征的每一維進行標準化:
1)對于f6、f7特征,使用one-hot編碼取值為0或1;
2)對于其它特征使用z-score標準化使其符合標準正態(tài)分布。
本文設計的LSTM-WP(LSTM-WebPredict)模型使用6層神經(jīng)網(wǎng)絡,包括輸入轉換層(Input Layer)、處理層(LSTM Layer)與輸出轉換層(Output Layer),如圖11所示。其中,輸入轉換層由1層全連接層(FCN:Fully Connected Network)構成,負責將每一時刻的訓練樣本數(shù)據(jù)Xi由原始維度[batch_size:64, time_step:60, feature_size:20]轉換成與LSTM cell的num_units具有相同的維度[batch_size:64, time_step:60, num_units:128],如圖12所示;處理層由3層LSTM構成,每一層由1個LSTM cell在60個時間步長上(time_step)展開,加入dropout過程防止模型過擬合,如圖13所示;輸出轉換層由2層全連接層構成,負責將最后一個時間維度的LSTM cell的輸出轉換成預測的交易量,數(shù)據(jù)維度的變化過程為:[batch_size:64, num_units:128]-> [batch_size:64, output_layer1_size:64]-> [batch_size:64, output_layer2_size:1],如圖14所示。
圖11 LSTM-WP 模型設計
圖12 Input Layer
圖13 LSTM Layer
圖14 Output Layer
在訓練過程中,模型使用平方誤差來刻畫損失,使用L2正則化來防止模型過擬合,損失函數(shù)的定義參見式(8)所示,L2正則化公式見式(9),其中,y_t表示第t分鐘的實際交易量,y_pre表示第t分鐘的預測交易量,γ表示正則項系數(shù),Wi表示第i個參數(shù),模型共有m個參數(shù)。
(8)
(9)
在評價過程中,模型使用均方誤差(RMSE:root mean squared error)來評價模型的好壞,它反映了預測值對觀測值的平均偏離程度,取值大于或等于零,預測無誤差時等于零,均方誤差的計算公式參見式(10)所示,其中,n為1440,表示預測當天的1440分鐘,y_t表示第t分鐘的實際交易量,y_pre表示第t分鐘的預測交易量。
(10)
在預測過程中,本文使用滑動窗口方法,在每一天的凌晨0點5分觸發(fā)預測過程,根據(jù)上一日的引導數(shù)據(jù)并以此不斷更新引導數(shù)據(jù)來預測當天1440個分鐘的交易量。具體方法如下,算法偽代碼1給出了具體過程。
1)生成引導數(shù)據(jù):取前一天最后60分鐘的交易量數(shù)據(jù),即從23:00:00時刻到23:59:00時刻的實際交易量,生成維度為[time_step, feature_size]的特征向量;
2)喂進已訓練好的模型中:模型輸出下一時刻的交易量的預測值,如第一次觸發(fā)即生成00:00:00時刻的預測交易量Y0;
3)更新引導數(shù)據(jù):利用該交易量的預測值生成下一時刻維度為[1, feature_size]特征向量,即00:00:00時刻的特征向量,并將其添加到引導數(shù)據(jù)中的最后,再刪除最早時刻的特征向量,保證引導數(shù)據(jù)維度仍為[time_step, feature_size];
4)上述2)、3)步不斷迭代運行,直到預測出當天全部1440個分鐘的交易量,即當天的00:00:00到23:59:00。
算法偽代碼 1:基于滑動窗口預測交易量
算法變量定義:
1)lead_data表示用于計算當天00:00:00時刻交易量的引導數(shù)據(jù)
2)fv表示根據(jù)引導數(shù)據(jù)生成的特征向量
3)nfv表示標準化后的特征向量
4)next_predict_count表示根據(jù)引導數(shù)據(jù)計算的下一時刻交易量的預測值
5)predict_count表示當天1440個交易量預測序列
6)next_minute_fv表示下一時刻分鐘的特征向量
7)lstm()表示訓練好的模型
8)time_from, time_to表示引導數(shù)據(jù)的開始時刻與結束時刻
輸入:time_from, time_to
輸出:predict_count
算法開始:
1)lead_data=create_lead_data(time_from=23:00:00, time_to=23:59:00)
2)fv=create_feature_vector(lead_data)
3). nfv=normalizied(fv)
4)for i in range(1440):
5)next_predict_count=lstm(nfv)
6)predict_count.append(next_predict_count)
7)next_minute_fv=create_next_minute
_feature_vector(next_predict_count)
8)fv=update_feature_vector(fv,
next_minute_fv)
9)nfv=normalizied(fv)
10)Return predict_count.
本文使用LSTM-WP模型的預測結果與加權平均算法的預測結果在2020年勞動節(jié)節(jié)假日期間的表現(xiàn)進行了對比。勞動節(jié)節(jié)假日的時間信息如表2所示。
表2 2020年勞動節(jié)節(jié)假日信息
五天相應的預測對比結果如表3所示,可以看出,在節(jié)假日期間LSTM-WP模型的均方誤差要低于加權平均算法的均方誤差,平均降低了約8.63%,即LSTM-WP的預測準確率更高。
表3 預測對比結果
利用機器學習和深度學習算法助力金融科技中的趨勢預測等應用場景越來越成為一種趨勢。本文在分析交易量歷史數(shù)據(jù)特征的基礎上,基于長短期記憶網(wǎng)絡LSTM設計并實現(xiàn)了一種用于交易量預測的模型LSTM-WP,并與基于統(tǒng)計學的加權平均算法進行對比,結果表明,在對于特殊日這一類重要日期的預測上,LSTM-WP模型的準確率提高了約8%,同時,隨著訓練數(shù)據(jù)的不斷增多,模型的學習能力會逐漸增強;不僅如此,該算法的研究對于將AI技術應用于其它時間序列問題的業(yè)務場景,比如異常檢測、容量評估等也提供了相應的技術積累。