alkaline-ml / pmdarima

A statistical library designed to fill the void in Python's time series analysis capabilities, including the equivalent of R's auto.arima function.
https://www.alkaline-ml.com/pmdarima
MIT License
1.57k stars 231 forks source link

AutoARIMA doesn't work in pmdarima 1.8.2 with sklearn 1.0 #460

Closed asksteph closed 2 years ago

asksteph commented 2 years ago

Describe the bug

I re-installed pmdarima 1.8.2 recently and it automatically downloaded scikit-learn 1.0, but the AutoARIMA function no longer works with this version of sklearn.

To Reproduce

import pmdarima as pm

data = pm.datasets.load_wineind()
train, test = data[:150], data[150:]

m1 = pm.auto_arima(train, error_action='ignore', seasonal=True, m=1)

Versions

System:
    python: 3.8.10 (default, May 19 2021, 13:12:57) [MSC v.1916 64 bit (AMD64)]
executable: C:\Users\szipk\miniconda3\python.exe
   machine: Windows-10-10.0.19042-SP0

Python dependencies:
        pip: 21.1.3
 setuptools: 49.6.0.post20210108
    sklearn: 1.0
statsmodels: 0.13.0
      numpy: 1.19.5
      scipy: 1.7.1
     Cython: 0.29.24
     pandas: 1.3.3
     joblib: 1.1.0
   pmdarima: 1.8.2

Expected Behavior

It was supposed to fit the ARIMA model. This example is from https://alkaline-ml.com/pmdarima/tips_and_tricks.html#setting-m

Actual Behavior

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_13024/1298925500.py in <module>
      4 train, test = data[:150], data[150:]
      5 
----> 6 m1 = pm.auto_arima(train, error_action='ignore', seasonal=True, m=1)

~\miniconda3\lib\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)
    715         )
    716 
--> 717     sorted_res = search.solve()
    718     return _return_wrapper(sorted_res, return_valid_fits, start, trace)
    719 

~\miniconda3\lib\site-packages\pmdarima\arima\_auto_solvers.py in solve(self)
    284 
    285         # fit a baseline p, d, q model
--> 286         self._do_fit((p, d, q), (P, D, Q, m))
    287 
    288         # null model with possible constant

~\miniconda3\lib\site-packages\pmdarima\arima\_auto_solvers.py in _do_fit(self, order, seasonal_order, constant)
    231             self.k += 1
    232 
--> 233             fit, fit_time, new_ic = self._fit_arima(
    234                 order=order,
    235                 seasonal_order=seasonal_order,

~\miniconda3\lib\site-packages\pmdarima\arima\_auto_solvers.py in _fit_candidate_model(y, X, order, seasonal_order, start_params, trend, method, maxiter, fit_params, suppress_warnings, trace, error_action, out_of_sample_size, scoring, scoring_args, with_intercept, information_criterion, **kwargs)
    528         # check the roots of the new model, and set IC to inf if the
    529         # roots are near non-invertible
--> 530         ic = _root_test(fit, ic, trace)
    531 
    532     # log the model fit

~\miniconda3\lib\site-packages\pmdarima\arima\_auto_solvers.py in _root_test(model, ic, trace)
     36 
     37     if p + P > 0:
---> 38         max_invroot = max(0, *np.abs(1 / model.arroots()))
     39     if q + Q > 0 and np.isfinite(ic):
     40         max_invroot = max(0, *np.abs(1 / model.maroots()))

~\miniconda3\lib\site-packages\sklearn\utils\metaestimators.py in __get__(self, obj, owner)
    107             # delegate only on instances, not the classes.
    108             # this is to allow access to the docstrings.
--> 109             if not self.check(obj):
    110                 raise attr_err
    111 

~\miniconda3\lib\site-packages\sklearn\utils\metaestimators.py in _check(self, obj)
    195             return False
    196         # raise original AttributeError
--> 197         return getattr(delegate, self.attribute_name) or True
    198 
    199 

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Additional Context

No response

tgsmith61591 commented 2 years ago

This is a duplicate of https://github.com/alkaline-ml/pmdarima/issues/454 and was fixed in https://github.com/alkaline-ml/pmdarima/pull/455.

Version 1.8.3 fixes this: https://github.com/alkaline-ml/pmdarima/releases/tag/v1.8.3