Source code for ForeTiS.model._baseline_model

from . import _base_model
import abc
import pandas as pd
import numpy as np
import sklearn


[docs] class BaselineModel(_base_model.BaseModel, abc.ABC): """ Parent class based on BaseModel for all baseline models to share functionalities See :obj:`~ForeTiS.model._base_model.BaseModel` for more information. """
[docs] def retrain(self, retrain: pd.DataFrame): """ Implementation of the retraining for baseline models. See :obj:`~ForeTiS.model._base_model.BaseModel` for more information. """ observed_period = retrain.tail(self.window) if hasattr(self, 'window') else retrain self.average = observed_period[self.target_column].mean() if self.prediction is not None: if len(observed_period[self.target_column]) > len(self.prediction): y_true = observed_period[self.target_column][-len(self.prediction):] y_pred = self.prediction else: y_true = observed_period[self.target_column] y_pred = self.prediction[-len(observed_period[self.target_column]):] else: y_true = np.array([0]) y_pred = np.array([0]) self.var = sklearn.metrics.mean_squared_error(y_true=y_true, y_pred=y_pred)
[docs] def update(self, update: pd.DataFrame, period: int): """ Implementation of the retraining for baseline models. See :obj:`~ForeTiS.model._base_model.BaseModel` for more information. """ observed_period = update.tail(self.window) if hasattr(self, 'window') else update self.average = observed_period[self.target_column].mean() y_true = observed_period[self.target_column][-len(self.prediction):] y_pred = self.prediction self.var = sklearn.metrics.mean_squared_error(y_true=y_true, y_pred=y_pred)
[docs] def predict(self, X_in: pd.DataFrame) -> np.array: """ Implementation of a prediction based on input features for baseline models. See :obj:`~ForeTiS.model._base_model.BaseModel` for more information. """ # use average of train set for insample prediction (insample -> knowledge of whole train set) self.prediction = np.full((X_in.shape[0],), self.average) return self.prediction.flatten(), self.var.flatten()
[docs] def train_val_loop(self, train: pd.DataFrame, val: pd.DataFrame) -> np.array: """ Implementation of a train and validation loop for baseline models. See :obj:`~ForeTiS.model._base_model.BaseModel` for more information. """ # train model self.prediction = None self.retrain(train) # validate model return self.predict(X_in=val)