陳其遠(yuǎn),劉源東,萬(wàn) 巖
(北京郵電大學(xué),北京100876)
為了解某種事物隨時(shí)間變化的規(guī)律,人們通常會(huì)按照一定的頻率對(duì)該事物進(jìn)行觀測(cè),觀測(cè)得到的結(jié)果被稱(chēng)為時(shí)間序列數(shù)據(jù),對(duì)該序列的分析和處理被稱(chēng)作時(shí)間序列分析。時(shí)間序列分析不僅在學(xué)術(shù)上被廣泛研究,同時(shí)在日常生活中有著廣闊的應(yīng)用領(lǐng)域,領(lǐng)域涉及氣候變化[1]、生物科學(xué)[2]、制藥[3]、商業(yè)市場(chǎng)決策[4]、金融[5]等。傳統(tǒng)的時(shí)間序列分析模型有AR模型、MR模型、ARMR模型、ARIMA模型、支持向量機(jī)、隨機(jī)森林等,但是這些模型的應(yīng)用高度依賴(lài)熟悉領(lǐng)域知識(shí)的專(zhuān)家,且這些模型難以建模復(fù)雜的時(shí)間序列結(jié)構(gòu)。此外,傳統(tǒng)的模型主要適用單變量時(shí)間序列分析,比如建模某產(chǎn)品的銷(xiāo)量變化。如果要建模多變量時(shí)間序列,如某連鎖店的不同店鋪的銷(xiāo)量變化,則每家連鎖店鋪要單獨(dú)建模,這不僅額外增加了計(jì)算量,還沒(méi)有利用不同店鋪的銷(xiāo)量之間的關(guān)系,有可能不同店鋪都存在一致的季度銷(xiāo)量變化趨勢(shì),也可能存在兩家店鋪銷(xiāo)量有跨數(shù)量級(jí)的差異。
近年來(lái),深度學(xué)習(xí)模型在計(jì)算機(jī)視覺(jué)、自然語(yǔ)言處理、推薦系統(tǒng)等都有著廣泛的應(yīng)用。與傳統(tǒng)建模方法相比,深度學(xué)習(xí)模型能從大量數(shù)據(jù)樣本中自動(dòng)學(xué)習(xí)到復(fù)雜的數(shù)據(jù)特征,而不需要熟悉領(lǐng)域知識(shí)專(zhuān)家的人工輔助構(gòu)建特征,因此在多個(gè)領(lǐng)域都取得了不錯(cuò)的結(jié)果?,F(xiàn)階段有很多用經(jīng)典結(jié)構(gòu)的深度學(xué)習(xí)模型建模時(shí)間序列的研究,如全連接神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)(CNN)[7,8]、長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)(LSTM)[9,10]等,有關(guān)于如何將時(shí)間序列的領(lǐng)域知識(shí)結(jié)合到深度學(xué)習(xí)模型的研究[11,12]。和傳統(tǒng)方法相比,這些方法不僅能只訓(xùn)練1個(gè)模型來(lái)建模多變量時(shí)間序列,還能根據(jù)近期獲取的新數(shù)據(jù)微調(diào)模型,而不需要重新訓(xùn)練。
序列到序列(Seq2Seq)模型[13]是其中一種深度學(xué)習(xí)模型,是由編碼器(Encoder)模塊和解碼器(Decoder)模塊組成。目前已有許多研究是將經(jīng)典的Seq2Seq模型直接用于時(shí)間序列分析[6,16-20]。
為進(jìn)一步提升Seq2Seq模型擬合復(fù)雜時(shí)間序列的效果,本文在經(jīng)典的Seq2Seq模型結(jié)構(gòu)上提出了三項(xiàng)改進(jìn):
1)一種將外部知識(shí)引入Seq2Seq模型的方法;
2)一種由兩個(gè)LSTM組成Decoder的Seq2Seq模型,該模型和經(jīng)典的Seq2Seq模型比有更強(qiáng)的學(xué)習(xí)能力;
3)一種利用多任務(wù)學(xué)習(xí)來(lái)提升Seq2Seq模型擬合精度的方法,該方法適合擬合存在較大數(shù)量級(jí)變化的時(shí)間序列。
在某企業(yè)對(duì)企業(yè)服務(wù)(B2B服務(wù))的成交總額(GMV)數(shù)據(jù)集(下文簡(jiǎn)稱(chēng)"GMV數(shù)據(jù)集")上,這三項(xiàng)改進(jìn)的有效性通過(guò)實(shí)驗(yàn)得到驗(yàn)證。該數(shù)據(jù)集是多變量時(shí)間序列,不同企業(yè)對(duì)該B2B服務(wù)的GMV存在跨量級(jí)的差別,且GMV受包括重大節(jié)假日、所在周期的工作日天數(shù)、季節(jié)等因素的影響很大,因此該數(shù)據(jù)集對(duì)于復(fù)雜的時(shí)間序列分析任務(wù)有代表性。實(shí)驗(yàn)結(jié)果表明,這三項(xiàng)改進(jìn)都能提升模型擬合的效果,且同時(shí)使用三項(xiàng)改進(jìn)的效果比只用其中一項(xiàng)更好。
和之前許多直接使用經(jīng)典深度學(xué)習(xí)模型結(jié)構(gòu)的工作相比,本文提出了三項(xiàng)針對(duì)經(jīng)典Seq2Seq模型結(jié)構(gòu)上的改進(jìn),且這三項(xiàng)改進(jìn)可以應(yīng)用在之前采用經(jīng)典Seq2Seq模型的方案上,有可能能進(jìn)一步提升這些方案的效果。
文獻(xiàn)[15]提出了LSTM模型,LSTM模型是經(jīng)典的Seq2Seq模型的構(gòu)成單元。該模型能避免長(zhǎng)期依賴(lài)問(wèn)題,可以建模較長(zhǎng)的時(shí)間序列。LSTM的結(jié)構(gòu)如圖1所示。由圖1可知,LSTM模型是鏈?zhǔn)浇Y(jié)構(gòu),由一系列相同的單元組成。每個(gè)單元包括Input Gate(it)、Forget Gate(ft)、Output Gate(ot)和Memory Cell(Ct)組成,其中Input Gate、Output Gate和Forget Gate能控制Memory Cell的讀、寫(xiě)和丟失,3個(gè)控制門(mén)Input Gate、Output Gate和Forget Gate的輸出分別連接到一個(gè)乘法單元上,從而實(shí)現(xiàn)控制功能。利用形式化語(yǔ)言,LSTM可以表述為
圖1 LSTM單元的結(jié)構(gòu)圖
ft=σ(Wf[ht-1,xt]+bf)
(1)
it=σ(Wi[ht-1,xt]+bi)
(2)
ot=σ(Wo[ht-1,xt]+bo)
(3)
Ct=ft⊙Ct-1+it⊙tanh(WC[ht-1,xt]+bC)
(4)
ht=ot⊙tanh(ft*Ct-1+it⊙tanh(WC[ht-1,xt]+bC))
(5)
其中σ是激活函數(shù)sigmoid,⊙是點(diǎn)乘運(yùn)算,W*是系數(shù)矩陣,b*是偏置向量,it、ft、ot分別表示t時(shí)刻Input Gate、Forget Gate和Output Gate的值,Ct表示t時(shí)刻Memory Cell的值,ht表示t時(shí)刻LSTM的單元的輸出。
在本文,一個(gè)LSTM單元可以用圖2表示,其中X表示單元的輸入,Y表示單元的輸出,W*表示該單元的內(nèi)部參數(shù),使用不同的W*表示不同的LSTM單元。
圖2 簡(jiǎn)化表示LSTM單元
文獻(xiàn)[8]提出了經(jīng)典的Seq2Seq模型,該模型在機(jī)器翻譯數(shù)據(jù)集WMT-14上取得了比只用LSTM模型更好的結(jié)果。Seq2Seq模型由Encoder和Decoder組成,Encoder和Decoder是2個(gè)獨(dú)立的LSTM模型。Encoder的輸入是原序列,輸出了整個(gè)序列的表征向量(LSTM的最后一個(gè)單元的輸出和Memory Cell的值);該表征向量是Decoder的輸入,輸出是目標(biāo)序列。為與本文第3.2節(jié)提出的新結(jié)構(gòu)Seq2Seq模型區(qū)分,經(jīng)典的Seq2Seq模型在下文簡(jiǎn)稱(chēng)為“同構(gòu)Seq2Seq模型”。
圖3展示的是同構(gòu)Seq2Seq模型的訓(xùn)練階段。在該階段,原序列“A、B、C”被輸入到Encoder中進(jìn)行編碼,編碼結(jié)果被輸入到Decoder;Decoder在接收到編碼結(jié)果后首先被輸入特殊標(biāo)簽“
圖3 同構(gòu)Seq2Seq模型的訓(xùn)練階段
圖4 同構(gòu)Seq2Seq模型的預(yù)測(cè)階段
在直接用同構(gòu)Seq2Seq模型解決時(shí)間序列分析問(wèn)題的方案[6,16-20]中,Encoder輸入的是在一個(gè)時(shí)間點(diǎn)前的一段時(shí)間的序列的值,Decoder輸出的是預(yù)測(cè)未來(lái)一段時(shí)間的序列的值。模型按照經(jīng)典的Seq2Seq模型的方式訓(xùn)練和預(yù)測(cè)。其中,文獻(xiàn)[6]在天津港進(jìn)出口集裝箱數(shù)據(jù)集上通過(guò)實(shí)驗(yàn)驗(yàn)證了同構(gòu)Seq2Seq模型解決時(shí)間序列分析問(wèn)題的效果優(yōu)于傳統(tǒng)的時(shí)間序列分析模型及其它現(xiàn)有的深度學(xué)習(xí)模型。
本文提出可以在同構(gòu)Seq2Seq模型上添加場(chǎng)景信息和其它特征信息,并且把離散值輸入輸出序列換成連續(xù)值輸入輸出序列,訓(xùn)練、預(yù)測(cè)的方法和其它結(jié)構(gòu)保持不變,新模型可用于擬合連續(xù)值時(shí)間序列并預(yù)測(cè)未來(lái)的序列的值??紤]到在有些場(chǎng)景任務(wù)(如給B2B服務(wù)的成交額做時(shí)間序列分析)中,節(jié)假日、所在地、季節(jié)特征等場(chǎng)景信息,和公司所屬行業(yè)、公司規(guī)模、使用習(xí)慣等其它特征信息是可獲取的,引入可知道的外部知識(shí)可能可以提升模型效果。
圖5是引入外部知識(shí)的Seq2Seq模型的訓(xùn)練階段,圖6是引入外部知識(shí)的Seq2Seq模型的預(yù)測(cè)階段。由圖5可知,在訓(xùn)練階段,Encoder的每個(gè)輸入向量都是由序列的值、向量化的場(chǎng)景信息,和向量化的其它特征信息拼接成的;而除了在第1次解碼時(shí)Decoder的輸入向量是由默認(rèn)值和向量化的場(chǎng)景信息拼接成,之后的每次輸入都是由真實(shí)的序列的值和向量化的場(chǎng)景信息拼接而成。由圖6可知,在預(yù)測(cè)階段,Encoder的每個(gè)輸入向量都是由序列的值、向量化的場(chǎng)景信息,和向量化的其它特征信息拼接成的;而除了在第1次解碼時(shí)Decoder的輸入向量是由默認(rèn)值和向量化的場(chǎng)景信息拼接成,之后的每次輸入都是由前一步的輸出值和向量化的場(chǎng)景信息拼接而成。序列的值、向量化的場(chǎng)景信息和其它特征信息的描述和取值見(jiàn)表1。
表1 數(shù)據(jù)集的字段
圖5 引入外部知識(shí)的同構(gòu)Seq2Seq模型的學(xué)習(xí)階段
圖6 引入外部知識(shí)的同構(gòu)Seq2Seq模型的預(yù)測(cè)階段
在同構(gòu)Seq2Seq模型中,當(dāng)Encoder的編碼結(jié)果(LSTM的最后一個(gè)單元的輸出和Memory Cell的值)被輸入到Decoder中時(shí),Decoder在第1次解碼時(shí)沒(méi)有序列的值作為輸入,所以將特殊標(biāo)簽“
圖7是異構(gòu)Seq2Seq模型的訓(xùn)練階段,圖8是異構(gòu)Seq2Seq模型的預(yù)測(cè)階段。其中,Encoder和Decoder的每一步的輸入向量和同構(gòu)Seq2Seq模型一致。由圖7可知,在訓(xùn)練階段,原序列“A、B、C”被輸入到Encoder中進(jìn)行編碼,編碼結(jié)果被輸入到Decoder;Decoder在接收到編碼結(jié)果后,首先將特殊標(biāo)簽“
圖7 異構(gòu)Seq2Seq模型的學(xué)習(xí)階段
圖8 異構(gòu)Seq2Seq模型的預(yù)測(cè)階段
預(yù)測(cè)時(shí)間序列的值中,有可能出現(xiàn)少數(shù)序列的值的預(yù)測(cè)結(jié)果和真實(shí)值有不少于2個(gè)數(shù)量級(jí)的誤差的情況。為解決該問(wèn)題,本論文提出的方法是將Decoder的輸出分成量級(jí)部分和除數(shù)部分。例如,待預(yù)測(cè)值是349.3,可以被拆成100×3.493,級(jí)數(shù)用3位One-Hot編碼表示成“100”(稱(chēng)作“量級(jí)向量”),有效數(shù)除以10成0.34903(稱(chēng)作“除數(shù)向量”,除以10以確保除數(shù)部分在[0,1)之間)。
新方法的Decoder單元結(jié)構(gòu)如圖11所示。和圖1所示的結(jié)構(gòu)相比,該單元的輸入由量級(jí)向量nt-1和除數(shù)向量at-1拼接而成,輸出向量ht分別接2個(gè)全連接網(wǎng)絡(luò),一個(gè)輸出量級(jí)向量nt,另一個(gè)輸出除數(shù)向量at。量級(jí)向量是One-Hot向量,除數(shù)向量是維度是1×1的向量。損失函數(shù)的公式如下
(6)
圖9是在同構(gòu)Seq2Seq模型上采用新方法后的學(xué)習(xí)階段,圖10是在同構(gòu)Seq2Seq模型上采用新方法后的預(yù)測(cè)階段,其中W、X、Y、Z是預(yù)測(cè)結(jié)果的除數(shù)部分。由圖可知,學(xué)習(xí)階段和預(yù)測(cè)階段的Encoder和同構(gòu)Seq2Seq模型一致,而學(xué)習(xí)階段和預(yù)測(cè)階段的Decoder單元的結(jié)構(gòu)如圖11所示。在訓(xùn)練階段,Decoder的輸入是由真實(shí)的序列的值計(jì)算得到的量級(jí)向量和除數(shù)向量;在預(yù)測(cè)階段,除第1次解碼輸入的是特殊標(biāo)簽“
圖9 利用多任務(wù)學(xué)習(xí)提升擬合精度的同構(gòu)Seq2Seq模型的學(xué)習(xí)階段
圖10 利用多任務(wù)學(xué)習(xí)提升擬合精度的同構(gòu)Seq2Seq模型的預(yù)測(cè)階段
圖11 利用多任務(wù)學(xué)習(xí)提升擬合精度的同構(gòu)Seq2Seq模型的Decoder單元
為了驗(yàn)證所提出方法的有效性,本文選取了某B2B服務(wù)的每日成交總額作為原始數(shù)據(jù),并以每28日為滑動(dòng)窗口求和制作每28日成交總額數(shù)據(jù)集。數(shù)據(jù)集的字段如表1所示。數(shù)據(jù)集的起始日期是2018年1月1日,結(jié)束日期是2021年3月30日,共有8000家企業(yè)。
數(shù)據(jù)預(yù)處理的流程是首先過(guò)濾無(wú)效數(shù)據(jù),然后用滑動(dòng)窗口劃分?jǐn)?shù)據(jù)集,最后對(duì)數(shù)據(jù)進(jìn)行歸一化。
1)過(guò)濾無(wú)效數(shù)據(jù)
在2020年3月30日之前沒(méi)有使用過(guò)該B2B服務(wù)超過(guò)252天(9個(gè)28天)的企業(yè),即在2020年9月12日前的成交總額都是0的企業(yè),需要在預(yù)處理階段被過(guò)濾掉,因?yàn)殚_(kāi)始使用該B2B服務(wù)到截止的日數(shù)的天數(shù)小于滑動(dòng)窗口的長(zhǎng)度。這樣的企業(yè)有51家。
2)通過(guò)滑動(dòng)窗口劃分?jǐn)?shù)據(jù)集
實(shí)驗(yàn)采取滑動(dòng)窗口的形式來(lái)制作訓(xùn)練集、驗(yàn)證集和測(cè)試集,將每252天(6個(gè)28天作為輸入,3個(gè)28天的最后1天作為輸出)作為一個(gè)時(shí)間窗口,并按天滑動(dòng)。
3)歸一化
不同信息,如公司規(guī)模、統(tǒng)計(jì)周期工作日天數(shù)、成交額、訂單量等,取值可能相差很大。為保證模型能穩(wěn)定收斂,在預(yù)處理階段要對(duì)這些信息作歸一化。這里采用等頻分箱歸一化[14]。等頻分箱歸一化能很好地保留數(shù)值之間的區(qū)分度,并且增強(qiáng)了模型對(duì)異常值的容錯(cuò)能力。在對(duì)數(shù)據(jù)歸一化后,模型的輸出結(jié)果也是歸一化后的預(yù)測(cè)結(jié)果,因此歸一化階段的映射關(guān)系要保留,并將歸一化后的預(yù)測(cè)結(jié)果還原成真實(shí)的值。
本文比較了不同改進(jìn)方法對(duì)Seq2Seq模型效果的提升,評(píng)價(jià)指標(biāo)是平均絕對(duì)誤差(Mean Absolute Eror,MAE)和絕對(duì)百分比誤差(Mean Absolute Percentage Error,MAPE),評(píng)價(jià)指標(biāo)的具體公式如下
(7)
(8)
實(shí)驗(yàn)的模型是在Tensorflow 1.14上搭建的,CPU型號(hào)是Intel(R)Xeon(R)CPU E5-2630 v4 @ 2.20GHz,內(nèi)存有251.671875GB,GPU型號(hào)是NVIDIA Tesla P40。
模型采用批量梯度下降(BGD),epoch是8,batch_size是1024,優(yōu)化器是自適應(yīng)矩估計(jì)(Adam)[15],優(yōu)化器參數(shù)參數(shù)是0.0005。模型每次輸入6個(gè)連續(xù)的28天的每28天B2B服務(wù)的成交總額,模型的Memory Cell的維度是96。
實(shí)驗(yàn)比較了同構(gòu)Seq2Seq模型、引入外部知識(shí)的同構(gòu)Seq2Seq模型、異構(gòu)Seq2Seq模型、通過(guò)多任務(wù)學(xué)習(xí)提升精度的同構(gòu)Seq2Seq模型、同時(shí)有3項(xiàng)改進(jìn)的Seq2Seq模型,實(shí)驗(yàn)結(jié)果如表2所示。
表2 實(shí)驗(yàn)結(jié)果
從表2可以看出,本文提出的3項(xiàng)改進(jìn)都可以有效提高預(yù)測(cè)精度,且同時(shí)使用3項(xiàng)改進(jìn)的效果最好。和同構(gòu)Seq2Seq模型相比,單獨(dú)使用1種方式能將MAE降低12.83%~39.54%,MAPE降低4.76%~15.87%;同時(shí)使用所有方法能將MAE降低47.55%,MAPE降低25.40%。
本文提出了3項(xiàng)對(duì)經(jīng)典的Seq2Seq模型結(jié)構(gòu)的改進(jìn),經(jīng)實(shí)驗(yàn)驗(yàn)證,上述改進(jìn)可提升Seq2Seq模型擬合復(fù)雜時(shí)間序列的效果,改進(jìn)后MAE最多可降低47.55%,MAPE最多可降低25.40%。
在未來(lái)的研究中,將考慮引入注意力機(jī)制,并將這三項(xiàng)改進(jìn)應(yīng)用在已有的直接用經(jīng)典Seq2Seq模型解決時(shí)間序列分析問(wèn)題的方案上,從而測(cè)試這三項(xiàng)改進(jìn)的效果。