基于機器學習方法對銷售預測的研究
很高興“InfoQ”團隊和“百分點大數據學院”牽頭舉辦此次活動。“百分點大數據學院”是由百分點發起的大數據領域專業、開放的分享交流平臺,通過定期舉辦線上線下活動,邀請大數據領域學術專家、技術領袖、企業高層,分享行業、技術、應用等方面最前沿的經驗與見解。也非常感謝InfoQ的團隊能夠提供這么好的一個機會給大家做一次分享。我分享的主題是《基于機器學習方法對銷售預測的研究》,從百分點運用機器學習落地服務的角度,介紹機器學習的核心思路和實踐。
首先我先自我介紹一下,在加入百分點之前,曾在生物信息公司中負責生物大數據的分析和數據挖掘;在百分點負責在金融領域的征信模塊開發、銷售預測領域預測模型研究,以及零售類用戶畫像的研發等工作。
銷售預測的基本情況
在開始今天的分享之前,我首先跟大家簡單的聊一下,剛剛過去的雙十一,大家可能更關心的是雙十一的折扣,什么商品打了什么折扣。但是對于天貓而言,他們可能更關心的是雙十一當天的銷售額是多少,因為知道銷售額,他就能提前做一個準備,做到未雨綢繆。
我們這邊有三組數據,第一組是在雙十一的前十天,網上有一個專家預測,雙十一是1180億,7天以后馬云放出豪言,說今年的雙十一可能要突破1500億,去年是920多億。在雙十一的前一天,網上有一個專家預測了今年的雙十一是1200億,最后雙十一是1207億。
這里有兩個問題,第一個問題,預測是怎么做出來的?第二個問題是:對于同一件事情它是預測出不同的結果,什么結果是好與壞?第一個問題是怎么預測的問題,第二個問題是預測的效果好與壞的問題。這就引出了我的主題,《機器學習對銷售預測的研究》。
機器學習是常用的日常分析的方法,另一方面機器學習在海量數據中挖掘其中的規律效果非常好。
首先,說說,銷售預測的現狀和痛點。銷售只是一個商業問題,要做的是滿足用戶的需求,同時對后續的運營做主導。而且它的目的并不僅是增加企業的銷量,而是能夠讓企業能夠獲利,利潤增加,所以它是一個商業問題。
對于這樣一個商業問題,它在商業環境里面地位是顯而易見的,這里面有物流、庫存、促銷、財務等等四個方面的作用。對于銷售預測的痛點,有三方面:①商業環境變化莫測,要做到預測非常準確可能會比較困難;②銷售預測并不是一個純粹的銷售預測,它與企業的整體的反應鏈相關的;③有企業產品比較單一,或者是服務比較單一,想要通過這個銷售預測來做這個指導,來指導研發新的產品,或者是通過價格進行動態定價。
在我看來,我覺得核心的痛點就是預測的精確性的問題,也就是第一個痛點。如果第一個痛點很好的解決掉,后面痛點就很好解決。預測的精確性為什么是核心的痛點呢?這里面就要從預測開始講起,我們對一個事件進行預測是這樣一個過程,就是基于歷史的情況進行推演出一個規律,通過這個規律來進行推演到未來。它的特點就是我的短期的預測的精度要遠遠高于長期的預測的精度,即,未來一周的預測要比未來三個月的精度要高。
同時對于預測的話,我們會有幾個方面的假設,第一方面是變化模式,其實就是數據里面的規律,它是我們對于這個待預測事物的了解因素。比如說你要去預測明天彩票的號碼,我們已經通過對彩票的分析我們知道沒有因素是可以影響它的,所以我們是預測不了明天的彩票。這是第一個變化模式。
第二方面,我們要基于數據來做,你的數據量太少,我們這邊也做不了,就是一定要達到數據量的級別我們才能做數據挖掘,或者機器學習。
第三方面,我們做機器學習,我們做預測,都會有一個理論框架,在整個理論框架下我們才能做,才能落地。所以這三方面就構成了我們今天要講的銷售預測的體系框架。銷售預測體系框架到底是什么呢?
其框架就是銷售預測的基本步驟,即確定預測目標、收集和理解數據、建立模型和評價指標。
銷售預測的基本步驟
第一步,確定預測目標:首先要研究一下它的預測的對象,比如我要預測衣服,衣服是冬天的衣服,肯定是有季節性的,預測對象不一樣,場景不一樣,我們預測的方法也會不一樣。
同時,做銷售預測一般會有一個預期,我們希望這預測做未來4周的預測,還是未來5天的預測,這是有一個短期的預測和長期的預測。如果是希望太高的話我們可能達不到,希望太小,我們花費了這么多的時間和精力。通常而言,你要預測未來一個月的銷量,至少需要兩年的數據。
此外,因為需要跟業務進行對接,所以業務目標也很重要。一方面是模型的精確性,即,我們可以給出一個精確度,另一方面是模型的可解釋性,即,我們的結果更多是要根據后面的業務部門來進行交接,進行溝通,這時候你就不能解釋,好與不好為什么,這要帶有可解釋性。
綜上所需,確定預測目標要分兩方面進行權衡,即預測精確性和模型可解釋性。
第二步,收集數據或理解數據階段。而這一步通常包括三個小的子步驟,即:收集數據、數據探索和數據預處理。要盡可能多的獲得數據,同時,還要理解數據背后的故事與含義。這里有一個小故事:我當時在做項目的時候,我當時電商的銷售預測的時候,我看了一下庫存,一般來說你賣出一件商品庫存就會減,但是我在數據庫里看庫存為什么是負值呢?我就和業務部門進行溝通,原來他們把庫存的默認值就是負值。這就是對于我們在做預測的時候,對數據背后的含義一定要理解清楚。這是一個數據探索。
而數據探索,其目的是為了更好地發現數據的規律,對應用建模提供一個指導方案。
數據預處理是因為同時收集的原始數據可能非常臟、質量非常差,需要做數據清洗。數據預處理的方法很多,這里主要介紹兩個數據預處理方法,缺失值處理和數據轉換。缺失值處理是指,發現缺失值的時候,需要理解缺失背后的原因是什么,是數據庫的技術問題還是真正業務的原因導致它缺失?如果是后者業務原因導致缺失,我們再來考慮怎么處理缺失值,處理缺失值的方法大體有兩類:直接刪除法和插補法。直接刪除法是將缺失率較高的特征或樣本數據進行刪除,而插補法是通過已有的數據對缺失值進行填補。而數據變換是指數據的分布與我們假設的數學模型會不一樣,這樣的數據將會對預測精度會有一定的影響。因此,導入模型之前我們就要把數據進行變換,一般有兩種方法:直接對數據進行變換、Box-Cax變換。
第三步是應用建模。銷售預測的方法有很多種類,本報告主要是介紹以下三類:第一類就叫主觀預測法,即,專家法;第二類是時間序列法,即指數平滑法和自回歸移動模型;第三類是機器學習中的回歸算法。
銷售預測的基本方法
專家法是指通過人的判斷,人的經驗對于未來的銷售做一個預測,它的優點是比較快速,比較簡單,就是很快就能夠給一個結果。缺點就是我們預測的結果跟你預測的結果都不一樣,帶有差異性。這個專家法其實很多公司在前期他們都是用專家法來進行預測的。還有我們的客戶他們在剛成立的電商,他也是用專家法來做的。
時間序列的方法中最簡單是指數平滑法。它的特點是“重近輕遠 ”,即通過不同的權重來控制預測的精度。優點是簡單、適合于趨勢預測;缺點是精確率不高。
ARIMA模型是相對比較復雜一點,其原理是用銷量去預測未來銷量
無論是指數平滑還是ARIMA模型,其預測對于趨勢性較強的數據集效果比較好,但如果遇到趨勢不那么強的數據集,則效果不太理想,這時,可以考慮用機器學習的方法進行銷售預測。
機器學習的整體流程為:首先,將數據集劃分為訓練集和測試集,其次,對于訓練集做特征篩選,提取有信息量的特征變量,而篩除掉無信息等干擾特征變量,再次,應用算法建立模型,最后,結合測試集對算法模型的輸出參數進行優化。
這里主要介紹線性回歸模型、決策樹(回歸樹)模型、隨機森林、xgboost、神經網絡、支持向量回歸等六種算法模型。
線性回歸模型:假設銷量與影響銷量的因素是線性關系的,包括誤差分布、線性方程和激活函數等。
決策樹(回歸):其原理是通過if-then規則對特征變量進行逐步決策來構建的模型。此處,可以舉一個例子來簡單講解決策樹算法的思想是什么?比如說我想給一個妹紙進行顏值評分,分值范圍為[0,10]。評分的第一輪判斷是五官是否端正?如果為否,打3分;如果為是,則進行第二輪判斷,即身材,身材不好則打5分。身材好的話再進入第三輪判斷,即是否有錢,有錢就是典型的白富美,就是9分。沒錢則為7分。從圖中可以看出,其判斷決策的過程倒過來看是一個樹,紅色是它的葉子,葉子對應他的分值,黃色是變量。
隨機森林是從決策樹演變而成的一個算法,但其思想與決策樹相比增加了集成思想。同時,其“隨機”具有兩層含義,第一層是對特征變量進行隨機選擇。第二層是,對訓練集樣本進行隨機選擇。
xgboost是基于傳統的GBDT算法進行了優化的集成算法,它是數據挖掘大賽上面得分非常高的算法。它的思想是這樣的,我給一個數據集,我現在有一個問題,就是要看他一家人當中是否會喜歡電子游戲,也是通過構建樹的情況進行判斷,比如年齡、性別進行判斷,它會反映這個家庭成員對應的我們的樣本會打一個分,最后男孩給2分,女孩給1分。有時候我們一棵樹確定不了,我們就規定多棵樹,樹1和樹2之間并不是獨立的,第一棵樹的時候對樣本做第一次判斷,判斷的時候有對和錯,但是我會更關注于我判斷錯的那一部分,我在規定第2棵樹的時候,我把預測錯的更多的考慮一下,就會變成第2棵樹,我會過多的關注那些預測錯的,再依次的來進行優化。
神經網絡是指模擬大腦神經元的工作的非線性模型,神經網絡是現在最火的一個深度學習的基礎。其包括三個部分:輸入層、隱藏層和輸出層。輸入層在銷售預測中則為影響銷量變換的各相關因素變量;輸出層為銷量;中間隱藏層為各相關因素變量到銷量之間的一個非線性映射關系,通常為一個函數
神經網絡是在反欺詐領域用得比較多,像現在的銀行、互聯網金融,有的人進行欺騙性的貸款,就用神經網絡可以很快的把他發現出來。還有檢測病人也可以用到神經網絡。
支持向量回歸其本質是跟SVM是一樣,即尋找能使回歸局域更大的margin,其適用于小數據集和高維數據集。
到目前為止,已經簡單介紹了六種常用于銷售預測的機器學習方法,這些算法也就很好地回答了前面“雙十一”銷售額例子的第一個問題,即如何進行銷售預測?
銷售預測效果評估
第四步是評價指標,即預測效果好與壞的問題。對此問題,我想從兩個方面跟大家進行分享,即評估方法論和評估的定量指標。第一方面,方法論K折交叉驗證。其基本思想為:將總數據集均勻劃分為k等份(假設取k=10),第一次對數據集進行劃分過程為:第一份作為測試值,驗證這個模型,剩下第2到第10個做訓練集。第二次劃分過程為:把第2個作為測試值,剩下9個作為訓練集,然后依次進行訓練集和數據集劃分,一共會,得到10個模型,選擇最小的作為我們最終的模型。
第二方面是評估指標RMSE,值越小,說明預測值與真實值之間的差異就越小,模型效果就越好。
至此,已經把銷售預測的四大步驟均已經介紹完畢了,下面就以某電商網站的銷售預測案例作為理論實戰分享。
項目案例
下面我們進入機器學習的實戰部分。我會大家看一下案例在上述理論框架的效果怎么樣。
第一步,確定預測目標是為某類商品歷史銷量排行前20的單個商品進行未來7天的預測。
第二步,收集和理解數據,本案例一種為六大維度72個指標。其實,影響銷量變化的因素錯中復雜,除了本身歷史銷量外,還有一些:比如說競爭對手的因素、促銷因素、新聞熱點因素、口碑因素、隨機事件因素、非技術因素等等,但是,對于算法建模而言,我們需要把有數據支持的、并且能夠可控的影響銷量的相關因素考慮進去,因此,才得出了六大維度72個指標(特征變量)體系。
我們對72個指標(特征變量)進行了數據探索,這里以節假日等級與銷量的關系為例,通過對數據探索發現了一條規律,即:節假日等級越高,銷量會越好。
第三步為應用建模,我們使用了6個機器學習模型和1個ARIMA模型對該案例進行了預測建模,其結果如上圖所示,該結果對比圖橫坐標是真實銷量值,縱坐標為算法模型預測值。不同顏色的線對應不同的算法預測結果擬合線,中間45°虛線為參考線,與參考線越近的算法,其效果越好。從圖可以看出xgboost和隨機森林兩個算法的效果是比較好的。
第四步為評價指標,這里不僅輸出RMSE值,而且還將歷史銷量與未來預測銷量進行可視化展示,即如上圖所示。
我們對所有的預測算法進行了總結,包括預處理、變量篩選方法、可解釋性和精確性等內容。
同時,我們也對基于機器學習對銷售預測的研究進行了總結,主要分機器學習、數據、效果和業務四個方面。
第一方面是機器學習層面,即機器學習可能更多的是關注相關關系。做銷售預測,我們只用到了跟銷量變化有關的因素變量,而不是因果變量。有些客戶會問我們:現在我要提高商品銷量,請你們算法人員告訴我調哪些參數能夠讓銷量增加?其實這就是一個不合理的需求,因為我是做預測的時候我們用到機器學習的模型,我只是用到像庫存、價格、節假日,是跟銷量無關系的,但是并不是默認認為庫存高就一定會影響銷量的增加,庫存低就一定影響銷量減小。因為后者它是一個因果關系,而我們做機器學習用的是一個相關性的關系。
第二方面是數據的層面,沒有數據或數據質量差,效果就會較差,業界流行一句話“垃圾進垃圾出”就是指數據。
第三方面是效果層面。其實,效果是評估一個模型對于好與壞。對于銷售預測而言,其效果可能主要體現在是否增加企業的利潤。但是這樣的效果不太好評論,因為這不僅僅要考慮預測的精度、模型的可解釋性等算法效果,還要考慮企業的供應鏈、整體能力等。不能將機器學習的預測效果作為衡量企業是否增加利潤的惟一標準。
第四方面是業務層面,即在機器學習訓練之前的數據預處理、訓練之中以及訓練之后的模型評估都需要一定的業務理論作為指導。嘗若業務理論偏弱,則可能會影響整個建模過程,其效果也會受到影響。而且我們是從算法的角度,解決的是算法的問題,但是算法的問題,最終還是要回到我們業務問題,在銷售預測上我們要回到怎么樣提高業績。
銷售預測終究還是一個商業問題,我們只是從數據層面,從算法層面很難能夠很好的把這個商業問題解決掉。我們認為這個效果已經比較好了,其實是比那種大數據的精準營銷、精準預測還是有一段的距離要走。這是我們對于用機器學習來做產業落地的一個展望和規劃。
我的分享就到這兒。謝謝大家!
答疑環節
提問1:銷售預測的銷售指標如何定?通過哪些維度預測?預測周期大概多長?
答:銷量預測的指標體系的整理主要是通過業務邏輯和待預測商品本身的數據情況而確定的。比如電商類某商品的銷量預測,從業務上進行商業分析可以得出,庫存因素、價格因素、口碑因素、節假日因素、促銷廣告因素、新聞熱點因素(比如三鹿奶粉被新聞曝光,導致國產奶粉在線上銷售受阻)、國家政策因素(主要是指跨境電商,國家稅率的高低)等等因素,同時,也需要結合待預測商品本身的數據情況,如果以上的幾個業務上分析的因素,只有庫存因素和節假日因素,那就只能用這兩個因素進行預測了,后期等獲取到其他因素的數據再進行補充。
而預測周期的確定需要業務部門結合企業的整體供應鏈能力以及盤點本身歷史數據情況而定,如果企業的數據質量較好,歷史數據量又較多(比如超過2年以上的數據),那么預測周期可以設置長一點。但是對于銷量預測而言,有一個特點,即短期預測的精度要遠高于長期預測的精度,也就是說預測未來一周的精確率要比預測未來三個月要高得多。
提問2:電商類銷量預測,有什么特殊的要求和使用的場景?比如樣本量,準確性?
答:電商類的銷量預測與實體的銷量預測的主要區別在于用戶體驗上,我們稱電商銷售預測為線上預測,而實體的銷量預測,比如衣服的銷量預測、藥店的銷量預測和文具的銷量預測等都屬于線下預測;而對于線上預測,除了本身的商業環境影響(價格、庫存、質量、評價等等)外,還有一部分影響銷量的因素是互聯網上的用戶行為數據,主要包括瀏覽、點擊和收藏等數據,這些用戶行為數據主要是通過布碼技術活動的(通過將抓取的代碼部署在web端或PC端),同時,還需要考慮用戶行為數據的滯后性,即某用戶收藏了該商品,但是需要經過一定時間才能下單購買,這個時候需要把具有滯后性的變量進行拆分,再加入到機器學習模型中去。
對于樣本量的多少,需要以預測的目標而定,預測目標較短,則所需要的訓練集就少一些,如果預測目標較長(超過5天),一般則需要1年以上的歷史數據。至于準確性,需要結合數據情況而定,準確性的指標通常用RMSE,RMSE越小則準確性越好。
講師介紹
唐新春 百分點數據科學家,清華大學碩士學歷,曾負責完成中國某兵器研究院的大型激光器相關算法的研發項目,在加入百分點之前,曾在生物信息公司中負責生物大數據的分析和數據挖掘;在百分點負責在金融領域的征信模塊開發、銷售預測領域預測模型研究,以及零售類用戶畫像的研發等工作。現研究興趣為運用機器學習、數據挖掘等技術在產業界的落地實踐,為不同行業提供大數據服務。