跳轉到主要內容
工程的博客

細粒度時間序列預測規模與Facebook先知和Apache火花:火花3更新

分享這篇文章

時間序列預測的發展使得零售商產生更可靠的需求預測。現在的挑戰是產生這些預測及時和粒度級別,允許業務進行精確調整產品庫存。利用Apache火花™Facebook的先知麵臨這些挑戰,越來越多的企業發現他們可以克服過去的可伸縮性和精度限製的解決方案。

直接到預測加速器在這篇文章中引用。看到這個解決方案對火花2.0,請閱讀最初的博客。

在這篇文章中,我們將討論時間序列預測的重要性,想象一些樣本時間序列數據,然後構建一個簡單的模型來展示使用Facebook的先知。一旦你舒適的構建一個模型,我們會把Facebook先知與神奇的火花向您展示如何訓練數以百計的模型,允許您創建為每個單獨的產品庫存組合在一個精確的預測的粒度級別很少實現直到現在。

準確和及時的預測現在比以往任何時候都重要

提高時間序列分析的速度和準確性,以更好地預測對產品和服務的需求對零售商的成功至關重要。如果太多的產品裝在一個商店,貨架和倉庫空間可以緊張,產品過期,零售商可能會發現他們的金融資源綁在庫存,使得他們不能夠利用新的機會由製造商或消費模式的轉變。如果太少的產品裝在一個商店,顧客可能無法購買他們需要的產品。beplay体育app下载地址不僅這些預測錯誤導致零售商立即減少了收入,但隨著時間的推移,消費者對競爭對手顧客可能會失望。beplay体育app下载地址

新的預期需要更精確的時間序列模型和預測方法

一段時間以來,企業資源規劃(ERP)係統和第三方解決方案為零售商提供了需求預測能力基於簡單的時間序列模型。但隨著科技的進步和增加壓力,許多零售商正在尋找超越線性模型和更傳統的算法在曆史上。

提供的新功能,例如Facebook的先知新興數據科學社會,公司正在尋求靈活地應用這些機器學習(ML)模型對時間序列預測的需要。

這個運動遠離傳統預測解決方案需要零售商等自主研發的專業技能不僅在需求預測的複雜性,而且在有效分配所需的工作產生數十萬甚至數百萬毫升模型及時。幸運的是,我們可以使用火花分發這些模型的訓練,從而能夠預測對產品和服務的需求和為每個產品在每個位置的獨特需求。

可視化需求季節性時間序列數據

演示使用Facebook的先知來生成細粒度為個人商店和產品需求預測,我們將使用公開可用數據集Kaggle。它由5年的每日銷售數據50個人物品在10個不同的商店。

首先,讓我們看看所有產品的年度總銷量趨勢和商店。正如你所看到的,產品銷售總額同比增加沒有明確的收斂在高原的跡象。

樣本Kaggle零售數據用於演示合並後的細粒度的需求預測功能的Facebook先知和Apache火花

接下來,通過查看每月相同的數據,很明顯,同比上升趨勢不每月穩步進展。相反,有明顯的季節性模式,在夏季峰值和低穀在冬季。使用內置的數據可視化的特點磚協作筆記本beplay娱乐ios的值,我們可以看到我們的數據在每個月把鼠標移到圖表。

星期天在工作日級別、銷售高峰(工作日0),其次是很難下降周一(工作日1),然後穩步恢複在剩下的一周。

展示的困難占季節性模式與傳統的時間序列預測方法

開始用一個簡單的時間序列預測模型在Facebook上的先知

正如上文所述,我們的數據顯示一個明確的銷售額同比上升趨勢,以及年度和每周的季節性模式。正是這些重疊模式數據,Facebook先知旨在地址。

Facebook先知遵循scikit-learn API,所以應該很容易接任何有sklearn經驗。我們需要通過一個兩列熊貓DataFrame作為輸入:第一列的日期,第二個是價值預測(在我們的例子中,銷售)。一旦我們的數據的格式是正確,構建一個模型很容易:

進口熊貓作為pdfbprophet進口先知#實例化模型和設置參數模型=先知(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)

就是這樣!現在我們可以想象我們的實際和預測數據排隊以及使用Facebook先知模型預測未來的內置.plot方法。正如你所看到的,每周和季節性需求模式反映在早些時候預測結果顯示。

predict_fig =模型。情節(forecast_pd包含=“日期”ylabel =“銷售”)顯示(圖)

比較實際需求生成的時間序列預測Facebook先知利用Apache火花

