鄒 旺,張吳波,2,馬勛政,3
(1.湖北汽車工業(yè)學(xué)院,電氣與信息工程學(xué)院,湖北 十堰 442002;2.武漢科技大學(xué),計算機科學(xué)與技術(shù)學(xué)院,湖北 武漢 430081; 3.湖北省煙草公司十堰市公司,湖北 十堰 442000)
煙草部門落實國家“總量控制,稍緊平衡”的方針,為了更好的消化社會庫存,促進市場良性發(fā)展,在每輪投放中都會根據(jù)卷煙規(guī)格和不同檔位的零售戶來制定具體的投放策略.由于卷煙品種繁多,投放策略需要每輪重新制定,任務(wù)繁重,同時存在主觀情感等局限性,難以實現(xiàn)大規(guī)模的準確計算.建立科學(xué)的卷煙投放預(yù)測模型有利于煙草專賣局對資源合理的利用和產(chǎn)品精確的投放,有利于推進精細化管理.
目前卷煙投放預(yù)測技術(shù)的研究主要包括傳統(tǒng)方法和機器學(xué)習(xí)方法.傳統(tǒng)方法是應(yīng)用概率統(tǒng)計學(xué)和計量經(jīng)濟學(xué)的思想,建立概率模型或多組線性函數(shù)去擬合并預(yù)測卷煙歷史銷售數(shù)據(jù).王偉民等[1]提出1種基于灰色馬爾科夫模型的卷煙需求預(yù)測方法,并在10年的全國卷煙銷量數(shù)據(jù)集上驗證該模型的準確性.王詩豪等[2]集成差分自回歸移動平均模型(ARIMA)、向量自回歸模型(VAR)、支持向量回歸(SVR)以及習(xí)慣消費下的卷煙需求模型來實現(xiàn)卷煙需求的預(yù)測.隨著機器學(xué)習(xí)算法的廣受矚目,不少研究者逐漸將其引入到卷煙銷量預(yù)測的任務(wù)中.武牧等[3]提出1種線性模型整合支持向量機(SVM)的卷煙銷量預(yù)測方法,該模型相比ARIMA模型的誤差率降低45.79%.為了進一步提升學(xué)習(xí)器的性能,研究者考慮將單個學(xué)習(xí)器融合向集成學(xué)習(xí)方向發(fā)展.目前,集成學(xué)習(xí)按照優(yōu)化方向可以分為用于減少方差的裝袋算法(Bagging)[4]、用于減少偏差的提升算法(Boosting)[5]、用于提升準確率的堆疊算法(Stacking)[6]3大類.韓偉民等[7]提出1種極端梯度提升(XGBoost)的卷煙創(chuàng)新產(chǎn)品的工商交易預(yù)測.機器學(xué)習(xí)方法中的深度學(xué)習(xí)算法的適用性更廣、精度較優(yōu).在卷煙銷量預(yù)測中廣泛使用有門控神經(jīng)網(wǎng)絡(luò)特點的長短期記憶網(wǎng)絡(luò)(LSTM)[8]和循環(huán)門控單元(GRU)[9]模型.鄧超等[10]提出1種基于LSTM和BP神經(jīng)網(wǎng)絡(luò)模型的卷煙智能投放模型,該模型能實現(xiàn)產(chǎn)品銷量的預(yù)測和卷煙產(chǎn)品投放策略的生成.
GRU作為LSTM的改進優(yōu)化模型,擁有更少的參數(shù)和簡單的結(jié)構(gòu).GRU只包含更新門、重置門兩種門控結(jié)構(gòu),更新門負責(zé)對信息的篩選和存儲;重置門負責(zé)對上一節(jié)點狀態(tài)選擇性遺忘.GRU內(nèi)部結(jié)構(gòu)如圖1所示.

