时间序列预测的虚拟/基线模型

机器算法验证 时间序列 预测 Python scikit-学习 统计模型
2022-03-07 11:40:04

我正在评估 Python 中的时间序列预测模型,更具体地说是 statsmodels、scikit-learn 和 tensorflow。我认为首先将模型性能与一组“琐碎”模型进行比较是有意义的。

通常使用的此类基线模型的示例是什么?有现成的实现吗?(例如,有没有类似于scikit-learn DummyClassifier的东西来进行时间序列预测?)

2个回答

我认为首先将模型性能与一组“琐碎”模型进行比较是有意义的。

这是不可言喻的真实。这就是我赞成你的问题的地方。

Athanasopoulos & Hyndman的优秀免费在线书籍《预测:原则与实践》(第 2 版)提供了许多非常简单的方法,这些方法通常令人惊讶地难以击败

  • 整体历史平均水平
  • 随机游走或朴素预测,即最后一次观察
  • 季节性随机游走或季节性朴素或朴素2 预测,即从一个季节性周期回溯的观察
  • 带有漂移项的随机游走,即从最后一次观察中推断出第一次和最后一次观察之间的总体平均趋势

这些和类似的方法也被用作学术预测研究的基准。如果您的新方法不能始终超过历史平均水平,那么它可能不是那么热门。

我不知道任何 Python 实现,但这不应该太难。

补充 Stephan Kolassa 之前的回答:我们正在开发一个用于预测的 Python 工具箱,并为此目的实现了一个“naïve Forecaster”类。因此,使用sktime,您可以例如运行:

import numpy as np
from sktime.datasets import load_airline
from sktime.forecasting.model_selection import temporal_train_test_split
from sktime.performance_metrics.forecasting import smape_loss
from sktime.forecasting.naive import NaiveForecaster

y = load_airline()  # time series data
y_train, y_test = temporal_train_test_split(y)  
fh = np.arange(1, len(y_test) + 1)  # forecasting horizon
forecaster = NaiveForecaster(strategy="last")  # random walk 
forecaster.fit(y_train)
y_pred = forecaster.predict(fh)
print(smape_loss(y_test, y_pred))