File size: 1,158 Bytes
22fca73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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]