66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
# Base classes and interfaces
|
|
|
|
import abc
|
|
from abc import ABCMeta
|
|
|
|
from sklearn.base import BaseEstimator
|
|
|
|
# TODO: change this to base TS model if we ever hope to support more
|
|
|
|
|
|
class BaseARIMA(BaseEstimator, metaclass=ABCMeta):
|
|
"""A base ARIMA class"""
|
|
|
|
@abc.abstractmethod
|
|
def fit(self, y, X, **fit_args):
|
|
"""Fit an ARIMA model"""
|
|
|
|
def fit_predict(self, y, X=None, n_periods=10, **fit_args):
|
|
"""Fit an ARIMA to a vector, ``y``, of observations with an
|
|
optional matrix of ``exogenous`` variables, and then generate
|
|
predictions.
|
|
|
|
Parameters
|
|
----------
|
|
y : array-like or iterable, shape=(n_samples,)
|
|
The time-series to which to fit the ``ARIMA`` estimator. This may
|
|
either be a Pandas ``Series`` object (statsmodels can internally
|
|
use the dates in the index), or a numpy array. This should be a
|
|
one-dimensional array of floats, and should not contain any
|
|
``np.nan`` or ``np.inf`` values.
|
|
|
|
X : array-like, shape=[n_obs, n_vars], optional (default=None)
|
|
An optional 2-d array of exogenous variables. If provided, these
|
|
variables are used as additional features in the regression
|
|
operation. This should not include a constant or trend. Note that
|
|
if an ``ARIMA`` is fit on exogenous features, it must be provided
|
|
exogenous features for making predictions.
|
|
|
|
n_periods : int, optional (default=10)
|
|
The number of periods in the future to forecast.
|
|
|
|
fit_args : dict or kwargs, optional (default=None)
|
|
Any keyword args to pass to the fit method.
|
|
"""
|
|
self.fit(y, X, **fit_args)
|
|
|
|
# TODO: remove kwargs from call
|
|
return self.predict(n_periods=n_periods, X=X, **fit_args)
|
|
|
|
# TODO: remove kwargs from all of these
|
|
|
|
@abc.abstractmethod
|
|
def predict(self, n_periods, X, return_conf_int=False, alpha=0.05,
|
|
**kwargs):
|
|
"""Create forecasts on a fitted model"""
|
|
|
|
@abc.abstractmethod
|
|
def predict_in_sample(self, X, start, end, dynamic, **kwargs):
|
|
"""Get in-sample forecasts"""
|
|
|
|
@abc.abstractmethod
|
|
def update(self, y, X=None, maxiter=None, **kwargs):
|
|
"""Update an ARIMA model"""
|