樓澤霖,鄭軍紅,何利力
(浙江理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,浙江 杭州 310018)
準(zhǔn)確地預(yù)測(cè)銷售情況,可以為市場(chǎng)部門提供有效地營銷數(shù)據(jù)支撐,有助于按需制定生產(chǎn)計(jì)劃、采購計(jì)劃,更好地控制庫存量,其在市場(chǎng)競(jìng)爭(zhēng)中具有重要意義。
傳統(tǒng)的線性回歸方法進(jìn)行預(yù)測(cè),會(huì)忽視非線性因素的影響[1]。神經(jīng)網(wǎng)絡(luò)在復(fù)雜的數(shù)據(jù)中能夠完成特征的提煉,同時(shí)還具備優(yōu)良的自適應(yīng)學(xué)習(xí)能力,在銷量預(yù)測(cè)領(lǐng)域得到了廣泛應(yīng)用[2]。其中LSTM 長短期記憶網(wǎng)絡(luò)在許多序列數(shù)據(jù)預(yù)測(cè)任務(wù)中表現(xiàn)優(yōu)異??旅绲热瞬捎肔STM 模型預(yù)測(cè)電商商品銷量,相比于傳統(tǒng)的時(shí)間序列預(yù)測(cè)方法,其預(yù)測(cè)效果更準(zhǔn)確[3]。陳盼提出基于多變量的LSTM 模型,對(duì)菜品銷量進(jìn)行預(yù)測(cè),結(jié)果表明,多變量的LSTM 模型的變化趨勢(shì)和預(yù)測(cè)結(jié)果更接近于真實(shí)銷量數(shù)據(jù),預(yù)測(cè)精度更高[4]。
但是在LSTM 模型建立和訓(xùn)練過程中,超參數(shù)的設(shè)定能顯著影響其表現(xiàn),若設(shè)置了不恰當(dāng)?shù)某瑓?shù)則會(huì)導(dǎo)致模型難以達(dá)到預(yù)期效果。固定不變的超參數(shù)難以保證預(yù)測(cè)精度穩(wěn)定性[5],因此,為神經(jīng)網(wǎng)絡(luò)模型選擇合適的超參數(shù)就顯得十分重要。
本文提出一種改進(jìn)的麻雀搜索算法,對(duì)LSTM 神經(jīng)網(wǎng)絡(luò)模型的超參數(shù)進(jìn)行優(yōu)化,以得到預(yù)測(cè)精度更高的網(wǎng)絡(luò)模型??紤]到實(shí)際場(chǎng)景中,產(chǎn)品的銷量趨勢(shì)會(huì)受到多種因素的影響,如所屬地區(qū)的零售戶數(shù)量、人口數(shù)量等[6]。某些宏觀經(jīng)濟(jì)因素也會(huì)在一定程度上影響市場(chǎng)對(duì)產(chǎn)品的需求波動(dòng),如商品零售價(jià)格指數(shù)、全社會(huì)消費(fèi)品零售總額等[7-8]。本文在銷量數(shù)據(jù)的基礎(chǔ)上考慮了零售戶數(shù)量、零售戶的購進(jìn)次數(shù)、社會(huì)消費(fèi)品零售總額、月平均價(jià)格等數(shù)據(jù),將其加入特征變量中,建立了包含相關(guān)預(yù)測(cè)特征條件的多變量模型。最后對(duì)銷量進(jìn)行預(yù)測(cè)對(duì)比實(shí)驗(yàn),證明了該模型的有效性。
長短期記憶神經(jīng)網(wǎng)絡(luò)(Long Short Term Memory Network,LSTM) 是由循環(huán)神經(jīng)網(wǎng)絡(luò)改進(jìn)而來的一種網(wǎng)絡(luò)模型,解決了傳統(tǒng)循環(huán)神經(jīng)網(wǎng)RNN在長序列數(shù)據(jù)訓(xùn)練過程中容易產(chǎn)生的梯度消失和梯度爆炸問題。LSTM 網(wǎng)絡(luò)能夠?qū)W習(xí)到數(shù)據(jù)間的長期依賴關(guān)系,在處理時(shí)序問題上有比較好的預(yù)測(cè)效果。
圖1 是LSTM 單元的內(nèi)部結(jié)構(gòu),與RNN 相比,LSTM 加入了輸入門、遺忘門及輸出門三個(gè)門和一個(gè)記憶單元。
圖1 LSTM單元結(jié)構(gòu)
遺忘門可以對(duì)歷史信息進(jìn)行選擇性遺忘,表達(dá)式如下:
其中,Wf為遺忘門的權(quán)重矩陣,ht-1為上一時(shí)刻的輸出,xt為當(dāng)前的輸入信息,bf為遺忘門的偏置矩陣,σ為sigmoid 激活函數(shù)。ft的值介于0 到1 之間,0 代表完全忘記信息,1代表完全保留信息。
輸入門負(fù)責(zé)將新的信息選擇性的記錄到細(xì)胞狀態(tài)中,表達(dá)式如下:
其中,Wi為輸入門的權(quán)重矩陣,bi為輸入門的偏置矩陣。為新的細(xì)胞候選量。新狀態(tài)結(jié)合遺忘門的輸出和上一時(shí)刻的細(xì)胞狀態(tài)得到新的細(xì)胞狀態(tài)Ct。
輸出門負(fù)責(zé)控制信息的輸出,表達(dá)式如下:
其中,Wo為輸出門的權(quán)重矩陣,bo為輸出門的偏置矩陣。
麻雀搜索算法(sparrow search algorithm,SSA)是由薛建凱提出的一種新型群智能優(yōu)化算法[9],麻雀搜索算法主要模擬了麻雀群體覓食和反捕食行為[10]。相比于其他群智能優(yōu)化算法,麻雀搜索算法具有收斂速度快、魯棒性強(qiáng)、尋優(yōu)能力強(qiáng)、參數(shù)少等特點(diǎn)。
算法將麻雀種群分為發(fā)現(xiàn)者和加入者,發(fā)現(xiàn)者負(fù)責(zé)提供覓食區(qū)域和方向,加入者追隨它們來獲得食物,發(fā)現(xiàn)者和加入者的身份是根據(jù)適應(yīng)度動(dòng)態(tài)變化的。
在SSA中,發(fā)現(xiàn)者的位置更新公式如下:
T 為設(shè)置的最大迭代數(shù),t 為當(dāng)前迭代次數(shù);為第t代種群中的第i個(gè)麻雀的第j個(gè)屬性值,α 為[0,1]范圍內(nèi)的隨機(jī)數(shù)。R2為預(yù)警值,ST 為安全值。Q 為服從正態(tài)分布的隨機(jī)數(shù),L是值都為1的1×d 的矩陣。
當(dāng)R2 以下為加入者的位置公式: 為t+1 代種群中位置處于最優(yōu)的麻雀?jìng)€(gè)體,Xworst處于為當(dāng)前全局最差位置的麻雀?jìng)€(gè)體,A為的1×d的矩陣,其內(nèi)部元素由1和-1隨機(jī)組成,A+=A?(AA?)-1。 當(dāng)意識(shí)到危險(xiǎn)時(shí): 為處于當(dāng)前全局最優(yōu)位置的麻雀?jìng)€(gè)體。β用于控制步長,是一個(gè)服從均值為0 方差為1 的正態(tài)分布隨機(jī)數(shù)。K用于控制麻雀移動(dòng)的方向,為[-1,1]范圍中的一個(gè)隨機(jī)數(shù)。fg和fw分別為當(dāng)前全局最優(yōu)適應(yīng)度和最差適應(yīng)度值,fi為第i個(gè)麻雀?jìng)€(gè)體的適應(yīng)度。 雖然麻雀搜索算法具有尋優(yōu)能力強(qiáng)、魯棒性強(qiáng)等優(yōu)點(diǎn),但是存在其他常見的群智能算法也會(huì)出現(xiàn)的問題,即在迭代過程中容易陷入局部最優(yōu)。為了解決此問題本文通過引入重心反變異策略來增強(qiáng)算法跳出局部最優(yōu)的能力。 反向?qū)W習(xí)是一種經(jīng)典的智能優(yōu)化算法加速技術(shù),它通過在當(dāng)前點(diǎn)和它的反向點(diǎn)之中擇優(yōu)選擇[11]。傳統(tǒng)的反向?qū)W習(xí)通過計(jì)算反向點(diǎn)來探索更多的空間,獲取更優(yōu)質(zhì)解。但是該方法沒能利用到整個(gè)種群間的信息。 Rahnamayan 等人提出了一種基于重心的反向?qū)W習(xí)[12],重心反向?qū)W習(xí)能夠結(jié)合整個(gè)麻雀種群的搜索經(jīng)驗(yàn),提高搜索效率,還能擴(kuò)大問題空間的探索范圍。使算法迭代到后期可以保留個(gè)體的有用信息,防止種群的多樣性降低,從而能夠使麻雀搜索算法能夠更好地發(fā)現(xiàn)全局最優(yōu)解,避免算法出現(xiàn)早熟收斂。 重心計(jì)算公式如下: 重心反向解的計(jì)算公式: 其中,k 是[0,1]范圍內(nèi)均勻分布的隨機(jī)數(shù),加入收縮因子可以拓展反向搜索空間的范圍,增大找到更優(yōu)解的概率[13]。 在算法迭代過程中,對(duì)更新位置后的麻雀種群進(jìn)行重心反向變異。但是無法保證變異后的麻雀位置一定能夠優(yōu)于變異前的原位置,故采用貪心的思想決定是否要更新麻雀位置,只有當(dāng)變異更新后的位置更優(yōu)時(shí)才替換原位置,否則舍棄。 LSTM 網(wǎng)絡(luò)雖然在時(shí)間序列數(shù)據(jù)預(yù)測(cè)上具有明顯的優(yōu)勢(shì),但是網(wǎng)絡(luò)的超參數(shù)選擇不當(dāng)會(huì)直接影響預(yù)測(cè)模型的性能。通過人為經(jīng)驗(yàn)去設(shè)置超參數(shù)很難保證選擇到最優(yōu)值,采用網(wǎng)格搜索窮舉則會(huì)花費(fèi)大量的時(shí)間。 本文使用改進(jìn)的麻雀算法來搜索LSTM 網(wǎng)絡(luò)模型的超參數(shù),能夠避免超參數(shù)選取不當(dāng)帶來的誤差,提升網(wǎng)絡(luò)模型的精度。將LSTM 網(wǎng)絡(luò)模型與改進(jìn)后的麻雀搜索算法相結(jié)合,構(gòu)建了改進(jìn)的SSA-LSTM 模型。 改進(jìn)的SSA-LSTM 模型流程如圖2 所示,主要步驟如下: 圖2 改進(jìn)SSA-LSTM流程圖 步驟1 將歷史銷售數(shù)據(jù)與零售戶等數(shù)據(jù)進(jìn)行整合、清理。 步驟2 基于時(shí)間序列構(gòu)建數(shù)據(jù)樣本,并劃分訓(xùn)練驗(yàn)證集。 步驟3 把LSTM 的隱含層神經(jīng)元個(gè)數(shù)、網(wǎng)絡(luò)學(xué)習(xí)率、訓(xùn)練次數(shù)作為優(yōu)化對(duì)象,超參數(shù)的值即為麻雀的位置。 步驟4 將模型的預(yù)測(cè)值與實(shí)際值的均方誤差作為適應(yīng)度。 步驟5 開始迭代,利用改進(jìn)的麻雀搜索算法尋找最優(yōu)超參數(shù)。 步驟6 判斷是否已經(jīng)達(dá)到最大迭代次數(shù),如果未達(dá)到,返回步驟5;反之則輸出最優(yōu)的LSTM 模型超參數(shù)。 步驟7 通過改進(jìn)麻雀搜索算法得到的最優(yōu)超參數(shù),重新訓(xùn)練得到高精度的LSTM網(wǎng)絡(luò)模型。 步驟8 使用該LSTM 模型進(jìn)行產(chǎn)品銷量預(yù)測(cè),輸出預(yù)測(cè)結(jié)果。 本文實(shí)驗(yàn)數(shù)據(jù)來源于某企業(yè)的銷售數(shù)據(jù),實(shí)驗(yàn)收集了某款產(chǎn)品從2013 年1 月至2019 年12 月的月銷量記錄,其中2013 年至2018 年的銷量數(shù)據(jù)作為訓(xùn)練集,2019 年的月銷量數(shù)據(jù)作為測(cè)試集。并結(jié)合零售戶數(shù)量、零售戶的購進(jìn)次數(shù)、月平均價(jià)格、社會(huì)消費(fèi)品零售總額等數(shù)據(jù)構(gòu)建了本文使用的銷量預(yù)測(cè)數(shù)據(jù)集,提供給算法模型做訓(xùn)練,進(jìn)行月銷量預(yù)測(cè)。為該模型引入了多個(gè)相關(guān)特征變量作為輸入,用以提高模型的預(yù)測(cè)準(zhǔn)確性。 企業(yè)所擁有的大量零售數(shù)據(jù)來源于不同的數(shù)據(jù)源,如業(yè)務(wù)系統(tǒng)、終端采集等。由于數(shù)據(jù)源之間的結(jié)構(gòu)不同,需要先將數(shù)據(jù)進(jìn)行預(yù)處理和整合匯總。此外原始特征數(shù)據(jù)的量綱相差較大,在數(shù)據(jù)輸入模型前,需要對(duì)原始數(shù)據(jù)先進(jìn)行歸一化處理來消除量綱對(duì)結(jié)果分析的影響。 歸一化公式如下: 其中,x為原始數(shù)值,xnew為歸一化處理后的數(shù)值,xmax、xmin分別為數(shù)據(jù)中的最大值和最小值。 本文選用平均絕對(duì)誤差(MAE)、均方根誤差(RMSE)和平均絕對(duì)百分比誤差(MAPE)來評(píng)價(jià)本文提出的銷量預(yù)測(cè)模型的效果[14],并對(duì)各個(gè)模型的預(yù)測(cè)結(jié)果進(jìn)行對(duì)比與分析。 MAE、RMSE、MAPE的計(jì)算公式如下: 將改進(jìn)的SSA-LSTM 模型與SSA-LSTM、傳統(tǒng)LSTM 的預(yù)測(cè)結(jié)果進(jìn)行對(duì)比。不同模型的預(yù)測(cè)結(jié)果如圖3所示。 圖3 不同模型預(yù)測(cè)結(jié)果對(duì)比 通過圖3 和表1 可以看出,改進(jìn)的SSA-LSTM 的MAE、RMSE、MAPE 指標(biāo)均小于其他模型,模型精度最高。而單一的LSTM 模型預(yù)測(cè)相對(duì)較差,這是因?yàn)閱我坏腖STM 模型的超參數(shù)隨機(jī)設(shè)定不當(dāng)引起。當(dāng)超參數(shù)經(jīng)過算法的尋優(yōu)調(diào)整之后,得到的模型具有更高的預(yù)測(cè)精度。改進(jìn)的SSA-LSTM 其預(yù)測(cè)銷量與真實(shí)銷量相差較小,預(yù)測(cè)得到的銷量曲線與實(shí)際銷量曲線比較接近,預(yù)測(cè)擬合效果優(yōu)于其他模型。說明改進(jìn)的SSA-LSTM 模型預(yù)測(cè)效果更好,更適合用于銷量的精準(zhǔn)預(yù)測(cè)。 表1 預(yù)測(cè)模型誤差對(duì)比 本文提出一種改進(jìn)的SSA-LSTM 預(yù)測(cè)模型,優(yōu)化了LSTM 的超參數(shù)搜索,解決了依靠人工調(diào)參耗時(shí)長且預(yù)測(cè)效果不佳的問題;結(jié)合海量零售戶數(shù)據(jù),有效地利用企業(yè)積累的數(shù)據(jù),提升了預(yù)測(cè)的準(zhǔn)確性。該模型對(duì)于商品的銷量預(yù)測(cè)具有一定的應(yīng)用價(jià)值。本文方法不僅能夠?yàn)槠髽I(yè)在經(jīng)營決策方面提供有效依據(jù),還可應(yīng)用于其他領(lǐng)域的預(yù)測(cè)。在未來的工作中,可以獲取更多影響銷量的相關(guān)因素,加入更加豐富的特征變量來進(jìn)一步提高預(yù)測(cè)效果。2 改進(jìn)的SSA-LSTM模型
2.1 麻雀算法的改進(jìn)
2.2 超參數(shù)優(yōu)化
3 實(shí)驗(yàn)與分析
3.1 實(shí)驗(yàn)數(shù)據(jù)
3.2 評(píng)價(jià)指標(biāo)
3.3 實(shí)驗(yàn)結(jié)果
4 結(jié)束語