洪 峰,潘法昱,趙建翊,高 楠,曹 斌,范 菁(浙江工業(yè)大學計算機科學與技術(shù)學院,杭州3003)
2(浙江省煙草公司寧波市公司,浙江寧波315000)
E-mail:hongfeng@zjut.edu.cn
煙草行業(yè)一直以來是我國經(jīng)濟發(fā)展、財政收入的重要組成部分.煙草行業(yè)在堅持專賣制度的前提下,引入了市場競爭機制,形成市場和計劃相結(jié)合的模式.現(xiàn)有煙草行業(yè)的銷售和市場投放的服務模式是依靠自身經(jīng)驗和市場反饋的,但是這種模式需要依賴大量的人工參與[1],從工作效率和準確率方面無法得到保證,進而不能很好解決區(qū)域性的煙草滯銷、脫銷等現(xiàn)實問題.事實上,面向煙草行業(yè)的銷售和投放屬于時間序列預測問題[2],因此本文也將從時序預測出發(fā)展開研究.
解決煙草行業(yè)的時間序列問題主流的方法是統(tǒng)計方法和機器學習.統(tǒng)計方法如自回歸滑動移動平均模型(ARIMA)[9,14],一種利用擬合的 ARIMA 模型進行聚類的方式,進行時間序列預測,該方法聚類效果好,預測速度快,方法簡潔易行,但是ARIMA模型只能利用一種特征進行時間預測,不能結(jié)合其他的特征數(shù)據(jù),很難保證預測結(jié)果的準確性.在本文算法中結(jié)合了煙草銷量數(shù)據(jù)在內(nèi)的24維特征數(shù)據(jù),給算法預測的準確性提供了保證.在機器學習領(lǐng)域,也有相關(guān)方法對上述煙草行業(yè)的銷售投放預測問題進行過研究[10,12].其中,一種基于神經(jīng)網(wǎng)絡算法的PSO-BP混合模型算法用來解決煙草供給預測,利用粒子群中粒子的位置表示神經(jīng)網(wǎng)絡中當前迭代次數(shù)中的權(quán)屬集合,訓練過程中產(chǎn)生的誤差作為訓練的適應度,但是往往建立模型時間復雜度高,可解釋性差.還有例如李曉歌[3],謝星峰[4]都提出過利用神經(jīng)網(wǎng)絡算法解決面向煙草行業(yè)的供給預測問題.雖然神經(jīng)網(wǎng)絡算法能很好地契合煙草數(shù)據(jù)的非線性特征,以及根據(jù)擬合結(jié)果進行供給預測,得到預測結(jié)果準確性較高.但是它是一個黑盒操作,無法表示輸入數(shù)據(jù)與預測結(jié)果之間的關(guān)系;神經(jīng)網(wǎng)絡的結(jié)構(gòu)難以確定(確定隱含層的節(jié)點數(shù));節(jié)點數(shù)過多,容易使模型在訓練中陷入局部極小值.現(xiàn)階段還有類似于長短時記憶神經(jīng)網(wǎng)絡模型(LSTM)[20]的深度學習方法,但是此類方法的可解釋性差,本文的算法可以清晰的了解到算法肌理.
綜上考慮,我們提出了一種面向煙草行業(yè)的供給預測服務算法.以往算法都是利用回歸的方式進行建模預測,而本文將回歸的形式轉(zhuǎn)變?yōu)橛梅诸惖姆椒ㄈミM行預測.該算法首先針對煙草銷量數(shù)據(jù)進行預處理,包括去除異常值和數(shù)據(jù)合并.通過去異常值操作,保證算法的輸入數(shù)據(jù)不會存在因為法定節(jié)假日和風俗習慣所引起的異常數(shù)據(jù),以及數(shù)據(jù)合并過程中產(chǎn)生的異常數(shù)據(jù).然后利用處理完的數(shù)據(jù)建立數(shù)據(jù)集,并取出預測時間歷年前三個月的銷量數(shù)據(jù),訓練隨機森林模型,得出銷量數(shù)據(jù)中每一維特征對于銷量的重要程度指標,然后輸入預測時間前一周的銷量數(shù)據(jù),得出下一周的預測銷量.
同時在算法投放量預測模型中,采用比例的形式代替原有投放數(shù)量,具體為大類客戶在全體客戶投放量中所占比例,和在某一大類客戶中,各個小類客戶在該大類客戶投放量中所占比例.取出預測時間之前各大類客戶的比例數(shù)據(jù),放入ARIMA模型進行訓練,然后輸入當前一周的比例數(shù)據(jù),最終得出各個大類預測比例.接著利用在具體某一大類中,各個小類中所占該大類比例,最終得出各個小類在全體客戶投放量中所占比例算法.通過上述步驟,從而完成整個煙草預測服務模型.
本文的主要貢獻如下所示:
1)利用集成學習方法,避免在煙草數(shù)據(jù)的供給預測中會出現(xiàn)的過擬合現(xiàn)象;
2)在算法中加入了投放量預測模型,完善了供給服務,避免了現(xiàn)實中因投放不合理產(chǎn)生的滯銷、脫銷等問題出現(xiàn);
3)首次采用了分類的方式,對煙草數(shù)據(jù)進行時間序列預測;
4)通過實驗對本文算法進行驗證,證明該算法能夠保證較好的準確性.
本節(jié)介紹了一系列重要的預備知識,以幫助理解本文算法.其中我們會討論在銷售預測模型中的隨機森林算法,以及在投放預測模型中的ARIMA模型.
隨機森林算法廣泛應用于分類,回歸問題上,是一種集成學習方法[6,7].顧名思義,隨機森林算法可以分為概念,一個是“隨機”,一個是“森林”.“隨機”指的是在訓練集中隨機并且有放回的抽取訓練樣本.若不采用隨機抽樣,算法中每棵決策樹的訓練樣本一樣,那么最終訓練出來的結(jié)果也是完全一樣的,那么隨機森林算法與普通決策樹的算法并沒有不同之處,同樣,隨機森林算法也包含了決策樹算法的不足之處[8,11],即過擬合,結(jié)果不穩(wěn)定等問題.
此外,隨機森林算法在訓練樣本抽取是有放回地抽樣.因為訓練樣本僅僅只是通過隨機抽取,而不采取放回的形式,那么每棵樹的訓練樣本都是不同的,彼此之間沒有交集,所以每棵樹進行訓練產(chǎn)生結(jié)果存在一定的差異.然而隨機森林算法最后的結(jié)果是基于多棵樹的訓練結(jié)果,因此只是“片面地”采用不放回抽樣,對于算法而言并沒有益處.
“森林”的概念來源于集成學習方法,算法通過整合眾多決策樹,組成“森林”的形式,即將若干決策樹訓練結(jié)果進行投票,最終產(chǎn)生一個最好的訓練結(jié)果作為算法輸出.
簡而言之:隨機森林建立了多個決策樹,并將它們合并在一起以獲得更準確和穩(wěn)定的預測.如圖1所示,當我們需要預測一個特征為x的樣本的值時,隨機森林會將x輸入到每一棵決策樹中,每個決策樹都會輸出一個值.最后對所有值取平均作為隨機森林的預測結(jié)果.
圖1 隨機森林模型示意圖Fig.1 Random forest model diagram
ARIMA 模型[9,14],全程自回歸積分滑動平均模型(Autoregressive Integrated Moving Average Model),它包含三個部分,即AR(Auto Regression)自回歸模型,I(Integration)單整數(shù)階,以及MA(Moving Average)移動平均模型.
其中需要說明的是:1)AR描述的是時間序列在某一時刻的值與之前時刻的值之間的關(guān)系;2)I描述的是時間序列從非平穩(wěn)序列經(jīng)差分后轉(zhuǎn)為平穩(wěn)序列的計量模型;3)MA(Moving Average)模型描述的是時間序列在當前時刻與前一時刻之間的差值;4)ARIMA實際上是AR和MA模型的組合,它與ARMA模型的區(qū)別在于ARMA模型針對平穩(wěn)時間序列建立的模型,而ARIMA模型則是針對非平穩(wěn)時間序列建模.
因此,總的來說,ARIMA模型將預測對象隨時間推移而形成的數(shù)據(jù)序列視為一個隨機序列,然后按照下述3個步驟進行建模:1)將非平穩(wěn)序列轉(zhuǎn)化為平穩(wěn)序列;2)確定模型的形式.即模型屬于AR、MA、ARMA中的哪一種,這主要是通過模型識別來解決的;3)確定變量的滯后階數(shù).通過以上3個步驟,完成ARIMA模型的建模.
本文提出了一種準確高效的預測算法來預測煙草的銷量和投放量.
如圖2所示,算法主要可以分為3個步驟:1)歷史數(shù)據(jù)預處理;2)建立銷量預測模型;3)建立投放量預測模型.算法通過輸入煙草數(shù)據(jù),經(jīng)預處理后,通過銷量預測模型預測下一周的煙草銷量.數(shù)據(jù)輸入投放量預測模型中預測下一周各類客戶的投放量.
在現(xiàn)實情況中,數(shù)據(jù)存在一定的滯后性(本文所用數(shù)據(jù)出現(xiàn)銷售總量不等于投放量的情況),故對于投放量預測模型中所用數(shù)據(jù)進行處理,把具體每類客戶的投放量數(shù)值改為比例的形式進行替換,如小類客戶在各自大類客戶中所占比例,大類客戶在全體客戶中所占比例.然后把某一類客戶的比例數(shù)據(jù)放入ARIMA模型中進行訓練,最終預測下一周該類客戶的比例.
圖2 算法流程示意圖Fig.2 Algorithm process diagram
測模型中所使用特征數(shù)據(jù)是經(jīng)由煙草局專家挑選出的可能會影響煙草銷量的特征.而上一步驟歷史數(shù)據(jù)預處理中,對于銷量數(shù)據(jù)中的特征數(shù)據(jù)進行刪減,剔除異常數(shù)據(jù),并經(jīng)過數(shù)據(jù)合并,從而取得新的特征數(shù)據(jù).因為本文需要對當前時間煙草銷量進行預測,而無法獲取當前時間的煙草的真實銷量,考慮到煙草數(shù)據(jù)的季節(jié)性變化,本文利用當前時間的前三個月歷史數(shù)據(jù)作為本文訓練模型的訓練集.
圖3 日銷量箱線圖Fig.3 Daily sales boxplot diagram
主要思想:如圖4所示,我們在數(shù)據(jù)庫中取出2016、2017年近三個月的數(shù)據(jù)放入隨機森林模型中進行指標重要程度訓練,得出每一項指標重要程度之后保存該模型.然后在該模型中輸入本周數(shù)據(jù),經(jīng)過該模型訓練之后,最終得出下周預測銷量.
圖4 銷售模型建模示意圖Fig.4 Modeling process for sales diagram
舉例:假設當前時間為5月份,我們在數(shù)據(jù)庫中取出2016、2017年近三個月(3月,4月,5月)的數(shù)據(jù)放入隨機森林模型中進行指標重要程度訓練,得出每一項特征的重要程度,并進行歸一化處理,結(jié)果如表1中示例所示.
然后在模型中輸入當前一周的數(shù)據(jù),最終得出下周預測銷量.
主要思想:如圖5所示,ARIMA模型將預測對象隨時間推移而形成的數(shù)據(jù)序列視為一個隨機序列,然后按照下述3個步驟進行建模:1)平穩(wěn)序列、純隨機序列檢測;2)確定模型種類;通過模型識別來解決的;3)確定變量的滯后階數(shù),通過模型識別完成的.其中ARIMA模型識別可以通過自相關(guān)系數(shù)AC和偏相關(guān)系數(shù)PAC進行識別.
表1 特征重要程度歸一化示例表Table 1 Feature importance normalization diagram
算法:通過繪制時間序列散點圖判斷該數(shù)據(jù)集是否平穩(wěn),如果平穩(wěn)則不需要進行差分操作,ARIMA模型中參數(shù)d的值為0;如果不平穩(wěn)則進行n階差分操作,使之變成平穩(wěn)序列,參數(shù)d的值就是對數(shù)據(jù)差分階數(shù)n的值.
圖5 投放模型建模示意圖Fig.5 Modeling process for delivery diagram
對非純隨機序列做出acf圖和pacf圖,對圖中數(shù)據(jù)的變化趨勢進行判斷,如果acf圖出現(xiàn)拖尾,而pacf圖出現(xiàn)p階截尾的現(xiàn)象,則參數(shù)q為0,參數(shù)p為出現(xiàn)截尾時的階數(shù),即選用AR(p)模型;如果acf圖出現(xiàn)q階截尾的現(xiàn)象,而pacf圖出現(xiàn)拖尾,則參數(shù)p為0,參數(shù)q為出現(xiàn)截尾時的階數(shù),即選用MA(q)模型;如果acf圖出現(xiàn)拖尾,并且pacf圖出現(xiàn)拖尾,則參數(shù)p、q為出現(xiàn)拖尾的階數(shù),即選用ARMA(p,q)模型.
在確定參數(shù) p,d,q的值后,將數(shù)據(jù)送入 ARIMA(p,d,q)模型中進行訓練.模型訓練完成后即可直接輸出下次的預測值.在所有大類占比預測完成之后進行放縮操作,方法為將每個大類的預測值除以所有大類預測值的和,保證所有放縮后大類預測值的和為1.
為了降低模型復雜度,并加快預測速度,將取出的前4周小類在大類中占比的數(shù)據(jù)按小類進行數(shù)據(jù)求平均值操作,得到每個小類在前4周的平均占比數(shù)據(jù).最后將小類平均占比乘上對應大類占比的預測值就得到了下周小類占比的數(shù)據(jù).
本節(jié)將會通過一系列實驗對于本文所提算法進行準確性評估,具體是針對煙草銷量預測模型,投放量預測模型進行誤差分析.
本文所使用數(shù)據(jù)來源于N市煙草局,數(shù)據(jù)具體可以分為兩部分:1)2016年,2017年某一品牌的煙草銷量數(shù)據(jù);2)2016年,2017年各類經(jīng)銷商某一品牌煙草的投放量數(shù)據(jù).
(4) B1中的成員均是Y中頂點色集合,因此,3,4,5,6中至少有3種色同時包含在每個C(ui)中,不妨設3,4,C(ui), i=1,2,…,10,從而每個C(ui)只能是以下集合之一:{1,3,4,5},{2,3,4,5},{1,3,4,5,6},{2,3,4,5,6},{1,2,3,4,5},{1,2,3,4,5,6},矛盾。
其中銷量數(shù)據(jù)包含日銷量在內(nèi)專家選出的24維可能影響銷量特征數(shù)據(jù);投放量數(shù)據(jù)包含7個大類客戶的投放數(shù)據(jù)以及各個大類客戶中包含的小類客戶共計21維投放量數(shù)據(jù).
針對本文算法得到預測結(jié)果,我們采用廣泛使用的相對誤差、最高誤差、最低誤差、平均誤差來評估算法的準確性.相對誤差是衡量算法準確率的重要指標,相對誤差越低,表示算法的預測結(jié)果準確率越高.該組實驗數(shù)據(jù)經(jīng)實驗產(chǎn)生最大的誤差即最高誤差,產(chǎn)生最小的誤差即最低誤差,所有數(shù)據(jù)的誤差的平均值即平均誤差,這三類誤差都是基于相對誤差實現(xiàn)的.相對誤差計算公式具體如下:
銷售模型所使用的數(shù)據(jù)經(jīng)預處理之后,考慮到季節(jié)性變化的情況,實驗隨機選取了 2017.3.27 ~ 4.2,2017.6.26 ~5.2,2017.9.11 ~9.17,2017.11.6 ~11.12 這四個星期進行預測.將星期前三個月作為訓練集,對隨機森林模型進行訓練.例如2017.3.27 ~4.2,我們采用2016.1 到 2016.3.26 這三個月的數(shù)據(jù)作為訓練集進行訓練.
表2 銷量特征歸一化示意圖Table 2 Sales characteristics normalization diagram
經(jīng)模型訓練,得出每一維特征對于煙草銷量的重要程度指標,經(jīng)歸一化后,如表2所示.在該模型中輸入預測時間前3個月的銷量數(shù)據(jù),最終得出預測結(jié)果,并與實際數(shù)據(jù)進行對比,結(jié)果如表3所示.
表3 銷售模型預測結(jié)果示意圖Table 3 Sales model forecast results diagram
表3中的差值為預測結(jié)果與實際數(shù)據(jù)的差值的絕對值.如表3所示,這四個星期的差值分別為57、70、81、86,他們的相對誤差分別為 0.017、0.011、0.041、0.21,平均誤差為0.076.實驗證明該銷售模型具有較好的預測準確性.
投放模型的數(shù)據(jù)為在2016年和2017年時間內(nèi)向7個大類別的客戶,共計21個小類別客戶的產(chǎn)品投放量數(shù)據(jù).實驗選取第96周的投放量作為實驗預測目的,并用第96周的真實投放量數(shù)據(jù)作為預測結(jié)果準確度衡量標準.
圖6 A類客戶數(shù)據(jù)散點圖Fig.6 Class A customer data scatter diagram
以A類客戶數(shù)據(jù)為例,首先取出A類客戶投放量比例歷史數(shù)據(jù)畫出散點圖,如圖6所示,發(fā)現(xiàn)A類數(shù)據(jù)已經(jīng)較為平穩(wěn),故選擇不做差分處理,差分階數(shù)d取0,再做出acf圖(圖7)和pacf圖(圖8),從acf圖中看出在2階后有截拖尾現(xiàn)象,從pacf圖中看出在2階后有拖尾現(xiàn)象,得到p和q參數(shù)的值都為2,所以最終采用ARIMA(2,0,2)模型進行訓練,訓練完成之后輸入A類客戶前一周的數(shù)據(jù),可以得到A類下一周的預測數(shù)據(jù).
圖7 A類客戶自相關(guān)圖Fig.7 Class A customer autocorrelation diagram
圖8 A類客戶的偏相關(guān)圖Fig.8 Class A customer partial autocorrelation diagram
采用相同的方法對其他6個大類客戶類進行建模和預測,最終得出各大類客戶預測結(jié)果.將該預測結(jié)果與第96周的真實數(shù)據(jù)進行比較,得出如圖9所示的箱線圖.
圖9 各大類客戶預測結(jié)果箱線圖Fig.9 Boxplot of forecast results for all major customers
從圖中可以看到7個大類客戶數(shù)據(jù)預測結(jié)果的最低誤差在0.013左右,最高誤差在0.15左右,大部分的誤差范圍在0.03到0.09的范圍內(nèi),平均誤差為 0.064,可見該模型具有較好的預測效果.
計算每個大類中小類的占比情況.這里不再使用ARIMA模型,實驗計算一個大類中各個小類在該大類中的占比,然后利用平均值作為每個大類中各個小類所占比例情況的預測值.然后該預測值和大類在全體客戶中的所占比例得出小類客戶在全體客戶中所占比例情況.如圖10所示.
圖10 各小類客戶預測結(jié)果箱線圖Fig.10 Each class customer forecast results boxplot
從圖中可以看到各小類客戶在全體客戶中所占比例最高誤差為0.16左右,最低誤差為0.015左右,大部分的誤差范圍在0.025到0.095之間,整體的平均誤差為0.068,針對小類客戶的預測也具有較好的效果.
此外,實驗嘗試直接對小類客戶數(shù)據(jù)進行ARIMA模型建模.而實驗結(jié)果一方面模型數(shù)量大大增加,時間耗費和計算量大大增加,而且預測結(jié)果的平均相對誤差達到30%.
面向煙草行業(yè)的供給預測問題本質(zhì)上就是一個時間序列預測問題[13],然而由于供給預測中煙草銷量數(shù)據(jù)具有短期性,季節(jié)性,非線性等特點,該問題的解決需要更加針對性的預測方法.為此國內(nèi)許多學者在該問題上做了許多工作.
一般在煙草行業(yè)內(nèi)進行時間序列預測的方法主要可以分為兩類:單模型和混合模型.單模型即利用一個模型實現(xiàn)時間序列預測的功能.例如陳日進[15]使用傳統(tǒng)時間序列預測法中的一次指數(shù)平滑預測法對于煙草銷量進行預測,該方法適用于較為平穩(wěn)以及變化趨勢不明顯的煙草數(shù)據(jù)其中平滑系數(shù)的取值對于銷量預測結(jié)果有較大影響,平滑系數(shù)取值也需要多次進行測試才能保證銷量預測結(jié)果的誤差較低.還有例如基于灰色預測模型的灰色預測法[16],該方法是通過給予的煙草銷量數(shù)據(jù),建立數(shù)學模型,并根據(jù)該模型對煙草銷量進行預測.但是該方法在波動變化明顯的數(shù)據(jù)中,預測結(jié)果誤差往往較大.劉璐等人[5]利用SVM(支持向量機,Support Vector Machine)解決面向煙草行業(yè)的供給預測問題.雖然SVM可以解決部分煙草數(shù)據(jù)量較小的問題,而且也能避免上述神經(jīng)網(wǎng)絡結(jié)果選擇和局部極小點問題,但是SVM對于參數(shù)調(diào)節(jié)和函數(shù)的選擇十分敏感,容易引起預測結(jié)果的不準確.
混合模型即利用幾種模型進行混合實現(xiàn)時間預測的目的.目前在混合模型中主流的還是基于機器學習的混合模型.例如靳志偉[17]提出了基于BP神經(jīng)網(wǎng)絡的煙草預測PSO-BP混合算法,利用粒子群中粒子的位置表示神經(jīng)網(wǎng)絡中當前迭代次數(shù)中的權(quán)屬集合,訓練過程中產(chǎn)生的誤差作為訓練的適應度,但是往往建立模型時間復雜度高,可解釋性差.羅艷輝等人[18]提出了基于ARMA的混合算法,利用PERT模型和ARMA模型針對煙草時間序列進行預測,得到的預測值以一定的權(quán)值比例相加得到最終的預測結(jié)果.該方法加入了一定的人為判斷,只能處理較小的數(shù)據(jù),在大數(shù)據(jù)量的操作中預測結(jié)果不會很好.羅彪等人[19]將傳統(tǒng)的節(jié)假日設為虛擬變量,構(gòu)建基于時間序列分解和虛擬變量的改進模型,在現(xiàn)實操作中預測結(jié)果不太理想.
本篇文章提出一種面向煙草行業(yè)供給預測服務.算法利用隨機森林模型,得出數(shù)據(jù)中每一維特征數(shù)據(jù)的重要程度,利用當前時間的數(shù)據(jù)作為輸入得出下一周銷量的預測;化大類客戶和小類客戶數(shù)據(jù)為比例的形式,利用ARIMA模型對它們進行預測.最后本文通過實驗比較,證明了算法得到的預測結(jié)果與真實數(shù)據(jù)的準確性較高,能夠銷量平均誤差為0.076,大類客戶投放量平均誤差為0.13,小類客戶投放量平均誤差0.068.
本文后續(xù)工作將從以下幾個方面展開:
1)增加對于時間序列驗證過程,保證其準確率;
2)對于算法的公平性進行進一步的討論.