Search code examples
pythonleast-squaresstatsmodels

Python statsmodels OLS: how to save learned model to file


I am trying to learn an ordinary least squares model using Python's statsmodels library, as described here.

sm.OLS.fit() returns the learned model. Is there a way to save it to the file and reload it? My training data is huge and it takes around half a minute to learn the model. So I was wondering if any save/load capability exists in OLS model.

I tried the repr() method on the model object but it does not return any useful information.


Solution

  • The models and results instances all have a save and load method, so you don't need to use the pickle module directly.

    Edit to add an example:

    import statsmodels.api as sm
    
    data = sm.datasets.longley.load_pandas()
    
    data.exog['constant'] = 1
    
    results = sm.OLS(data.endog, data.exog).fit()
    results.save("longley_results.pickle")
    
    # we should probably add a generic load to the main namespace
    from statsmodels.regression.linear_model import OLSResults
    new_results = OLSResults.load("longley_results.pickle")
    
    # or more generally
    from statsmodels.iolib.smpickle import load_pickle
    new_results = load_pickle("longley_results.pickle")
    

    Edit 2 We've now added a load method to main statsmodels API in master, so you can just do

    new_results = sm.load('longley_results.pickle')