Python 为什么我会得到;ValueError:零大小数组到没有标识的最大缩减操作”;在AutoArima(Pmdarima)中?

Python 为什么我会得到;ValueError:零大小数组到没有标识的最大缩减操作”;在AutoArima(Pmdarima)中?,python,python-3.x,time-series,pmdarima,pyramid-arima,Python,Python 3.x,Time Series,Pmdarima,Pyramid Arima,在使用pmdarima库中的AutoArima预测时间序列时,我得到了“ValueError:zero size array to reduction operation maximum,它没有标识” 数据的形状为(27,1),列车数据的形状为(24,1) 数据如下: YearMnth Quantity 2018-10-01 384 2018-11-01 544 2018-12-01 1060 2019-01-01 190 20

在使用pmdarima库中的AutoArima预测时间序列时,我得到了“ValueError:zero size array to reduction operation maximum,它没有标识”

数据的形状为(27,1),列车数据的形状为(24,1)

数据如下:

YearMnth       Quantity     
2018-10-01       384
2018-11-01       544
2018-12-01      1060
2019-01-01       190
2019-02-01       352
2019-03-01       873
2019-04-01       704
2019-05-01      1266
2019-06-01      1010
2019-07-01       604
2019-08-01       896
2019-09-01       909
2019-10-01      1229
2019-11-01      1515
2019-12-01      1063
2020-01-01      1014
2020-02-01       472
2020-03-01      2000
2020-04-01      1065
2020-05-01      1160
2020-06-01      1524
2020-07-01      1307
2020-08-01      1575
2020-09-01      1561
2020-10-01      2536
2020-11-01      1058
2020-12-01      1770
我想这可能是因为该系列的长度为27,但我无法承担更改长度的费用,因为有许多系列将进入程序,仅更改长度将不是正确的做法

同样,对于火车数据,长度为24,自动Arima模型可以很好地进行训练

以下是培训代码:

autoModel = pm.auto_arima(df_train.Quantity, trace=True, error_action='ignore',
                          suppress_warnings=True, seasonal=True, m=12, stepwise=True)
autoModel.fit(df_train.Quantity)
order = autoModel.order
预测代码:

autoModel = pm.auto_arima(df_series.Quantity, trace=True, error_action='ignore', 
                          suppress_warnings=True, seasonal=True, m=12, stepwise=True)
autoModel.fit(df_series.Quantity)
order = autoModel.order
seasonalOrder = autoModel.seasonal_order
ForecastValues = autoModel.predict(n_periods=6,order=order,seasonal_order=seasonalOrder)
以下是完整的错误消息:

   <ipython-input-137-0d894e08f9e0> in AutoSarima_Forecast(df_series, ForecastWindow)
      1 def AutoSarima_Forecast(df_series,ForecastWindow):
      2     autoModel = pm.auto_arima(df_series.Quantity, trace=True, error_action='ignore', 
----> 3                               suppress_warnings=True, seasonal=True, m=12, stepwise=True)
      4     autoModel.fit(df_series.Quantity)
      5     order = autoModel.order

~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/auto.py in auto_arima(y, X, start_p, d, start_q, max_p, max_d, max_q, start_P, D, start_Q, max_P, max_D, max_Q, max_order, m, seasonal, stationary, information_criterion, alpha, test, seasonal_test, stepwise, n_jobs, start_params, trend, method, maxiter, offset_test_args, seasonal_test_args, suppress_warnings, error_action, trace, random, random_state, n_fits, return_valid_fits, out_of_sample_size, scoring, scoring_args, with_intercept, sarimax_kwargs, **fit_args)
    521     elif D is None:  # we don't have a D yet and we need one (seasonal)
    522         D = nsdiffs(xx, m=m, test=seasonal_test, max_D=max_D,
--> 523                     **seasonal_test_args)
    524 
    525         if D > 0 and X is not None:

~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/utils.py in nsdiffs(x, m, max_D, test, **kwargs)
    121             return D
    122 
--> 123         dodiff = testfunc(x)
    124 
    125     return D

~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/seasonality.py in estimate_seasonal_differencing_term(self, x)
    590 
    591         # Get the critical value for m
--> 592         stat = self._compute_test_statistic(x)
    593         crit_val = self._calc_ocsb_crit_val(self.m)
    594         return int(stat > crit_val)

~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/seasonality.py in _compute_test_statistic(self, x)
    530             for lag_term in range(1, maxlag + 1):  # 1 -> maxlag (incl)
    531                 try:
--> 532                     fit = self._fit_ocsb(x, m, lag_term, maxlag)
    533                     fits.append(fit)
    534                     icvals.append(icfunc(fit))

~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/seasonality.py in _fit_ocsb(x, m, lag, max_lag)
    486         # the linear model's constructor
    487         mf = ylag[:y.shape[0]]
