Spaces:
Sleeping
Sleeping
| 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] | |