统计、机器学习和神经预测方法
在本 notebook 中,您将使用交叉验证为 M5 数据集中的每个时间序列选择最佳模型进行预测。
统计、机器学习和神经预测方法 在本教程中,我们将探讨如何利用最合适的模型为 M5 数据集中的每个时间序列进行预测。我们将通过一个重要的技术来实现这一点,即交叉验证。这种方法有助于我们评估模型的预测性能,并选择对每个时间序列产生最佳性能的模型。
M5 数据集包含来自 Walmart 的为期五年的分层销售数据。目标是预测未来 28 天的每日销售额。数据集细分为美国的 50 个州,每个州有 10 家门店。
在时间序列预测和分析领域,更复杂的任务之一是确定最适合特定序列组的模型。通常,这种选择过程很大程度上依赖于直觉,这可能不一定与数据集的实证现实相符。
在本教程中,我们旨在为 M5 基准数据集中的不同序列组提供一种更结构化、数据驱动的模型选择方法。这个数据集在预测领域广为人知,使我们能够展示我们方法的通用性和强大性。
我们将训练来自各种预测范式的模型集合
- 基准模型:这些模型简单但通常非常有效,为预测问题提供初步视角。我们将使用
SeasonalNaive
和HistoricAverage
模型作为此类别的模型。 - 间歇性模型:对于需求零星、非连续的序列,我们将使用
CrostonOptimized
、IMAPA
和ADIDA
等模型。这些模型特别适用于处理零膨胀序列。 - 状态空间模型:这些是使用系统的数学描述进行预测的统计模型。statsforecast 库中的
AutoETS
模型属于此类。
机器学习:利用 LightGBM
、XGBoost
和 LinearRegression
等机器学习模型可能非常有利,因为它们能够发现数据中的复杂模式。我们将为此使用 MLForecast 库。
深度学习:深度学习模型,如 Transformers (AutoTFT
) 和神经网络 (AutoNHITS
),使我们能够处理时间序列数据中复杂的非线性依赖关系。我们将为此使用 NeuralForecast 库。
使用 Nixtla 库套件,我们将能够用数据驱动我们的模型选择过程,确保我们为数据集中的特定序列组使用最合适的模型。
概要
-
读取数据:在初始步骤中,我们将数据集加载到内存中,以便进行后续分析和预测。在此阶段了解数据集的结构和细微之处非常重要。
-
使用统计和深度学习方法进行预测:我们应用从基本统计技术到高级深度学习模型的各种预测方法。目标是根据我们的数据集生成未来 28 天的预测。
-
在不同窗口上评估模型性能:我们在不同的窗口上评估模型的性能。
-
为一组序列选择最佳模型:利用性能评估,我们为每个序列组确定最佳模型。此步骤确保所选模型针对每个组的独特特征进行定制。
-
筛选最佳可能预测:最后,我们筛选所选模型生成的预测,以获得最有希望的预测。这是我们的最终输出,代表了根据我们的模型对每个序列的最佳可能预测。
警告
本教程最初使用
c5d.24xlarge
EC2 实例执行。
安装库
下载并准备数据
该示例使用 M5 数据集。它包含 30,490
条底层时间序列。
为了简单起见,我们只保留一个类别
基本绘图
使用 StatsForecast
类中的 plot 方法绘制一些序列。此方法会打印数据集中的 8 条随机序列,对于基本 EDA 很有用。
使用 Stats、Ml 和 Neural 方法创建预测。
StatsForecast
StatsForecast
是一个全面的库,提供了一套流行的单变量时间序列预测模型,所有模型都注重高性能和可扩展性。
以下是使 StatsForecast 成为时间序列预测强大工具的原因
-
本地模型的集合:StatsForecast 提供了一个多样化的本地模型集合,这些模型可以单独应用于每个时间序列,使我们能够捕获每个序列中的独特模式。
-
简单易用:使用 StatsForecast,训练、预测和回测多个模型变得非常简单,只需几行代码即可完成。这种简单性使其成为初学者和经验丰富的从业者的便捷工具。
-
速度优化:StatsForecast 中的模型实现针对速度进行了优化,确保高效执行大规模计算,从而减少模型训练和预测的总时间。
-
水平可扩展性:StatsForecast 的一个显著特点是其水平扩展能力。它与 Spark、Dask 和 Ray 等分布式计算框架兼容。此功能使其能够通过将计算分布到集群中的多个节点来处理大型数据集,使其成为大规模时间序列预测任务的首选解决方案。
StatsForecast
接收一个模型列表,用于拟合每个时间序列。由于我们处理的是每日数据,使用 7 作为季节性周期将非常有益。
我们通过使用以下参数实例化新的 StatsForecast 对象来拟合模型
models
:模型列表。从模型中选择您想要的模型并导入它们。freq
:指示数据频率的字符串。(参见 panda 可用的频率。)n_jobs
:int,并行处理中使用的作业数,使用 -1 表示所有核心。fallback_model
:如果某个模型失败,则使用的备用模型。任何设置都将传递给构造函数。然后您调用其 fit 方法并传入历史数据框。
forecast 方法接受两个参数:预测未来 h(预测期)和 level。
h
(int):表示未来 h 步的预测。在这种情况下,提前 12 个月。level
(list of floats):此可选参数用于概率预测。设置预测区间的 level(或置信百分位数)。例如,level=[90] 意味着模型期望真实值有 90% 的时间落在该区间内。
这里的 forecast 对象是一个新的数据框,其中包含一列模型名称和 y hat 值,以及不确定性区间的列。
此代码块计时 StatsForecast 类的预测函数运行所需的时间,该函数预测未来 28 天(h=28)。level 设置为 [90],意味着它将计算 90% 的预测区间。时间以分钟为单位计算并在最后打印出来。
ds | SeasonalNaive | SeasonalNaive-lo-90 | SeasonalNaive-hi-90 | Naive | Naive-lo-90 | Naive-hi-90 | HistoricAverage | HistoricAverage-lo-90 | HistoricAverage-hi-90 | CrostonOptimized | ADIDA | IMAPA | AutoETS | AutoETS-lo-90 | AutoETS-hi-90 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
unique_id | ||||||||||||||||
FOODS_3_001_CA_1 | 2016-05-23 | 1.0 | -2.847174 | 4.847174 | 2.0 | 0.098363 | 3.901637 | 0.448738 | -1.009579 | 1.907055 | 0.345192 | 0.345477 | 0.347249 | 0.381414 | -1.028122 | 1.790950 |
FOODS_3_001_CA_1 | 2016-05-24 | 0.0 | -3.847174 | 3.847174 | 2.0 | -0.689321 | 4.689321 | 0.448738 | -1.009579 | 1.907055 | 0.345192 | 0.345477 | 0.347249 | 0.286933 | -1.124136 | 1.698003 |
FOODS_3_001_CA_1 | 2016-05-25 | 0.0 | -3.847174 | 3.847174 | 2.0 | -1.293732 | 5.293732 | 0.448738 | -1.009579 | 1.907055 | 0.345192 | 0.345477 | 0.347249 | 0.334987 | -1.077614 | 1.747588 |
FOODS_3_001_CA_1 | 2016-05-26 | 1.0 | -2.847174 | 4.847174 | 2.0 | -1.803274 | 5.803274 | 0.448738 | -1.009579 | 1.907055 | 0.345192 | 0.345477 | 0.347249 | 0.186851 | -1.227280 | 1.600982 |
FOODS_3_001_CA_1 | 2016-05-27 | 0.0 | -3.847174 | 3.847174 | 2.0 | -2.252190 | 6.252190 | 0.448738 | -1.009579 | 1.907055 | 0.345192 | 0.345477 | 0.347249 | 0.308112 | -1.107548 | 1.723771 |
MLForecast
MLForecast
是一个强大的库,为时间序列预测提供自动化特征创建,促进全局机器学习模型的使用。它旨在提供高性能和可扩展性。
MLForecast 的主要特点包括
-
支持 sklearn 模型:MLForecast 与遵循 scikit-learn API 的模型兼容。这使其具有高度灵活性,并允许其与各种机器学习算法无缝集成。
-
简单易用:使用 MLForecast,训练、预测和回测模型的任务只需几行代码即可完成。这种精简的简单性使其对所有专业水平的从业者都非常友好。
-
速度优化:MLForecast 旨在快速执行任务,这在处理大型数据集和复杂模型时至关重要。
-
水平可扩展性:MLForecast 能够使用 Spark、Dask 和 Ray 等分布式计算框架进行水平扩展。此功能使其能够通过将计算分布到集群中的多个节点来高效处理海量数据集,非常适合大规模时间序列预测任务。
要使用 MLForecast
进行时间序列预测,我们需要实例化一个新的 MLForecast
对象,并为其提供各种参数,以便根据我们的特定需求定制建模过程
-
models
:此参数接受您希望用于预测的机器学习模型列表。您可以从 scikit-learn、lightgbm 和 xgboost 中导入您偏爱的模型。 -
freq
:这是一个指示您的数据频率(小时、日、周等)的字符串。此字符串的特定格式应与 pandas 识别的频率字符串对齐。 -
target_transforms
:这些是在模型训练之前和模型预测之后应用于目标变量的转换。这在处理可能受益于转换的数据时很有用,例如对高度偏斜的数据进行对数转换。 -
lags
:此参数接受要用作回归量的特定滞后值。滞后表示在为模型创建特征时,您希望回溯多少时间步。例如,如果您想使用前一天的数据作为预测今天值的特征,您将指定滞后为 1。 -
lags_transforms
:这些是针对每个滞后的特定转换。这使您可以对滞后特征应用转换。 -
date_features
:此参数指定要用作回归量的日期相关特征。例如,您可能希望在模型中包含星期几或月份作为特征。 -
num_threads
:此参数控制用于并行化特征创建的线程数,有助于在处理大型数据集时加快此过程。
所有这些设置都传递给 MLForecast
构造函数。一旦 MLForecast
对象使用这些设置初始化,我们调用其 fit
方法并将历史数据框作为参数传递。fit
方法在提供的历史数据上训练模型,为将来的预测任务做好准备。
只需调用 fit
方法训练选定的模型。在这种情况下,我们正在生成共形预测区间。
之后,只需调用 predict
生成预测。
unique_id | ds | LGBMRegressor | XGBRegressor | LinearRegression | LGBMRegressor-lo-90 | LGBMRegressor-hi-90 | XGBRegressor-lo-90 | XGBRegressor-hi-90 | LinearRegression-lo-90 | LinearRegression-hi-90 | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | FOODS_3_001_CA_1 | 2016-05-23 | 0.549520 | 0.598431 | 0.359638 | -0.213915 | 1.312955 | -0.020050 | 1.216912 | 0.030000 | 0.689277 |
1 | FOODS_3_001_CA_1 | 2016-05-24 | 0.553196 | 0.337268 | 0.100361 | -0.251383 | 1.357775 | -0.201449 | 0.875985 | -0.216195 | 0.416917 |
2 | FOODS_3_001_CA_1 | 2016-05-25 | 0.599668 | 0.349604 | 0.175840 | -0.203974 | 1.403309 | -0.284416 | 0.983624 | -0.150593 | 0.502273 |
3 | FOODS_3_001_CA_1 | 2016-05-26 | 0.638097 | 0.322144 | 0.156460 | 0.118688 | 1.157506 | -0.085872 | 0.730160 | -0.273851 | 0.586771 |
4 | FOODS_3_001_CA_1 | 2016-05-27 | 0.763305 | 0.300362 | 0.328194 | -0.313091 | 1.839701 | -0.296636 | 0.897360 | -0.657089 | 1.313476 |
NeuralForecast
NeuralForecast
是一个强大的神经预测模型集合,注重可用性和性能。它包含各种模型架构,从经典网络如多层感知机 (MLP) 和循环神经网络 (RNN),到 N-BEATS、N-HITS、时态融合 Transformer (TFT) 等新颖贡献,应有尽有。
NeuralForecast
的主要特点包括
- 广泛的全局模型集合。开箱即用地实现了 MLP、LSTM、RNN、TCN、DilatedRNN、NBEATS、NHITS、ESRNN、TFT、Informer、PatchTST 和 HINT。
- 一个简单直观的界面,只需几行代码即可进行各种模型的训练、预测和回测。
- 支持 GPU 加速以提高计算速度。
这台机器没有 GPU,但 Google Colabs 提供一些免费的。
使用 Colab 的 GPU 训练 NeuralForecast。
unique_id | ds | AutoNHITS | AutoNHITS-lo-90 | AutoNHITS-hi-90 | AutoTFT | AutoTFT-lo-90 | AutoTFT-hi-90 | |
---|---|---|---|---|---|---|---|---|
0 | FOODS_3_001_CA_1 | 2016-05-23 | 0.0 | 0.0 | 2.0 | 0.0 | 0.0 | 2.0 |
1 | FOODS_3_001_CA_1 | 2016-05-24 | 0.0 | 0.0 | 2.0 | 0.0 | 0.0 | 2.0 |
2 | FOODS_3_001_CA_1 | 2016-05-25 | 0.0 | 0.0 | 2.0 | 0.0 | 0.0 | 1.0 |
3 | FOODS_3_001_CA_1 | 2016-05-26 | 0.0 | 0.0 | 2.0 | 0.0 | 0.0 | 2.0 |
4 | FOODS_3_001_CA_1 | 2016-05-27 | 0.0 | 0.0 | 2.0 | 0.0 | 0.0 | 2.0 |
unique_id | ds | SeasonalNaive | SeasonalNaive-lo-90 | SeasonalNaive-hi-90 | Naive | Naive-lo-90 | Naive-hi-90 | HistoricAverage | HistoricAverage-lo-90 | … | AutoTFT-hi-90 | LGBMRegressor | XGBRegressor | LinearRegression | LGBMRegressor-lo-90 | LGBMRegressor-hi-90 | XGBRegressor-lo-90 | XGBRegressor-hi-90 | LinearRegression-lo-90 | LinearRegression-hi-90 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | FOODS_3_001_CA_1 | 2016-05-23 | 1.0 | -2.847174 | 4.847174 | 2.0 | 0.098363 | 3.901637 | 0.448738 | -1.009579 | … | 2.0 | 0.549520 | 0.598431 | 0.359638 | -0.213915 | 1.312955 | -0.020050 | 1.216912 | 0.030000 | 0.689277 |
1 | FOODS_3_001_CA_1 | 2016-05-24 | 0.0 | -3.847174 | 3.847174 | 2.0 | -0.689321 | 4.689321 | 0.448738 | -1.009579 | … | 2.0 | 0.553196 | 0.337268 | 0.100361 | -0.251383 | 1.357775 | -0.201449 | 0.875985 | -0.216195 | 0.416917 |
2 | FOODS_3_001_CA_1 | 2016-05-25 | 0.0 | -3.847174 | 3.847174 | 2.0 | -1.293732 | 5.293732 | 0.448738 | -1.009579 | … | 1.0 | 0.599668 | 0.349604 | 0.175840 | -0.203974 | 1.403309 | -0.284416 | 0.983624 | -0.150593 | 0.502273 |
3 | FOODS_3_001_CA_1 | 2016-05-26 | 1.0 | -2.847174 | 4.847174 | 2.0 | -1.803274 | 5.803274 | 0.448738 | -1.009579 | … | 2.0 | 0.638097 | 0.322144 | 0.156460 | 0.118688 | 1.157506 | -0.085872 | 0.730160 | -0.273851 | 0.586771 |
4 | FOODS_3_001_CA_1 | 2016-05-27 | 0.0 | -3.847174 | 3.847174 | 2.0 | -2.252190 | 6.252190 | 0.448738 | -1.009579 | … | 2.0 | 0.763305 | 0.300362 | 0.328194 | -0.313091 | 1.839701 | -0.296636 | 0.897360 | -0.657089 | 1.313476 |
预测图
使用 plot 函数探索模型和 ID
验证模型性能
这三个库——StatsForecast
、MLForecast
和 NeuralForecast
——提供了专门为时间序列设计的开箱即用的交叉验证功能。这使我们能够使用历史数据评估模型的性能,以获得对每个模型在新数据上表现如何的无偏评估。
StatsForecast 中的交叉验证
StatsForecast
类中的 cross_validation
方法接受以下参数
df
:表示训练数据的 DataFrame。h
(int):预测期,表示我们希望预测的未来步数。例如,如果我们预测小时数据,h=24
将表示 24 小时预测。step_size
(int):每个交叉验证窗口之间的步长。此参数确定我们希望多久运行一次预测过程。n_windows
(int):用于交叉验证的窗口数量。此参数定义了我们希望评估过去多少个预测过程。
这些参数允许我们控制交叉验证过程的范围和粒度。通过调整这些设置,我们可以平衡计算成本和交叉验证的彻底性。
crossvaldation_df 对象是一个新的数据框,包含以下列
unique_id
索引:(如果您不喜欢使用索引,只需运行 forecasts_cv_df.resetindex())ds
:日期戳或时间索引cutoff
:n_windows 的最后一个日期戳或时间索引。如果 n_windows=1,则只有一个唯一的 cutoff 值;如果 n_windows=2,则有两个唯一的 cutoff 值。y
:真实值"model"
:包含模型名称和拟合值的列。
ds | cutoff | y | SeasonalNaive | SeasonalNaive-lo-90 | SeasonalNaive-hi-90 | Naive | Naive-lo-90 | Naive-hi-90 | HistoricAverage | HistoricAverage-lo-90 | HistoricAverage-hi-90 | CrostonOptimized | ADIDA | IMAPA | AutoETS | AutoETS-lo-90 | AutoETS-hi-90 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
unique_id | ||||||||||||||||||
FOODS_3_001_CA_1 | 2016-02-29 | 2016-02-28 | 0.0 | 2.0 | -1.878885 | 5.878885 | 0.0 | -1.917011 | 1.917011 | 0.449111 | -1.021813 | 1.920036 | 0.618472 | 0.618375 | 0.617998 | 0.655286 | -0.765731 | 2.076302 |
FOODS_3_001_CA_1 | 2016-03-01 | 2016-02-28 | 1.0 | 0.0 | -3.878885 | 3.878885 | 0.0 | -2.711064 | 2.711064 | 0.449111 | -1.021813 | 1.920036 | 0.618472 | 0.618375 | 0.617998 | 0.568595 | -0.853966 | 1.991155 |
FOODS_3_001_CA_1 | 2016-03-02 | 2016-02-28 | 1.0 | 0.0 | -3.878885 | 3.878885 | 0.0 | -3.320361 | 3.320361 | 0.449111 | -1.021813 | 1.920036 | 0.618472 | 0.618375 | 0.617998 | 0.618805 | -0.805298 | 2.042908 |
FOODS_3_001_CA_1 | 2016-03-03 | 2016-02-28 | 0.0 | 1.0 | -2.878885 | 4.878885 | 0.0 | -3.834023 | 3.834023 | 0.449111 | -1.021813 | 1.920036 | 0.618472 | 0.618375 | 0.617998 | 0.455891 | -0.969753 | 1.881534 |
FOODS_3_001_CA_1 | 2016-03-04 | 2016-02-28 | 0.0 | 1.0 | -2.878885 | 4.878885 | 0.0 | -4.286568 | 4.286568 | 0.449111 | -1.021813 | 1.920036 | 0.618472 | 0.618375 | 0.617998 | 0.591197 | -0.835987 | 2.018380 |
MLForecast
MLForecast
类中的 cross_validation
方法接受以下参数。
data
:训练数据框window_size
(int):表示正在预测的未来 h 步。在这种情况下,提前 24 小时。step_size
(int):每个窗口之间的步长。换句话说:您希望多久运行一次预测过程。n_windows
(int):用于交叉验证的窗口数量。换句话说:您希望评估过去多少个预测过程。prediction_intervals
:用于计算共形区间的类。
crossvaldation_df 对象是一个新的数据框,包含以下列
unique_id
索引:(如果您不喜欢使用索引,只需运行 forecasts_cv_df.resetindex())ds
:日期戳或时间索引cutoff
:n_windows 的最后一个日期戳或时间索引。如果 n_windows=1,则只有一个唯一的 cutoff 值;如果 n_windows=2,则有两个唯一的 cutoff 值。y
:真实值"model"
:包含模型名称和拟合值的列。
unique_id | ds | cutoff | y | LGBMRegressor | XGBRegressor | LinearRegression | |
---|---|---|---|---|---|---|---|
0 | FOODS_3_001_CA_1 | 2016-02-29 | 2016-02-28 | 0.0 | 0.435674 | 0.556261 | -0.312492 |
1 | FOODS_3_001_CA_1 | 2016-03-01 | 2016-02-28 | 1.0 | 0.639676 | 0.625806 | -0.041924 |
2 | FOODS_3_001_CA_1 | 2016-03-02 | 2016-02-28 | 1.0 | 0.792989 | 0.659650 | 0.263699 |
3 | FOODS_3_001_CA_1 | 2016-03-03 | 2016-02-28 | 0.0 | 0.806868 | 0.535121 | 0.482491 |
4 | FOODS_3_001_CA_1 | 2016-03-04 | 2016-02-28 | 0.0 | 0.829106 | 0.313353 | 0.677326 |
NeuralForecast
这台机器没有 GPU,但 Google Colabs 提供一些免费的。
使用 Colab 的 GPU 训练 NeuralForecast。
unique_id | ds | cutoff | AutoNHITS | AutoNHITS-lo-90 | AutoNHITS-hi-90 | AutoTFT | AutoTFT-lo-90 | AutoTFT-hi-90 | y | |
---|---|---|---|---|---|---|---|---|---|---|
0 | FOODS_3_001_CA_1 | 2016-02-29 | 2016-02-28 | 0.0 | 0.0 | 2.0 | 1.0 | 0.0 | 2.0 | 0.0 |
1 | FOODS_3_001_CA_1 | 2016-03-01 | 2016-02-28 | 0.0 | 0.0 | 2.0 | 1.0 | 0.0 | 2.0 | 1.0 |
2 | FOODS_3_001_CA_1 | 2016-03-02 | 2016-02-28 | 0.0 | 0.0 | 2.0 | 1.0 | 0.0 | 2.0 | 1.0 |
3 | FOODS_3_001_CA_1 | 2016-03-03 | 2016-02-28 | 0.0 | 0.0 | 2.0 | 1.0 | 0.0 | 2.0 | 0.0 |
4 | FOODS_3_001_CA_1 | 2016-03-04 | 2016-02-28 | 0.0 | 0.0 | 2.0 | 1.0 | 0.0 | 2.0 | 0.0 |
合并交叉验证预测
绘图 CV
总需求
按序列和 CV 窗口进行评估
在本节中,我们将评估每个模型在每个时间序列和每个交叉验证窗口上的性能。由于组合很多,我们将使用 dask
进行并行评估。并行化将使用 fugue
完成。
evaluate
函数接收时间序列和窗口的唯一组合,并计算 df
中每个模型的不同 metrics
。
让我们创建一个 dask
客户端。
transform
函数接收 evaluate
函数,并使用我们之前创建的 dask
客户端将其应用于时间序列 (unique_id
) 和交叉验证窗口 (cutoff
) 的每个组合。
unique_id | cutoff | metric | SeasonalNaive | Naive | HistoricAverage | CrostonOptimized | ADIDA | IMAPA | AutoETS | AutoNHITS | AutoTFT | LGBMRegressor | XGBRegressor | LinearRegression | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | FOODS_3_003_WI_3 | 2016-02-28 | mse | 1.142857 | 1.142857 | 0.816646 | 0.816471 | 1.142857 | 1.142857 | 1.142857 | 1.142857 | 1.142857 | 0.832010 | 1.020361 | 0.887121 |
1 | FOODS_3_003_WI_3 | 2016-02-28 | mae | 0.571429 | 0.571429 | 0.729592 | 0.731261 | 0.571429 | 0.571429 | 0.571429 | 0.571429 | 0.571429 | 0.772788 | 0.619949 | 0.685413 |
2 | FOODS_3_003_WI_3 | 2016-02-28 | smape | 71.428574 | 71.428574 | 158.813507 | 158.516235 | 200.000000 | 200.000000 | 200.000000 | 71.428574 | 71.428574 | 145.901947 | 188.159164 | 178.883743 |
3 | FOODS_3_013_CA_3 | 2016-04-24 | mse | 4.000000 | 6.214286 | 2.406764 | 3.561202 | 2.267853 | 2.267600 | 2.268677 | 2.750000 | 2.125000 | 2.160508 | 2.370228 | 2.289606 |
4 | FOODS_3_013_CA_3 | 2016-04-24 | mae | 1.500000 | 2.142857 | 1.214286 | 1.340446 | 1.214286 | 1.214286 | 1.214286 | 1.107143 | 1.142857 | 1.140084 | 1.157548 | 1.148813 |
SeasonalNaive | Naive | HistoricAverage | CrostonOptimized | ADIDA | IMAPA | AutoETS | AutoNHITS | AutoTFT | LGBMRegressor | XGBRegressor | LinearRegression | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
cutoff | metric | ||||||||||||
2016-02-28 | mae | 1.744289 | 2.040496 | 1.730704 | 1.633017 | 1.527965 | 1.528772 | 1.497553 | 1.434938 | 1.485419 | 1.688403 | 1.514102 | 1.576320 |
mse | 14.510710 | 19.080585 | 12.858994 | 11.785032 | 11.114497 | 11.100909 | 10.347847 | 10.010982 | 10.964664 | 10.436206 | 10.968788 | 10.792831 | |
smape | 85.202042 | 87.719086 | 125.418488 | 124.749908 | 127.591858 | 127.704102 | 127.790672 | 79.132614 | 80.983368 | 118.489983 | 140.420578 | 127.043137 | |
2016-03-27 | mae | 1.795973 | 2.106449 | 1.754029 | 1.662087 | 1.570701 | 1.572741 | 1.535301 | 1.432412 | 1.502393 | 1.712493 | 1.600193 | 1.601612 |
mse | 14.810259 | 26.044472 | 12.804104 | 12.020620 | 12.083861 | 12.120033 | 11.315013 | 9.445867 | 10.762877 | 10.723589 | 12.924312 | 10.943772 | |
smape | 87.407471 | 89.453247 | 123.587196 | 123.460030 | 123.428459 | 123.538521 | 123.612991 | 79.926781 | 82.013168 | 116.089699 | 138.885941 | 127.304871 | |
2016-04-24 | mae | 1.785983 | 1.990774 | 1.762506 | 1.609268 | 1.527627 | 1.529721 | 1.501820 | 1.447401 | 1.505127 | 1.692946 | 1.541845 | 1.590985 |
mse | 13.476350 | 16.234917 | 13.151311 | 10.647048 | 10.072225 | 10.062395 | 9.393439 | 9.363891 | 10.436214 | 10.347073 | 10.774202 | 10.608137 | |
smape | 89.238815 | 90.685867 | 121.124947 | 119.721245 | 120.325401 | 120.345284 | 120.649582 | 81.402748 | 83.614029 | 113.334198 | 136.755234 | 124.618622 |
先前实验中显示的结果。
model | MSE |
---|---|
MQCNN | 10.09 |
DeepAR-student_t | 10.11 |
DeepAR-lognormal | 30.20 |
DeepAR | 9.13 |
NPTS | 11.53 |
前 3 个模型:DeepAR、AutoNHITS、AutoETS。
误差分布
SMAPE
为序列组选择模型
特征
- 包含所有不同模型预测的统一数据框
- 简易集成
- 例如,平均预测
- 或 MinMax(选择即集成)