葉劍鋒, 鄭國(guó)英
(上海交通大學(xué) 軟件學(xué)院, 上海 200240)
隨著第三次工業(yè)革命以來(lái)信息科技的迅速發(fā)展,各行各業(yè)都積累了海量異構(gòu)的數(shù)據(jù)資料。這些數(shù)據(jù)往往都具有豐富的數(shù)據(jù)價(jià)值,急需從這些信息里抽取出商業(yè)價(jià)值、業(yè)務(wù)知識(shí),從而輔助支持于決策[1]。通過(guò)數(shù)據(jù)挖掘技術(shù)[2-3]來(lái)進(jìn)行預(yù)測(cè)性分析,可以挖掘企業(yè)有效數(shù)據(jù),提取價(jià)值信息,幫助企業(yè)做出戰(zhàn)略性決策。
銷售預(yù)測(cè)通常是根據(jù)商品過(guò)往數(shù)據(jù)和目前經(jīng)濟(jì)形勢(shì)環(huán)境等情況來(lái)預(yù)測(cè)短期或者長(zhǎng)期商品銷量,評(píng)估市場(chǎng)情況。銷售預(yù)測(cè)是企業(yè)供應(yīng)鏈管理的關(guān)鍵環(huán)節(jié),精準(zhǔn)的銷售預(yù)測(cè),對(duì)商業(yè)公司生產(chǎn)管理,商業(yè)決策具有深遠(yuǎn)影響。
快速消費(fèi)品(快消)[4]為高頻次采購(gòu)的商品,它具有低成本、低價(jià)格、多非理性、購(gòu)買(mǎi)次數(shù)多等特點(diǎn)。快速消費(fèi)品的促銷活動(dòng)一般來(lái)說(shuō)都能帶來(lái)很大幅度的銷量提升,帶來(lái)商品的大賣(mài)。在瞬息萬(wàn)變的商業(yè)環(huán)境中,能否比競(jìng)爭(zhēng)者提供更低的成本至關(guān)重要,這就需要進(jìn)行正確及時(shí)的產(chǎn)品銷售預(yù)測(cè)。
本文為快消企業(yè)提出一個(gè)綜合考量?jī)?nèi)外部變量的精準(zhǔn)銷售預(yù)測(cè)解決方案,能夠根據(jù)企業(yè)歷史銷量以及未來(lái)促銷計(jì)劃對(duì)未來(lái)銷量進(jìn)行預(yù)測(cè),并且設(shè)計(jì)與實(shí)現(xiàn)了一個(gè)預(yù)測(cè)工具。
本文為某一快消巨頭Z公司研發(fā)銷售預(yù)測(cè)工具。Z公司在零食、飲料、餅干等零售上全球領(lǐng)先,旗下?lián)碛卸鄠€(gè)著名品牌。Z公司經(jīng)常會(huì)在不同時(shí)期利用不同主題進(jìn)行促銷,如“兒童節(jié)滿119減30”和“母親節(jié)買(mǎi)二送一”等不同促銷活動(dòng),除商家自身舉辦的促銷活動(dòng)外,電商平臺(tái)本身也會(huì)有各種促銷活動(dòng),例如雙十一大規(guī)模促銷活動(dòng)。
在數(shù)字化時(shí)代,Z公司需要一個(gè)預(yù)測(cè)工具來(lái)完成精準(zhǔn)的銷量自動(dòng)預(yù)測(cè),具體地,銷售預(yù)測(cè)工具應(yīng)實(shí)現(xiàn)以下需求:
1) 對(duì)不同SKU(Stock Keeping Unit,庫(kù)存量單位)商品進(jìn)行預(yù)測(cè),并實(shí)現(xiàn)商品數(shù)據(jù)的交互輸入。
2) 對(duì)商品進(jìn)行不同時(shí)期長(zhǎng)度的預(yù)測(cè),根據(jù)業(yè)務(wù)需求,快消行業(yè)特點(diǎn)進(jìn)行預(yù)測(cè)時(shí)間長(zhǎng)度的調(diào)控。
3) 對(duì)不同商品進(jìn)行不同季節(jié)周期的預(yù)測(cè)。基于不同業(yè)務(wù)背景,商品銷售的季節(jié)性周期可能會(huì)有所不同,需要滿足即使調(diào)控。
Z公司的主打商品,作為快速消費(fèi)品的典型商品,其商品在春節(jié)、節(jié)假日等時(shí)期具有明顯周期性峰值,也就是其銷量序列具有明顯周期性。在一個(gè)時(shí)間段中,序列觀測(cè)值yt和yt-s呈現(xiàn)出相似情況,比如同處于波峰同處于陡然上升,那么S就是該序列的周期。
建立季節(jié)性ARIMA(P,D,Q;p,d,q)模型,需要確定P,D,Q,p,d,q等參數(shù)。差分階數(shù)的確定通過(guò)判斷幾階差分后是否平穩(wěn)即可,而自相關(guān),偏自相關(guān)系數(shù)的確定則需要確定對(duì)應(yīng)函數(shù)及畫(huà)自相關(guān)圖,偏自相關(guān)圖來(lái)分析,這一步驟通常比較繁瑣。
模型選擇關(guān)注模型的潛在變量和模型的可能形式[5],模型應(yīng)當(dāng)追求負(fù)責(zé)精度與復(fù)雜度,但提高模型復(fù)雜度會(huì)帶來(lái)一個(gè)機(jī)器學(xué)習(xí)中非常普遍的問(wèn)題——過(guò)擬合。模型選擇沒(méi)有絕對(duì)標(biāo)準(zhǔn),因?yàn)闃?biāo)準(zhǔn)是根據(jù)數(shù)據(jù)分布的,并且要能融入到統(tǒng)計(jì)推理的框架中去。通常用AIC(Akaike Information Criterion,赤池信息準(zhǔn)則)和BIC(Bayesian Information Criterion,貝葉斯信息準(zhǔn)則)來(lái)進(jìn)行模型選擇。BIC和AIC都試圖通過(guò)引入模型中參數(shù)個(gè)數(shù)的懲罰項(xiàng)來(lái)解決這個(gè)問(wèn)題;在BIC中懲罰項(xiàng)比AIC中的懲罰項(xiàng)大。AIC定義為:AIC=2k-2ln(L)
通常,當(dāng)模型復(fù)雜度提高(k增大)時(shí),似然函數(shù)L就會(huì)增大,AIC就會(huì)變小,但是k過(guò)大時(shí),似然函數(shù)開(kāi)始緩慢增加,導(dǎo)致AIC增大,模型過(guò)于復(fù)雜,容易造成過(guò)擬合現(xiàn)象。目標(biāo)是最小化一個(gè)好的模型的AIC或BIC值。對(duì)于被調(diào)查的模型的范圍,這些準(zhǔn)則中的一個(gè)值越低,模型就越適合數(shù)據(jù)。
通過(guò)上述分析,可以發(fā)現(xiàn),對(duì)于ARIMA模型參數(shù)選擇問(wèn)題,可考慮用ARIMA模型的AIC法則進(jìn)行定階[6],求出最小AIC值得p,q,進(jìn)而采用ARIMA(p,q)。同樣對(duì)于季節(jié)性ARIMA模型,可以通過(guò)AIC來(lái)對(duì)[P,D,Q,p,d,q]進(jìn)行定階,求出最小AIC值,求得參數(shù)。
本文在R里,通過(guò)循環(huán)語(yǔ)句遍歷參數(shù)取值范圍來(lái)找出最小AIC參數(shù)組合。即對(duì)參數(shù)P,D,Q,p,d,q在其取值范圍內(nèi)進(jìn)行遍歷,對(duì)于每個(gè)組合,求得模型的AIC值,找出最小AIC的模型,找到對(duì)應(yīng)P,D,Q,p,d,q,得到最佳模型參數(shù)。
本文預(yù)測(cè)所需數(shù)據(jù)來(lái)自Z公司的數(shù)據(jù)倉(cāng)庫(kù)中的電商平臺(tái)銷售報(bào)表,如表1所示。

