馮 晨,陳志德(福建師范大學 數(shù)學與信息學院,福州 350007)
2(福建省網(wǎng)絡安全與密碼技術重點實驗室(福建師范大學)福州 350007)
3(福建省網(wǎng)絡與信息安全行業(yè)技術開發(fā)基地,福州 350007)
隨著經濟全球化的發(fā)展,企業(yè)面臨著生產成本不斷增加,市場銷售疲軟等考驗.企業(yè)要想贏得市場競爭就需要對市場具有敏銳的嗅覺以及精準的決策,從而控制成本,降低損耗.這使得企業(yè)借助精準高效的銷售預測,進而做出可靠的決策,成為現(xiàn)代企業(yè)成功的重要手段[1].而對時變數(shù)據(jù)建模是數(shù)據(jù)科學中的一個基本問題,應用于醫(yī)學,金融,經濟學,氣象學和客戶支持中心操作等各個領域.使用在時間序列數(shù)據(jù)上訓練的模型來預測未來值是一個值得充分研究的領域,其中應用了諸如ARIMA之類的傳統(tǒng)線性統(tǒng)計模型[2].最近較為流行的是RNN模型的應用,特別是在處理時間序列預測的問題上,LSTM模型的選擇記憶功能有著獨特的優(yōu)勢[3,4].Xgboost是“極端梯度上升”的簡稱,該算法既具有線性模型求解器和樹學習算法的能力,同時也有著可以在單機上并行計算的能力,能夠自動利用CPU的多線程進行并行計算,同時精度也得到提升,相比于其他提升樹方法更為優(yōu)越[5].目前在商品銷售預測上的方法很多,如果只用傳統(tǒng)的線性回歸方法來預測,就忽視了非線性因素的影響,近年來,隨著深度學習的不斷研究與發(fā)展,深度學習的模型被用于時間序列的預測,例如循環(huán)神經網(wǎng)絡(RNN)將時序的概念引入到網(wǎng)絡結構中,但RNN模型也有著幾點關鍵性的不足,梯度的消失和梯度爆炸問題,長期記憶能力不足等問題,進而提出了長短期記憶網(wǎng)絡模型[6],基于此,可以采用不同層次的模型進行組合來提高模型的優(yōu)越性和泛化性[7].
本文針對商品銷售的預測進行研究,銷售預測是一個分析和報告信息的過程,它能夠為管理者提供信息分析和市場研究數(shù)據(jù),在此基礎上進行經營決策,用來解決一些特定的市場問題,在當代市場競爭中發(fā)揮著重要的作用.中國市場野蠻生長的紅利期已經過去,經濟已從速度向質量轉變,企業(yè)競爭回歸到成本、效率的問題上來.這更需要利用數(shù)據(jù)以實現(xiàn)精細化運營,然而銷售預測需以具體產品為預測對象,在實際場景中更存在著諸多重要的影響銷售的因素.因此,為提高預測精度,本文將銷售策略量,天氣,節(jié)假日等加入特征變量中,建立包含相關預測特征條件的多變量模型,結合ARIMA對平穩(wěn)序列的較好的預測能力以及LSTM對序列非線性部分的出色擬合性能,采用基于XGBoost和LSTM的加權組合模型進行預測,提高預測的精度.
ARMA模型,即差分自回歸移動平均模型,如下結構可以簡記為ARMA(p,q):
當p=0時,是AR(p)模型:
當q=0時,是MA(q)模型:
本文中p,q的取值原則是采用最小信息準則法.通過該方法來識別平穩(wěn)和可逆的ARMA過程[8].求解p,q在m以內的BIC矩陣,尋找矩陣中BIC信息量最小的位置,從而確定合適的p,q的值,得到ARIMA (p,n,q).
XGBoost是一種在梯度提升決策樹算法的基礎上進行改進而來的集成學習算法[9-11].其預測原理如下:
預測值為各樣本與其權值乘積的累加和,即:
其中,為j樣本數(shù),wj為權值,xij為樣本數(shù)據(jù).XGBoost在做回歸時,每棵樹是依次加入模型中,進而提升模型的效果,這個集成可以表示為:
其中,γT為懲罰力度,為懲罰項.γ為葉子節(jié)點數(shù)T的系數(shù).目標函數(shù)由自身的損失函數(shù)和正則化懲罰項構成,定義如下:
其中,obj為結構分數(shù),表示當選定一個樹的結構后,目標減少量的最大值.
LSTM Networks是遞歸神經網(wǎng)絡(RNNs)的一種.后經過不斷改進,在處理和預測時間序列相關的數(shù)據(jù)時會比一般的RNNs表現(xiàn)的更好[12].
對于原始的m×n維 數(shù)據(jù),記作:
對于多變量的數(shù)據(jù)需要轉化為監(jiān)督學習的序列,即新的數(shù)據(jù)表示為如下:
LSTM的模型中采用門的結構來解決了長期依賴問題[13],其具體的神經網(wǎng)絡的細胞結構如圖1所示.
圖1 LSTM記憶細胞結構
圖1中每個Sigmoid層產生的數(shù)字在0和1的范圍內.每個LSTM通過3種類型的門[14]來控制每個單元的狀態(tài):遺忘門決定了上一時刻的單元狀態(tài)ct?1有多少保留到當前時刻ct;輸入門決定了當前時刻網(wǎng)絡的輸入xt有多少保存到單元狀態(tài)ct.輸出門控制單元狀態(tài)ct有多少輸出到LSTM的當前輸出值ht.每一步的狀態(tài)更新滿足以下的步驟:
這里 σ 是邏輯Sigmoid函數(shù),?表示按元素相乘;Wi,Wf,Wo,Wc是權重矩陣;bi,bf,bo,bc是偏移量.
對于實際銷售數(shù)據(jù)中,數(shù)據(jù)存在周期性,季節(jié)性的變化,通常為非平穩(wěn)的時間序列.通過差分平穩(wěn)化后,
雖然在ARIMA模型中表現(xiàn)的較好,但卻丟失了周期性和季節(jié)性特征,并且平穩(wěn)的數(shù)據(jù)無法表現(xiàn)出現(xiàn)實銷售增量變化,ARIMA模型只依靠內生變量,模型過于簡單,無法捕捉序列中的非線性因素.神經網(wǎng)絡算法在處理非線性問題具有獨特的優(yōu)勢,LSTM模型的加入可以解決以下幾個問題,首先是銷售數(shù)據(jù)的連續(xù)性,通過特殊的數(shù)據(jù)輸入結構使得模型在預測時結合了歷史的狀態(tài),其次對比與傳統(tǒng)的RNNs解決了輸入變長的問題,再者實際銷量的影響因素較多,而節(jié)假日,策略量的變化會帶來銷售量的異常變化,通過多變量的模型可以提升擬合的精度.此時特征較多,需要經過處理再放入神經網(wǎng)絡的模型中,本文中使用XGBoost算法進行特征的抓取,充分利用多維變量中的潛在的特征.
在ARIMA,XGBoost,LST模型3種模型預測的傳遞過程會出現(xiàn)誤差累計的問題,對此本文對3種模型的預測測結果進行加權處理來減小誤差累計對預測結果精度的影響.具體實驗過程如圖2所示.
圖2 XGBoost和LSTM加權組合模型預測結構
對于收集的原始銷售序列A={x1,x2,···,xn}進行可視化并觀察數(shù)據(jù)的基本趨勢,然后采用增廣迪基-福勒檢驗(Augmented Dickey-Fuller test,ADF),以及JUNG-BOX白噪聲檢驗來檢驗時間序列的平穩(wěn)性,對于線性趨勢的非平穩(wěn)時間序列,通過差分變換將其變?yōu)槠椒€(wěn)序列.收集影響銷售的特征值,特征值1,特征2···特征值n,分別記為T1,T2,···,Tn,假設A經 過ARIMA模型后所得到的預測序列Tn+1,則有:
其中,Φ表示ARIAM模型,A(m)為前m個銷售數(shù)據(jù),A(k)為后d個數(shù)據(jù).
將由ARIAM模型所得的預測序列Tn+1加入到特征序列中構建多維數(shù)組M={A,T1,···,Tn,Tn+1},經過處理及標準化后放入到XGBoost模型中,得到銷量的預測序列Tn+2,則有:
其中,Θ表示XGBoost模型,Ti(m)表示第i個特征序列的前m行,Ti(k)表示第i個特征序列的后k行.
此時再將新的銷售預測序列Tn+2加入到多維數(shù)組M中得到新的數(shù)組M′={A,T1,···,Tn+1,Tn+2},然后加入到LSTM模型中得到銷量預測序列Tn+3,則有:
其中,Ψ表示LSTM模型.
最后結合3個模型的商品銷量預測量Tn+1(k),Tn+2(k),Tn+3(k),給予相對應的權值,通過多次實驗得出最佳的組合權值,進而得到最終的預測值T,記為:
其中,di為各個模型的的預測值的權值.實驗步驟如下:
步驟1.ARIAM預測:單變量預測實驗,取出原數(shù)據(jù)中的實際銷售數(shù)據(jù)列X={X1,X2,···,Xn},將 {Xn}放入ARIMA的模型中,對數(shù)據(jù)列進行ADF平穩(wěn)性檢驗及JUNG-BOX白噪聲值檢測,通過ADF檢驗可以得到單位根檢驗統(tǒng)計量對應的p值,此值顯著小于0.05,則該序列平穩(wěn),通過不斷實驗后發(fā)現(xiàn),p,q的取值通常在8以內,因此通過循環(huán)求解8以內的BIC矩陣,找出矩陣中的最小信息量所對應的p,q的值為1,0,得出預測模型ARIMA (1,0,0),為了使結果更加貼近現(xiàn)實情況,采滾動預測,每預測一周的銷售數(shù)據(jù)后,加入該周的實際的銷售數(shù)據(jù)來預測下一周的銷量,最后整理預測值序列,得到銷售值序列的樣本的預測序列T8.
步驟2.XGBoost預測.將T8序列合并到特征序列中,分成訓練集和測試集兩部分,然后放入到XGBoost模型中作預測,將預測值記作T9.
步驟3.多維時間序列預處理.將T9合并到M中組成新的數(shù)組M1,接著對所有的特征歸一化處理,然后利用series_to_supervised函數(shù)對數(shù)據(jù)進行處理,該函數(shù)將單變量或多變量時間序列轉換為監(jiān)督學習數(shù)據(jù)集,使用Pandas的Shift函數(shù),將原始列向后移動k位后添加成新的列,同時將當前時刻的除去銷售值的特征移除.
步驟4.LSTM神經網(wǎng)搭建.LSTM模型中,搭建2個隱藏層,第一隱藏層有128個神經元,第二隱藏層有256個神經元,輸出層為1維的列向量,即銷售預測值,輸入變量是一個時間步(t-1)的特征,損失函數(shù)采用Mean Absolute Error (MAE),優(yōu)化算法采用Adam,激活函數(shù)采用Sigmoid,模型采用500個epochs并且每個batch的大小為15.
步驟5.數(shù)據(jù)預測.經過多次的實驗,發(fā)現(xiàn)當d1=0.2,d2=0.4,d3=0.4時,即
其中,T為最終的銷量預測值,Tn+1為ARIMA模型的預測值,Tn+2為XGBoost模型的預測值,Tn+3為LSTM模型的預測值,最后將最終的加權預測值作為后13周的銷售預測值.
實驗所使用計算機的配置如下:處理器為英特爾酷睿Duo CPU i5-6500,CPU頻率為2.20 GHz;內存為8 GB;操作系統(tǒng)為Windows 10 (64位);基于Python 3.6編程;集成開發(fā)環(huán)境為PyCharm Community Edition 2016.LSTM的實驗使用的是keras深度學習框架.
以某地的從2018年4月2號到11月4號的某商品銷量數(shù)據(jù)為研究對象,數(shù)據(jù)集中主要包含7個特征,分別是節(jié)假日因素,氣溫,主要策略規(guī)格的策略量以及實訂量等,如表1所示.
表1 數(shù)據(jù)特征
對于節(jié)假日因素,本文采用虛擬變量來進行量化處理,記作T1,取每周最高氣溫的平均值及最低氣溫的平均值,分別記作T2,T3,主要策略量的實訂量記作T4,年月日分別記作T5,T6,T7,然后構建多維數(shù)組M=(X,T1,T2,T3,T4,T5,T6,T7),劃分數(shù)據(jù).將數(shù)據(jù)的前0.67作為訓練集,后0.33作為測試集,對未來13周的銷售量進行預測.
在LSTM模型中,n_1為series_to_supervised函數(shù)中設置的滯后觀察數(shù)為1,即使用上一時刻的銷售量來預測當前時刻的銷售值,設置兩個隱藏層,第一層的神經元個數(shù)設為128,第二層的神經元個數(shù)設置為256,dropout隨機刪除一些隱層神經元,通過不斷的調整這兩個參數(shù)來解決預測過程中的過擬合的問題.具體參數(shù)設置見表2.
表2 神經網(wǎng)絡參數(shù)
在XGBoost模型中,subsimple為訓練的實例樣本占整體實例樣本的比例.max-depth為每棵樹的最大深度.booster為設置需要使用的上升模型.objective定義學習任務及相應的學習目標,本文選的目標函數(shù)為“reg:linear”-線性回歸.具體參數(shù)設置見表3.
表3 XGBoost參數(shù)
為了更好的體現(xiàn)模型的優(yōu)越性和實用性,本文主要采用兩個指標來進行模型的評估,第一個是均方根誤差(Root Mean Square Error,RMSE),以及一個平均準確率(Mean Accuracy,MA),定義如下:
使用四種模型分別預測出后13周的銷售值,導出組合模型的預測值,圖3為組合模型預測值和實際銷售值的對比,銷量變化的趨勢得到較好的擬合,預測平均準確率為0.968,預測誤差很好的控制在了0.05以內,預測相對準確.
圖3 預測值與實際值對比
圖4反映的是單個模型及組合在每周的預測的精度對比,從圖中可以看出,不同模型預測時的表現(xiàn)的具有一定的差異性,也存在個別異常時間點在單個模型預測中效果不佳.首先對比3個模型的預測情況,ARIMA模型預測效果是較弱的,對于波動的靈敏度較低,XGBoost和LSTM預測效果相對接近,因此本文主要采用簡單平均法來分配權重.對比每周的預測結果,LSTM比XGBoost模型在預測精度表現(xiàn)較好,但穩(wěn)定性相對較差,因此在分配權重時既要保留XGBoost模型預測穩(wěn)定的特點,同時也能提高模型的精度,因此對于這兩種方法賦予相同的權值.對于數(shù)據(jù)內生變量的影響通過分配ARIAM模型相對較小的比重進行模型的預測值的調整.基于該想法進行預測結果的加權分析,通過計算不同比重下預測結果的平均精度和RMSE的值,發(fā)現(xiàn)在XGBoost和LSTM所占都為0.4時,ARIMA占0.2時,組合模型整體預測效果表現(xiàn)最佳,對于非線性部分擬合的效果明顯的體現(xiàn)除了加權組合的優(yōu)勢,對比單個模型出現(xiàn)準確率在0.8附近的異常點,組合模型的預測準確率都在0.9以上,對比單獨模型預測良好的部分,組合模型保持了良好的預測精度,預測結果的精度對比單一模型有很大的提高,對于其他特征(策略量,溫度,節(jié)假日,日期)實行了一次復制,即這些變量會在每個模型行的訓練中出現(xiàn)兩次,而結果證明訓練集誤差幾乎一致,但是驗證集誤差更小,表明通過特征的重復訓練,能夠減小組合模型的過擬合程度,模型的泛化性得以提升,預測效果更佳.
圖4 不同模型預測精度對比
觀察不同模型的指標數(shù)值,由導出的預測值和實際值求解出各個預測模型的RMSE指標值和MA指標值.通過對比不模型的RMSE和MA的值,來評估各個模型的整體的預測效果.通過表4不同模型參數(shù)的對比,組合模型的平均預測值達到了96.84%的水平,相比于ARIAM預測提高了3.28%,相比于XGBoost的預測提高了1.99%,相比于LSTM模型提高了2.28%,綜上所述,組合模型在商品銷售的預測中展現(xiàn)了優(yōu)于其他單一模型的預測效果,通過加權組合提高了模型的泛化性和有效性.
表4 不同模型預測結果對比
研究主要策略量對于模型的影響,在本文的實驗中,結合了主要規(guī)格的策略實訂量這一特征值,而在實驗前通過觀察不難發(fā)現(xiàn),這一主要策略量跟銷售序列有著較為緊密的聯(lián)系,首先策略量序列總是小于對應的銷售值,其次,通過數(shù)據(jù)可視化可以發(fā)現(xiàn),當銷售增大時,策略量也增大,銷售量減少時,策略量也明顯的減少,在此基礎上檢驗策略量的實訂量的有無對預測的影響,通過設計對比實驗來驗證.實驗結果如表5所示,在加入了策略量后,對比于未加入策略量實訂量的實驗結果相比,預測的準確率提高了4.05%,RMSE降低了0.64,說明在其他條件不變的情況下,策略量對于銷售預測的影響較為顯著,可以通過加入該特征來輔助預測.
表5 策略量對預測結果的影響對比
本文提出的基于XGBoost和LSTM加權多變量的加權組合預測模型,用來解決商品銷售的預測,通過加入天氣,主策略量實訂量,節(jié)假日,日期(年月日)諸多因素來輔助預測,提高預測的準確率,提高模型的有效性,ARIMA在處理線性模型效果較好,LSTM神經網(wǎng)絡可以通過學習來擬合非線性問題,XGBoost模型則可以挖掘多維變量中不同維度的屬性,通過不同層面的模型的組合,大大的提高了模型的泛化能力,不僅針對商品銷售的預測,還可以應用于其他相關的多變量時間序列的預測領域,提高預測的精度,解決不同的實際問題.但在對于該模型中的神經網(wǎng)絡來說,過多的屬性存在過擬合的風險,因此模型還可以在該方面優(yōu)化.