README

快速开始

模型概述

相较于prophet的改进

趋势项

季节性

自回归

滞后回归项

事件

http://neuralprophet.com/model/events/

为事件建模

在预测问题中,我们经常需要考虑反复出现的特殊事件。neural_prophet支持这些事件。这些事件既可以以加法格式添加,也可以以乘法格式添加。

为了将事件信息提供给模型,用户必须创建一个dataframe ,该数据框架有对应事件日期的列ds和包含指定日期事件名称的列event。在下面的例子中,我们创建了名为 history_events_df 的dataframe ,其中包含这些事件信息。

playoffs_history = pd.DataFrame({        'event': 'playoff',        'ds': pd.to_datetime(['2008-01-13', '2009-01-03', '2010-01-16',                              '2010-01-24', '2010-02-07', '2011-01-08',                              '2013-01-12', '2014-01-12', '2014-01-19',                              '2014-02-02', '2015-01-11', '2016-01-17']),    })superbowls_history = pd.DataFrame({    'event': 'superbowl',    'ds': pd.to_datetime(['2010-02-07', '2014-02-02']),    })history_events_df = pd.concat((playoffs_history, superbowls_history))

history_events_dfdataframe 的前几行如下。

Untitled Database

为了进行预测,我们还需要提供这些事件的未来日期,用于训练模型。你可以将这些内容包含在之前为拟合模型而创建的同一事件dataframe 中,或者包含在一个新的dataframe 中,如下所示。

playoffs_future = pd.DataFrame({    'event': 'playoff',    'ds': pd.to_datetime(['2016-01-21', '2016-02-07'])})superbowl_future = pd.DataFrame({    'event': 'superbowl',    'ds': pd.to_datetime(['2016-01-23', '2016-02-07'])})future_events_df = pd.concat((playoffs_future, superbowl_future))

一旦事件dataframes 被创建,就应该创建NeuralProphet对象,并添加事件配置。这是用NeuralProphet类的add_events函数完成的。

m = NeuralProphet(        n_forecasts=10,        yearly_seasonality=False,        weekly_seasonality=False,        daily_seasonality=False,    )m = m.add_events(["superbowl", "playoff"])

之后,我们需要将之前创建的dataframes 中的事件数据转换为模型所期望的binary 输入数据,这可以通过调用create_df_withevents函数来完成。这可以通过调用create_df_with_events 函数来完成,将原始的时间序列dataframe 与创建的 history_events_df一起传递。

history_df = m.create_df_with_events(df, history_events_df)

这将以下列格式返回一个dataframe 。

Untitled Database

之后,我们可以通过向fit函数提供创建的history_df,简单地对模型进行如下拟合。

metrics = m.fit(history_df, freq="D")

为了使用拟合模型进行预测,我们首先需要创建带有事件信息的未来dataframe 。这可以通过make_future_dataframe函数来完成,通过传递创建的future_events_df并指定预测范围的所需大小。

future = m.make_future_dataframe(df=history_df, events_df=future_events_df, periods=10)forecast = m.predict(df=future)

预测完成的不同部分如下图所示。所有事件都作为一个部分绘制,即 Additive Events

http://neuralprophet.com/images/plot_comp_events_1.png

plot-comp-1

模型系数如下。

http://neuralprophet.com/images/plot_param_events_1.png

plot-param-1

乘法事件

neural_prophet中事件的默认模式是加法。但是,事件也可以用乘法模式来建模。为此,在向NeuralProphet对象添加事件配置时,我们需要将mode设置为multiplicative,如下所示。

m = m.add_events(["superbowl", "playoff"], mode="multiplicative")

所有其他步骤与additive 模式相同。现在,当画部分图时时,事件组件将以百分比的形式出现。

http://neuralprophet.com/images/plot_comp_events_2.png

plot-comp-2

事件窗口

你也可以为事件提供窗口。这样,你可以通过向NeuralProphet对象的add_events函数提供适当的参数lower_windowupper_window,将一个特定事件周围的日子也视为特殊事件。默认情况下,这些窗口的值是0,这意味着窗口不被考虑。

m = m.add_events(["superbowl", "playoff"], lower_window=-1, upper_window=1)

根据该规范,对于 superbowlplayoff 事件,将对三个特殊事件进行建模,即事件日期、前一天和第二天。这些事件在组件图中可见,如下图所示。

http://neuralprophet.com/images/plot_comp_events_3.png

plot-comp-3

在参数图中,现在会有superbowl_+1superbowl_-1,它们对应superbowl事件之后和之前一天的系数。季后赛事件也有同样的新系数。

http://neuralprophet.com/images/plot_param_events_3.png

plot-param-3

如果你想为各个事件定义不同的窗口,也可以按以下方式进行。

m = m.add_events("superbowl", lower_window=-1, upper_window=1)m = m.add_events("playoff", upper_window=2)

在上面的例子中,对于 playoff 事件,指定的活动日期以及下面两个日期被认为是三个不同的特别活动。

国家法定假期

除了用户指定的事件外,neural_prophet还支持标准的特定国家的假期。如果你想添加特定国家的假期,你只需要调用NeuralProphet对象上的add_country_holidays函数并指定国家。与用户指定的事件类似,特定国家的假期可以是 additivemultiplicative ,并包括窗口。然而,与用户指定事件不同的是,所有国家特定事件的窗口都是一样的。

m = m.add_country_holidays("US", mode="additive", lower_window=-1, upper_window=1)

这个例子将以additive 形式把所有的US 假期添加到模型中。各个事件的系数如下所示:

http://neuralprophet.com/images/plot_param_events_4.png

plot-param-3

正则化事件

事件也可以支持系数的正则化。你可以在将事件配置添加到NeuralProphet对象中时指定正则化,如下图所示。

m = m.add_events(["superbowl", "playoff"], regularization=0.05)

各个事件的正则化也可以是不同的,比如下面。

m = m.add_events("superbowl", regularization=0.05)m = m.add_events("playoff", regularization=0.03)

对于特定国家的节日,也可以像下面这样规定。

m = m.add_country_holidays("US", mode="additive", regularization=0.05)