表1 Z公司銷量報(bào)表
其中,統(tǒng)計(jì)日期顆粒度是到日,截至項(xiàng)目期商品銷售日期是從2015-2017,為短時(shí)期序列,商品ID,商品標(biāo)題,SKU編碼,條形碼為商品標(biāo)簽,確定每一個(gè)不同商品,銷量即為本文挖掘分析的變量。
本文針對(duì)Z公司的真實(shí)業(yè)務(wù)需求,其快消品需要進(jìn)行多商品的考慮季節(jié)性影響因素的精準(zhǔn)預(yù)測(cè),基于季節(jié)性ARIMA時(shí)間序列模型,提出了一種銷售預(yù)測(cè)方法,如圖1所示。

圖1 銷售預(yù)測(cè)方法
該方法由五個(gè)步驟組成。
1) 歷史銷量數(shù)據(jù)轉(zhuǎn)換為時(shí)間序列。將銷量數(shù)據(jù)轉(zhuǎn)換為時(shí)間序列數(shù)據(jù)。
2) 劃分測(cè)試集和訓(xùn)練集。對(duì)序列進(jìn)行劃分,確定訓(xùn)練集測(cè)試集。
3) 平穩(wěn)性檢驗(yàn)。對(duì)序列平穩(wěn)性進(jìn)行判斷,不平穩(wěn),則需要進(jìn)行差分轉(zhuǎn)換為平穩(wěn)序列。
4) 模型訓(xùn)練。使用訓(xùn)練數(shù)據(jù)訓(xùn)練出改進(jìn)的季節(jié)性ARIMA模型。
5) 模型預(yù)測(cè)。使用訓(xùn)練得到的ARIMA模型來(lái)預(yù)測(cè)。
Top1商品的銷量序列圖由圖2所示。

