https://github.com/antoinecarme/pyaf
Raw File
Tip revision: f5d9c376cfa9ec4208a918129d3ec02ec4938973 authored by Antoine Carme on 23 November 2016, 14:42:16 UTC
Perform signal transformatiion in a uniform way #7
Tip revision: f5d9c37
HierarchicalForecastEngine.py
# Copyright (C) 2016 Antoine Carme <Antoine.Carme@Laposte.net>
# All rights reserved.

# This file is part of the Python Automatic Forecasting (PyAF) library and is made available under
# the terms of the 3 Clause BSD license

import pandas as pd
import numpy as np

from .TS import Options as tsopts
from .TS import Perf as tsperf
from .TS import Utils as tsutil
from .TS import SignalHierarchy as sighier
from .TS import Signal_Grouping as siggroup

from .CodeGen import TS_CodeGen_Objects as tscodegen

class cHierarchicalForecastEngine:
        
    def __init__(self):
        self.mOptions = tsopts.cSignalDecomposition_Options();
        self.mSignalHierarchy = None;
        pass
    
    def train(self , iInputDS, iTime, iSignal, iHorizon, iHierarchy = None, iExogenousData = None, ):
        try:
            self.train_HierarchicalModel(iInputDS, iTime, iSignal, iHorizon, iHierarchy, iExogenousData);
        except tsutil.ForecastError as error:
            print('caught this training error: ' + repr(error))            
            raise Exception("HIERARCHICAL_TRAIN_FAILED");
        pass

    def forecast(self , iInputDS, iHorizon):
        try:
            lForecastFrame = self.forecast_HierarchicalModel(iInputDS, iHorizon);
            return lForecastFrame;
        except tsutil.ForecastError as error:
            print('caught this forecast error: ' + repr(error))
            raise Exception("HIERARCHICAL_FORECAST_FAILED");
        
    def getModelInfo(self):
        self.mSignalHierarchy.getModelInfo();

    
    def standrdPlots(self , name = None):
        self.mSignalHierarchy.standrdPlots(name);

    def getPlotsAsDict(self):
        return self.mSignalDecomposition.getPlotsAsDict();

    def to_json(self):
        return self.mSignalDecomposition.to_json();

    def computePerf(self, actual, predicted , name):
        lForecastPerf =  tsperf.cPerf();
        lForecastPerf.compute(actual, predicted, name);
        return lForecastPerf;

    def generateCode(self, iDSN = None, iDialect = None):
        lCodeGenerator = tscodegen.cDecompositionCodeGenObject(iDSN, iDialect);
        lSQL = lCodeGenerator.generateCode(self);
        # print("GENERATED_SQL_CODE" , lSQL);
        return lSQL;


    def train_HierarchicalModel(self , iInputDS, iTime, iSignal, iHorizon, iHierarchy, iExogenousData = None):
        if(iHierarchy['Type'] == "Grouped"):
            self.mSignalHierarchy = siggroup.cSignalGrouping();
        else:
            self.mSignalHierarchy = sighier.cSignalHierarchy();
            
        self.mSignalHierarchy.mHierarchy = iHierarchy;
        self.mSignalHierarchy.mDateColumn = iTime;
        self.mSignalHierarchy.mHorizon = iHorizon;
        self.mSignalHierarchy.mExogenousData = iExogenousData;        
        self.mSignalHierarchy.mTrainingDataset = iInputDS;        
        self.mSignalHierarchy.mOptions = self.mOptions;        
        self.mSignalHierarchy.fit();


    def forecast_HierarchicalModel(self , iInputDS, iHorizon):
        return self.mSignalHierarchy.forecast(iInputDS, iHorizon);
back to top