import pickle import pandas as pd import numpy as np class PredictionModel: def __init__(self, model_path, data_path): self.model_path = model_path self.data_path = data_path self.load_model() self.load_data() def load_model(self): with open(self.model_path, 'rb') as f: self.model = pickle.load(f) def load_data(self): self.df = pd.read_csv(self.data_path) self.df.columns = ['date', 'receipt_count'] def predict(self, period, alpha=0.05): yhat = self.model.forecast(period) intervals = self.compute_confidence_intervals(alpha, yhat) return yhat, intervals def compute_confidence_intervals(self, alpha, yhat): residuals = self.df.receipt_count - self.model.fittedvalues z = abs(np.percentile(np.random.standard_normal(10000), [100 * alpha/2, 100 * (1 - alpha/2)])) std_residual = residuals.std() interval_upper = yhat + z[1] * std_residual * np.sqrt(1 + 1/len(self.df)) interval_lower = yhat - z[1] * std_residual * np.sqrt(1 + 1/len(self.df)) return [interval_lower, interval_upper]