圖2 Z公司銷量Top1 SKU時(shí)序圖
可以看到銷量走勢(shì)大致為上升趨勢(shì),不同年份之間月度銷量走勢(shì)相似,即具有一定的季節(jié)性。
針對(duì)此26個(gè)月長(zhǎng)度范圍商品序列,將最后兩個(gè)月作為測(cè)試集,將前兩年數(shù)據(jù)來(lái)進(jìn)行訓(xùn)練。使用ARIMA模型來(lái)建模,首先需要對(duì)該序列作平穩(wěn)性檢驗(yàn)分析。經(jīng)過(guò)一階差分后,可以看到 p-value<0.01, 序列平穩(wěn),那么可以對(duì)平穩(wěn)序列進(jìn)行ARIMA建模。
本文采用ARMA模型的AIC法則進(jìn)行定階,求出最小AIC值得p,q,進(jìn)而采用ARMA(p,q)。同樣對(duì)于季節(jié)性ARIMA模型,也能夠使用AIC來(lái)確定[P,D,Q,p,d,q]值,求出最小AIC值,得到模型參數(shù)。
本次建模,按照Z(yǔ)公司常用衡量指標(biāo),同時(shí)由于是時(shí)間序列,需要看到每月預(yù)測(cè)精確度,對(duì)單個(gè)Sku商品逐月預(yù)測(cè),本文采用絕對(duì)誤差。
Accuracy=1-error
按照Z(yǔ)公司要求,對(duì)Z公司要求的銷量Top20商品進(jìn)行了最新未來(lái)一個(gè)月的預(yù)測(cè),預(yù)測(cè)結(jié)果如表2所示。
快消業(yè)的促銷很大程度地決定銷量,其他因子影響微乎甚微,那么這時(shí)用多元回歸來(lái)預(yù)測(cè)就會(huì)出現(xiàn)預(yù)測(cè)不準(zhǔn)確。因而既需要將強(qiáng)影響因子納入模型,考慮它的影響系數(shù),在沒(méi)有其他因子的情形下,自然只有因變量自身的影響,即對(duì)應(yīng)于銷量預(yù)測(cè),考慮它的歷史銷量以及促銷因素,需要將自身因素與外部唯一強(qiáng)影響因子同時(shí)進(jìn)行建模,如果能將兩個(gè)模型進(jìn)行結(jié)合,發(fā)揮各自功能,自然就能做到這點(diǎn)。基于此,本文研發(fā)出基于改進(jìn)時(shí)間序列與多元回歸的組合模型。

表2 預(yù)測(cè)結(jié)果準(zhǔn)確率
基于改進(jìn)時(shí)間序列與多元回歸組合模型流程如圖3所示。

