README

快速开始

http://neuralprophet.com/

快速入门指南

本页详细介绍了如何使用NeuralProphet用简单的方法建立一个简单的模型。

安装

下载代码仓库后(通过git clone),切换到仓库目录下(cd neural_prophet),用pip install .将neuralprophet作为python包安装。

注意:如果你打算在Jupyter notebook上使用这个包,建议使用pip install .[live]安装 “live”包版本。这将允许你在 train函数中启用 plot_live_loss ,以获得train (和validation))损失的实时图。

导入包

现在你可以通过以下代码中使用NeuralProphet。

from neuralprophet import NeuralProphet

导入数据

neural_prophet包所期望的输入数据格式与原始prophet相同。它应该有两列,ds有时间戳,y列包含时间序列的观测值。在整个文档中,我们将使用佩顿-曼宁维基百科页面的每日页面浏览日志的时间序列数据。这些数据可以通过以下方式导入。

import pandas as pddf = pd.read_csv('../example_data/example_wp_log_peyton_manning.csv')

数据的格式如下。

Untitled Database

简单模型

通过创建一个NeuralProphet类的对象,并调用fit函数,就可以为这个数据集拟合一个neural_prophet的简单模型,如下所示。这样就可以用模型中的默认设置来拟合模型。关于这些默认设置的更多细节,请参考Hyperparameter Selction

m = NeuralProphet()metrics = m.fit(df, freq="D")

模型被拟合后,我们就可以使用拟合的模型进行预测。为此,我们首先需要创建一个未来的dataframe ,包括我们需要预测的未来的时间步骤。NeuralProphet为此提供了辅助函数make_future_dataframe。注意,这里的数据频率是全局设置的。有效的时序频率设置是pandas timeseries offset aliases

future = m.make_future_dataframe(df, periods=365)forecast = m.predict(future)

画图

可视化通过模型得到的预测。

forecasts_plot = m.plot(forecast)

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

plot-forecasts-1

这是一个简单的模型,默认估计了趋势、周季节性和年季节性。你也可以分别看下面的各个组成部分。

fig_comp = m.plot_components(forecast)

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

plot-comp-1

各个系数值也可以绘制如下图,以获得进一步的了解。

fig_param = m.plot_parameters()

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

plot-param-1

验证

NeuralProphet的模型验证可以通过两种方式进行。用户可以在参数valida_p中指定用于验证的数据分数,像下面这样在模型拟合后手动分割数据集进行验证。这个验证集从系列末尾开始保留。

m = NeuralProphet()df_train, df_val = m.split_df(df, valid_p=0.2)

现在你可以分别查看训练和验证指标,如下图所示。

train_metrics = m.fit(df_train)val_metrics = m.test(df_val)

在模型拟合过程中,你也可以对每个epoch进行验证。通过在fit函数调用中设置validate_each_epoch参数来完成。这可以让你在模型训练时查看验证指标。

# or evaluate while trainingm = NeuralProphet()metrics = m.fit(df, validate_each_epoch=True, valid_p=0.2)

可重复性

结果的差异性来自SGD在不同的运行中找到不同的optima。大部分的随机性来自于权重的随机初始化、不同的学习率和dataloader的不同shuffling 。我们可以通过设置随机数发生器的种子(seed)来控制它。

from neuralprophet import set_random_seedset_random_seed(0)

这应该会导致每次运行模型时都有相同的结果。请注意,在拟合模型之前,每次都必须明确地将随机种子设置为相同的随机数。