Source code for finstmt.forecast.models.average

from typing import Optional

import numpy as np
import pandas as pd

from finstmt.exc import ForecastNotFitException
from finstmt.forecast.models.base import ForecastModel


[docs]class AverageModel(ForecastModel): mean: Optional[float] = None stderr: Optional[float] = None
[docs] def fit(self, series: pd.Series): self.mean = series.mean() self.stderr = series.std() / (len(series) ** 0.5) super().fit(series)
[docs] def predict(self) -> pd.Series: if self.mean is None or self.stderr is None or self.orig_series is None: raise ForecastNotFitException("call .fit before .predict") all_dates = np.concatenate((self.orig_series.index, self._future_date_range)) df = pd.DataFrame(index=all_dates) df["mean"] = self.mean df["lower"] = self.mean - 2 * self.stderr df["upper"] = self.mean + 2 * self.stderr self.result_df = df self.result = df["mean"].loc[self._future_date_range] super().predict() return self.result