1. 程式人生 > >如何預測百威啤酒銷量?資料競賽冠軍筆記分享 思路

如何預測百威啤酒銷量?資料競賽冠軍筆記分享 思路

  賽題背景

  組織方:微軟加速器

  真實資料來源:幾家頂級快消品牌

  上海站:百威英博命題,並提供脫敏的業務資料

  提出三個問題:

  1.庫存需求預測

  2.銷售數量預測

  3.經銷商違規行為檢測

  資料大致的情況

  原始資料中,大致包含了百威全國400多家門店的資料,商品的種類800多個,一整年曆史銷售資料,精確到每日,資料400多萬行。需要預測未來一個月內未來商品的銷量。

  第一步:資料探索

  先進行資料探索,理解一下資料的分佈,和大致的特徵。後面怎麼樣去做你的模型。數值分佈,統計檢驗。不可能上來就跑個模型,看下效果。

  

  常用方法一:數值分佈,統計檢驗,左邊直方圖,即資料的分佈情況,右邊這個是皮爾森相關性檢驗(Pearson correlation coefficient),就是特徵之間的相關度是什麼樣的。

  

  Python的庫missing number。觀察缺失值的情況。因為百威提供的資料質量很高,所以不需要考慮填充缺失值。

  

  常用預測方法二:

  預測方法一:歷史資料用折線圖等形式畫出來,從歷史中尋找商品和門店的行為規律。

  有的有規律性,有的沒有。如下圖。

  

  所以各個商品之間行為的模式(pattern)不一樣。

  這樣的分析有什麼好處呢?通過分析發現,有的商品資料點很稀少。需要分別建立模型,有些不需要建立模型。歷史上出現一兩次的情況,可以歷史平均和預測為零來處理。不用極端資料影響整體的效果。

  預測方法二:正則化。基於統計規則,歷史上某些值的平均值,比他兩三個標準差偏差還要多的話,會認為異常值,我們會把這些值縮小一下。

  預測方法三:基於模型預測,先構建一個簡單的模型,訓練後,跑一下模型,觀察誤差特別大的點,也有可能是離群值或者異常值。這樣就可以針對他們做一些處理。

  預測方法四:移動平均。

  預測方法五:對資料進行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)解決方案新創企業黑客鬆上海站。

相關推薦

如何預測啤酒銷量資料競賽冠軍筆記分享 思路

  賽題背景   組織方:微軟加速器   真實資料來源:幾家頂級快消品牌   上海站:百威英博命題,並提供脫敏的業務資料   提出三個問題:   1.庫存需求預測   2.銷售數量預測   3.經銷商違規行為檢測   資料大致的情況   原始資料中,

kaggle機器學習競賽冠軍分享