圖1 GRU結(jié)構(gòu)圖
其中,Xt表示當前節(jié)點的輸入;ht-1表示上一節(jié)點的隱藏狀態(tài);r為重置門;z為更新門;h′為候選隱藏狀態(tài);ht表示傳遞給下一節(jié)點的隱藏狀態(tài).GRU內(nèi)部計算如式(1)-(4)所示.
r=σ(w1[ht-1,Xt]+b1).
(1)
z=σ(w2[ht-1,Xt]+b2).
(2)
h′=tanh(w3[r?ht-1,Xt]+b3).
(3)
ht=(1-z)?ht-1+z?h′.
(4)
其中:σ表示Sigmoid激活函數(shù);tanh為激活函數(shù);[ ]表示兩個向量相連接;W1-3為權(quán)重矩陣;b1-3為偏置項.
Boosting算法的思想是將多個基學(xué)習(xí)器串聯(lián)組合,通過不斷的調(diào)整樣本權(quán)重來訓(xùn)練每個基學(xué)習(xí)器,然后計算每個基學(xué)習(xí)器的權(quán)重值,待所有基學(xué)習(xí)器訓(xùn)練完成后,按相應(yīng)的權(quán)重值線性組合所有基學(xué)習(xí)器得到一個整體模型,以此來提升模型的性能.更新樣本權(quán)重的目的是使本輪預(yù)測錯誤的樣本在下一輪訓(xùn)練中得到更大的權(quán)重,受到更多的重視[11].權(quán)重值用于評估每個基學(xué)習(xí)器的重要性,基學(xué)習(xí)器預(yù)測越準確在整體模型中的權(quán)重越大.

圖2 Boosting-GRU模型結(jié)構(gòu)
Boosting-GRU模型的結(jié)構(gòu)如圖2所示,在Boosting模型中采用多個GRU模型作為基學(xué)習(xí)器.首先對訓(xùn)練集分配初始樣本權(quán)重值,將帶樣本權(quán)重值1訓(xùn)練集輸入到GRU1模型中進行訓(xùn)練.然后采用測試集進行模型的預(yù)測,計算預(yù)測的誤差率并以此來更新樣本權(quán)重2和計算當前基學(xué)習(xí)器的權(quán)重值1.最后采用帶樣本權(quán)重值2訓(xùn)練集訓(xùn)練第二個基學(xué)習(xí)器,依次串聯(lián)的訓(xùn)練所有的基學(xué)習(xí)器.
產(chǎn)品投放策略生成模型如圖3所示.為精確的預(yù)測投放值序列(即下一年48輪投放值組成的序列),卷煙產(chǎn)投放策略生成模型采用3種不同的方法來計算投放值.第1種方法首先采用多元預(yù)測模型得到產(chǎn)品銷售量序列,然后通過銷售量與投放值之間的關(guān)系來計算投放值序列1;第2種方法直接采用多元預(yù)測模型來計算投放值序列2;第3種方法采用多分類模型進行海量數(shù)據(jù)的訓(xùn)練并預(yù)測投放值序列3,最后選擇3種序列中誤差值最小的序列為最終序列.

