dask-dask結合Prophet做時間序列預測

此示例顯示了使用Prophet和Dask進行可伸縮的時間序列預測。

先知是一種基於附加模型預測時間序列數據的過程,其中非線性趨勢與每年,每週和每天的季節性以及假期影響相吻合。

正如大規模預測中所討論的那樣,大型數據集並不是團隊遇到的唯一規模挑戰挑戰。在此示例中,我們將重點關注該論文中確定的第三種縮放挑戰:

在最現實的設置中,將創建大量預測,這需要有效,自動化的方法來評估和比較它們,以及檢測它們何時可能表現不佳。當做出數百甚至數千個預測時,讓機器完成模型評估和比較的艱苦工作,同時有效利用人工反饋來解決性能問題變得非常重要。

對於Dask來說,這似乎是一個絕佳的機會。我們將一起使用先知和達斯克來並行化研究的診斷階段。它不會試圖使模型本身的訓練並行化。

# This example currently relies on Prophet master import subprocess subprocess.call([ "pip", "install", "Cython cmdstanpy==0.9.5 pystan numpy pandas matplotlib LunarCalendar convertdate holidays setuptools-git python-dateutil tqdm" ]) subprocess.call([ "pip", "install", "git+https://github.com/facebook/prophet/#egg=fbprophet&subdirectory=python" ]) 
0 
import pandas as pd from fbprophet import Prophet 
密謀導入失敗。交互式地塊將不起作用。 

我們將通過先知快速入門逐步介紹該示例。這些值代表Peyton Manning的Wikipedia page的日誌每日頁面瀏覽量。

df = pd.read_csv( 'https://raw.githubusercontent.com/facebook/prophet/master/examples/example_wp_log_peyton_manning.csv', parse_dates=['ds'] ) df.head() 
  ds ÿ
0 2007-12-10 9.590761
1個 2007-12-11 8.519590
2 2007-12-12 8.183677
3 2007-12-13 8.072467
4 2007-12-14 7.893572
df.plot(x='ds', y='y'); 
../_images/applications_forecasting-with-prophet_5_0.png

擬合模型需要花費幾秒鐘的時間。達斯克完全不參與其中。

%%time m = Prophet(daily_seasonality=False) m.fit(df) 
CPU時間:用戶2.27 s,系統:78.7 ms,總計:2.35 s 掛牆時間:2.35 s 
<fbprophet.forecaster。先知位於0x7fbb97dc96d0> 

我們可以做出預測。同樣,Dask不在這裏。

future = m.make_future_dataframe(periods=365) forecast = m.predict(future) m.plot(forecast); 
../_images/applications_forecasting-with-prophet_9_0.png

並行診斷

先知包括一種fbprophet.diagnostics.cross_validation函數方法,該方法使用模擬的歷史預測來提供有關模型質量的一些想法。

這是通過在歷史記錄中選擇截止點來完成的,對於每個截止點,僅使用直到該截止點的數據來擬合模型。然後,我們可以將預測值與實際值進行比較。

有關更多信息,請參見https://facebook.github.io/prophet/docs/diagnostics.html

在內部,cross_validation生成要嘗試的截止值列表。先知適合一個模型,併爲每個模型計算一些指標。默認情況下,每個模型都按順序擬合,但是可以使用parallel=關鍵字並行訓練模型。在單臺機器上parallel="processes"是一個不錯的選擇。對於要在集羣上分發工作的大型問題,請parallel="dask"在連接到集羣后通過創建來使用Client

import dask from distributed import Client, performance_report import fbprophet.diagnostics client = Client(threads_per_worker=1) client 

客戶

  • 工人數: 2
  • 核心數: 2
  • 內存: 8.36 GB
%%time df_cv = fbprophet.diagnostics.cross_validation( m, initial="730 days", period="180 days", horizon="365 days", parallel="dask" ) 
INFO:fbprophet:在2010年2月15日00:00:00到2015年1月20日00:00:00之間做出11個帶有截止值的預測 INFO:fbprophet:與<客戶端:'tcp://127.0.0.1:37445'並行應用進程= 2線程= 2,內存= 8.36 GB> 
CPU時間:用戶2.15 s,系統:189 ms,總計:2.34 s 掛牆時間:52.5 s 

確保正在運行Dask儀表板。這些模型在集羣上並行擬合。開始時,必須將模型和數據移交給工作人員會產生一些開銷,但是在此之後,擴展看起來非常不錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章