Kaggle176比賽原始碼和討論的收集整理。 Rank 2 solution13 by Iain Murray, code available here4. [The Analytics Edge (15.071x)](

『阿里大資料競賽』音樂流行趨勢預測_不斷更新

# 本文使用的語言是 Python , 下面不再說明 # 本文禁止盈利性轉載 一、資料預處理     1、讀取資料     1.1 原始資料、測試資料與實際資料     什麼叫原始資料?為什麼要保留一份原始資料?     在讀取資料之前我們要先保留一份原始資料, 並且在隨後

天池大資料競賽——糖尿病遺傳風險預測賽後總結(一)

天池大資料競賽——天池精準醫療大賽人工智慧輔助糖尿病遺傳風險預測賽後總結 天池大資料競賽官方網址(連結)   天池精準醫療大賽是我第一次正式參加與學習的資料競賽,在這十幾天的過程中,學習到很多參與這些資料競賽的技巧和知識,雖然結果並不理想,但是總歸是

度視覺團隊斬獲 ECCV Google AI 目標檢測競賽冠軍,獲獎方案全解讀 | ECCV 2018

以下為百度視覺團隊技術方案解讀: 存在挑戰 與傳統的檢測資料集合相比,該賽事除了資料規模大、更真實之外,還存在一系列的挑戰。具體來說,主要集中在以下三個方面: 資料分佈不均衡:最少的類別框選只有 14 個,而最多的類別框選超過了 140w,資料分佈嚴重不均衡

阿里天池大資料競賽——口碑商家客流量預測 A

阿里天池大資料競賽——口碑商家客流量預測的競賽已經結束了,作為一個剛參加這種專案競賽的純小白來說,走了不少的彎路,在資料處理的過程上花費了大量的時間和功夫,最後得到的效果也不好,不過從這個過程還是學習到

度獲取網路資料

首先是四個佈局頁面 第一個是主體佈局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an

CCF大資料競賽-面向電信行業存量使用者的智慧套餐個性化匹配模型

題目:面向電信行業存量使用者的智慧套餐個性化匹配模型(2018 CCF-大資料競賽(聯通研究院舉辦) ) 網址:https://www.datafountain.cn/competitions/311/details 賽題背景: 電信產業作為國家基礎產業之一,覆蓋廣、使用者多

資料競賽平臺——Kaggle 入門

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Keras之DNN:基於Keras(sigmoid+binary_crossentropy+predict_proba)利用DNN實現分類預測概率——DIY二分類資料集&預測資料

#Keras之DNN:基於Keras(sigmoid+binary_crossentropy+predict_proba)利用DNN實現分類預測概率——DIY二分類資料集&預測新資料點 輸出結果   實現程式碼 # coding:utf-8 #Ke

馬NAS資料夾許可權的設定

共享資料夾是一個網路儲存空間。您可以建立數個共享資料夾來存放不同類別的資料,或提供給不同的使用者或使用者群組來存取檔案 1.請前往 TOS 桌面 > 控制面板 > 訪問許可權 > 共享資料夾; 2.建立共享資料夾; 3.命名共享資料夾名稱,設定共享資料夾的位

資料競賽系列

1.方法論 1.1 EDA 傳統問題低維度特徵視覺化與強特徵構造:https://www.kesci.com/apps/home/project/59f687e1c5f3f511952baca0 時間序列問題EDA的分析角度,時序必備背景知識(2.1和2.2是翻譯的經典時序書籍F

2018全國度地圖poi資料

百度地圖POI資料獲取及後續處理的過程。POI資料獲取及後續處理的過程主要包含了兩個大的步驟,即 POI資料獲取:從百度地圖得到POI資料,以json格式儲存; 資料的EXCEL匯入:將json格式儲存的資料轉化為excel檔案。 百度高德地圖全國poi資料下載 POI資

基於Keras的LSTM多變數時間序列預測(北京PM2.5資料集pollution.csv)

                             基於Keras的LSTM多變數時間序列預測   傳統的線性模型難以解決多變數或多輸入問題

dz論壇搜尋功能不能用的解決辦法之度結構化資料提交

dz論壇自帶的搜尋功能比百度站內搜尋或者360搜尋都好用,因為後者的搜尋只有收錄才能搜尋到,所以推薦大家使用dz自帶的搜尋。 但是我發現自己的論壇56微信平臺 自帶的搜尋功能不能用,輸入內容搜尋會跳出找不到頁面404,而且還自己變成了百度站內搜尋,經過我多方排查

資料競賽入門資料與參賽經驗分享

前言 本篇博文主要根據博主自身的參賽學習經歷,分享一些關於機器學習和資料探勘比賽的資料與經驗。因為自己在學習過程中,也多虧大佬前輩們的指導和分享,才慢慢學會一些技能,所以,希望大家一起學習交流,一起進步。 博主(ID:16huakai)這半年來的參賽經歷如下(按照時間先後

贏通思迅盤點機在超市中的應用 實現超市不停業盤點不用關門停業盤點

連鎖超市倉庫條碼管理方案 1. 當前問題和解決效果 連鎖超市一般都會使用電腦進銷存管理軟體,但是電腦管理軟體裡的單據都需要人工手工在電腦上錄單,普遍存在以下問題: (1)人工手工電腦錄單效率低。現場收發貨了,把數量記錄在紙質單據上,然後電腦上選擇商品檔案,錄入數量,一行行電腦做單,很費時間,做一個單據往往半

2018戰程式設計師大資料全套教程

近年來,大資料以迅猛的發展速度滲透進人們生活的方方面面。大資料是資訊化發展的新階段,隨著資訊科技和人類生產生活交匯融合,網際網路飛速普及,全球資料呈現爆發增長、海量集聚的特點,對經濟發展、社會治理、人民生活都產生了重大影響。大資料掀起了科技發展的浪潮,學習大資料的人越來越多,

各大資料競賽 Top 解決方案彙總

現在,越來越多的企業、高校以及學術組織機構通過舉辦各種型別的資料競賽來「物色」資料科學領域的優秀人才,並藉此激勵他們為某一資料領域或應用場景找到具有突破性意義的方案,也為之後的資料研究者留下有價值的經驗。 Smilexuhc(https://github.com

2018中國房地產強企業大資料研究報告!

2017年,房地產市場在中國步入新時代的大背景下,將迎來高質量的發展階段和多層次的全新發展格局,