圖3 基于組合模型的銷售預(yù)測(cè)
即首先需要構(gòu)建模型所需數(shù)據(jù)集,進(jìn)行建模之后,使用多元回歸模型對(duì)數(shù)據(jù)集進(jìn)行訓(xùn)練,得到促銷事件對(duì)銷量的影響系數(shù),假設(shè)歷史中沒(méi)有促銷事件,模型將歷史數(shù)據(jù)集里促銷因子Remove,基于此數(shù)據(jù)使用多元回歸predict, 使用改進(jìn)季節(jié)性ARIMA模型在此數(shù)據(jù)集上進(jìn)行預(yù)測(cè),最后加上促銷因子影響系數(shù),即得到最終預(yù)測(cè)值。
Z公司在促銷上的行為是在某段時(shí)期內(nèi)進(jìn)行不同主題不同等級(jí)促銷,本文拿到數(shù)據(jù)如表3所示。

表3 促銷活動(dòng)日歷
其粒度到天,對(duì)于回歸建模需要粒度到天的一組映射關(guān)系,數(shù)據(jù)集構(gòu)建如表4所示。
構(gòu)建促銷等級(jí),年,月,日對(duì)銷量的映射,
>fit<-glm(data=time_data_train,Quantity~factor(Level)+factor(Year)+factor(Month)+factor
(Day_31),family = gaussian)
即多元線性回歸建模,完成銷量擬合fit。當(dāng)需要量化出促銷對(duì)銷量影響時(shí),可以使用回歸系數(shù)。回歸系數(shù)(regression coefficient)表示了自變量x對(duì)y有多大的影響程度。提取出這些因子的回歸系數(shù):
>d_coe=data.frame(fitcoefficients)
Coefficients:

Estimate Std. Error t value Pr(>|t|)(Intercept) 41.546 8 10.804 4 3.845 0.000 135***factor(Level)A 23.400 3 11.759 2 1.990 0.047 111*factor(Level)S 23.937 9 6.003 8 3.987 7.63e-05***factor(Level)S+GSKA -4.064 2 7.836 8 -0.519 0.604 254 factor(Level)S+GSKA+SBD 21.566 0 24.304 5 0.887 0.375 308 factor(Level)X1 -67.704 8 24.349 9 -2.780 0.005 622**factor(Level)X2 -20.592 1 16.635 1 -1.238 0.216 317 factor(Level)X3 -14.497 4 21.962 6 -0.660 0.509 482 factor(Level)X4 9.523 7 24.969 4 0.381 0.703 049 -

表4 數(shù)據(jù)集
可以看到,Level A,Level S的促銷對(duì)于銷量具有顯著影響,回歸系數(shù)都約為23,系數(shù)越大表明一個(gè)因子變化的大小對(duì)銷量影響越大。這里即舉辦Level A/S的促銷一天,即能帶來(lái)約23個(gè)/袋的銷量提升。
本文假設(shè)原始數(shù)據(jù)集里沒(méi)有進(jìn)行促銷事件,我們將原數(shù)據(jù)標(biāo)記為無(wú)促銷:
>df_no_event[["Level"]]="a" #Level a 表示沒(méi)有促銷
用沒(méi)有促銷事件的歷史數(shù)據(jù)集基于有促銷事件的真實(shí)擬合fit來(lái)作回歸預(yù)測(cè),
>data_no_event_pred=predict(fit, df_no_event)
之后,用此多元回歸假設(shè)沒(méi)有促銷時(shí)間的預(yù)測(cè)數(shù)據(jù)來(lái)作時(shí)間序列建模,算法偽代碼如下:這里將日銷量累計(jì)到月銷量,進(jìn)行月度的季節(jié)性ARIMA建模,依然使用之前研究的改進(jìn)的季節(jié)性ARIMA模型。至此,完成了時(shí)間序列建模,得到到月的預(yù)測(cè)值0r。
本文的模擬機(jī)制是假設(shè)去除促銷,在其他變量不變的情況下,需要將促銷因子重新納入模型來(lái)評(píng)估促銷的影響。可以看到促銷數(shù)據(jù)是到天的,得到了不同等級(jí)促銷日影響系數(shù),這里的時(shí)間序列建模是到月度的預(yù)測(cè),因而對(duì)未來(lái)月份的預(yù)測(cè),可以累計(jì)月促銷天數(shù),將不同等級(jí)促銷影響加入到模型:
coef=d_coe[d_coe['index']==factor_level,]$fit.coefficients
or[or['month']==temp_month,]$x=or[or['month']==temp_month,]$x+temp_days[j]*coef
即在時(shí)間序列預(yù)測(cè)月份銷量上,加上促銷天數(shù)帶來(lái)的銷量提升。
基于上述研究開(kāi)發(fā)的自動(dòng)化工具,對(duì)于混合模型也提出自動(dòng)化功能需求。一是歷史銷售數(shù)據(jù)的交互式輸入,二是未來(lái)促銷計(jì)劃的交互式輸入,三是預(yù)測(cè)長(zhǎng)度的交互。基于ui.R,設(shè)計(jì)框架,對(duì)于算法模型,使用server.R封裝。程序流程圖如圖4所示。

