What’s new in pmdarima

As new releases of pmdarima are pushed out, the following list (introduced in v0.8.1) will document the latest features.


  • Add support for Python 3.11
  • Change minimum numpy version to 1.21.2


  • Add support for macOS with M1 chip


  • Potentially breaking changes:
    • Use of the exogenous keyword (deprecated in 1.8.0) will now raise a TypeError
    • Use of the sarimax_kwargs keyword (deprecated in 1.5.1) will now raise a TypeError
    • A falsey value for ARIMA’s method argument (deprecated pre-1.5.0) will now raise a ValueError
    • A falsey value for ARIMA’s maxiter argument will now raise a ValueError (warning since 1.5.0)
    • pmdarima is no longer built for 32-bit architectures
    • macOS images are built using macOS 11 instead of macOS 10.15
  • Bump numpy dependency to >= 1.21
  • Expose fittedvalues in the public API. See #493
  • Add support for ARM64 architecture. See #434
  • Introduce new arg, preserve_series, to pmdarima.utils.check_endog that will preserve or squeeze a Pandas Series object to preserve index information.
  • Update Cython pinned version to include !=0.29.31


  • Add support for Python 3.10
  • Remove support for Python 3.6


  • Add compatibility for statsmodels 0.13 and higher


  • Fix a bug in tsdisplay where a value of lag_max larger than the length of the series would create a cryptic numpy broadcasting error. This precondition will still cause an error, but now it is one the user can better understand. See #440
  • Change numpy pin to numpy>=1.19.3 (and build on lowest supported version) to no longer limit users’ NumPy versions. This addresses #449
  • Fix a bug where scikit-learn version 1.0.0 was raising ValueError when calling if_delegate_has_method, addressing #454


  • Change numpy pin to ~=1.19.0 to avoid incompatibility issues, addressing #423


  • Address issue 370 where iterables were not accepted in the ARIMA order.
  • Address issue 407 where the LogEndogTransformer could not be cloned in a pipeline.
  • No longer pin Cython to <0.29.18
  • Add support for Python 3.9


  • Wheels are no longer built for pmdarima on Python <3.6, and backward-compatibility is no longer guaranteed for older python versions.
  • The exogenous argument has been deprecated in favor of X - See the RFC and the PR for more information. Beginning in version 2.0, the exogenous argument will raise an error.
  • Migrate random searches into the auto-solvers interface
  • Random searches now perform unit root tests to prevent models with near non-invertible parameters
  • The default value of suppress_warnings has changed to True. The primary reason for this is that most warnings emitted come from unit root tests, which are very noisy. DeprecationWarnings and other warnings generated from user input will still be emitted.
  • Move ModelFitWarning from pmdarima.arima.warnings to pmdarima.warnings
  • Fix a bug where the pmdarima.model_selection.RollingForecastCV could produce too few splits for the given input data.
  • Change pin for setuptools from <50.0.0 to !=50.0.0, addressing #401
  • Change pin for statsmodels from <0.12.0 to !=0.12.0, addressing #376


  • Pin setuptools<50.0.0
  • Pin statsmodels<0.12
  • Warn for Python versions <3.6. We will remove Python 3.5 support in version 1.8.0


  • Address issue #341 where a combination of a large m value and D value could difference an array into being too small to test stationarity in the ADF test
  • Fix issue #351 where a large value of m could prevent the seasonality test from completing.
  • Fix issue #354 where models with near non-invertible roots could still be considered as candidate best-fits.
  • Remove legacy pickling behavior that separates the statsmodels object from the pmdarima object. This breaks backwards compatibility with versions pre-1.2.0.
  • Change default with_intercept in pmdarima.arima.auto_arima() to 'auto' rather than True. This will behave much like the current behavior, where a truthiness check will still return True, but allows the stepwise search to selectively change it to False in the presence of certain differencing conditions.
  • Inverse endog transformation is now supported when return_conf_int=True on pipeline predictions (thanks to skyetim)
  • Fix a bug where the pmdarima.model_selection.SlidingWindowForecastCV could produce too few splits for the given input data.
  • Permit custom scoring metrics to be passed for out-of-sample scoring, as requested in #368.


  • Pin Cython to be >=0.29,<0.29.18
  • Pin statsmodels to be >=0.11


  • Support newest versions of matplotlib
  • Add new level of auto_arima error actions: “trace” which will warn for errors while dumping the original stacktrace.
  • New featurizer: pmdarima.preprocessing.DateFeaturizer. This can be used to create dummy and ordinal exogenous features and is useful when modeling pseudo-seasonal trends or time series with holes in them.
  • Removes first-party conda distributions (see #326)
  • Raise a ValueError in arima.predict_in_sample when start < d



  • Added pmdarima.show_versions as a utility for issue filing
  • Fixed deprecation for check_is_fitted in newer versions of scikit-learn
  • Adds the pmdarima.datasets.load_sunspots() method with R’s sunspots dataset
  • Adds the pmdarima.model_selection.train_test_split() method
  • Fix bug where 1.5.1 documentation was labeled version “0.0.0”.
  • Fix bug reported in #271, where the use of threading.local to store stepwise context information may have broken job schedulers.
  • Fix bug reported in #272, where the new default value of max_order can cause a ValueError even in default cases when stepwise=False.


  • No longer use statsmodels’ ARIMA or ARMA class under the hood; only use the SARIMAX model, which cuts back on a lot of errors/warnings we saw in the past. (#211)

  • Defaults in the ARIMA class that have changed as a result of #211:

    • maxiter is now 50 (was None)
    • method is now ‘lbfgs’ (was None)
    • seasonal_order is now (0, 0, 0, 0) (was None)
    • max_order is now 5 (was 10) and is no longer used as a constraint when stepwise=True
  • Correct bug where aicc always added 1 (for constant) to degrees of freedom, even when df_model accounted for the constant term.

  • New pmdarima.arima.auto.StepwiseContext feature for more control over fit duration (introduced by @kpsunkara in #221).

  • Adds the pmdarima.preprocessing.LogEndogTransformer class as discussed in #205

  • Exogenous arrays are no longer cast to numpy array by default, and will pass pandas frames through to the model. This keeps variable names intact in the summary (#222)

  • Added the prefix param to exogenous featurizers to allow the addition of meaningful names to engineered features.

  • Added polyroot test of near non-invertibility when stepwise=True. For models that are near non-invertible will be deprioritized in model selection as requested in #208.

  • Removes pmdarima.arima.ARIMA.add_new_samples, which was previously deprecated. Use pmdarima.arima.ARIMA.update() instead.

  • The following args have been deprecated from the pmdarima.arima.ARIMA class as well as pmdarima.arima.auto_arima() and any other calling methods/classes:

    • disp[1]
    • callback[1]
    • transparams
    • solver
    • typ

    [1] These can still be passed to the fit method via **fit_kwargs, but should no longer be passed to the model constructor.

  • Added diff_inv function that is in parity with R’s implementation, diffinv, as requested in #180.

  • Added decompose function that is in parity with R’s implementation, decompose, as requested in #190



  • Adds a new dataset for stock prediction, along with an associated example (load_msft)
  • Fixes a bug in predict_in_sample, as addressed in #140.
  • Numpy 1.16+ is now required
  • Statsmodels 0.10.0+ is now required
  • Added sarimax_kwargs to ARIMA constructor and auto_arima function. This fixes #146


  • Pins scipy at 1.2.0 to avoid a statsmodels bug.


  • Adds the OCSBTest of seasonality, as discussed in #88
  • Default value of seasonal_test changes from “ch” to “ocsb” in auto_arima
  • Default value of test changes from “ch” to “ocsb” in nsdiffs
  • Adds benchmarking notebook and capabilities in pytest plugins
  • Removes the following environment variables, which are now deprecated:
  • Deprecates the is_stationary method in tests of stationarity. This will be removed in v1.4.0. Use should_diff instead.
  • Adds two new datasets: airpassengers & austres
  • When using out_of_sample, the out-of-sample predictions are now stored under the oob_preds_ attribute.
  • Adds a number of transformer classes including:
    • BoxCoxEndogTransformer
    • FourierFeaturizer
  • Adds a Pipeline class resembling that of scikit-learn’s, which allows the stacking of transformers together.
  • Adds a class wrapper for auto_arima: AutoARIMA. This is allows auto-ARIMA to be used with pipelines.


v1.1.1 is a patch release in response to #104

  • Deprecates the ARIMA.add_new_observations method. This method originally was designed to support updating the endogenous/exogenous arrays with new observations without changing the model parameters, but achieving this behavior for each of statsmodels’ ARMA, ARIMA and SARIMAX classes proved nearly impossible, given the extremely complex internals of statmodels estimators.
  • Replaces ARIMA.add_new_observations with ARIMA.update. This allows the user to update the model with new observations by taking maxiter new steps from the existing model coefficients and allowing the MLE to converge to an updated set of model parameters.
  • Changes default maxiter to None, using 50 for seasonal models and 500 for non-seasonal models (as statsmodels does). The default value used to be 50 for all models.
  • New behavior in ARIMA.fit allows start_params and maxiter to be passed as **fit_args, overriding the use of their corresponding instance attributes.


  • Adds ARIMA.plot_diagnostics method, as requested in #49
  • Adds new arg to ARIMA constructor and auto_arima: with_intercept (default is True).
  • New default for trend is no longer 'c', it is None.
  • Adds to_dict method to ARIMA class to address Issue #54
  • ARIMA serialization no longer stores statsmodels results wrappers in the cache, but bundles them into the pickle file. This solves Issue #48 and only works on statsmodels 0.9.0+ since they’ve fixed a bug on their end.
  • The 'PMDARIMA_CACHE' and 'PMDARIMA_CACHE_WARN_SIZE' environment variables are now deprecated, since they no longer need to be used.
  • Added versioned documentation. All releases’ doc (from 0.9.0 onward) is now available at alkaline-ml.com/pmdarima/<version>
  • Fixes bug in ADFTest where OLS was computed with method="pinv" rather than "method=qr". This fix means better parity with R’s results. See #71 for more context.
  • CHTest now solves linear regression with normalize=True. This solves #74
  • Python 3.7 is now supported(!!)


  • Wheels are no longer built for Python versions < 3.5. You may still be able to build from source, but support for 2.x python versions will diminish in future versions.
  • Migrates namespace from ‘pyramid-arima’ to ‘pmdarima’. This is due to the fact that a growing web-framework (also named Pyramid) is causing namespace collisions when both packages are installed on a machine. See Issue #34 for more detail.
  • Removes redundant Travis tests
  • Automates documentation build on Circle CI
  • Moves lots of the build/test functionality into the Makefile for ease.
  • Warns for impending deprecation of various environment variable name changes. The following will be completely switched over in version 1.2.0:


  • Explicitly catches case in auto_arima where a value of m that is too large may over-estimate D, causing the time series to be differenced down to an empty array. This is now handled by raising a separate error for this case that better explains what happened.
  • Re-pickling an ARIMA will no longer remove the location on disk of the cached statsmodels ARIMA models. Older versions encountered an issue where an older version of the model would be reinstated and immediately fail due to an OSError since the cached state no longer existed. This means that a user must be very intentional about clearing out the pyramid cache over time.
  • Adds pyramid cache check on initial import to warn user if the cache size has grown too large.
  • If d or D are explicitly defined for auto_arima (rather than None), do not raise an error if they exceed max_d or max_D, respectively.
  • Adds Circle CI for validating PyPy builds (rather than CPython)
  • Deploys python wheel for version 3.6 on Linux and Windows
  • Includes warning for upcoming package name change (pmdarima).


  • New ARIMA instance attributes

    • The pkg_version_ attribute (assigned on model fit) is new as of version 0.8.0. On unpickling, if the current Pyramid version does not match the version under which it was serialized, a UserWarning will be raised.
  • Addition of the _config.py file at the top-level of the package

  • Fixes bug (Issue #30) in ARIMA where using CV with differencing and no seasonality caused a dim mismatch in the model’s exog array and its endog array

  • New dataset: Woolyrnq (from R’s forecast package).

  • Visualization utilities available at the top level of the package:

    • plot_acf
    • plot_pacf
    • autocorr_plot
  • Updates documentation with significantly more examples and API references.


  • out_of_sample_size behavior in pmdarima.arima.ARIMA
    • In prior versions, the out_of_sample_size (OOSS) parameter misbehaved in the sense that it ended up fitting the model on the entire sample, and scoring the number specified. This behavior changed in v0.7.0. Going forward, when OOSS is not None, ARIMA models will be fit on \(n - OOSS\) samples, scored on the last OOSS samples, and the held-out samples are then added to the model.
  • Adds add_new_samples method to pmdarima.arima.ARIMA
    • This method adds new samples to the model, effectively refreshing the point from which it creates new forecasts without impacting the model parameters.
  • Adds confidence intervals on predict in pmdarima.arima.ARIMA
    • When return_conf_int is true, the confidence intervals will now be returned with the forecasts.


  • pmdarima.arima.CHTest of seasonality
    • No longer computes the \(U\) or \(V\) matrix in the SVD computation in the Canova-Hansen test. This makes the test much faster.