本页详细介绍了如何使用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 pd
df = pd.read_csv('../example_data/example_wp_log_peyton_manning.csv')
数据的格式如下。
ds | y |
---|---|
2007-12-10 | 9.59 |
2007-12-11 | 8.52 |
2007-12-12 | 8.18 |
2007-12-13 | 8.07 |
2007-12-14 | 7.89 |
通过创建一个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)
这是一个简单的模型,默认估计了趋势、周季节性和年季节性。你也可以分别看下面的各个组成部分。
fig_comp = m.plot_components(forecast)
各个系数值也可以绘制如下图,以获得进一步的了解。
fig_param = m.plot_parameters()
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 training
m = NeuralProphet()
metrics = m.fit(df, validate_each_epoch=True, valid_p=0.2)
结果的差异性来自SGD在不同的运行中找到不同的optima。大部分的随机性来自于权重的随机初始化、不同的学习率和dataloader的不同shuffling 。我们可以通过设置随机数发生器的种子(seed)来控制它。
from neuralprophet import set_random_seed
set_random_seed(0)
这应该会导致每次运行模型时都有相同的结果。请注意,在拟合模型之前,每次都必须明确地将随机种子设置为相同的随机数。