### 如何从Statsmodels中的多变量ARX模型中获取单一预测向量

声明一下,我对使用时间序列模型的经验非常有限。

我试图使用一年的每小时能源数据来训练一组23个建筑物的ARX模型。我希望在给定一组在训练数据范围内的时间戳后,得到一个单一的预测向量。通过这个向量,我可以验证与覆盖相同时间戳子集的测试数据。我尝试使用statsmodels作为VAR(p)模型来进行初步尝试,在添加外生项之前。我认为这是一个VAR模型,因为它是每个时间戳的多变量。我尝试使用VARMAX模型,设置为order(3,0)来创建一个VARX模型,结果运行时间很长且不成功,所以我先退回到简单的VAR模型。

我的最终目标是使用下面的数据集来拟合一个VARX模型,同时使用每小时的平均值作为外生项。我预计这将得到一个参数向量,其长度等于滞后项。然后我将使用这个向量来预测训练数据集中每一行的y_hat预测值。然后我可以将这个输出与测试数据集中相同小时子集进行比较。

我的训练数据集是标准化的每小时能源数据,看起来如下(请原谅bldg5之后的格式,它没有很好地复制):

start_time          Bldg1               Bldg2               Bldg3               Bldg4                    Bldg5               Bldg7  Bldg8   Bldg9   Bldg10  Bldg11  Bldg12  Bldg13  Bldg14  Bldg15  Bldg16  Bldg17  Bldg18  Bldg19  Bldg20  Bldg21  Bldg22  Bldg23 2014-01-05 00:00:00 0.2345679012345679  0.08234295415959253 0.02127659574468085 0.006535947712418301    0.3939393939393939  0.020325203252032523    0.034013605442176874    0.11003236245954694 0.013307984790874526    0.013513513513513514    0.06734006734006734 0.02840909090909091 0.3116883116883117  0.5301204819277109  0.03793103448275862 0.058064516129032254    0.3546511627906977  0.009523809523809523    0.47887323943661975 0.9228571428571428  0.04154302670623146 0.27731092436974792014-01-05 01:00:00 0.2345679012345679  0.07045840407470289 0.07092198581560284 0.006535947712418301    0.3939393939393939  0.04065040650406505 0.03741496598639456 0.07119741100323625 0.020912547528517112    0.013513513513513514    0.03367003367003367 0.02840909090909091 0.5194805194805195  0.4487951807228916  0.020689655172413793    0.06451612903225806 0.4476744186046512  0.009523809523809523    0.5014084507042254  0.6914285714285714  0.03560830860534124 0.26050420168067232014-01-05 02:00:00 0.2345679012345679  0.07555178268251274 0.056737588652482275    0.026143790849673203    0.3636363636363636  0.020325203252032523    0.03741496598639456 0.07119741100323625 0.011406844106463879    0.013513513513513514    0.04377104377104377 0.02840909090909091 0.4675324675324675  0.4728915662650603  0.017241379310344827    0.05161290322580645 0.436046511627907   0.009523809523809523    0.4732394366197183  0.66    0.03857566765578635 0.131652661064425772014-01-05 03:00:00 0.2345679012345679  0.07045840407470289 0.02127659574468085 0.006535947712418301    0.25757575757575757 0.036585365853658534    0.03741496598639456 0.07119741100323625 0.020912547528517112    0.010135135135135136    0.037037037037037035    0.02840909090909091 0.4285714285714286  0.39457831325301207 0.020689655172413793    0.08387096774193549 0.19767441860465118 0.006349206349206349    0.47887323943661975 0.7771428571428572  0.04154302670623146 0.162464985994397762014-01-05 04:00:00 0.2345679012345679  0.07045840407470289 0.02127659574468085 0.006535947712418301    0.2727272727272727  0.02845528455284553 0.030612244897959183    0.06796116504854369 0.011406844106463879    0.010135135135135136    0.03367003367003367 0.0625  0.3766233766233766  0.009036144578313253    0.020689655172413793    0.1032258064516129  0.0872093023255814  0.009523809523809523    0.49295774647887325 0.19714285714285712 0.03264094955489614 0.12324929971988796. . . 

测试数据集(也是标准化的每小时能源数据)看起来如下(形状为168×1):

TestTime            TestBldg2014-09-07 00:00:00 0.094276094276094282014-09-07 01:00:00 0.0370370370370370352014-09-07 02:00:00 0.04040404040404042014-09-07 03:00:00 0.0370370370370370352014-09-07 04:00:00 0.037037037037037035. . . 

当我拟合如下模型时:

from statsmodels.tsa.api import VARvar_mod = VAR(train_norm.iloc[:,3:])var_res = var_mod.fit()var_res.summary()

我得到了数据集中每个建筑物的滞后系数,这出乎意料。我还不明白如何对我的拟合模型var_res进行预测,因为我期望像使用单变量AR模型的AutoReg()那样执行var_res.predict()操作

(补充:statsmodels中的forecast和predict函数有什么区别?在拟合前的模型var_mod中的predict和拟合后的模型var_res.predict()有什么区别?)

请告诉我我可以提供哪些额外的澄清信息。


回答:

一般来说,VAR模型允许在前p个时间步内任何K状态的影响(使用statsmodels的表示法)。听起来你想要的并不是矢量自回归(因为你不希望一个建筑物依赖于另一个建筑物之前的时间步),而是使用“面板”数据集(多个时间序列观测)的AR模型。我相信在statsmodels中应该有办法做到这一点,但坦白说,快速搜索并没有找到。你可以构造一个标准的OLS模型,将数据集进行透视,使每个观测值成为建筑物X时间的观测值,然后创建新的特征,这些特征是从t-1t-p的滞后能源使用。然后你可以简单地对这些数据运行OLS。但我可能错过了statsmodels中用于此目的的函数。

关于你的预测/预测问题,predict看起来是VAR对象(你代码中的var_mod)的方法,而不是VARResults(你代码中的var_res)的方法,并且需要你指定参数。因此,这依赖于你的样本内数据,并且似乎只能接受规定的参数而不是使用你拟合的参数。如果你想这样做,你可以尝试以下操作:

var_mod.predict(var_res.params, start=train_norm.index[p], end=train_norm.index[-1], lags=p)

但我认为你寻找的是forecast,因为你想将其应用于任意测试建筑物。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注