細粒度的時間序列預測規模與Facebook先知和Apache火花
2020年1月27日 在公司博客上
試試這個時間序列預測的筆記本中為需求預測解決方案加速器。
時間序列預測的發展使得零售商產生更可靠的需求預測。現在的挑戰是產生這些預測及時和粒度級別,允許業務進行精確調整產品庫存。利用Apache火花™和Facebook的先知麵臨這些挑戰,越來越多的企業發現他們可以克服過去的可伸縮性和精度限製的解決方案。
在這篇文章中,我們將討論時間序列預測的重要性,想象一些樣本時間序列數據,然後構建一個簡單的模型來展示使用Facebook的先知。一旦你舒適的構建一個模型,我們會把先知與Apache的魔力火花™展示如何訓練數以百計的模型,允許我們創建為每個單獨的產品庫存組合在一個精確的預測的粒度級別很少實現直到現在。
準確和及時的預測現在比以往任何時候都重要
提高時間序列分析的速度和準確性,以更好地預測對產品和服務的需求對零售商的成功至關重要。如果太多的產品裝在一個商店,貨架和倉庫空間可以緊張,產品到期,和零售商可能會發現他們的財務資源是綁在庫存,使得他們不能夠利用新的機會由製造商或消費模式的轉變。如果太少的產品裝在一個商店,顧客可能無法購買他們需要的產品。beplay体育app下载地址不僅這些預測錯誤導致零售商立即減少了收入,但隨著時間的推移,消費者對競爭對手顧客可能會失望。beplay体育app下载地址
新的預期需要更精確的時間序列預測方法和模型
一段時間以來,企業資源規劃(ERP)係統和第三方解決方案為零售商提供了需求預測能力基於簡單的時間序列模型。但隨著科技的進步和增加壓力,許多零售商正在尋找超越線性模型和更傳統的算法在曆史上。
提供的新功能,例如Facebook的先知新興數據科學社會,公司正在尋求靈活地應用這些機器學習模型的時間序列預測的需要。
這個運動遠離傳統預測解決方案需要零售商等自主研發的專業技能不僅在需求預測的複雜性,而且在有效分配所需的工作來生成成百上千,甚至成千上萬的機器學習模型及時。幸運的是,我們可以使用火花分發這些模型的訓練,使其不僅可以預測總體需求的產品和服務,但是為每個產品在每個位置的獨特需求。
可視化需求季節性時間序列數據
演示使用先知產生細粒度為個人商店和產品需求預測,我們將使用公開可用數據集Kaggle。它由5年的每日銷售數據50個人物品在10個不同的商店。
首先,讓我們看看所有產品的年度總銷量趨勢和商店。正如你所看到的,產品銷售總額同比增加沒有明確的收斂在高原的跡象。
接下來,通過查看相同的數據在每月的基礎上,我們可以看到每個月同比穩步上升趨勢不進步。相反,我們看到一個清晰的季節性模式,在夏季峰值和低穀在冬季。使用內置的數據可視化的特點磚協作筆記本beplay娱乐ios的值,我們可以看到我們的數據在每個月把鼠標移到圖表。
星期天在工作日級別、銷售高峰(工作日0),其次是很難下降周一(工作日1),然後穩步恢複在剩下的一周。
開始用一個簡單的時間序列預測模型在Facebook上的先知
見上麵的圖表中,我們的數據顯示一個明確的銷售額同比上升趨勢,以及年度和每周的季節性模式。正是這些先知的數據重疊模式旨在解決。
Facebook先知遵循scikit-learn API,所以應該很容易接任何有sklearn經驗。我們需要通過一個2列熊貓DataFrame作為輸入:第一列的日期,第二個是價值預測(在我們的例子中,銷售)。一旦我們的數據的格式是正確,構建一個模型很容易:
進口熊貓作為pd從fbprophet進口先知#實例化模型和設置參數模型=先知(interval_width =0.95,增長=“線性”,daily_seasonality =假,weekly_seasonality =真正的,yearly_seasonality =真正的,seasonality_mode =“乘法”)#適合模型的曆史數據model.fit (history_pd)
現在我們已經符合我們的數據模型,我們使用它來構建一個90天的預測。在以下代碼中,我們定義了一個數據集,包括曆史日期和90天以外,利用先知的make_future_dataframe
方法:
future_pd = model.make_future_dataframe (時間=90年,頻率=' d ',include_history =真正的)#預測數據集forecast_pd = model.predict (future_pd)
就是這樣!現在我們可以想象我們的實際和預測數據排隊以及預測未來使用先知的內置.plot方法。正如你所看到的,每周我們之前說明和季節性需求模式實際上是反映在預測結果。
predict_fig =模型。情節(forecast_pd包含=“日期”ylabel =“銷售”)顯示(圖)
該可視化有點忙。Bartosz Mikulski提供一個優秀的崩潰它很值得一看。簡而言之,黑點代表我們的實績與暗藍線代表我們預測和淺藍色樂隊代表(95%)不確定性區間。
培訓數以百計的時間序列預測模型與先知和火花
既然我們已經演示了如何構建一個單一時間序列預測模型,我們可以使用Apache火花的力量把我們的努力。我們的目標是為整個數據集生成不是一個預測,但數以百計的模型和預測對於每個產品庫存的組合,這將非常耗時的執行順序操作。
構建模型以這種方式可以使連鎖雜貨店,例如,創建一個精確的預估的牛奶量他們應該為自己的桑達斯基順序存儲,不同於所需的克利夫蘭商店,基於不同的需求在這些位置。
如何使用火花DataFrames分發時間序列數據的處理
數據科學家經常應對培訓大量的挑戰模型使用一個分布式數據處理引擎等Apache火花。通過利用一個火花集群,個體勞動者集群中的節點可以訓練與其他工人並行模型的一個子集節點,大大降低了所需總時間訓練時間序列模型的整個集合。
當然,訓練模型節點集群上的工人(電腦)需要更多的雲基礎設施,這是要付出代價的。但是簡單的隨需應變的雲資源的可用性,企業可以迅速提供他們所需的資源,訓練他們的模型,並釋放這些資源一樣快,使他們實現大規模可擴展性沒有實物資產的長期承諾。
實現分布式數據處理的關鍵機製引發的DataFrame。加載數據到火花DataFrame,數據分布在集群中的工人。這允許這些工人來處理數據的子集以類似的方式,減少了整體的執行我們的工作所需的時間。
當然,每個工人需要訪問數據的子集它需要做的工作。通過分組鍵值的數據,在這種情況下存儲和項目組合,我們彙集所有的時間序列數據的鍵值到一個特定的工作節點。
store_item_history.groupBy (“存儲”,“項目”)#。
我們分享groupBy代碼來強調它如何使我們許多並行模型有效地訓練,雖然它不會真正發揮作用,直到我們設置和應用一個UDF在下一節我們的數據。
利用熊貓用戶定義函數(udf)的力量
與我們的正常時間序列數據分組的存儲和項目,我們現在需要訓練一個模型為每個組。為了實現這一點,我們可以使用一個熊貓用戶定義函數(UDF),它允許我們自定義函數應用於DataFrame每組數據。
這個UDF將不僅為每組訓練模型,但也生成一個結果集代表的預測模型。雖然函數將每組訓練和預測DataFrame獨立於他人,從每一組返回的結果將被方便地收集到單一DataFrame。這將使我們能夠生成存儲項目水平預測但分析師和基金經理提出我們的結果作為一個單獨的輸出數據集。
可以看到在下麵的縮寫Python代碼中,建設我們的UDF是相對簡單的。的UDF被實例化pandas_udf
方法確定它將返回的數據模式和數據,預計接收的類型。這之後,我們定義的函數將執行的工作UDF。
在函數定義中,我們實例化模型、配置和適應它已收到的數據。模型進行預測,數據返回的輸出函數。
@pandas_udf (result_schema, PandasUDFType.GROUPED_MAP)defforecast_store_item(history_pd):#實例化模型,配置參數模型=先知(interval_width =0.95,增長=“線性”,daily_seasonality =假,weekly_seasonality =真正的,yearly_seasonality =真正的,seasonality_mode =“乘法”)#符合模型model.fit (history_pd)#配置預測future_pd = model.make_future_dataframe (時間=90年,頻率=' d ',include_history =真正的)#做出預測results_pd = model.predict (future_pd)#。#回歸預測返回results_pd
現在,把它放在一起,我們使用groupBy
命令我們前麵討論,以確保我們的數據集是正確劃分的團體,代表著特定的存儲和項的組合。然後我們簡單應用
的UDF DataFrame,允許UDF來適應一個模型,使預測在每個分組的數據。
返回的數據集的應用功能,每組更新以反映的日期我們生成的預測。這將幫助我們跟蹤生成的數據在不同的模型作為我們最終的功能投入生產運行。
從pyspark.sql。功能導入當前日期結果=(store_item_history.groupBy (“存儲”,“項目”)蘋果(forecast_store_item).withColumn (“training_date”,當前日期()))
下一個步驟
我們已經構建了一個時間序列預測mdoel為每個存儲項目組合。使用一個SQL查詢,分析師可以查看每個產品的定製的預測。在下麵的圖表中,我們繪製投影產品10 # 1在商店的需求。正如你所看到的,需求預測從商店到商店,但所有商店的一般模式是一致的,正如我們所期望的。
作為新的銷售數據到達,我們可以有效地生成新的預測並將這些附加到我們現有的表結構,允許分析師更新業務的預期發展條件。
為了了解更多,看點播網絡研討會資格星巴克如何預測需求規模與Facebook先知和Azure磚嗎看看我們的為需求預測解決方案加速器。