1.中國科學(xué)院計算機網(wǎng)絡(luò)信息中心,北京 100190
2.中國科學(xué)院大學(xué),北京 100049
通常事業(yè)單位、私營企業(yè)的會計賬戶結(jié)構(gòu)分為兩個基本部分,一部分反映增加,另一部分反映減少。其中,登記的本期增加金額,稱為本期增加發(fā)生額;登記的本期減少金額,稱為本期減少發(fā)生額[1]。期末余額(Closing balance or Ending balance)是指期初余額(Opening balance or Beginning balance)加本期增加發(fā)生額和本期減少發(fā)生額相抵后的差額(亦稱余額),即在一定時期內(nèi)期末(單位:可選日、周、月、季度、年等時間單位)結(jié)出的賬戶余額,具體公式如下:
期末余額,是隨時間周期動態(tài)變化的序列數(shù)據(jù),即屬于時間序列的范疇。本文第1章詳細(xì)地介紹了時間序列的概念、定義以及分別就分類和回歸兩個大類介紹時間序列分析(Time-Series Analysis)的有關(guān)方法。時間序列分析和預(yù)測是機器學(xué)習(xí)(Machine Learning,ML)算法、深度學(xué)習(xí)(Deep Learning,DL)算法中常見的一種類型,經(jīng)常使用指數(shù)平滑法(Exponential Smoothing,ES)[3]和ARIMA 模型以及其它算法來解決時間序列中的各種問題,例如:商品銷售預(yù)測[4]。
近年來,相較于傳統(tǒng)的基于規(guī)則的模型和算法,機器學(xué)習(xí)算法和深度學(xué)習(xí)算法在股票預(yù)測、價格預(yù)測等[5,6]金融領(lǐng)域的時間序列分析問題中已經(jīng)取得了較為顯著的應(yīng)用成果。但在本文研究的單位或企業(yè)每日期末余額預(yù)測問題上,目前雖有分析師或工程師選擇使用 ARIMA 模型、Holt-Winters 模型進行處理,但普通的分析師們較難掌握相應(yīng)的專業(yè)知識進行優(yōu)化,外加數(shù)據(jù)本身情況復(fù)雜、規(guī)律性差,故而預(yù)測結(jié)果容易出現(xiàn)偏差。我們根據(jù)以上原因,選擇FaceBook 公司開源時間序列預(yù)測框架 fbprophet。fbprophet 在當(dāng)前已有的眾多機器學(xué)習(xí)模型和框架中表現(xiàn)十分突出,一經(jīng)發(fā)布,迅速成為時下時間序列分析愛好者們的首選框架之一,特別是在處理帶有季節(jié)性、節(jié)假日效應(yīng)的時間序列數(shù)據(jù)時,大放異彩。本文在第2 章是介紹 fbprophet的原理、結(jié)構(gòu),及選擇 fbprophet的具體原因。
第3 章實驗部分,首先介紹實驗開始前數(shù)據(jù)的預(yù)處理,具體的步驟包括異常值和離群點處理、缺失值處理、歸一化處理等操作,以及如何通過模型的可解釋參數(shù)優(yōu)化預(yù)測結(jié)果;其次,介紹實驗的開展過程和結(jié)果對比、分析,除本文推薦的fbprophet 模型外,我們選擇使用常見的多層感知器(Multi-Layer Perception,MLP)以及極端梯度提升(eXtreme Gradient Boosting,XGBoost)等模型作為對比,并分析了當(dāng)前存在的不足。第4 章是最終章,展望了未來的應(yīng)用領(lǐng)域和擴展趨勢,進行總結(jié)。
本文的貢獻在于,通過 fbprophet 對期末余額數(shù)據(jù)進行分析,在證明 fbprophet 對復(fù)雜多變的時間序列仍有較高準(zhǔn)確率的前提下,為單位或企業(yè)提供了未來期末余額的預(yù)測結(jié)果,方便財務(wù)人員直接觀測余額的趨勢變化從而進行財務(wù)管理和資金調(diào)整。同時,通過真實數(shù)據(jù)的有效實驗,證明 fbprophet 在中國科學(xué)院“新一代 ARP 系統(tǒng)“(簡稱 NEW ARP)上使用的可行性,為NEW ARP的后續(xù)功能擴展(包括財務(wù)報表分析、預(yù)測等)提供可靠意見。
時間序列(Time Series),通常是指以一定的時間間隔,按照時間先后順序收集某種現(xiàn)象或某一個統(tǒng)計指標(biāo)的數(shù)據(jù)而形成的序列[7]。其主要目的是根據(jù)已有的歷史數(shù)據(jù)對其在未來某一時間段內(nèi)的改變進行預(yù)測。通常,一個時間序列數(shù)據(jù)往往由以下四部分構(gòu)成:長期趨勢(T)、季節(jié)變動(S)、循環(huán)變動(C)和不規(guī)則變動(I)[8]。任何隨時間變化而改變的變量均可以使用時間序列分析方法進行處理。
1.2.1 時間序列分類算法
通常情況下,無論是在科學(xué)研究或工程應(yīng)用中,我們可獲取的時間序列數(shù)據(jù)主要以回歸預(yù)測問題為展開。例如:產(chǎn)品銷售預(yù)測、價格預(yù)測、股票預(yù)測等。但隨著機器學(xué)習(xí)技術(shù)和深度學(xué)習(xí)技術(shù)的不斷更新以及當(dāng)代數(shù)據(jù)規(guī)模呈指數(shù)倍增長的發(fā)展趨勢,各式各樣的想法和算法也隨之產(chǎn)生。例如:預(yù)測某一行業(yè)內(nèi)某家企業(yè)產(chǎn)品銷售利潤的變動趨勢,我們并不固化地預(yù)測具體的銷售利潤值,而是根據(jù)選定的閾值,預(yù)測其在未來某一階段內(nèi)的波動趨勢是逐步上漲還是整體下跌,而該問題屬于分類問題的范疇,即時間序列分類(Time Series Classification,TSC)。目前,專注于時間序列分類問題的愛好者們通常喜歡選擇多層感知器,或者全卷積神經(jīng)網(wǎng)絡(luò)(Fully Convolutional Neural Network,FCNs)以及殘差網(wǎng)絡(luò)(Residual Networks,ResNets)[9]等多種算法模型。同時,有效的解決時間序列分類問題有助于其在像心電圖(ECG/EEG)信號分類等獨具意義的重大領(lǐng)域做出貢獻[10]。
1.2.2 時間序列回歸預(yù)測算法
整體而言,常見的時間序列分析仍以預(yù)測未來某一個時間節(jié)點或幾個時間節(jié)點的狀態(tài)實際值即時間序列回歸預(yù)測(Time Series Regression Prediction)問題而居多。常見的分析方法通常建立在統(tǒng)計學(xué)的基礎(chǔ)之上,例如:差分整合移動平均自回歸模型,又稱為整合移動平均自回歸模型(Auto regressive Integrated Moving Average Model,ARIMA)及其組合擴展[11]?;蛘呖刹捎瞄L短期記憶網(wǎng)絡(luò)(Long Short Term Memory,LSTM)[12]等模型以及根據(jù)具體的應(yīng)用場景進行擴展。
目前,常見的預(yù)測方法需要滿足諸多假設(shè),例如:數(shù)據(jù)的分布應(yīng)滿足高斯分布(Gaussian distribution)或其它分布;或滿足一些平穩(wěn)性假設(shè)以及一定的約束條件等。但這通常會導(dǎo)致算法在實際應(yīng)用場景中受到嚴(yán)格的限制。
本文提出的問題,期末余額預(yù)測,以未來一個月(即 31天)之內(nèi)單位或企業(yè)每日的期末余額為預(yù)測目標(biāo)。其數(shù)據(jù)隨時間動態(tài)變化,即滿足時間的依賴性。
同時,現(xiàn)實世界背景下獲取的數(shù)據(jù)往往包含大量的不確定性。在期末余額預(yù)測問題中,可能存在大量因季節(jié)性、節(jié)假日效應(yīng)和業(yè)務(wù)變化等原因造成的離群點或異常值。(注釋:此處的離群點和異常值并非指因記錄人員登記錯誤、記錄缺失等主觀原因造成的數(shù)據(jù)異常。)
所以,在模型的選擇和構(gòu)造時,需要考慮時間序列數(shù)據(jù)本身是否包含趨勢、周期、季節(jié)性、噪音、隨機性、曲線和水平等諸多特點。若選擇使用常見的機器學(xué)習(xí)、深度學(xué)習(xí)時間序列分析方法,例如:ARIMA 或 LSTM 模型,對于對時間序列領(lǐng)域或當(dāng)前業(yè)務(wù)領(lǐng)域不熟悉、缺少經(jīng)驗的使用者們來說,較難進行有效的超參數(shù)調(diào)整、修改神經(jīng)網(wǎng)絡(luò)內(nèi)部結(jié)構(gòu)、添加額外的影響因素等優(yōu)化工作,進而難以得出可靠的預(yù)測結(jié)果。故,本文選擇使用 fbprophet 模型。fbprophet模型的原理和優(yōu)點以及選擇使用的具體原因如第2章節(jié)所述。
2.1.1 fbprophet 原理說明
fbprophet 是 Facebook 于2017年2月24日開源的一款時間序列預(yù)測框架。托管在GitHub 上。該模型基于一個靈活的貝葉斯模型(Bayesian model),其本質(zhì)是一個可分解的時間序列模型[13],其中包含以下三個主要的模型組建:
其中,g(t)是趨勢函數(shù),它就時間序列數(shù)據(jù)的非周期性變化進行建模;s(t)表示周期變化(例如:每周或每年的季節(jié)性,可根據(jù)實際業(yè)務(wù)應(yīng)用場景改變時間粒度);h(t)表示假期的影響;εt表示誤差項[14]。
同時,該框架內(nèi)置了直觀的參數(shù),使用者可以在完全不了解模型底層實現(xiàn)細(xì)節(jié)的前提下根據(jù)數(shù)據(jù)本身進行調(diào)整。正如同 Taylor SJ和Letham B 論文中所述的一樣,“讓對于時間序列模型和方法知之甚少的非領(lǐng)域人員也能夠靈活地將其應(yīng)用于廣泛的業(yè)務(wù)時間序列中[14]?!?/p>
2.1.2 fbprophet 流程結(jié)構(gòu)說明
從整體上看,fbprophet的預(yù)測流程是一個循環(huán)結(jié)構(gòu),由 Modeling、Forecast Evaluation、Surface Problems 以及 Visually Inspect Forecasts 四部分依次循環(huán)組成,反復(fù)迭代[14]。即整個過程是人工分析和自動化預(yù)測相結(jié)合的循環(huán)結(jié)構(gòu)。
相較于其它時間序列預(yù)測模型和框架,fbprophet自身具備諸多優(yōu)點,包括:(1)程序執(zhí)行準(zhǔn)確、快速?,F(xiàn)如今,F(xiàn)acebook的許多應(yīng)用程序都使用fbprophet為規(guī)劃計劃和目標(biāo)設(shè)定提供可靠的預(yù)測結(jié)果。fbprophet 把模型放到stan中,即可以非常快速地得到預(yù)測結(jié)果[15];(2)自動化??勺詣訉M合的時間序列歷史數(shù)據(jù)中的缺失值進行有效的處理[15];(3)可對估計結(jié)果進行調(diào)整。若使用者自身具備一定程度的專業(yè)知識和業(yè)務(wù)經(jīng)驗,可通過調(diào)節(jié)模型自帶的可解釋參數(shù),優(yōu)化預(yù)測結(jié)果[15];(4)為了方便更多的用戶使用,fbprophet 提供了 Python 編程語言和R 編程語言的兩類版本[15]。同時,fbprophet 框架自身內(nèi)嵌可視化工具,方便使用者們直接觀察預(yù)測結(jié)果。其次,同其它模型相比,整個預(yù)測流程操作簡單、容易上手、使用便捷。故,我們選擇 fbprophet 框架作為單位或企業(yè)日期末余額預(yù)測的預(yù)測模型。
本文的實驗?zāi)康?,是驗證 fbprophet 模型相比于其它神經(jīng)網(wǎng)絡(luò)模型或機器學(xué)習(xí)算法,在操作便利的同時,面對情況復(fù)雜、變化多端、不確定性大的日期末余額時間序列預(yù)測問題時,仍可以有較好的表現(xiàn),說明其具有較強的魯棒性。方便日后向其它同類型領(lǐng)域或其它分支領(lǐng)域出現(xiàn)的問題進行擴展,因此,首先對數(shù)據(jù)進行了異常值和離群點處理、缺失值處理和歸一化處理以及模型的參數(shù)調(diào)優(yōu);其次,我們將時間序列數(shù)據(jù)放入到fbprophet 模型和其它用于對比的機器學(xué)習(xí)和深度學(xué)習(xí)算法模型中,包括:MLP和XGBoost 等模型,通過回歸預(yù)測擬合指標(biāo) -- 平均絕對百分比誤差(Mean Absolute Percentage Error,MAPE)的相關(guān)對比,觀察 fbprophet 模型在真實數(shù)據(jù)上的預(yù)測結(jié)果。
3.2.1 數(shù)據(jù)集描述
本文使用某單位近年來日期末余額的脫敏數(shù)據(jù)。每個數(shù)據(jù)樣本有兩個特征,分別是“每日的日期”和“每日的期末余額”,作為fbprophet的輸入。fbprophet的輸入必須包含兩列數(shù)據(jù),一是時間戳,即時間信息;二是數(shù)值,代表需要預(yù)測的變量。且分別修改特征名稱為“ds”和“y”(需要遵守的固定格式)。
3.2.2 異常值和離群點處理
首先,通過人工比對等方式排除數(shù)據(jù)中因工作人員記錄錯誤等主觀原因造成的異常值;其次,通過相關(guān)的業(yè)務(wù)經(jīng)驗設(shè)定閾值,將不滿足的數(shù)據(jù)離群點剔除。
3.2.3 缺失值處理
本文使用 datatime.datatime()方法,首先核實序列中除刪除的異常值和離群點外,是否存在非節(jié)假日期間數(shù)據(jù)的缺失。若存在,則使用 fbprophet 擬合歷史數(shù)據(jù)時的預(yù)測值進行填充;其次,在通常情況下,單位或企業(yè)因正常的雙休日、節(jié)假日休息,不會有業(yè)務(wù)往來、資本交易、現(xiàn)金流動等操作,即日期末余額一般不會發(fā)生變化。但為了保證時間序列的完整性,將缺失的節(jié)假日日期補充到時間序列中。并使用每周五和每個節(jié)假日(例如:五一勞動節(jié)、十一國慶節(jié))頭一天的期末余額填充相鄰的雙休日、節(jié)假日的缺失值。(注釋:該步驟可根據(jù)業(yè)務(wù)需要酌情省略。但在其他業(yè)務(wù)場景中,例如:商場銷售利潤預(yù)測,具有很強的節(jié)假日效應(yīng),因為商場的銷售利潤通常在雙休日期間會高于工作日,尤其是節(jié)假日。則需要處理缺失值并通過holidays參數(shù)添加日期。)
3.2.4 歸一化處理
為了防止因輸入數(shù)據(jù)過大導(dǎo)致模型難以便捷快速的得出預(yù)測結(jié)果,于是對數(shù)據(jù)采取歸一化處理進而保證程序運行時收斂加快。歸一化后的數(shù)據(jù)仍然保持原數(shù)據(jù)間的相對關(guān)系,同時一定程度上提高了數(shù)據(jù)的可比性。
可選用的數(shù)據(jù)歸一化方法(Normalization Method)有:常見的min-max標(biāo)準(zhǔn)化(Min-Max Normalization),同時也叫線性函數(shù)歸一化;Z-score標(biāo)準(zhǔn)化(Z-score standardization),也叫 0 均值標(biāo)準(zhǔn)化;以及對數(shù)歸一、指數(shù)歸一等多種方法。
3.2.5 參數(shù)調(diào)節(jié)
使用 fbprophet 自帶的可調(diào)節(jié)參數(shù),例如:yearly_seasonality 參數(shù)(在實例化模型時,可以為每個內(nèi)置的季節(jié)性指定傅里葉級數(shù)[16])、changepoint_prior_scale 參數(shù)(默認(rèn)情況下,該參數(shù)設(shè)置為0.05。增加它將使擬合趨勢更加靈活[17])等,根據(jù)模型擬合時間序列歷史數(shù)據(jù)后預(yù)測未來的實驗結(jié)果進行調(diào)參優(yōu)化,起到逐步改善模型預(yù)測精度的作用。holidays 參數(shù)同上文所述,不再重復(fù)。
機器學(xué)習(xí)模型、深度學(xué)習(xí)模型需要計算評估指標(biāo),從而獲取模型表現(xiàn)好壞的反饋,進而幫助使用者優(yōu)化算法或選擇模型。在回歸預(yù)測問題中,常見的評估指標(biāo)有:均方誤差(Mean Squared error,MSE);均方根誤差(Root Mean Squared Error,RMSE),或稱為方均根偏移、均方根差、方均根差等;平均絕對百分比誤差也叫平均絕對百分比偏差(Mean Absolute Percentage Deviation,MAPD)以及平均絕對誤差(Mean Absolute Deviation,MAE)等。
四項評估指標(biāo)各自具有不同的優(yōu)缺點,本文根據(jù)實驗的情況和需要選擇平均絕對百分比誤差作為衡量指標(biāo)。其中,平均絕對百分比誤差主要考慮了預(yù)測誤差與數(shù)據(jù)真實值之間的比例。其范圍為[0,+∞),平均絕對百分比誤差為0 % 代表模型完美,平均絕對百分比誤差大于100 % 則代表模型劣質(zhì)。
平均絕對百分比誤差的公式如下圖所示:
使用 scikit-learn的MLPRegressor和xgboost 以及 MultiOutputRegressor,分別構(gòu)造 MLP和XGBoost模型,同 fbprophet 模型對同一時間序列輸出預(yù)測結(jié)果,并分別計算各模型預(yù)測結(jié)果和真實值之間的平均絕對百分比誤差,從而進行對比。
我們隨機選擇了數(shù)據(jù)集中的某一天作為劃分訓(xùn)練集和測試集的分割點,將這一天之前的歷史數(shù)據(jù)作為訓(xùn)練集,分別輸入到MLP和XGBoost 以及 fbprophet等諸多模型中,進行擬合訓(xùn)練并輸出預(yù)測值。通過測試集,分別得到未來 1天至31天內(nèi),各時間段的真實值和各個模型預(yù)測值之間的平均絕對百分比誤差,對比 fbprophet的預(yù)測效果。
圖1 MLP、XGBoost、fbprophet 等模型預(yù)測未來一個月每日期末余額的預(yù)測結(jié)果的平均絕對百分比誤差(預(yù)測天數(shù)逐步增加)Fig.1 The mean absolute percentage error of the prediction results of daily ending balance predicted by MLP,XGBoost,fbprophet for the next month(the predicted days gradually increase)
圖2 fbprophet的平均絕對百分比誤差趨勢走向(預(yù)測天數(shù)以 7天即 1 周為單位逐步增加)Fig.2 Trend of average absolute percentage error of fbprophet(the predicted days gradually increase in unit of 7 days or 1 week)
由下文的實驗圖片 1的展現(xiàn)結(jié)果可以看出,隨著各模型預(yù)測天數(shù)的增加(1天、2天、1 周最終到1個月),作為回歸預(yù)測評估指標(biāo)的平均絕對百分比誤差期初較為動蕩,中期略為平穩(wěn),后期逐步增高。經(jīng)分析,期初包含的時間節(jié)點較少,1個預(yù)測值的偏差可能導(dǎo)致整個預(yù)測結(jié)果的誤差增高。中期隨著預(yù)測天數(shù)的增加使得單個偏差的影響變小,但與之同時,時間序列中包含的不確定性因素也隨之增加,即中后期各模型的評估指標(biāo)值也隨之增加。通過觀察可發(fā)現(xiàn),fbprophet的增長幅度在3個模型中最為緩慢。其中,由實驗圖片 2 可知,fbprophet的平均絕對百分比誤差值于中后期(1個月內(nèi))始終保持在0.20至0.25 上下。實驗結(jié)果說明,相較于其它模型,fbprophet 在單位日期末余額預(yù)測問題等實際應(yīng)用場景上具有較好的表現(xiàn),達(dá)到了期望的結(jié)果。
在金融領(lǐng)域的時間序列預(yù)測問題中,相比于潛在的季節(jié)性以及節(jié)假日效應(yīng)等干擾因素,存在不確定性的最大來源就在于未來趨勢的不可控性。在fbprophet中,我們假設(shè)未來趨勢的平均變動頻率與幅度和我們觀測到的歷史值是一樣的,從而預(yù)測趨勢的變化并通過計算最終得到預(yù)測區(qū)間。但我們并沒有足夠的依據(jù)和手段保證該假設(shè)一定是正確的,特別是在處理規(guī)律性較差、數(shù)據(jù)分布不均勻的真實世界的業(yè)務(wù)問題。隨著預(yù)測未來時間長度的不斷增大,一季度、半年、一年、甚至更長的時間,伴隨的不確定性有可能會呈指數(shù)倍的增長,從而導(dǎo)致預(yù)測結(jié)果出現(xiàn)較大偏差。fbprophet 除預(yù)測值 yhat 外,同時會輸出一個置信區(qū)間 yhat_upper和yhat_lower,即上、下邊界。我們在評估模型的預(yù)測結(jié)果時,會將 yhat的擬合結(jié)果作為主預(yù)測值,而上、下邊界的預(yù)測值作為一定的參考,輔助使用者對預(yù)測結(jié)果進行判斷。但隨著預(yù)測天數(shù)的逐步增加,yhat_upper和yhat_lower的范圍會越來越大,直至喪失準(zhǔn)確度。
因此,如何更好的讓模型在預(yù)測更長時間的未來的同時還能保持較高的準(zhǔn)確度,即降低未來不確定性因素對模型造成的干擾,可作為今后的研究方向。
經(jīng)過實驗證明,fbprophet 操作簡單、容易上手。適合絕大多數(shù)對時間序列問題感興趣的愛好者們。同時,在情況復(fù)雜多變的期末余額預(yù)測問題上,也取得了較好的預(yù)測成果,達(dá)到了我們期望的結(jié)果??上蚓哂型瑯訕I(yè)務(wù)需要的其它平臺或系統(tǒng)進行推廣,例如:目前中科院多個研究所都在使用的新一代 ARP系統(tǒng),其中包含大量的財務(wù)分析需求,建議使用fbprophet 模型進行業(yè)務(wù)分析和預(yù)測。