首页 > 解决方案 > 如何解决从 Statsmodels 运行 ARIMA 时发生的 ValueError?

问题描述

我在构建 ARIMA 时使用以下代码

arima = ARIMA(ts.astype(float), freq = 'M',order=(4, d, 3)).fit()

当我运行上述内容时,我收到以下错误:

ValueError: The given frequency argument could not be matched to the given index.

我的数据框如下所示:

Date        A          B           C        D       E           F
2020-04-01  118     10932.54    203.617     1   0.296610    0.382666
2020-05-01  144     11645.20    167.575     1   0.361111    0.401953
2020-06-01  89      8545.86     196.084     1   0.449438    0.524768
2020-07-01  117     10512.30    194.442     1   0.384615    0.472443
2020-08-01  75      6613.11     189.289     1   0.280000    0.332995

Date列是我的索引。它没有频率标签。

我试图给它一个频率标签,如下

df.asfreq('M')

但是,这会将除列之外的每一列中的值Date转换为NaN.

我试图在没有频率参数的情况下运行 ARIMA 模型;但是,我收到以下警告消息:

ValueWarning: No frequency information was provided, so inferred frequency MS will be used.

同样,我收到了这个警告:

ValueError: The computed initial MA coefficients are not invertible
You should induce invertibility, choose a different model order, or you can pass your own start_params.

我不确定在这里做什么。任何帮助将不胜感激。

标签: pythonpandasstatsmodelsarima

解决方案


首先,您可以使用

df = df.resample("M").last()

df在不引入NaN价值观的情况下获得一个干净的月末。

其次,您应该使用SARIMAXorstatsmodels.tsa.arima.model.ARIMA而不是statsmodels.tsa.arima_model.ARIMA(注意_后者中的 a.在前者中)。statsmodels.tsa.arima.model.ARIMA本质上是一个特例SARIMAX,通常表现更好。您将需要 statsmodels 0.12.0rc0 或 master 分支的构建才能使用新的ARIMA.

在这个新模型中,您不会遇到 MA 可逆性的问题。


推荐阅读