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仪表板。这些模型在集群上并行拟合。开始时,必须将模型和数据移交给工作人员会产生一些开销,但是在此之后,扩展看起来非常不错。

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