圖3 卷煙產(chǎn)品投放策略生成模型
數(shù)據(jù)處理將歷史銷售數(shù)據(jù)處理為模型所需的輸入數(shù)據(jù),歷史銷量數(shù)據(jù)為A卷煙產(chǎn)品的所有零售戶的訂購信息,其中包括時間、檔位、投放值、訂購量(銷售量)、定足率、訂單滿足率共6條信息.首先將數(shù)據(jù)按不同的檔位劃分為1~30份數(shù)據(jù),該數(shù)據(jù)可以用于訓(xùn)練GRU多分類模型.然后在檔位劃分的基礎(chǔ)之上按時間進一步處理,得到數(shù)據(jù)包括總戶數(shù)、訂購戶數(shù)、銷售量(累加)、投放值、定足率(均值)、訂單滿足率(均值)、訂購率(計算).其中定足率、訂單滿足率、訂購率的計算方法如下:
定足率=(訂購量÷投放量)×100%.
訂單滿足率=(客戶訂購量÷客戶需求量)×100%.
訂購率=(訂購戶數(shù)÷總戶數(shù))×100%.
最后將數(shù)據(jù)進行監(jiān)督學(xué)習(xí)處理來用于訓(xùn)練Boosting-GRU多元預(yù)測模型.
采用神經(jīng)網(wǎng)絡(luò)模型進行序列預(yù)測前需要對數(shù)據(jù)進行監(jiān)督學(xué)習(xí)處理[12],設(shè)定一定長度的“回溯”值.例如,投放值序列為15,10,10,5,5,回溯值設(shè)置為1,則預(yù)測模型訓(xùn)練數(shù)據(jù)為x=[15,10,10,5]、y=[10,10,5,5];回溯值設(shè)置為2,則預(yù)測模型訓(xùn)練數(shù)據(jù)為x=[[15,10],[10,10],[10,5]]、y=[10,5,5],即采用前回溯個數(shù)據(jù)x來預(yù)測后一個數(shù)據(jù)y.多元預(yù)測是將每一行的總戶數(shù)、訂購戶數(shù)、銷售量、投放值、定足率、訂單滿足率、訂購率采用歸一化處理至0~1之間,然后將x作為數(shù)據(jù)y為標簽輸入Boosting-GRU模型進行訓(xùn)練,通過GRU模型捕捉這7種數(shù)據(jù)之間的關(guān)系和各自數(shù)據(jù)隨時間變化的前后聯(lián)系,Boosting算法能降低GRU模型預(yù)測的偏差,模型輸出的結(jié)果為產(chǎn)品銷售量序列和投放值序列.
煙草行業(yè)常規(guī)的投放策略主要按“檔位”來制定.例如A產(chǎn)品卷煙在第1擋位投放5條,第2檔位投放6條,….則屬于1擋位的零售戶訂購上限為5條,屬于2檔位的零售戶訂購上限為6條,依次類推.由此來計算投放值的估值,第N檔位零售戶下一輪關(guān)于A產(chǎn)品銷售量SN和投放值TN之間的計算公式如下:
TN=SN÷(SN總戶數(shù)×RN訂購率), 1≤N≤30.
(5)
其中,銷售量SN通過模型預(yù)測得到;SN總戶數(shù)為第N檔位零售戶數(shù)量;RN訂購率為第N檔位的訂購率.
由于投放值只能為整數(shù),采用公式計算和模型預(yù)測的投放值會存在小數(shù)的問題,模型采用四舍五入函數(shù)進行取整.
多分類模型采用有監(jiān)督的學(xué)習(xí)方式,數(shù)據(jù)集為同檔位內(nèi)的零售戶所有信息,將投放值作為標簽y,其它相關(guān)數(shù)據(jù)為x.首先統(tǒng)計投放值有多少類值來確定模型屬于幾分類任務(wù),如果投放值設(shè)置為1~15那么模型設(shè)置為15分類.然后將數(shù)據(jù)轉(zhuǎn)化為計算機便于計算的形式,即x數(shù)據(jù)歸一化至0~1之間,標簽y數(shù)據(jù)采用獨立熱編碼表示.最后將(x,y)輸入到GRU模型中進行訓(xùn)練,模型會根據(jù)標簽y來挖掘x數(shù)據(jù)之間的關(guān)聯(lián),并通過全連接層和Softmax層計算投放值類別的概率.由于模型在測試集上預(yù)測的不確定性,同時還需要對預(yù)測的結(jié)果進行篩選來確定最適合該時間段的投放值,篩選原則在某時間段預(yù)測結(jié)果類別數(shù)量最多則為該時間的投放值.
實驗的數(shù)據(jù)來源湖北省煙草公司十堰公司2016年1月1日至2021年12月30日的 2 630 萬條歷史銷售數(shù)據(jù),為實現(xiàn)對具體產(chǎn)品不同檔位零售戶的投放預(yù)測,選取191萬條紅金龍軟裝精品為實驗對象.對實驗數(shù)據(jù)按照檔位處理得到30份平均6.4萬條的歷史銷售數(shù)據(jù),卷煙產(chǎn)品按周投放,不包括假期每年共48輪投放,按照時間段處理得到288條累計數(shù)據(jù).采用2016-2020年時間段內(nèi)的數(shù)據(jù)為訓(xùn)練集,2021年時間段內(nèi)的數(shù)據(jù)為測試集,在2021年數(shù)據(jù)上驗證投放策略生成模型的性能.卷煙產(chǎn)品投放策略生成模型的各部分輸入輸出和數(shù)據(jù)集劃分如表1、表2所示.

表1 模型各部分的輸入輸出

表2 模型各部分的數(shù)據(jù)集劃分

表3 各種預(yù)測方法的平均準確率對比
實驗在Windows10上進行,CPU為Intel(R) Core(TM) i9,3.10GHz,GPU為RTX3060 12G,編程語言為Python3.7,深度學(xué)習(xí)框架為Tensorflow 2.4.1和Keras 2.4.3.
實驗中模型的的參數(shù)設(shè)置:GRU中隱藏單元數(shù)為256;Boosting算法中GRU模型的個數(shù)為10;迭代次數(shù)為20次;批次大小設(shè)置為32;學(xué)習(xí)率為1e-5;優(yōu)化器Adam;為防止過擬合dropout設(shè)置為0.2;預(yù)測模型的損失函數(shù)為均方根誤差;分類模型的損失函數(shù)為交叉熵代價函數(shù).
實驗選用準確率和平均絕對誤差(MAE)作為投放策略生成模型的衡量指標,其計算過程如下式(6)-(7)所示.

