王 輝 李昌剛
(浙江萬里學院信息與智能學院 浙江 寧波 315000)
大數(shù)據(jù)與機器學習的結(jié)合為當今社會帶來的巨大的變革,從每天2 500萬人次足不出戶地在餓了么平臺上找到自己喜歡的餐廳和食物,到亞馬遜在客戶服務中運用大數(shù)據(jù)精準預測出客戶的需求來建立高效的物流運轉(zhuǎn)體系,都顯現(xiàn)著變革帶來的數(shù)字化趨勢的威力。機器學習技術基于強大的計算平臺給各行業(yè),特別是零售行業(yè)帶來了成本的降低和效益的增長。大數(shù)據(jù)、云計算、物聯(lián)網(wǎng),必然會使傳統(tǒng)零售向人工智能互聯(lián)網(wǎng)時代的新零售過渡,零售業(yè)在實體經(jīng)濟中的權(quán)重地位也必然會獲得大幅增強。
銷售預測在零售行業(yè)中有著舉足輕重的地位,準確的銷售預測結(jié)果不僅能夠讓管理者合理安排訂貨時間和庫存,減少安全庫存成本和缺貨損失,還能夠支持高層管理者在指定戰(zhàn)略發(fā)展目標的可靠性。由于數(shù)據(jù)存儲技術的發(fā)展,企業(yè)存儲了大量的數(shù)據(jù)來支持企業(yè)的運營決策,在一些數(shù)據(jù)量大,數(shù)據(jù)結(jié)構(gòu)多樣的銷售預測場景下,傳統(tǒng)的統(tǒng)計學方法[1]可能無法取得精準的預測結(jié)果,因此國內(nèi)外學者對機器學習技術在銷售預測中的應用進行了大量的研究。
Grasman等[2]使用Bass模型和銷售的數(shù)據(jù),為未來銷售進行了點估計,并假設噪音的大小與年銷售額成正比,利用時間依賴的Ornstein-Uhlenbeck過程的形式,給出了誤差的置信區(qū)間。姜曉紅等[3]以某電商平臺數(shù)據(jù)為例,運用時間序列法ARIMA模型預測各種商品在未來一周全國和區(qū)域性需求量,并與簡單移動平均法預測結(jié)果做對比,發(fā)現(xiàn)ARIMA模型有更高的精準度。Loureiro等[4]通過深度學習方法獲得的銷售預測與決策樹、隨機森林、支持向量回歸、人工神經(jīng)網(wǎng)絡和線性回歸獲得的銷售預測進行比較,發(fā)現(xiàn)采用深度學習的模型在預測時尚零售市場的銷售方面具有良好的性能。Duan等[5]將支持向量機、BP神經(jīng)網(wǎng)絡與K-最近鄰算法在預測手機銷售前景的準確性上進行了比較,發(fā)現(xiàn)在小樣本的前提下,支持向量機能更好地預測出各類手機的銷量。
基于機器學習的銷售預測的另一種方式是使用自然語言處理(NLP)工具,使計算機能夠識別潛在消費者的語音和電子郵件中的關鍵詞,以預測這些消費者將購買的可能性。Fan等[6]為了產(chǎn)品銷售預測,開發(fā)了一種結(jié)合Bass/Norton模型和情感分析同時使用歷史銷售數(shù)據(jù)和在線評論數(shù)據(jù)的新方法。利用Naive Bayes算法的情感分析方法,從每個在線評論的內(nèi)容中提取情感指標,并將其整合到Bass/Norton模型的仿制系數(shù)中,以提高預測精度,并收集了真實的汽車行業(yè)數(shù)據(jù)和相關的在線評論對模型進行驗證。
由于機器學習算法在應用的過程中通常需要調(diào)整算法中的超參數(shù),因此有些學者對算法進行了優(yōu)化。黃鴻云等[7]基于改進的多維灰色模型(Gm(1,N))和神經(jīng)網(wǎng)絡(ANN)來預測銷量,其中多維灰色模型對銷售數(shù)據(jù)建模,神經(jīng)網(wǎng)絡對誤差進行校正。利用阿里天貓銷售數(shù)據(jù)來評估混合模型的表現(xiàn),實驗結(jié)果表明,該模型的預測結(jié)果優(yōu)于其他幾種銷售預測模型。張文雅等[8]通過網(wǎng)格搜索優(yōu)化了支持向量機的超參數(shù),并用汽車銷售數(shù)據(jù)來對優(yōu)化后的算法進行了驗證,發(fā)現(xiàn)優(yōu)化后的算法擁有更好的預測性能。王錦等[9]利用遺傳算法能夠全局尋優(yōu)的特點,將BP神經(jīng)網(wǎng)絡各隱層的權(quán)值和閾值進行了遺傳優(yōu)化,結(jié)果表明,模型的穩(wěn)定性和收斂速度得到了顯著的提高。羅嗣卿等[10]通過DBSCAN算法解決了K-means算法對噪聲數(shù)據(jù)敏感的問題,并結(jié)合ARIMA模型以藍莓干銷售數(shù)據(jù)驗證了改進后的算法的精確性。
雖然通過優(yōu)化算法的超參數(shù)或者結(jié)合幾種算法能在銷售預測問題上取得比未改進的單一模型更高的精準度,但是當銷售數(shù)據(jù)的屬性以及異常值很多時,單一模型在樣本外的數(shù)據(jù)中往往不能帶來更好的效果。因此,有學者采取組合的方式來將模型結(jié)合起來或者通過集成策略來達到更好的預測性能,例如Timmermann[11]發(fā)現(xiàn)預測的線性組合可能會改善其每個貢獻者。常曉花[12]通過使用boosting集成策略下的隨機森林算法對醫(yī)療器械進行了銷售預測,發(fā)現(xiàn)采取boosting集成策略的隨機森林模型比未采取集成策略的預測模型減少了12%的誤差。不過組合模型的缺陷是各單一模型使用的訓練數(shù)據(jù)集仍然是相同的,采用數(shù)值上的線性組合并不能真正帶來模型在泛化能力上的提高,各模型不能在算法層面上優(yōu)勢互補,而且組合預測的理論支撐不夠,不能讓使用者信服,而單一的隨機森林算法或者xgboost[13]算法屬于同質(zhì)集成,在樣本外的泛化能力仍然需要改進。
為解決單模型或者同質(zhì)集成模型在大樣本銷售預測中泛化能力不強的特點,考慮使用Stacking集成策略[14],將同質(zhì)集成算法方法XGBoost、Randomforest與其他算法結(jié)合,構(gòu)建兩層Stacking集成學習模型進行銷售預測,并使用德國Rooseman超市的銷售數(shù)據(jù)對算法進行了驗證。結(jié)果表明,Stacing集成策略能結(jié)合不同機器學習算法的優(yōu)勢提升模型的預測性能,相比單個模型,Stacking模型有著更高的精度和泛化能力。
在Stacking集成學習方法中,整個歷史數(shù)據(jù)集劃分為若干個子數(shù)據(jù)集,子數(shù)據(jù)集劃分為訓練集和驗證集,由基學習器擬合訓練集中的數(shù)據(jù)來產(chǎn)生底層模型,并用模型在驗證集上產(chǎn)生的預測值作為第二層的輸入。這樣,高層的學習器能夠進一步對模型進行泛化增強,這是Stacking方法總能夠在測試集上取得很好的預測性能的原因。區(qū)別于隨機森林中的Bagging策略,Stacking模型利用的是算法層面上的優(yōu)勢結(jié)合,因此Stacking集成策略可以看作是異質(zhì)集成。這意味了底層學習器需要保持差異性,否則Stacking集成策略依然是變相的Bagging策略?;镜膬蓪覵tacking算法流程如算法1所示。
算法1Stacking算法
輸入:
訓練集:S1={(x1,y1),(x2,y2),…,(xm,ym)}
保留集:Shold-out={(x1,y1),(x2,y2),…,(xl,yl)}
測試集:S2={(x1,y1),(x2,y2),…,(xm,ym)}
基學習器:ζ1,ζ2,…,ζl
元學習器:ζmeta
Step1fori=1,2,…,l
doζi·fit(xi,yi)
//生成l個基學習器
end
Step2fori=1,2,…,l
//生成l個保留集上的預測向量
doHi=ξipredictS2
//生成l個測試集上的預測向量
end
//生成用于元學習器的訓練集
//生成用于元學習器的測試集
ξmetafitP
Step4ξmetapredict
輸出:生成測試集上的預測值
由于Stacking模型使用基學習器在第一層產(chǎn)生的預測值作為第二層的輸入,這意味著基學習器與元學習器所使用的訓練數(shù)據(jù)必須不同,否則數(shù)據(jù)會被過度學習,導致模型的過擬合。因此在分割原始數(shù)據(jù)集時,要保證每份數(shù)據(jù)都有訓練集和保留集,用基學習器在保留集上的預測數(shù)據(jù)作為第二層的訓練數(shù)據(jù);在分割時間序列數(shù)據(jù)時,要保持數(shù)據(jù)的同分布,不能簡單地以時間線來分割數(shù)據(jù)集。這些工作會讓模型擁有更好的性能和泛化能力。
集成學習(Ensemble learning)指的是基于多個算法,通過不同的方式來組成新的學習方法,對于單個預測模型來說,集成學習模型能夠獲得更加優(yōu)越的預測性能,模型準確率呈現(xiàn)邊際效用遞減的趨勢。在Stacking集成學習模型中,基學習器的差異性越高,模型性能越好,因此在建模之前,不僅要分析各基學習器的預測效果,也要分析基學習器之間的差異。
家長作為孩子的第一任老師,必須要積極發(fā)揮教育作用,轉(zhuǎn)變傳統(tǒng)的家庭觀念,與孩子保持密切的溝通和交流,做到精心呵護和全面關懷,不僅關心子女的生活和學習方面,也要著重關心子女的思想情感和心理健康等方面,重視孩子的健康成長。家庭教育會伴隨孩子的一生,應增加家庭教育指導,增強家長的責任意識,提高他們的監(jiān)護能力。要給孩子提供更多的鍛煉機會,發(fā)揮其聰明才智,不能凡事都包辦,以免打消孩子的積極性。還要正確評價孩子,以正面教育為主,出現(xiàn)錯誤不要一味批評,做到具體問題具體分析,產(chǎn)生“潤物細無聲”的教育效果。
本文選擇隨機森林模型、線性回歸模型、KNN模型以及XGBoost模型作為第一層的基學習器。其中,隨機森林模型和XGBoost模型基于決策樹模型分別使用Bagging和Boosting的集成學習方式,在實踐應用中取得了較好的效果。KNN模型因為其理論成熟、訓練方式高效等特點也有著廣泛的應用,而加入線性回歸模型是為了保持各算法之間的差異性,使得模型能夠獲得更好的預測性能。由于第二層的元學習器既要能夠糾正各算法的偏差,也要能夠保持較高的泛化能力來防止過擬合,因此選擇XGBoost算法來作為元學習器。Stacking模型的總體架構(gòu)如圖1所示。
圖1 Stacking模型框架
對于集成策略來說,集成模型需要從不同的數(shù)據(jù)空間和數(shù)據(jù)結(jié)構(gòu)角度來觀察預測數(shù)據(jù),再依據(jù)觀察結(jié)果以及模型自身的特點來從本質(zhì)上改善模型的預測性能。因此,需要考察各基學習器在保留集上的預測誤差的相關性。本文采用Pearson相關系數(shù)對各個模型的誤差差異度進行計算,以衡量不同基學習器的關聯(lián)程度,其計算公式為:
(1)
為了不讓Stacking模型過擬合,必須為每個子學習器安排不同的訓練集和測試集,這是因為元學習器的訓練集是基學習器的輸出,如果直接用基學習器的訓練集結(jié)果來擬合元學習器,會導致學習器對數(shù)據(jù)的重復學習。因此,本文按照日期將數(shù)據(jù)分為四塊,再將每塊中的數(shù)據(jù)分成四份,從四份中隨機抽取一份,按塊順序結(jié)合并形成新的四塊數(shù)據(jù),以保證數(shù)據(jù)的相同分布;在新的數(shù)據(jù)塊中將數(shù)據(jù)分為三份訓練和一份驗證集,元模型用驗證集的來產(chǎn)生第二層的訓練集。這樣不僅保證了數(shù)據(jù)不會被重復學習,也保證了各基學習器所使用的數(shù)據(jù)是同分布的。
另外,在構(gòu)建模型的輸入數(shù)據(jù)時,需要考察各特征之間的相關性和特征的重要程度。本文先對數(shù)據(jù)進行了預處理,再通過計算各特征之間的Pearson相關系數(shù)來挑選出相對獨立的特征。由于Random forest和XGBoost算法可以計算各樹的增益情況來評估各特征的評分,所以在完成第一次的模型訓練后,查看模型輸出的特征評分,從而刪除冗余特征,使得模型能夠取得更好的性能。
實驗使用了德國Rossman日用品超市在Kaggle平臺上所提供的數(shù)據(jù),其中包含了1 115家商店在2013年1月1日到2015年7月31日所產(chǎn)生的1 017 210條數(shù)據(jù)以及1 115條商店信息數(shù)據(jù),銷售數(shù)據(jù)和店鋪數(shù)據(jù)的變量及含義如表1和表2所示。目標是2015年8月1日到2015年9月17日各商店的銷售值。實驗在Google的Colab云平臺與Python 3.7環(huán)境下完成,預測評價指標采用均方根百分誤差(Root Mean Square Percentage Error,RMSPE),其計算公式為:
(2)
表1 銷售數(shù)據(jù)信息的變量名及其含義
表2 店鋪數(shù)據(jù)信息的變量名及其含義
將銷售值包含在內(nèi),實驗數(shù)據(jù)一共有18個特征,涵蓋了促銷、競爭對手、節(jié)假日、商店、商品、顧客等信息。本文將日期分解為年、月、日,將商店類型、商品類型、假日類型采用實數(shù)或者獨熱(one-hot)編碼來進行處理。在經(jīng)過數(shù)據(jù)預處理后,對19個特征進行相關性分析,其結(jié)果如圖2所示。
圖2 特征相關性分析
可以看出,Promo2SinceYear與Promo2、WeekOfYear與Month的相關度很高。這是因為Promo2SinceYear是根據(jù)Promo2的時間來計算的,而WeekOfYear和Month是通過日期分解得到的。其他特征之間的相關性都不高,因此可以采用這些特征向量來作為輸入。以銷售值為目標變量,使用Random forest以及XGBoost算法進行建模,建模完成后,模型輸出的各特征的評分排序結(jié)果如圖3所示。
(a) XGBoost模型特征重要性排序
(b) Random forest模型特征重要性排序圖3 特征重要性分析
可以看出,在XGBoost算法中,各特征的差異比較明顯,模型能夠為每個特征分配更好的權(quán)重,而Random forest中除了促銷特征重要性最高外,其他特征重要性差異不明顯。這也是XGBoost模型比Random forest模型取得更好預測性能的原因。除此之外,兩個模型輸出的前五名特征中,競爭對手、促銷以及商店都囊括在內(nèi),這也證明了此次實驗中特征選取的有效性。
由于模型中存在一些需要人為調(diào)整的超參數(shù),如果采取每個參數(shù)都單獨調(diào)整再觀察模型在驗證集上的預測性能的方法來進行超參數(shù)優(yōu)化,那么所需要的時間成本太高,而且通常需要有經(jīng)驗豐富的算法工程師來進行這項任務。因此,本文使用一種隨機采樣交叉驗證的方法來進行超參數(shù)優(yōu)化,與網(wǎng)格搜索對比,隨機搜索采取搜索各超參數(shù)在參數(shù)組合空間上的分布,從而能夠在選取更優(yōu)的參數(shù)組合的前提下,比網(wǎng)格搜索考慮更少參數(shù)組合數(shù)量。另外,隨機搜索能夠在不影響性能的前提下添加參數(shù)節(jié)點。實驗中指定各算法的參數(shù)列表,并用10折交叉驗證后的均方根百分誤差(RMSPE)來評估各組合。各模型最終的超參數(shù)以及預測誤差如表3所示。
表3 單模型隨機搜索優(yōu)化后的超參數(shù)選擇和誤差
對比各模型的均方根百分誤差可以發(fā)現(xiàn),XGBoost模型的誤差最低。由于RMSPE是在驗證集上采集的,證明了XGBoost模型有更好的泛化能力,因為XGBoost算法將損失函數(shù)進行了二階泰勒展開,使得模型訓練更充分。
對于Stacking模型而言,基層不同模型之間的差異性越高,則元學習器能夠改善的空間就越大,整個模型的預測性能就越高。因此在選擇基學習器后,需要考察各基學習器的預測誤差相關性,盡可能選擇差異性高的算法。在四份驗證集中隨機抽取一份數(shù)據(jù),讓各基學習器在該數(shù)據(jù)集上做出預測,將預測結(jié)果合并在同一數(shù)據(jù)框內(nèi),采用Pearson相關系數(shù)衡量各基學習器之間的相關性,結(jié)果如圖4所示。
圖4 各模型預測誤差相關性分析
可以看到,除了XGBoost與LR之外,各算法的誤差相關性都很低,這是因為在有些異常值上XGBoost算法和LR算法在某些數(shù)據(jù)上呈現(xiàn)出了同樣的趨勢,但是總體的相關性低,這說明Stacking模型有待于取得更好的性能。
綜上所述,最終選擇RF、LR、KNN、XGBoost作為Stacking集成模型的基學習器來完成實驗。
為了驗證Stacking模型是否能取得比其他模型更好的預測性能:首先在實驗中隨機抽取一個商店,對比單一模型和Stacking模型在該商店上的預測值與真實值的比較,其結(jié)果如圖5所示。
圖5 單模型與Stacking模型的預測值與真實值對比
可以看到,Stacking模型取得了比單一模型更好的預測性能,而且在一些異常值上,Stacking模型也能夠處理得很好,這也證明了Stacking模型充分發(fā)揮了各算法的優(yōu)勢。通過從算法層面上的結(jié)合,改善了各算法預測效果較差的部分并且能夠避免算法陷入局部最小點的缺陷。
元模型即第二層XGBoost算法的特征重要性如圖6所示??梢钥吹?,各基學器對在Stacking模型中的權(quán)重,其中XGBoost算法的貢獻度最高,而其他學習器的貢獻度差異不大,這說明在Stacking模型中,XGBoost算法的性能是整個模型的預測性能得以改善的主要原因,同時也證明了XGBoost模型在解決大樣本的回歸問題時有著較高的魯棒性和泛化能力。
圖6 基學習器對在元模型中的貢獻度
為了比較Stacking模型與單個模型在整個測試集上的測性能,表4展示了以RMSPE為衡量標準的各模型的精度??梢?,Stacking模型的RMSPE相比單個預測模型中預測性能最好的XGBoost模型降低了1.8%,相比單個預測模型中預測性能最差的LR模型降低了23.5%。對于大型企業(yè)來說,每提高1%的精度都能降低大量的安全庫存或者減少缺貨損失。
表4 Stacking模型與單一模型精度對比
本文針對單個模型在大樣本的銷售預測上不能取得很好的泛化能力的問題,建立了多模型融合下的Stacking。該模型取得了比單一模型更好的預測性能和泛化能力,在零售企業(yè)在庫存管理、經(jīng)營管理、供應鏈管理中有較高的應用價值。由于Stacking模型總的框架比較復雜,總體訓練時間較長,未來可以考慮將模型在分布式環(huán)境下進行計算。還可以進一步地研究使用Stacking集成學習方法來處理實時數(shù)據(jù),并根據(jù)Stacking集成學習方法來研發(fā)一套從數(shù)據(jù)獲取到知識獲取的數(shù)據(jù)處理系統(tǒng),這勢必會有更高的應用價值。