此示例顯示了使用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');
擬合模型需要花費幾秒鐘的時間。達斯克完全不參與其中。
%%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);
並行診斷
先知包括一種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
客戶
|
簇
|
%%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儀表板。這些模型在集羣上並行擬合。開始時,必須將模型和數據移交給工作人員會產生一些開銷,但是在此之後,擴展看起來非常不錯。