圖4 程序流程圖
以上內(nèi)容的開(kāi)發(fā)封裝,得到自動(dòng)化預(yù)測(cè)界面如圖5所示。左欄第一行為輸入商品歷史數(shù)據(jù),第二行為輸入促銷計(jì)劃日歷,調(diào)整預(yù)測(cè)長(zhǎng)度,可得到未來(lái)月份的預(yù)測(cè)值。

圖5 組合模型預(yù)測(cè)工具界面


表5 組合模型預(yù)測(cè)結(jié)果
可以看到,相比于單一的季節(jié)性ARIMA模型,對(duì)于所選擇20個(gè)商品,預(yù)測(cè)平均準(zhǔn)確率有約5%的提升。另外,預(yù)測(cè)工具訓(xùn)練時(shí)間為35 s,整個(gè)工具一鍵預(yù)測(cè)運(yùn)行67.5,達(dá)到企業(yè)測(cè)試要求,工具可以平穩(wěn)運(yùn)行。
為了幫助快消企業(yè)作出準(zhǔn)確的采購(gòu)等商業(yè)決策,本文基于企業(yè)現(xiàn)有數(shù)字化能力和設(shè)施,建立一個(gè)預(yù)測(cè)模型來(lái)幫助精準(zhǔn)預(yù)測(cè)銷售,利用歷史銷量數(shù)據(jù)和促銷日歷數(shù)據(jù)來(lái)進(jìn)行模型訓(xùn)練,既利用了商品自身數(shù)據(jù)又利用了外部促銷因素,通過(guò)預(yù)測(cè)分析的結(jié)果來(lái)給企業(yè)予決策支持。
本文主要工作如下。
1) 基于改進(jìn)時(shí)間序列模型的銷售預(yù)測(cè)方法研究
對(duì)快消企業(yè)數(shù)據(jù)進(jìn)行挖掘分析,完成從ARIMA到改進(jìn)季節(jié)性ARIMA模型的設(shè)計(jì),考慮了快消行業(yè)的季節(jié)性周期特點(diǎn)、周期長(zhǎng)度不同的特點(diǎn),不同商品歷史數(shù)據(jù)長(zhǎng)度不同特點(diǎn)。
2) 基于組合模型的銷售預(yù)測(cè)方法研究
針對(duì)快消企業(yè)的促銷因素,研發(fā)基于季節(jié)性ARIMA時(shí)間序列與多元回歸組合的模型。在已有歷史數(shù)據(jù)的基礎(chǔ)上,納入企業(yè)促銷因子,實(shí)現(xiàn)更精準(zhǔn)預(yù)測(cè),同時(shí)量化驗(yàn)證了企業(yè)促銷的有效性。
3) 自動(dòng)化預(yù)測(cè)工具的開(kāi)發(fā)
基于上述研究成果,采用R語(yǔ)言和R-shiny框架等技術(shù)完成對(duì)算法的封裝以及自動(dòng)化預(yù)測(cè)功能,實(shí)現(xiàn)交互式簡(jiǎn)易預(yù)測(cè),滿足企業(yè)業(yè)務(wù)人員使用需求。本文采用企業(yè)實(shí)際數(shù)據(jù)進(jìn)行了實(shí)驗(yàn)與測(cè)試,結(jié)果表明,工具所實(shí)現(xiàn)的兩種模型分別預(yù)測(cè)準(zhǔn)確率達(dá)到79%和84%,預(yù)測(cè)時(shí)間分別為11.5 s和67.5 s,達(dá)到預(yù)期目標(biāo)。