我有高频数据(以秒分隔的观察结果),我想使用 ARIMA 模型分析并最终预测短期周期(提前 1/5/10/15/60 分钟)。我的整个数据集非常大(1500 万台)。我的目标是得出结论,与我已经做过的其他简单方法、NAIVE 和 SES 相比,ARIMA 模型可以预测数据有多好。由于数据如此之大,我开始查看不同日期的图以及数据的 ACF 和 PACF(以搜索模式)。
一种。数据是固定的 - ADF 测试也强烈认可这一点(因此无需差分)
湾。ACF 图显示了强烈的每小时季节性,但在前 500 个滞后(分钟季节性?)中也有。我还假设每天有季节性(滞后于 86,400)
问题问题#1:
如果我想开始,取一天的样本(从 00:00-23:59)并预测第二天的时间(00:00 - 00:59,第 2 天),这是样本外的预测,
1.1 我应该适合 ARIMA 模型的数据量应该是多少?关于选择“训练集”(尤其是短期预测)有什么规则吗?
就我而言,它变得非常复杂,因为在整个 24 小时样本 (12,0,3) 中发现非季节性 ARIMA 的顺序非常高。第二个也是更关键的问题是,如果我考虑到季节性高阶,(3,0,0)s=3600,那么计算机内存不足。我在 Python 和 R 上都试过了。
1.2 知道如何处理这种情况吗?
问题#2:
到目前为止,我尝试的是平均每 60 秒的数据,所以我得到了每天 1440 次观察的重新采样数据(代表分钟)。这样做之后,我可以更轻松地处理现在 s = 60 的季节性周期,并且幸运地使用 R 和 Python(但是,这样做我可能会丢失有价值的信息......)。因为对于每个数据长度,我都会得到不同的 ARIMA 顺序。例如 7 小时:ARIMA(2,0,0)(1,0,0)[60] 和 ...。如果我想使用更短的拟合周期,我必须区分数据,因为模式变得非静止的。例如 2 小时:ARIMA(3,1,1)(0,0,1)[60]。所以我尝试测试几种方法,看看“样本外”(1小时)的预测有多好。似乎在这些方法中,较短的时间拟合(2 小时)产生的结果比较长的方法稍好。但又一次,
2.1:所以第一个问题仍然存在,我应该在训练集上拟合 ARIMA 的数据长度是多少?2.2:在短期预测期间使用短期训练集是否有意义?
问题#3:
假设另一个“更长的拟合”(比如 24 小时)导致如此短时间预测的“过度拟合”,我会使用 2 小时 ARIMA 拟合。提醒我,我对预测特定时间间隔并不特别感兴趣,但我有兴趣使用许多测试的结果来尝试得出关于根据我的数据预测 ARIMA 模型的结论。当它做得好或不好时(与其他方法相比,使用 MAPE)。问题是我必须每 2 小时一次又一次地拟合一个 ARIMA 模型,然后累积结果。
3.1 但是考虑到我有 6 个月的数据,这不是很实用,不是吗?那么有人对如何解决这个问题有任何建议吗?我应该每天取样吗?
问题#4:
在我所做的几十个拟合 ARIMA 测试中,没有一个在残差的 ACF 上产生“白噪声”!(还测试了其他订单,其他季节性时段)。相反,有 2 个滞后明显超出区间(滞后 11 和 19)。 4.1 是否有可能遇到这样的情况,即您找不到在残差的 ACF 上产生“白噪声”的正确模型?还是暗示我的分析应该有问题?
**问题问题#5:
(特别是与 Python 和一般的趋势 = 'c' 相关)** 在我迄今为止在文献中看到的示例中,对固定数据的关注很少(大多数是非固定的,可能是因为大多数是金融数据..)。
5.1 因此,当我将趋势参数设置为常量('trend'='c')时,我不明白为什么无法预测静态数据,但将其设置为非('trend'='n ')?
我在python(statsmodels)上使用了它,所以我不知道这是否是函数的问题,或者添加一个常量是不明智的。对于那些使用 statsmodels 的人:
import statsmodels.api as sm
arima_fit = sm.tsa.SARIMAX(data_set, order = (2,0,0), seasonal_order = (1,0,0,60), trend = 'c').fit()
data_forecast = arima_fit.predict('period start', 'period end', dynamic = True)
我收到以下错误:“ ValueError:预测具有时变 state_intercept 矩阵的模型需要更新的时变矩阵来预测期间。 ”
我对时间序列比较陌生,所以请原谅我的问题很简单。关于文献和例子,到目前为止,我找不到任何例子来处理我在 ARIMA 模型中的数据(非常高的频率)中的特征。因此,如果有人可以推荐一些东西,那就太棒了。