Spaces:
Runtime error
Runtime error
import logging | |
from sktime.split import ExpandingWindowSplitter | |
from sktime.forecasting.compose import make_reduction | |
from sktime.forecasting.model_evaluation import evaluate | |
from sktime.forecasting.model_selection import ForecastingRandomizedSearchCV | |
from sktime.performance_metrics.forecasting import mean_absolute_percentage_error | |
import pandas as pd | |
class ModelBase(): | |
def __init__( | |
self, | |
estimator, | |
param_grid | |
) -> None: | |
print('Init model ...') | |
self.estimator = estimator | |
self.param_grid = param_grid | |
def fit( | |
self, | |
y: pd.DataFrame, | |
cv, | |
window_length, | |
X: pd.DataFrame = None, | |
**kwargs | |
): | |
''' | |
datetime: pd.DateTimeIndex, required | |
this is the datetime value of y, or the historical value of forecasting horizon | |
''' | |
forecaster = make_reduction( | |
self.estimator, | |
strategy='recursive', | |
window_length=window_length) | |
self.gscv = ForecastingRandomizedSearchCV( | |
forecaster, | |
cv=cv, | |
param_distributions=self.param_grid, | |
n_iter=100, | |
random_state=42, | |
scoring=mean_absolute_percentage_error, | |
error_score='raise') | |
self.gscv.fit(y=y, X=X) | |
def forecast(self, fh, X): | |
y_pred = self.gscv.predict(fh=fh, X=X) | |
return { | |
"forecast": y_pred, | |
"best_score": self.gscv.best_score_, | |
"best_params": self.gscv.best_params_} | |
# def forecast( | |
# self, | |
# fh, | |
# exog=None | |
# ): | |
# predict_args = { | |
# 'fh': fh | |
# } | |
# if exog is not None: | |
# predict_args['X'] = exog | |
# return self.forecaster.predict(**predict_args) | |
# def evaluate(self): | |
# cv_args = { | |
# 'initial_window': self.n_predict * 2, | |
# 'step_length': self.n_predict, | |
# 'fh': list(range(1, self.n_predict+1))} | |
# cv = ExpandingWindowSplitter(**cv_args) | |
# return evaluate( | |
# forecaster=self.forecaster, | |
# y=self.y, | |
# cv=cv) | |