我有一个包含100行和1000+列的时间序列数据框架,这些列彼此独立,我对每一列运行ARIMA模型,因此,就像运行1000+ ARIMA分析一样。
我编写了一段代码,它循环遍历训练集的列,并根据提供的p、d、q参数在每列上拟合ARIMA模型。虽然,看起来模型在进一步遍历列时,会忘记之前学习的内容,只使用最后一列的训练结果来预测测试。(这会导致预测在测试集上过拟合)。
有没有一种方法可以将所有经过训练的模型的学习结果结合在一起,并使用它对测试集进行预测?
示例数据框如下所示:
date Col 1 Col 2 Col 3 Col 4
2001-07-21 10:00:00+05:00 45 51 31 3
2001-07-21 10:15:00+05:00 46 50 32 3
2001-07-21 10:30:00+05:00 47 51 34 7
2001-07-21 10:45:00+05:00 50 50 33 9
2001-07-21 11:00:00+05:00 55 51 32 8
2001-07-21 11:15:00+05:00 52 73 34 11
2001-07-21 11:30:00+05:00 51 72 30 14
我实现的代码是:
#training set inclues all columns except the last and test set includes only last column.
train = df.iloc[:, :-1]
test = df.iloc[:,-1:]
order = (1,2,3) # <- plug-in p, d, q here
for col in train.columns:
model = ARIMA(train[col], order = order) #training every column in training set
model = model.fit()
model.summary()
predictions = model.predict(len(test))
1条答案
按热度按时间t9aqgxwy1#
我认为这个问题是不可能解决的,因为你已经把它框定了。
假设你有一个很棒的机器学习模型,它从第1列到第N-1列提取每一条可能的信息。
此模型仍然不知道以下内容:
这些列彼此独立。
除非有一些理由认为这个 Dataframe 的列应该随着时间的推移而相关,否则其他列对您的预测没有任何帮助,您应该直接删除它们。
但是,也许其他列与你的Y变量相关,在这种情况下,我建议如下的训练/测试分割:
1.取数据集的前2/3行,这就是训练集。
在训练集中,从1到N - 1的列是X_train。列N是Y_train。
1.取数据集的最后1/3行,这就是测试集。
在测试集中,从1到N - 1的列是X_test。列N是Y_test。
使用X变量作为ARIMA的外部输入。大多数ARIMA库都支持这一点。我推荐使用pmdarima,因为它是最友好的。
将模型安装到您的火车组上。
对测试集进行预测以验证p、d或q的特定选择。请注意,准确性估计值将向上偏移。(您可以通过拆分为训练、测试和验证来避免这种情况,但您可能没有足够的数据来执行此操作。)