如何预测百威啤酒销量?数据竞赛冠军笔记分享 思路
轉載:?http://dy.163.com/v2/article/detail/DHALCA3N0511VFT2.html
賽題背景
組織方:微軟加速器
真實數據來源:幾家頂級快消品牌
上海站:百威英博命題,并提供脫敏的業務數據
提出三個問題:
1.庫存需求預測
2.銷售數量預測
3.經銷商違規行為檢測
數據大致的情況
原始數據中,大致包含了百威全國400多家門店的數據,商品的種類800多個,一整年歷史銷售數據,精確到每日,數據400多萬行。需要預測未來一個月內未來商品的銷量。
第一步:數據探索
先進行數據探索,理解一下數據的分布,和大致的特征。后面怎么樣去做你的模型。數值分布,統計檢驗。不可能上來就跑個模型,看下效果。
常用方法一:數值分布,統計檢驗,左邊直方圖,即數據的分布情況,右邊這個是皮爾森相關性檢驗(Pearson correlation coefficient),就是特征之間的相關度是什么樣的。
Python的庫missing number。觀察缺失值的情況。因為百威提供的數據質量很高,所以不需要考慮填充缺失值。
常用預測方法二:
預測方法一:歷史數據用折線圖等形式畫出來,從歷史中尋找商品和門店的行為規律。
有的有規律性,有的沒有。如下圖。
所以各個商品之間行為的模式(pattern)不一樣。
這樣的分析有什么好處呢?通過分析發現,有的商品數據點很稀少。需要分別建立模型,有些不需要建立模型。歷史上出現一兩次的情況,可以歷史平均和預測為零來處理。不用極端數據影響整體的效果。
預測方法二:正則化?;诮y計規則,歷史上某些值的平均值,比他兩三個標準差偏差還要多的話,會認為異常值,我們會把這些值縮小一下。
預測方法三:基于模型預測,先構建一個簡單的模型,訓練后,跑一下模型,觀察誤差特別大的點,也有可能是離群值或者異常值。這樣就可以針對他們做一些處理。
預測方法四:移動平均。
預測方法五:對數據進行log的預處理。
Log預處理是時間序列和線性模型中經常會遇到。很多情況下,會要求你的時間序列的值是穩定的,有時也會對預測值做Log處理,有時也會做差分處理。還有一些線性模型對殘差,大多數假設是一個正態分布的殘差。
如果數值分布的偏度很高,也會有問題,會用log來做預處理。
日期對齊也是時間序列預測問題中常見的技術。比如中國春節在一月或者二月,需要考慮歷史數據上春節的月份和今年春節的時間點是不是對的上。如果對不上是預處理,會提高預測的精度。
還有一些業務相關的邏輯。比如銷量為零,售價不為零之類。也需要做處理。
以上是數據探索的過程。
特征工程的構建
加入地理位置,門店當地的經濟指數,當時氣溫、賽事、節假日、促銷活動等。
聚類方法:用無監督的方法,對原始數據進行聚類,把相像的門店或者產品放在一起。分別來做子模型,或者把標簽當做特征加進去。
基礎特征方面,百威提供原始數據集的特征,在此基礎上做了一些各維度的統計聚合,需要各維度聚合——時間、門店、商品:比如,日期衍生(是否是節假日,本周的節假日有幾天,距離下一個工作日有幾天)、商品、門店屬性、各類高級計算。新商品從第一天開始售賣,累計的銷售天數。
高級的特征處理方式:
2014年Facebook在論文中提出的方法——GBDT生成特征,論文認為決策樹的模型可以自動做一些特征的組合和轉換。說白了就是把Input放進去之后,看每一棵樹,落在每一個葉子的節點上,以此做一個新的特征,原始論文中,把特征放在一個邏輯回歸的模型中去做,當然你也可以把輸出的特征和原始的特征加在一起,放在XGBoost、或者
FM(Factorization Machine因子分解機,又稱分解機器,旨在解決大規模稀疏數據下的特征組合問題)。
圖片是Embedding的方法,因為深度學習的應用比較火的結果,大家都有興趣把深度學習的模型,應用到商業分析里面。這個借鑒了word2vec的方法,讓相近的門店與產品,本來是稀疏的特征,希望通過一系列的Embedding轉換之后,轉換到稠密的向量空間中,一些相近的商品門店,在向量空間中距離比較近,這樣起到了特征轉換。
在比賽中,我們用Keras做了Embedding實現,把商品、日期、門店做了Embedding,
套幾個全連接的層,加一些東西,一直到輸出到結果。
t-SNE降維處理,畫在二維的圖標上面,
左邊月份的聚類,789月熱,距離在圖上近,天氣比較冷的月份在圖中距離差的比較遠。右邊t-SNE圖是所有門店的圖,因為得到的數據門店都用的ID(全數字)來表示,所以只能推測是行為模式比較像、或者地理位置比較近的門店是脫敏數據,所以沒有辦法檢驗。
模型調優
基線:歷史平均(一般來說對復雜的,實際數據的預測問題,對歷史銷量平均做預測值)
時間序列: SARIMAX, tbats, generalized additive model(廣義加性模型)
樹模型: Random Forest, XGBoost, LightGBM
深度學習: embedding, wide and deep, LSTM在特征工程之后,我們會做一些模型的選擇。,還有一些方法,比如時間序列等方法。
樹模型是數據科學比賽常用的,XGBoost、隨機森林、因為是微軟的比賽,我們嘗試了微軟的LightGBM,實現效果如何。還嘗試了深度學習的模型embedding、wide and deep, LSTM等模型。
歷史平均、簡單平均、加權平均,移動平滑平均都可以使用。比賽中MAPE: 0.744,這個數值為后續服務,模型調優的基線。
時間預測模型的示意圖:GAM庫,時間預測模型比較簡單、預測值穩定,可解釋性強,黑點是真實值,深藍色預測值,淡藍色是置信區間。
有很多點捕捉不到,所以誤差會大。
時間序列的可解釋性
趨勢:7、8、9月天氣熱,啤酒銷量好;節假日、周末周期性強。
樹模型:
應用非常廣泛,尤其是非圖像的,文本、語音,商業數據很多主流的方法就是樹模型,
1.Random Forest
2.GBRT
優點:
對于離群值的魯棒性較好
數據分布要求低(不需要做預測力,神經網絡一般會要求做歸一化,讓數據的分布一致一些,否則模型效果會差。)
可解釋性強(每個節點都會告訴你,分裂的規則)
可以用于特征選擇(訓練完會告訴你權重,可以依次來選擇一些特征,把精簡之后的特征喂給其他的模型,比如線性回歸等簡單的模型)
這次比賽,
主要用XGBoost、LightGBM庫對比
XGBoost
Train time: 487.68 seconds
MAPE: 0.251
LightGBM(雖然需要指定超參數、但是效果很好)
Train time: 19.19 seconds
MAPE: 0.256
深度學習:
我們把預測值銷量歸一化,
Embedding網絡示意圖,
計算資源需求較大
超參數調優
網絡結構
Embedding size
Dropout
MAPE: 0.654
賽題中400萬的數據,跑起來非常慢,因為比賽中沒有使用GPU所以訓練的時間還是比較久的。
另外一點,Embedding把原始的特征輸入,雖然特征工程少一些,但網絡的超參數需要調整,而且很多然而沒有理論依據,說白了就是嘗試,一直嘗試哪個會比較好,MAPE: 0.654比平均值稍微好一點。比起XGBoost的基準線還是差了很多。
把線性模型的東西加進來,可以兩個模型一起訓練,線性模型主要做記憶功能,歷史上出現的模式可以通過線性模型,記憶下來。
Deep Models提升泛化能力。
下圖是用TensorFlow來實現wide and deep models。
左邊是deep model的實現,右邊是線性模型(wide層)。
圖中為,原始論文中的特征的構建方式,deep models那層要求輸入是密集型的,稀疏是不能直接做輸入的,所以要做轉換,有的用Embedding等來做轉換。
模型選擇完后,需要進行模型的訓練和調優,其中重要的一步是交叉驗證,在時間序列中,交叉驗證有一個重點——構建與真實場景一致的切分方式。在時間序列中用一個連續的一段時間去預測緊接著的時間一個時間切分,切分方式與真實場景一致,隨機切分不是在真實場景中的切分方式。會影響效果。
超參數的調整
1.啟發式調優
用經驗。比較簡單的是用啟發式的調優,先固定一個比較大的learning rate去調樹的數量、樹的深度、葉子節點分頁需要的條件之類的。
2.網格搜索
把所有想要嘗試的參數寫下來。網格搜索自動把所有的組合嘗試一遍,幫你找到最優的組合,把最優的結果返回給你。
3.貝葉斯優化
把超參數搜索的過程看成高斯過程,庫會自動嘗試不同參數,然后尋找下一個最可能出現比較低的loss的嘗試,搜索空間的計算量比網格搜索小很多。
模型融合
用模型融合的方法來做效果提升。做完這個超參數調整之后,一般來說,最后用模型融合的方法來做效果提升,首先保證模型具有一定的差異性,可以選擇不同隨機數種子,生成不同的預測結果,最后再把各個模型融合起來。
比較常見的模型融合的方法是Blending和Stacking。是現在有很多庫已經實現了,調用非常方便。Stacking就是把各個模型的預測值預測出來,把預測值作為特征輸入下一層模型中,下一層自動選擇最好的融合參數,有的模型權重高,有的權重低。把最后融合好的預測值給輸出。
誤差分析
預測結束后,會對模型做最終的調優。主要看模型會在哪些點上產生誤差。如何通過各種方法產生大的誤差,誤差最大的點要進行細致深入的分析,為什么會出現這樣的誤差。日后我們通過各種方法去解決大誤差。
一個新產品,第一次在要預測的月份售賣。賣出了幾千份。用歷史數據很難預測準確。所以會產生誤差。這種情況可以建立子模型專門去新品銷售數量的預測。融合模型方面,用了三個XGBoost、LightGBM、Random Forest,其實也可以用時間序列和神經網絡,但是主要是因為計算資源有限,所以沒有觀察最終融合的效果。最后得到的MAPE: 0.236,比起基準線,好了很多。(完)
補充:
觀遠數據團隊也在探索,如何將深度學習應用到商業分析領域,現在來說還是待決的問題,不像圖像和語音識別技術已經取得和很大的進展,深度學習在商業分析領域處理較少數據量,復雜規律、復雜業務特征等方面很有挑戰。期待數據科學家的加入。
以上內容為觀遠數據技術合伙人周遠技術公開課分享筆記,未能與本人確認所有細節,僅供參考。賽事為微軟大中華區智能零售(Smart Retail)解決方案新創企業黑客松上海站。
總結
以上是生活随笔為你收集整理的如何预测百威啤酒销量?数据竞赛冠军笔记分享 思路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Markdown输出LaTex数学公式
- 下一篇: 软考高级网络规划设计师电子教材