(6)
(7)

銷售量預(yù)測通過多元預(yù)測模型來實現(xiàn),為了驗證Boosting-GRU多元預(yù)測模型的準確性,實驗同時采用支持向量回歸(SVR)、邏輯回歸(LR)、決策樹(DT)、隨機森林(RF)、季節(jié)性差分回歸移動平均模型(SARIMA)、GRU神經(jīng)網(wǎng)絡(luò)模型共6種回歸預(yù)測方法作為對比.計算幾種方法在1~30檔位零售戶的歷史銷售數(shù)據(jù)上預(yù)測銷售量的準確率并取平均值,各種方法預(yù)測的平均準確率對比如下表3所示.為便于直觀的觀測模型預(yù)測的性能,列舉多元預(yù)測模型在1檔、15檔和25檔零售戶上紅金龍軟裝精品卷煙2021年的銷售量預(yù)測如下圖4所示.

圖4 多元預(yù)測模型的預(yù)測對比
由表3可知,Boosting-GRU模型在不同檔位數(shù)據(jù)上的預(yù)測相比其它預(yù)測方法預(yù)測效果更優(yōu),平均預(yù)測準確率達到97.64%,對比另外6種預(yù)測方法的平均準確率最低提升1.67%,最高提升5.44%.由圖4觀測可知,在列舉的1檔、15檔和25檔零售戶檔位上預(yù)測的效果均為:Boosting-GRU>GRU>SARIMA,神經(jīng)網(wǎng)絡(luò)的預(yù)測結(jié)果要優(yōu)于傳統(tǒng)預(yù)測模型,而結(jié)合Boosting算法的神經(jīng)網(wǎng)絡(luò)模型能通過不斷調(diào)整樣本權(quán)重來降低預(yù)測結(jié)果的誤差,從而提高整體模型的預(yù)測能力.
卷煙產(chǎn)品投放策略生成模型在十堰市2021年紅金龍軟裝精品的1~30檔位零售戶的歷史銷售數(shù)據(jù)上進行驗證,通過觀測模型銷售量預(yù)測值以及投放值序列的平均絕對誤差來驗證模型的性能,實驗結(jié)果如下表4所示.為便于直觀的觀測投放策略生成模型性能,同時列舉模型在1檔、15檔和25檔零售戶上紅金龍軟裝精品卷煙2021年的投放策略生成效果,如下圖5所示.

表4 投放策略生成模型驗證

圖5 投放策略生成模型預(yù)測效果
由表4對比計算可知,實際銷量和預(yù)測的銷量的差值均在100條以內(nèi).通過對比各投放值序列的誤差,最終序列的平均絕對誤差均低于20%.分析原因,最終序列是選擇3種投放值序列誤差最小的序列,因此最終序列更符合卷煙產(chǎn)品的投放策略.由圖5觀測可知,投放策略生成模型分別采用3種不同的方法計算投放值序列,在1檔和15檔零售戶數(shù)據(jù)上預(yù)測效果,投放值序列2要優(yōu)于投放值序列1和投放值序列3,模型最終會選擇投放值序列2作為最終投放策略;在25檔零售戶數(shù)據(jù)集上預(yù)測的效果,投放值序列3優(yōu)于投放值序列2和投放值序列1,即模型最終會選擇投放值序列3作為最終投放策略.
為科學(xué)制定卷煙產(chǎn)品投放策略,結(jié)合GRU神經(jīng)網(wǎng)絡(luò)模型和Boosting集成學(xué)習(xí)算法各自的優(yōu)點,提出一種混合神經(jīng)網(wǎng)絡(luò)模型的卷煙投放預(yù)測方法.該模型采用Boosting-GRU多元預(yù)測模型、產(chǎn)品銷量至投放值計算以及GRU多分類模型3種方法來分別計算卷煙產(chǎn)品投放值序列,并選擇誤差最小為最終的投放值序列.在湖北省十堰市卷煙產(chǎn)品的歷史銷售數(shù)據(jù)上進行實驗,實驗結(jié)果表明,該模型能很好的完成卷煙投放策略生成任務(wù).