4. Serializing your ARIMA models

After you’ve fit your model and you’re ready to start making predictions out in your production environment, it’s time to save your ARIMA to disk. Pyramid models can be serialized with pickle or joblib, just as with most other python objects:

from pyramid.arima import auto_arima
from pyramid.datasets import load_lynx
import numpy as np

# For serialization:
from sklearn.externals import joblib
import pickle

# Load data and fit a model
y = load_lynx()
arima = auto_arima(y, seasonal=True)

# Serialize with Pickle
with open('arima.pkl', 'wb') as pkl:
    pickle.dump(arima, pkl)

# You can still make predictions from the model at this point

# Now read it back and make a prediction
with open('arima.pkl', 'rb') as pkl:
    pickle_preds = pickle.load(pkl).predict(n_periods=5)

# Or maybe joblib tickles your fancy
joblib.dump(arima, 'arima.pkl')
joblib_preds = joblib.load('arima.pkl').predict(n_periods=5)

# show they're the same
np.allclose(pickle_preds, joblib_preds)

If your job is to build models, that’s probably all you really care to know about the serialization process. However, there are several intricacies of how Pyramid internally saves a model that you might care to know for development purposes.

4.1. Intricacies of ARIMA serialization

The ARIMA class is a generalization of three models:

  • statsmodels.tsa.ARMA
  • statsmodels.tsa.ARIMA
  • statsmodels.tsa.statespace.SARIMAX

The statsmodels library does not play very nicely with pickling, so under the hood the pyramid ARIMA class does some monkey-patching.

4.1.1. The serialization process

When the pickling process begins, the ARIMA class will first save the internal model into a directory defined by the pyramid._config.PYRAMID_ARIMA_CACHE variable (default is .pyramid-arima-cache/). Next, it will pickle the class instance to the defined location, save the location as a temporary attribute, and re-attach the model state to the instance so that you can continue to make predictions or otherwise use the ARIMA model after pickling.

4.1.2. The de-serialization process

When unpickling an ARIMA, the class instance is unpickled first, and then the internal statsmodels object is loaded from the cached directory, re-attached to the model state, and returned.