萬忠赫 姜同強 張青川
(北京工商大學計算機與信息工程學院 北京 100048)(農(nóng)產(chǎn)品質(zhì)量安全追溯技術(shù)及應(yīng)用國家工程實驗室 北京 100048)(食品安全大數(shù)據(jù)技術(shù)北京市重點實驗室 北京 100048)
隨著企業(yè)管理信息化和機器學習領(lǐng)域的快速發(fā)展,連鎖便利店行業(yè)急需基于精準銷量預(yù)測的庫存管理,而目前便利店銷量預(yù)測還處于門店、大類粒度,粗粒度的銷量預(yù)測對庫存管理的作用較小,亟需實現(xiàn)對門店-SKU細粒度的日銷量預(yù)測,優(yōu)化庫存促進資金周轉(zhuǎn)。
傳統(tǒng)的基于統(tǒng)計的銷量預(yù)測方法包括:指數(shù)平滑法[1-2]、支持向量回歸[3]、差分整合移動平均自回歸模型[4-5]、擴散模型[6]和灰度預(yù)測模型[7-8]等,這些方法基于大量歷史銷售數(shù)據(jù),在理論上對未來銷量有著準確的預(yù)測,但其容易受偶然性外部因素的影響,導(dǎo)致準確性下降。近年來深度學習技術(shù)發(fā)展迅速[9],深度神經(jīng)網(wǎng)絡(luò)能夠從復(fù)雜的數(shù)據(jù)中提煉特征,其中LSTM(Long Short-Term Memory)憑借其“理解”上下文的記憶機制在許多序列數(shù)據(jù)預(yù)測任務(wù)中表現(xiàn)優(yōu)異[10-12],而LSTM網(wǎng)絡(luò)超參數(shù)的設(shè)定能顯著影響其表現(xiàn),在大批量細粒度銷量預(yù)測任務(wù)中,一成不變的超參數(shù)則難以保證預(yù)測精度穩(wěn)定性。
綜上所述,針對連鎖便利店門店-SKU粒度的精準銷量預(yù)測任務(wù),本文將協(xié)變量信息引入LSTM預(yù)測模型,并通過CMAES(Covariance Matrix Adaptation Evolution Strategy)[13]對LSTM網(wǎng)絡(luò)超參數(shù)獨立調(diào)參,實現(xiàn)準確并且穩(wěn)定的大規(guī)模銷量預(yù)測。
構(gòu)建SKU粒度的日銷量時間序列時,對于不同門店、不同SKU都需要單獨構(gòu)建,而每個序列的長度是不同的,因為不同的門店開業(yè)時間不同,而同一家門店的SKU因不斷更迭,所以當前在售SKU的上架時間也不盡相同。設(shè)門店i∈I,SKUj∈J,其上架日期距今天數(shù)為dij,將其在x天前的日銷量表示為sij,則該門店該SKU的日銷量時間序列表示為:
Sij={sijdij,sijdij-1,…,sij2,sij1}
(1)
傳統(tǒng)的統(tǒng)計預(yù)測方法只能使用時間序列本身,無法引入外部信息,而天氣、節(jié)假日等信息對商品銷量有著顯著的影響。如冷飲在高溫晴朗的日子更受歡迎;而在陰雨天氣時雖然大部分商品銷售較差,但熱飲商品銷量卻不降反升;在學?;?qū)懽謽歉浇谋憷?,即食盒飯在工作日一般比較暢銷,而在節(jié)假日時則銷量寥寥。以上例子均為外部因素直接影響著不同門店不同商品的銷量,與此同時商品之間的關(guān)聯(lián)性使得大量商品的銷量間受到外部因素的影響,也說明了對門店-SKU粒度進行建模預(yù)測的有效性和必要性。
本文使用LSTM模型預(yù)測銷量時間序列,該模型可以引入任意多個協(xié)變量,提供更加充分的商品銷量相關(guān)信息,從而增強模型的預(yù)測準確性。協(xié)變量信息需覆蓋銷售數(shù)據(jù)中任一天有銷量的日期,則有:
n=max(dij)i∈I,j∈J
(2)
溫度時間序列T和空氣指數(shù)時間序列A分別表示為:
T={tn,tn-1,…,t2,t1}
(3)
A={an,an-1,…,a2,a1}
(4)
天氣類型包括風、云、霧、雨、雪、雷、雹、霾,該特征為定性特征,故用one hot編碼進行數(shù)值表示,即生成維度等于該特征不同值個數(shù)的向量,每種特征取值在向量固定位置取值為1,其余位置取值為0,各天氣類型獨熱碼如表1所示。
表1 天氣獨熱碼
天氣類型時間序列W表示為:
W={wn,wn-1,…,w2,w1}
(5)
當x天前為工作日時hx值為0,否則為1,節(jié)假日信息時間序列H表示為:
H={hn,hn-1,…,h2,h1}
(6)
將協(xié)變量引入模型時,不同特征量綱會導(dǎo)致對模型預(yù)測結(jié)果影響的權(quán)重不同,因此需要對協(xié)變量特征值進行歸一化處理,對溫度時間序列T={tn,tn-1,…,t2,t1}有:
(7)
同樣的,對空氣指數(shù)時間序列A進行歸一化處理,而天氣類型時間序列W和節(jié)假日時間序列H原始值已經(jīng)符合要求,取值為{0,1},無需進行歸一化處理。
長短期記憶神經(jīng)網(wǎng)絡(luò)LSTM是在循環(huán)神經(jīng)網(wǎng)絡(luò)RNN的基礎(chǔ)上發(fā)展而來,RNN按時間序列逐個輸入到細胞中,并保有細胞狀態(tài),每一時刻通過當前輸入值和網(wǎng)絡(luò)權(quán)值更新細胞狀態(tài),并得到該時刻的輸出,在預(yù)測問題中RNN網(wǎng)絡(luò)為多入單出,即只取最后時刻網(wǎng)絡(luò)的輸出作為預(yù)測結(jié)果。而預(yù)測損失通過鏈式求導(dǎo)法則反向傳播,從而更新網(wǎng)絡(luò)權(quán)值。典型的RNN網(wǎng)絡(luò)根據(jù)時序t展開如圖1所示。
圖1 循環(huán)神經(jīng)網(wǎng)絡(luò)
RNN理論上具備記憶機制,可以對輸入的序列進行學習,而實際訓練過程中深度過深的鏈式求導(dǎo)則會導(dǎo)致梯度消失或梯度爆炸的問題,這會使得RNN出現(xiàn)“記憶衰退”,對時序較早的信息不夠敏感,丟失信息。
LSTM網(wǎng)絡(luò)型的三重門機制避免了RNN中“記憶衰退”的問題,三重門為輸入門、遺忘門和輸出門,t時刻的LSTM細胞如圖2所示。時間序列數(shù)據(jù)按序輸入細胞中,首先遺忘門對細胞狀態(tài)選擇性遺忘,然后通過輸入門對當前時刻輸入選擇性記憶,最后輸出門控制細胞狀態(tài)的輸出。
圖2 長短期記憶神經(jīng)網(wǎng)絡(luò)
具體地,LSTM細胞在t時刻需要對t-1時刻傳來的細胞狀態(tài)中的部分信息進行遺忘,遺忘門即一個普通的BP神經(jīng)網(wǎng)絡(luò),通過權(quán)值和偏置對上一時刻的細胞狀態(tài)和這一時刻的輸入信息進行計算,并經(jīng)過sigmoid函數(shù)得到與狀態(tài)維度相同的向量ft,其值在[0,1]范圍內(nèi),1代表對該位信息完全保留,0代表完全遺忘。
ft=σ(Wf·[ht-1,xt]+bf)
(8)
接下來輸入門首先計算要將這一時刻輸入的信息哪些部分寫入細胞狀態(tài),與遺忘門的計算相似,同樣通過sigmoid函數(shù)表示對每一維度信息的保留程度it。
it=σ(Wi·[ht-1,xt]+bi)
(9)
(10)
(11)
輸出門的計算與輸入門和遺忘門相似,對上一時刻的輸入ht-1以及此刻的細胞輸入xt計算后的結(jié)果進行sigmoid激活,得到對細胞狀態(tài)輸出的控制向量ot。
ot=σ(Wo·[ht-1,xt]+bo)
(12)
ht=ot·tanh(Ct)
(13)
假設(shè)構(gòu)建了所有門店所有SKU的日銷量時間序列sij,i∈I,j∈J,以及外部特征的時間序列,分別是溫度T、天氣類型W、空氣指數(shù)A以及節(jié)假日H。進行深度學習模型的訓練和預(yù)測,需要將數(shù)據(jù)處理成feature-label對的形式。設(shè)一個樣本的特征取窗口大小為p的序列,以步長r滑動窗口不斷生成樣本,則對于門店i的SKUj,一共能夠生成Kij個樣本,其中第k個樣本的特征為featurek,標簽為labelk。
Kij=(dij-p+r)%r-1=(dij-p)%r
(14)
(15)
labelk=sijk·r
(16)
首先,在一次迭代中,從每個超參數(shù)的正態(tài)分布中取值,共產(chǎn)生λ個超參數(shù)組:
xi=mt+σtyi,yi~N(0,Ct)
(17)
式中:yi是通過協(xié)方差矩陣C特征分解得到的搜索方向,即:
yi=BDzi,zi~N(0,I)
(18)
f(x1:λ)≤f(x2:λ)≤…≤f(xλ:λ)
(19)
最后使用最大似然估計的方法分別對每個超參數(shù)的分布參數(shù)mt、Ct和σt獨立更新,在t+1時刻的更新表示為:
(20)
(21)
(22)
(23)
(24)
LSTM預(yù)測模型中,超參數(shù)的選擇會對模型性能及預(yù)測結(jié)果產(chǎn)生影響,傳統(tǒng)的依據(jù)經(jīng)驗的人工選擇方法很難保證選擇到最優(yōu)參數(shù),網(wǎng)格搜索通過窮舉的方法保證選擇性能最優(yōu)的一組參數(shù),但其時間復(fù)雜度是不可接受的。LSTM模型中主要的超參數(shù)及其取值范圍如表2所示。
表2 超參數(shù)取值范圍
其中window size表示基于時間序列構(gòu)建樣本時間窗口p的大??;activation表示網(wǎng)絡(luò)輸出使用的激活函數(shù);在LSTM細胞中的三重門均為傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò),units設(shè)置了其神經(jīng)元個數(shù);Dropout的比例表示在訓練過程中以概率是神經(jīng)元失效,從而使得每輪訓練使用的網(wǎng)絡(luò)結(jié)構(gòu)不完全相同,提高模型魯棒性;本文使用Adam優(yōu)化器,learning rate表示其學習率,beta1和beta2為Adam優(yōu)化過程中一階和二階據(jù)估計的指數(shù)衰減率。
通過協(xié)方差自適應(yīng)調(diào)整的進化策略在LSTM超參數(shù)空間的搜索過程如圖3所示。(1) 基于日銷量及協(xié)變量時間序列構(gòu)建樣本,并劃分訓練驗證集;(2) 輸入各超參數(shù)的取值范圍并初始化超參數(shù)的分布;(3) 產(chǎn)生λ個超參數(shù)組;(4) 計算每一個超參數(shù)組產(chǎn)生的LSTM模型在訓練驗證集上的適應(yīng)度并舍棄一半的解;(5) 逐個更新超參數(shù)分布的每個參數(shù);(6) 判斷是否滿足終止條件,損失函數(shù)低于閾值或達到最大迭代次數(shù),如不滿足終止條件則返回步驟(3);(7) 取適應(yīng)度最大的解作為LSTM超參數(shù)生成模型,對測試集進行預(yù)測,輸出預(yù)測結(jié)果。
圖3 CMAES-LSTM流程圖
數(shù)據(jù)來自某連鎖便利店300家門店2018年1月至2019年12月的銷售數(shù)據(jù),每一家門店根據(jù)其地理位置有著不同的定位,包括地鐵店、商務(wù)店、學校店、社區(qū)店以及景區(qū)店,便利店集團共有超過2 000個不同的SKU,覆蓋13個大類,因此共有20 000余個門店i-SKUj日銷量時間序列,本文對5類門店以及13個大類的SKU,等比例隨機抽取共1 000個時間序列進行實驗。
(1) 平均百分比絕對誤差。本文使用平均百分比絕對誤差來對比不同預(yù)測算法的性能,該指標能夠衡量銷量預(yù)測的準確性,并且能直觀地反映出預(yù)測值的準確程度。
(25)
(2) 標準差。標準差是離均差平方的算術(shù)平均數(shù)的平方根,用σ表示,標準差能反映一個數(shù)據(jù)集的離散程度。平均數(shù)相同的兩組數(shù)據(jù),標準差未必相同。
(26)
實驗對比了不同算法在1 000個門店-SKU銷量預(yù)測任務(wù)的性能,平均MAPE值可以對比不同算法的整體性能,只使用日銷量時間序列進行預(yù)測的評價值為MAPE-a,引入?yún)f(xié)變量時間序列得到的評價值為MAPE-b,實驗結(jié)果如表3所示。
表3 MAPE值對比(%)
根據(jù)表3中的實驗結(jié)果,移動平均法作為傳統(tǒng)的時間序列預(yù)測方法,其原理簡單使用廣泛,一般作為時間序列預(yù)測任務(wù)的benchmark,可以發(fā)現(xiàn)當時間窗口從4周擴大到8周時,整體性能有提升但不顯著,ARIMA在MA的基礎(chǔ)上增加的差分,使得序列平穩(wěn),可以發(fā)現(xiàn)其整體性能較MA有顯著提升。LSTM在本文任務(wù)表現(xiàn)最佳,MAPE值降至12.11%,作為深度學習算法,憑借其有效的特征抽取能力,在引入?yún)f(xié)變量信息后預(yù)測性能進一步提升。但本文任務(wù)為門店-SKU粒度的銷量預(yù)測,不同門店SKU銷售情況差異大且受外部因素影響的模式也不盡相同,通過CMAES對每個模型獨立調(diào)參,整體性能進一步提升,并且在引入?yún)f(xié)變量后性能提升幅度相較固定參數(shù)的LSTM方法提升20.68%,驗證了本文銷量預(yù)測方法的有效性。
而在實際應(yīng)用過程中,預(yù)測偏差較大的情況則會直接導(dǎo)致庫存積壓或不足并帶來經(jīng)濟損失,所以算法預(yù)測性能的穩(wěn)定性也是重要的參考標準,可通過計算標準差和繪制盒須圖的方法進行觀測。只使用日銷量時間序列進行預(yù)測的評價值為sigma-a,引入?yún)f(xié)變量時間序列得到的評價值為sigma-b,標準差計算結(jié)果如表4所示,盒須圖如圖4所示。
表4 標準差值對比
圖4 盒須圖
根據(jù)表4及圖4的實驗結(jié)果可以發(fā)現(xiàn),SVM預(yù)測結(jié)果方差大,盒須圖中離群點較多,其穩(wěn)定性較差。移動平均法通過擴大時間窗口預(yù)測穩(wěn)定性略有提升,MAPE值下限有所提升,而加入方差平穩(wěn)序列后,ARIMA預(yù)測結(jié)果方差降低不明顯,但從盒須圖中可以發(fā)現(xiàn)其最遠離群點位置明顯下降,穩(wěn)定性有一定的提升。本文方法CMAES-LSTM相對于固定超參數(shù)的LSTM模型,預(yù)測方差顯著降低,盒須圖中離群點位置下降明顯,且1/4和3/4分位數(shù)差值減小,表明其預(yù)測穩(wěn)定性更高。
本文針對連鎖便利店的門店-SKU粒度日銷量預(yù)測任務(wù),提出引入?yún)f(xié)變量的CMAES-LSTM時間序列預(yù)測方法,得到以下結(jié)論。
(1) 由于LSTM能夠?qū)斎胄畔⑦M行深度特征提取,因此在引入外部信息后預(yù)測準確性有了較大提升。
(2) 對于不同門店-SKU的時間序列,其場景不同、屬性不同,使用超參數(shù)固定的LSTM模型預(yù)測整體性能較差且穩(wěn)定性不足,使用進化策略獨立調(diào)參,能夠明顯提升其預(yù)測的準確性。
在未來的工作中,可以引入更加豐富的協(xié)變量,獲取更多影響銷售的外部信息輸入模型,提高預(yù)測性能;還可以將銷售記錄與用戶關(guān)聯(lián),通過用戶畫像等方法,使用對人的購買意向的預(yù)測來影響銷量預(yù)測。