柯苗, 黃華國
( 福建水利電力職業(yè)技術(shù)學(xué)院信息工程系, 福建永安 366000 )
在電子商務(wù)的飛速發(fā)展的今天, 智能手機(jī)以及電子支付也隨之興起, 人們消費(fèi)購物習(xí)慣的改變, 在很大程度上影響了傳統(tǒng)的供應(yīng)鏈運(yùn)行模式, 其維度主要體現(xiàn)在資金流, 信息流和產(chǎn)品流. 如何將三者有效結(jié)合, 需求預(yù)測起到了關(guān)鍵性作用, 而需求預(yù)測是大多數(shù)企業(yè)最難解決的應(yīng)用性問題.
企業(yè)大量的線上營銷數(shù)據(jù)在當(dāng)前主流電商平臺(tái)通過查詢軟件均可查看, 但大多數(shù)電商企業(yè)往往無法有效運(yùn)用后臺(tái)數(shù)據(jù)來輔助商業(yè)決策, 需求預(yù)測仍是許多企業(yè)面臨的重大挑戰(zhàn). 電商零售的銷量預(yù)測, 與天氣、溫度、雨量、股票等相似, 都是個(gè)時(shí)間序列的預(yù)測問題. 由于數(shù)據(jù)存在著季節(jié)性、動(dòng)態(tài)性和周期性的特征,數(shù)據(jù)序列往往是非線性的, 使得用統(tǒng)計(jì)學(xué)時(shí)間序列模型的傳統(tǒng)方法較難解決跨性能的多時(shí)間序列問題, 而機(jī)器學(xué)習(xí)的方法非常靈活, 可以通過預(yù)測商品的銷量來輔助商業(yè)決策, 可建立各類特征模型解決問題, 但是這些工作需要特定領(lǐng)域的專業(yè)人員, 人工特征工程費(fèi)時(shí)、費(fèi)力,限制了這項(xiàng)技術(shù)的推廣.
深度學(xué)習(xí)技術(shù), 相對于傳統(tǒng)技術(shù)而言, 可以自動(dòng)將有效特征從大量的原始數(shù)據(jù)中抽取出來, 因此經(jīng)過深度學(xué)習(xí)而建立的模型, 其使用性更強(qiáng)[1].LSTM 時(shí)間遞歸神經(jīng)網(wǎng)絡(luò), 在預(yù)測和處理時(shí)間序列的間隔和延遲相對更長的重要事件具有合適性的特征, 最近幾年, 此特征在許多的相關(guān)領(lǐng)域的應(yīng)用中表現(xiàn)突出[2]. 文章在LSTM 網(wǎng)絡(luò)的基礎(chǔ)上, 探討電商銷售預(yù)測模型,建立有效簡便的LSTM 網(wǎng)絡(luò)模型. 實(shí)驗(yàn)中采用TensorFlow 框架下搭建LSTM 網(wǎng)絡(luò)模型, 利用網(wǎng)店的歷史數(shù)據(jù), 進(jìn)行分析預(yù)測, 將真實(shí)值和預(yù)測值進(jìn)行對比.
長短期記憶神經(jīng)網(wǎng)絡(luò)也稱為循環(huán)神經(jīng)網(wǎng)絡(luò)[3].RNN 在用于時(shí)間序列預(yù)測中使用頻率高, 是一種預(yù)測和處理系列數(shù)據(jù)的專用神經(jīng)網(wǎng)絡(luò)[4].RNN神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)及展開, 如圖1 所示, 表示了一個(gè)循環(huán)的神經(jīng)元, 在圖中, 右側(cè)展開圖是按照時(shí)間的先后順序?qū)⒀h(huán)神經(jīng)網(wǎng)絡(luò)的計(jì)算圖展開, 其中Xt所代表的是t 時(shí)刻的輸入,St所代表的是t 時(shí)刻的記憶, 而Ot所代表的是t 時(shí)刻的輸出, 由此可得出, 當(dāng)下時(shí)刻的輸出Ot取決于St-1的記憶時(shí)刻和當(dāng)下時(shí)刻的輸入Xt, 可將此序列數(shù)據(jù)依次導(dǎo)入循環(huán)神經(jīng)網(wǎng)絡(luò)RNN 的輸入層, 由此可見,RNN 最擅長的是解決與時(shí)間有關(guān)聯(lián)的問題. 但是輔助RNN 決策的主要還是最后輸入的信號( 即對最后輸入的信號記憶最深), 找之前的信號會(huì)隨著時(shí)間的推遲而變得強(qiáng)度越來越弱, 輔助的作用越來越低. LSTM就是為了解決記憶的距離太短這個(gè)問題而產(chǎn)生的.
圖1 RNN 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)及展開
與傳統(tǒng)的循環(huán)神經(jīng)網(wǎng)絡(luò)相比,LSTM 對內(nèi)部的結(jié)構(gòu)進(jìn)行了更加精心的設(shè)計(jì), 加入了輸入門、遺忘門以及輸出門三個(gè)門和一個(gè)內(nèi)部記憶單元, 具體結(jié)構(gòu)如圖2 所示, 結(jié)構(gòu)圖中Xt表示t 時(shí)刻神經(jīng)細(xì)胞的輸入,ht表示t 時(shí)刻神經(jīng)細(xì)胞的狀態(tài)值. 圖中三個(gè)大框表示細(xì)胞在不同時(shí)序的狀態(tài), 將t 時(shí)刻神經(jīng)細(xì)胞單獨(dú)放大繪制出來的大圖如圖3 所示. 在圖中, 細(xì)胞中帶有符號 “δ” 小框代表激活函數(shù)為sigmoid 的神經(jīng)網(wǎng)絡(luò)層, 依次組成遺忘門, 然后是輸入門和輸出門, 帶有符號 “tanh” 小框代表激活函數(shù)為tanh 的前饋網(wǎng)絡(luò)層.
從圖3 可知,LSTM 當(dāng)Xt和上一狀態(tài)傳遞下來的ht-1進(jìn)行向量拼接乘以權(quán)重矩陣得到四個(gè)狀態(tài)函數(shù)和輸出分別如下:
其中, it, ft,ot通過前面的sigmoid 激活函數(shù)轉(zhuǎn)換成0 到1 之間的數(shù)值, 而構(gòu)成門控單元,而 gt則是將結(jié)果通過tanh 激活函數(shù)轉(zhuǎn)換成-1到1 之間的數(shù)值作t 時(shí)刻輸入細(xì)胞的候選狀態(tài)值.
1.3.1 忘記功能
主要完成對上一個(gè)節(jié)點(diǎn)輸入ct-1狀態(tài)值進(jìn)行選擇性的忘記. 具體是用公式2 計(jì)算得出的結(jié)果ft作為忘記門控, 用來控制上一個(gè)狀態(tài)ct-1哪些需要忘記.
圖2 LSTM 神經(jīng)網(wǎng)絡(luò)
圖3 放大的神經(jīng)網(wǎng)絡(luò)單元
1.3.2 選擇記憶功能
針對輸入的Xt做選擇性的記憶, 而當(dāng)下輸入的具體內(nèi)容, 是由公式4 計(jì)算得出的結(jié)果g t來表示。而所要選擇的門控信號則是由公式1計(jì)算得出的it控制.
將上面兩部分得到的結(jié)果相加就是公式5,得到傳輸給下一個(gè)狀態(tài)的ct.
1.3.3 輸出功能
LSTM 輸出當(dāng)前的狀態(tài)ht. 主要是通過ot和tanh 激活函數(shù)對ct進(jìn)行縮放控制, 使其具有長時(shí)期的記憶功能.
2015 年11 月,Google 將TensorFlow 在GitHub 上開源, 是Google 用于數(shù)據(jù)流圖的數(shù)值計(jì)算開源軟件庫, 其已經(jīng)成功地實(shí)現(xiàn)了深度學(xué)習(xí)算法, 實(shí)現(xiàn)異構(gòu)分布式系統(tǒng)上大規(guī)模高效率的學(xué)習(xí)[5].
Keras 是在TensorFlow 基礎(chǔ)之上封裝的API, 這些API 以模塊的形式封裝了TensorFlow的諸多小的組件, 可以大大降低了編程難度. 用戶可以方便地將API 構(gòu)建的模塊按需求進(jìn)行排列就可以設(shè)計(jì)出各種神經(jīng)網(wǎng)絡(luò), 方便理解和使用, 節(jié)省搭建新網(wǎng)絡(luò)的時(shí)間.Keras 以模型為其核心技術(shù), 一共擁有兩種模型, 包括函數(shù)式模型和序貫?zāi)P? 其中函數(shù)式模型在各種實(shí)驗(yàn)中應(yīng)用較為廣泛, 而序貫?zāi)P蛣t是相對于函數(shù)式模型的一種特殊情況[6]. 本實(shí)驗(yàn), 通過采用函數(shù)式模型, 結(jié)合多層次LSTM 網(wǎng)絡(luò)模型的搭建,分別對同一商品不同的SKU 進(jìn)行預(yù)測性分析,最后采用均方根誤差(RMSE) 對模型的預(yù)測性能評價(jià)指標(biāo)的實(shí)驗(yàn)結(jié)果進(jìn)行比較及修正.
文章選取實(shí)驗(yàn)對象的訂單數(shù)據(jù)來源于某箱包公司的電商銷售數(shù)據(jù), 選擇箱包銷售數(shù)據(jù)的原因在于箱包不受季節(jié)等因素影響, 相對來說SKU 種類比較穩(wěn)定, 不會(huì)出現(xiàn)頻繁變化的現(xiàn)象,收集來的數(shù)據(jù)方便進(jìn)行訓(xùn)練及驗(yàn)證.
該公司成立于2009 年, 是集設(shè)計(jì)、開發(fā)、生產(chǎn)和銷售為一體的專業(yè)化時(shí)尚休閑自創(chuàng)品牌的生產(chǎn)商和銷售商, 共有200 多種產(chǎn)品類目, SKU 數(shù)量達(dá)到500 多個(gè). 近年來, 公司的經(jīng)營狀況在箱包行業(yè)排名中呈上升趨勢, 面對越來越多的銷量和較多的SKU 數(shù)量, 是否可以準(zhǔn)確地預(yù)測網(wǎng)絡(luò)銷量成為網(wǎng)絡(luò)銷售中的重要環(huán)節(jié),特別對于備戰(zhàn) “雙十一” 等電商活動(dòng)起到了關(guān)鍵的作用. 而公司內(nèi)銷售量大的SKU, 其歷史銷售數(shù)據(jù)相對完善, 如果能通過這些完善的數(shù)據(jù), 對SKU 今后的銷量做一個(gè)較為準(zhǔn)確的預(yù)測,這將給公司今后的運(yùn)作和發(fā)展提供非常大的幫助[7]. 因此, 文章的實(shí)驗(yàn)對象選取了此公司在天貓商城中銷量排行靠前的一款潮牌雙肩包的SKU, 數(shù)據(jù)集為生意參謀提取的近兩年原始日志數(shù)據(jù)( 共 500 條), 每條數(shù)據(jù)包括商品的銷量SALE( 此雙肩包的日銷售數(shù)量)、價(jià)格PAY( 此雙肩包的當(dāng)日銷售價(jià)格)、瀏覽次數(shù)PV( 進(jìn)入此雙肩包銷售頁面的日訪問量或點(diǎn)擊量, 用戶多次打開或刷新, 該指標(biāo)值累加)、瀏覽人數(shù)UV( 進(jìn)入此雙肩包銷售頁面的獨(dú)立訪客, 同一訪客進(jìn)入該指標(biāo)值會(huì)進(jìn)行去重計(jì)算)、展現(xiàn)量( 當(dāng)用戶搜索相關(guān)關(guān)鍵詞時(shí), 此雙肩包展示的次數(shù)) 等諸指標(biāo)數(shù)據(jù)與實(shí)際銷量進(jìn)行相關(guān)分析. 兩年的原始日志數(shù)據(jù)共500 條, 筆者取其中的400 條, 作為LSTM 時(shí)間遞歸神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練樣本, 剩下的100 條則用于測試訓(xùn)練結(jié)果, 檢驗(yàn)神經(jīng)網(wǎng)絡(luò)模型的準(zhǔn)確性.
實(shí)驗(yàn)訓(xùn)練流程按照下載數(shù)據(jù)、數(shù)據(jù)預(yù)處理、數(shù)據(jù)特征提取、數(shù)據(jù)歸一化、模型的訓(xùn)練、微調(diào)參數(shù)、預(yù)測銷售量等幾步完成[8], 如圖4 所示.
圖4 實(shí)驗(yàn)流程圖
將商品銷售數(shù)據(jù)轉(zhuǎn)換為CSV 文件, 文件的第一列為時(shí)間點(diǎn), 在同一個(gè)時(shí)間點(diǎn)上還有商品的銷量(SALE)、價(jià)格(PAY)、瀏覽次數(shù)(PV)、瀏覽人數(shù)(UV)、展現(xiàn)量等5 個(gè)數(shù)據(jù). 使用TFTS讀入CSV 文件的代碼為圖5 所示.
數(shù)據(jù)預(yù)處理是為了降低噪音數(shù)據(jù)對選取的400 條訓(xùn)練數(shù)據(jù)的影響, 將選取的訓(xùn)練數(shù)據(jù)中的亂碼和空值進(jìn)行清洗并處理, 處理后的輸入數(shù)據(jù), 需要符合監(jiān)督學(xué)習(xí)數(shù)據(jù)的要求[9].
圖5 使用TFTSD 讀入CSV 文件
影響商品銷量有多個(gè)特征要素, 在決策時(shí)往往要了解每個(gè)特征要素對結(jié)果的影響程度,因此需要對特征進(jìn)行評判. 特征評判方法有很多, 在本試驗(yàn)中, 因變量是數(shù)值型區(qū)間變量,它期望值與多個(gè)自變量之間具有線性關(guān)系, 所以特征提取的數(shù)學(xué)模型選用線性回歸算法, 多元線性回歸算法公式如公式7 所示:
公式7 中x1x5是影響商品銷量的特征數(shù)據(jù), 也就是提取的商品銷量SALE、價(jià)格PAY、瀏覽次數(shù)PV、瀏覽人數(shù)UV和展現(xiàn)量這5個(gè)數(shù)據(jù),而通過算法的模型訓(xùn)練所得出的a1...a5,c 為模型系數(shù), 其中c 為隨機(jī)的誤差項(xiàng).
其主要目標(biāo)是減少量綱給計(jì)算
帶來的影響, 對數(shù)據(jù)進(jìn)行處理, 將其值限定在[0,1] 之間, 這樣可以加快算法的收斂速度. 歸一化的具體計(jì)算方法, 如公式8 所示,公式中的MaxValue 和MinValue 分別是對應(yīng)對每一字段數(shù)據(jù)的最大值和最小值, x 是字段數(shù)據(jù)具體數(shù)值, y 則是數(shù)據(jù)歸一化的最終結(jié)果[10].
在本實(shí)驗(yàn)中, 由于Relu 作為實(shí)驗(yàn)中的激活函數(shù), 所以在Pandas 中使用MinMaxScaler 函數(shù)時(shí), 首先要將數(shù)據(jù)集轉(zhuǎn)換到[-1,1] 之間, 才能進(jìn)行實(shí)驗(yàn).
模型定義代碼如圖6 所示,num_feartures=6表示每個(gè)時(shí)間點(diǎn)上觀察值是一個(gè)5 維的向量,num_units=128 表示使用隱藏層為128 大小的LSTM 模型.
圖6 LSTM 模型
最后使用Matplotlib 的pyplot 模塊完成結(jié)果的可視化任務(wù), 最后運(yùn)行結(jié)果如圖7 所示. 圖中前400 步是訓(xùn)練數(shù)據(jù),400 步之后為預(yù)測值. 由圖可見LSTM 模型在訓(xùn)練前50 步的訓(xùn)練過程中模型的擬合值與實(shí)際的原始數(shù)據(jù)還有較大的差距, 經(jīng)過100 步的訓(xùn)練這兩值已經(jīng)非常相似, 此實(shí)驗(yàn)結(jié)果說明LSTM 神經(jīng)網(wǎng)絡(luò)模型在提取問題的主要特征上相對準(zhǔn)確, 能高效地進(jìn)行整體訓(xùn)練, 具備有效的訓(xùn)練方法. 從實(shí)驗(yàn)結(jié)果中還可以看出, 在訓(xùn)練計(jì)算中, 局部數(shù)據(jù)未影響到其預(yù)測值, 并未產(chǎn)生梯度消失的現(xiàn)象,在200 步的訓(xùn)練后, 模型的擬合值與原始數(shù)據(jù)已經(jīng)基本相同, 此現(xiàn)象說明模型的擬合度比較好, 這樣400 步之后的預(yù)測數(shù)據(jù)就相對更準(zhǔn)確,證明這個(gè)多層的 LSTM 網(wǎng)絡(luò)模型技術(shù)復(fù)雜程度小且預(yù)測性能高效準(zhǔn)確.
自回歸模型, 也簡稱AR 模型, 在統(tǒng)計(jì)學(xué)上是一種作為時(shí)間序列模型處理的基本方法,AR 模型是采用一定的數(shù)學(xué)模型來對一個(gè)隨機(jī)序列進(jìn)行相似性描述, 這個(gè)隨機(jī)序列是預(yù)測的對象通過時(shí)間的推移, 而逐漸形成的數(shù)據(jù)序列[11]. 這個(gè)模型被系統(tǒng)識(shí)別后, 便可通過時(shí)間序列所包含的過去數(shù)值和現(xiàn)在數(shù)值, 去預(yù)測未來的數(shù)值.AR 模型是如今最常見具有平穩(wěn)性的時(shí)間序列模型之一[12]. TensorFlow1.3 版本引入了一個(gè)Time Series 模塊(TensorFlow Time Series,TFTS) . TFTS 提供了一套基礎(chǔ)的時(shí)間序列模型API. 提供包含AR、LSTM 在內(nèi)的多種預(yù)測模型.
圖7 LSTM 預(yù)測銷售數(shù)據(jù)
圖8 使用AR 模型預(yù)測銷量值
使用TensorFlow 的TFTS 提供的AR 模型對數(shù)據(jù)進(jìn)行訓(xùn)練, 再經(jīng)過驗(yàn)證最后預(yù)測出將來的數(shù)據(jù), 實(shí)驗(yàn)中, 整個(gè)訓(xùn)練的長度選取了500 個(gè)數(shù)據(jù)序列, 在輸入 “初始觀測序列” 時(shí), 實(shí)驗(yàn)使用前30 個(gè)數(shù)據(jù)序列, 通過這一動(dòng)作計(jì)算出之后10 步的數(shù)值. 接著, 實(shí)驗(yàn)會(huì)再取30 個(gè)數(shù)值, 其中包括上一個(gè)步驟中預(yù)測計(jì)算出來的10 個(gè)數(shù)值, 得到新的預(yù)測值, 這個(gè)新的預(yù)測值又會(huì)成為下一個(gè)步驟的輸入數(shù)據(jù), 以此類推, 實(shí)驗(yàn)中最后預(yù)測了100個(gè)時(shí)間點(diǎn). 實(shí)驗(yàn)結(jié)果如圖8 所示. 圖中觀察到的值、模型擬合值及預(yù)測值分別用藍(lán)、綠及紅色標(biāo)識(shí), 從圖中可以看出, 前400 步模型原始觀測值的曲線和模型擬合值非常接近, 說明模型擬合得比較好,400 步之后的預(yù)測也合情合理, 但是AR模型不適用非穩(wěn)定時(shí)間序列, 模型輸出數(shù)據(jù)的光滑程度不高, 尤其是無法在同一時(shí)間處理多個(gè)時(shí)間序列. 相比LSTM 神經(jīng)網(wǎng)絡(luò)模型優(yōu)點(diǎn)在于可支持大量的原始數(shù)據(jù)輸入, 自動(dòng)抽取數(shù)據(jù)的有效特征, 且一個(gè)模型適用于多個(gè)時(shí)間序列.
所以LSTM 神經(jīng)網(wǎng)絡(luò)模型與AR 模型相比在輸入數(shù)據(jù)的組織形式、網(wǎng)絡(luò)的結(jié)構(gòu)、訓(xùn)練方法的效率及有效性和預(yù)測的準(zhǔn)確性等方面相比都具有更大的優(yōu)越性.
對于電商企業(yè)來說, 需求預(yù)測是大多數(shù)企業(yè)日常經(jīng)營時(shí)最普遍和重要的應(yīng)用問題, 文章探討了深度學(xué)習(xí)技術(shù)在時(shí)間序列預(yù)測理論依據(jù), 將商品銷量預(yù)測歸納為多變量時(shí)間序列的預(yù)測問題,使用某電商網(wǎng)店的歷史銷售數(shù)據(jù), 詳細(xì)介紹了在TensorFlow 框架下搭建LSTM 網(wǎng)絡(luò)模型的方法, 模型運(yùn)算得到的銷量預(yù)測結(jié)果準(zhǔn)確直觀. 文中還與使用AR 模型這種常用的時(shí)間序列預(yù)測模型的運(yùn)算結(jié)果進(jìn)行比較, 得到LSTM 網(wǎng)絡(luò)模型具有數(shù)據(jù)輸入簡單方便, 在網(wǎng)絡(luò)的結(jié)構(gòu)、訓(xùn)練方法的效率和有效性以及預(yù)測的準(zhǔn)確性等方面都具有更大的優(yōu)越性.
文章所建立的基于LSTM 神經(jīng)網(wǎng)絡(luò)的電商商品銷售預(yù)測模型, 數(shù)據(jù)輸入簡便, 模型技術(shù)簡單,具有比其他預(yù)測模型更高的精度. 通過神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)的方法可分析挖掘商品特征屬性之間的關(guān)聯(lián)系數(shù), 還能直觀地展示商品的銷量與其關(guān)鍵信息影響程度, 研究結(jié)果對企業(yè)改善營銷決策和合理的庫存管理具有重要的指導(dǎo)意義.
福建技術(shù)師范學(xué)院學(xué)報(bào)2020年5期