https://github.com/antoinecarme/pyaf
Tip revision: f5d9c376cfa9ec4208a918129d3ec02ec4938973 authored by Antoine Carme on 23 November 2016, 14:42:16 UTC
Perform signal transformatiion in a uniform way #7
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);