--> 488         ar_fit = sm.OLS(y, add_constant(mf)).fit(method='qr')
    489 
    490         # Create Z4

~/anaconda3/envs/python3/lib/python3.6/site-packages/statsmodels/tools/tools.py in add_constant(data, prepend, has_constant)
    336         raise ValueError('Only implemented for 2-dimensional arrays')
    337 
--> 338     is_nonzero_const = np.ptp(x, axis=0) == 0
    339     is_nonzero_const &= np.all(x != 0.0, axis=0)
    340     if is_nonzero_const.any():

<__array_function__ internals> in ptp(*args, **kwargs)

~/anaconda3/envs/python3/lib/python3.6/site-packages/numpy/core/fromnumeric.py in ptp(a, axis, out, keepdims)
   2579         else:
   2580             return ptp(axis=axis, out=out, **kwargs)
-> 2581     return _methods._ptp(a, axis=axis, out=out, **kwargs)
   2582 
   2583 

~/anaconda3/envs/python3/lib/python3.6/site-packages/numpy/core/_methods.py in _ptp(a, axis, out, keepdims)
    245 def _ptp(a, axis=None, out=None, keepdims=False):
    246     return um.subtract(
--> 247         umr_maximum(a, axis, None, out, keepdims),
    248         umr_minimum(a, axis, None, None, keepdims),
    249         out

ValueError: zero-size array to reduction operation maximum which has no identity
在AutoSarima_预测中(df_系列,ForecastWindow) 1 def AutoSarima_预测(df_系列,预测窗口): 2 autoModel=pm.auto\u arima(df\u series.Quantity,trace=True,error\u action='ignore', ---->3抑制(警告=真、季节=真、m=12、逐步=真) 4自动模型安装(df_系列数量) 5订单=autoModel.order 在auto_arima中~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/auto.py(y,X,开始p,d,开始q,最大p,最大d,最大q,开始p,d,开始q,最大p,最大p,最大d,最大顺序,m,季节性,平稳性,信息标准,阿尔法,测试,季节性测试,逐步,n个作业,开始参数,趋势,方法,最大值,偏移测试参数,季节性测试参数,抑制警告,错误动作,跟踪,随机,随机状态,n拟合,返回_有效拟合、超出样本大小、计分、计分参数、带截距、sarimax、kwargs、**拟合参数) 521 elif D没有:#我们还没有D,我们需要一个(季节性的) 522 D=NSDiff(xx,m=m,测试=季节性测试,最大D=最大D, -->523**季节性试验(参数) 524 525如果D>0且X不是无: nsdiff中的~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/utils.py(x,m,max_D,test,**kwargs) 121返回D 122 -->123 dodiff=testfunc(x) 124 125返回D 估算项中的~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/季节性.py 590 591#获取m的临界值 -->592统计=自我计算测试统计(x) 593临界值=self.\u calc\u ocsb\u临界值(self.m) 594返回整数(统计>临界值) ~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/季节性.py in_compute_test_statistic(self,x) 530范围内的滞后项(1,最大滞后+1):#1->最大滞后(包括) 531尝试: -->532拟合=自拟合ocsb(x,m,滞后项,最大滞后) 533适合。附加(适合) 534 icvals.append(icfunc(fit)) ~/anaconda3/envs/python3/lib/python3.6/site-packages/pmdarima/arima/季节性.py in_-fit_-ocsb(x,m,滞后,最大滞后) 486#线性模型的构造函数 487 mf=ylag[:y.形状[0]] -->488 ar_fit=sm.OLS(y,加上常数(mf)).fit(方法='qr') 489 490#创建Z4 添加常量中的~/anaconda3/envs/python3/lib/python3.6/site-packages/statsmodels/tools/tools.py(数据,前置,具有常量) 336 raise VALUERROR('仅对二维数组实施') 337 -->338是非零常数=np。ptp(x,轴=0)==0 339是非零常数&=np.all(x!=0.0,轴=0) 340如果是非零常数any(): 在ptp中(*args,**kwargs) ptp中的~/anaconda3/envs/python3/lib/python3.6/site-packages/numpy/core/fromneric.py(a、axis、out、keepdims) 2579其他: 2580返回ptp(轴=轴,输出=输出,**kwargs) ->2581返回方法。ptp(a,轴=轴,输出=输出,**kwargs) 2582 2583 ~/anaconda3/envs/python3/lib/python3.6/site-packages/numpy/core//u methods.py in\u ptp(a、axis、out、keepdims) 245 def_ptp(a,轴=无,输出=无,keepdims=假): 246返回um.subtract( -->247 umr_最大值(a、轴、无、输出、保持), 最低248 umr_(a、轴、无、无、保持), 249分 ValueError:从零大小数组到没有标识的最大缩减操作 如果只是因为序列的长度而不是由pmdArima处理,那么解决问题的解决方法应该是什么