該可視化有點忙。Bartosz Mikulski提供了一個優秀的崩潰它很值得一看。簡而言之,黑點代表我們的實績與暗藍線代表我們預測和淺藍色樂隊代表(95%)不確定性區間。

培訓數以百計的時間序列預測模型與Facebook先知和火花

既然我們已經演示了如何構建一個模型,我們可以用火花的力量把我們的努力。我們的目標是為整個數據集生成不是一個預測,但數以百計的模型和預測對於每個產品庫存的組合,這將是非常耗時的執行順序操作。

構建模型以這種方式可以使連鎖雜貨店,例如,創建一個精確的預估的牛奶量他們應該為自己的桑達斯基順序存儲,不同於所需的克利夫蘭商店,基於不同的需求在這些位置。

如何使用火花DataFrames分發時間序列數據的處理

數據科學家經常應對培訓大量的挑戰模型使用一個分布式數據處理引擎等火花。通過利用一個火花集群,個體勞動者集群中的節點可以訓練與其他工人並行模型的一個子集節點,大大降低了所需總時間訓練時間序列模型的整個集合。

當然,訓練模型節點集群上的工人(電腦)需要更多的雲基礎設施,這是要付出代價的。但是簡單的隨需應變的雲資源的可用性,企業可以迅速提供他們所需的資源,訓練他們的模型,並釋放這些資源一樣快,使他們實現大規模可擴展性沒有實物資產的長期承諾。

實現分布式數據處理的關鍵機製DataFrame火花。加載數據到火花DataFrame,數據分布在集群中的工人。這允許這些工人來處理數據的子集以類似的方式,減少了整體的執行我們的工作所需的時間。
當然,每個工人需要訪問數據的子集它需要做的工作。通過分組鍵值的數據,在這種情況下存儲和項目組合,我們彙集所有的時間序列數據的鍵值到一個特定的工作節點。

store_item_history.groupBy (“存儲”,“項目”)

我們分享groupBy代碼來強調它如何使我們許多並行模型有效地訓練,雖然它不會真正發揮作用,直到我們設置和定製的熊貓函數應用到數據在下一節。

利用熊貓功能的力量

與我們的正常時間序列數據分組的存儲和項目,我們現在需要訓練一個模型為每個組。為了實現這一點,我們可以使用一個熊貓函數,它允許我們自定義函數應用於DataFrame每組數據。

這個函數不僅會為每組訓練模型,但也生成一個結果集代表的預測模型。雖然函數將每組訓練和預測DataFrame獨立於他人,從每一組返回的結果將方便地收集到一個單獨的DataFrame。這將使我們能夠生成存儲項目水平預測但分析師和基金經理提出我們的結果作為一個單獨的輸出數據集。

正如你所看到的在下麵縮寫代碼,構建我們的函數是相對簡單的。與早期版本的火花,我們可以聲明函數相當簡化的方式,指定類型的大熊貓對象我們希望接收和返回,即。Python類型提示

在函數定義中,我們實例化模型、配置和適應它已收到的數據。模型進行預測,數據返回的輸出函數。

defforecast_store_item(history_pd: pd.DataFrame)- > pd.DataFrame:#實例化模型,配置參數模型=先知(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命令我們前麵討論,以確保我們的數據集是正確劃分的團體,代表著特定的存儲和項的組合。然後我們簡單applyInPandas DataFrame函數,讓它適合每個分組的數據模型並進行預測。

返回的數據集的應用功能,每組更新以反映的日期我們生成的預測。這將幫助我們跟蹤生成的數據在不同的模型作為我們最終的功能投入生產運行。

pyspark.sql。功能導入當前日期結果=(store_item_history.groupBy (“存儲”,“項目”).applyInPandas (forecast_store_item模式=result_schema).withColumn (“training_date”,當前日期()))

下一個步驟

我們已經構建了一個為每個存儲項目組合預測。使用一個SQL查詢,分析師可以查看每個產品的定製的預測。在下麵的圖表中,我們繪製投影產品10 # 1在商店的需求。正如你所看到的,需求預測從商店到商店,但所有商店的一般模式是一致的,正如我們所期望的。

通過SQL查詢生成樣本時間序列可視化

作為新的銷售數據到達,我們可以有效地生成新的預測並將這些附加到我們現有的表結構,允許分析師更新業務的預期發展條件。

磚環境中生成這些預測,看看我們為需求預測解決方案加速器

訪問之前版本的筆記本,請建2.0火花單擊此鏈接

免費試著磚

相關的帖子

看到所有工程的博客的帖子
Baidu
map