README

快速开始

模型概述

相较于prophet的改进

趋势项

季节性

自回归

滞后回归项

事件

未来回归项

超参数选取

http://neuralprophet.com/hyperparameter-selection/

NeuralProphet有一些超参数需要用户指定。如果没有指定,将使用这些超参数的默认值。如下。

Untitled Database

预测范围

n_forecasts是预测范围的大小。默认值为1,表示模型预测未来一步。

自回归

n_lags定义AR-Net是否启用(如果n_lags>0)。如果可能的话,通常建议n_lags'的值大于``n_forecasts。FFNNs最好至少遇到过去的n_forecast长度,以便预测未来的n_forecast。因此,n_lags决定应该考虑到过去多远的自动递减依赖性。这可以是根据专业知识或经验分析选择的一个值。

模型训练相关参数

NeuralProphet采用随机梯度下降法进行拟合–更准确地说,是采用AdamW优化器和One-Cycle策略。如果没有指定参数learning_rate,则进行学习率范围测试以确定最佳学习率。epochsloss_func是另外两个直接影响模型训练过程的参数。如果没有定义,这两个参数会根据数据集大小自动设置。它们的设置方式是将训练步骤总数控制在1000到4000左右。

如果看起来模型对训练数据过度拟合(实时损失图在此很有用),可以减少 epochslearning_rate,并有可能增加 batch_size。如果是低拟合,可以增加epochslearning_rate 的数量,并有可能减少batch_size

默认的损失函数是 “Huber”损失,该函数被认为对离群值具有鲁棒性。但是,您可以自由选择标准的 “MSE”或任何其他PyTorch torch.nn.modules.loss损失函数。

增加模型的深度

num_hidden_layers定义了整个模型中使用的FFNN的隐藏层数。这包括AR-Net和滞后回归项的FNNN。默认值为0,意味着FFNNs将只有一个大小为n_forecasts的最后一层。增加更多的层数会导致复杂度增加,也会因此增加计算时间。然而,增加的隐藏层数可以帮助建立更复杂的关系,特别是对滞后回归者有用。为了在计算复杂性和提高精度之间进行权衡,建议将 num_hidden_layers 设置在1-2之间。然而,在大多数情况下,完全没有隐藏层可以获得足够好的性能。

d_hidden是隐藏层的单位数。只有在指定了 “num_hidden_layers”的情况下才会考虑,否则忽略。如果没有指定,d_hidden的默认值是(n_lags + n_forecasts)。如果手动调整,建议的做法是在n_lagsn_forecasts之间为d_hidden设置一个值。还需要注意的是,在当前的实现中,NeuralProphet为所有的隐藏层设置了相同的d_hidden

数据预处理相关参数

normalize_y 是关于在建模前对时间序列进行缩放。默认情况下,NeuralProphet会对时间序列进行(soft)最小-最大的归一化。如果序列值波动很大,归一化可以帮助模型训练过程。然而,如果序列没有这样的缩放,用户可以关闭这个功能或选择其他归一化。

impute_missing是关于在一个给定的序列中推算缺失值。与Prophet类似,NeuralProphet也可以在没有AR-Net的回归模式下处理缺失值。然而,当需要捕获自相关时,有必要对缺失值进行估算,因为这时建模就变成了一个有序的问题。在大多数情况下,让这个参数处于默认状态可以完美地完成工作。

趋势相关参数

你可以在[example_notebooks/trend_peyton_manning.ipynb](<https://github.com/ourownstory/neural_prophet/blob/master/example_notebooks/trend_peyton_manning.ipynb>)找到一个实践的例子。

如果趋势的灵活性主要由n_changepoints控制,它设定了趋势率可能变化的点数。此外,可以通过将trend_reg设置为大于零的值来规范趋势率的变化。

这是一个有用的功能,可以用来自动检测相关的变化点。

changepoints_range控制用于拟合趋势的训练数据的范围。默认值为0.8,意味着在最后20%的训练数据中不设置变化点。

如果提供了一个changepoints 列表,n_changepointschangepoints_range 将被忽略。这个列表用于设置允许趋势率变化的日期。

n_changepoints是沿系列选择的趋势变化点的数量。默认值为5。

季节性相关参数

yearly_seasonalityweekly_seasonalitydaily_seasonality 是关于要模拟的季节成分。例如,如果你使用温度数据,你可能可以选择每天和每年。例如,使用使用地铁的乘客数量更可能有一个每周的季节性。将这些季节性设置在默认的auto模式下,可以让NeuralProphet根据可用数据的多少来决定包括哪些季节性。例如,如果可用数据少于两年,则不会考虑年季节性。同样,如果可用数据少于两周,每周的季节性将不被考虑等等。然而,如果用户确定系列不包括年、周或日季节性,因此模型不应该被这些成分扭曲,他们可以通过设置相应的成分为False来明确关闭它们。除此之外,参数 yearly_seasonalityweekly_seasonalitydaily_seasonality 也可以设置为各自季节性的傅里叶项数。默认值为年6,周4和日6。用户可以将其设置为任何他们想要的数字。如果每年的项数为6,那么实际上每年季节性的傅里叶项总数为12(6*2),以适应正弦和余弦项。增加Fourier项的数量可以使模型能够捕捉相当复杂的季节性模式。然而,与 num_hidden_layers类似,这也会增加模型的复杂性。用户可以通过观察最终的分量图来了解最佳的Fourier项数。默认的seasonality_mode是加法。这意味着在季节性方面,序列中没有异方差。然而,如果序列包含明显的方差,季节性波动与趋势成正比,则可以将seasonality_mode 设置为乘法。

正则化相关参数

NeuralProphet还包含一些正则化参数,用于控制模型系数,并将稀疏性引入模型。这也有助于避免模型对训练数据的过度拟合。对于seasonality_reg,在0.1-1范围内的小值允许拟合大的季节性波动,而在1-100范围内的大值则会对傅里叶系数施加较重的惩罚,从而抑制季节性。对于 “ar_sparsity”,预计值在0-1的范围内,0会引起完全的稀疏性,而1则完全不需要正则化。ar_sparsityn_lags可以用于数据探索和特征选择。由于AR-Net的可扩展性,你可以使用更多的滞后数,并利用稀疏性来识别过去时间步长对预测精度的重要影响。对于 future_regressor_regularizationevent_regularization 和 country_holiday_regularization,其值可以设置在0-1之间,与 ar_sparsity的概念相同。可以根据各个回归因子和事件需要更多的抑制,设置不同的正则化参数。