antoinecarme / pyaf

PyAF is an Open Source Python library for Automatic Time Series Forecasting built on top of popular pydata modules.
BSD 3-Clause "New" or "Revised" License
458 stars 73 forks source link

Hierarchical Forecast Error when using models other than 'NoAR' #116

Closed vrduddu closed 4 years ago

vrduddu commented 4 years ago

I am Developing an Hierarchical Forecast Model where some of the columns in the last branch of Hierarchy are zero. When using 'AR" method to forecast I get the following error "Train Failed". Could you please help on how to get around with zeros and still run models other than NoAR. Also, how can we give exogenous variables as input when dealing with Hierarchical Model. Many thanks in advance.

IndexError Traceback (most recent call last) ~\pyaf\ForecastEngine.py in train(self, iInputDS, iTime, iSignal, iHorizon, iExogenousData) 24 self.mSignalDecomposition.mOptions = self.mOptions; ---> 25 self.mSignalDecomposition.train(iInputDS, iTime, iSignal, iHorizon, iExogenousData); 26 except tsutil.PyAF_Error as error:

~\pyaf\TS\SignalDecomposition.py in train(self, iInputDS, iTime, iSignal, iHorizon, iExogenousData) 703 lTrainer.train(iInputDS, iTime, iSignal, iHorizon) --> 704 lTrainer.perform_model_selection() 705 self.mBestModel = lTrainer.mBestModel

~\pyaf\TS\SignalDecomposition.py in perform_model_selection(self) 346 else: --> 347 self.collectPerformanceIndices_ModelSelection(); 348

~\pyaf\TS\SignalDecomposition.py in collectPerformanceIndices_ModelSelection(self) 500 # print(self.mPerfsByModel); --> 501 lBestName = lInterestingModels['Model'].iloc[0]; 502 self.mBestModel = self.mPerfsByModel[lBestName][0];

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexing.py in getitem(self, key) 1423 maybe_callable = com.apply_if_callable(key, self.obj) -> 1424 return self._getitem_axis(maybe_callable, axis=axis) 1425

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexing.py in _getitem_axis(self, key, axis) 2156 # validate the location -> 2157 self._validate_integer(key, axis) 2158

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexing.py in _validate_integer(self, key, axis) 2087 if key >= len_axis or key < -len_axis: -> 2088 raise IndexError("single positional indexer is out-of-bounds") 2089

IndexError: single positional indexer is out-of-bounds

During handling of the above exception, another exception occurred:

PyAF_Error Traceback (most recent call last)

in 21 train_df = df.head(N-H); 22 if __name__ == '__main__': ---> 23 lSignalHierarchy = lEngine.train(train_df , lDateColumn, lSignalVar, 1, lHierarchy, None); ~\pyaf\HierarchicalForecastEngine.py in train(self, iInputDS, iTime, iSignal, iHorizon, iHierarchy, iExogenousData) 23 self.train_HierarchicalModel(iInputDS, iTime, iSignal, iHorizon, iHierarchy, iExogenousData); 24 except tsutil.PyAF_Error as error: ---> 25 raise error 26 except Exception as error: 27 # print('caught this training error: ' + repr(error)) ~\pyaf\HierarchicalForecastEngine.py in train(self, iInputDS, iTime, iSignal, iHorizon, iHierarchy, iExogenousData) 21 def train(self , iInputDS, iTime, iSignal, iHorizon, iHierarchy = None, iExogenousData = None, ): 22 try: ---> 23 self.train_HierarchicalModel(iInputDS, iTime, iSignal, iHorizon, iHierarchy, iExogenousData); 24 except tsutil.PyAF_Error as error: 25 raise error ~\pyaf\HierarchicalForecastEngine.py in train_HierarchicalModel(self, iInputDS, iTime, iSignal, iHorizon, iHierarchy, iExogenousData) 92 lSignalHierarchy = self.create_signal_hierarchy(iInputDS, iTime, iSignal, iHorizon, iHierarchy, iExogenousData); 93 self.mSignalHierarchy = lSignalHierarchy; ---> 94 self.mSignalHierarchy.fit(); 95 96 ~\pyaf\TS\SignalHierarchy.py in fit(self) 184 self.create_SummingMatrix(); 185 lAllLevelsDataset = self.create_all_levels_dataset(self.mTrainingDataset); --> 186 self.create_all_levels_models(lAllLevelsDataset, self.mHorizon, self.mDateColumn); 187 self.computeTopDownHistoricalProportions(lAllLevelsDataset); 188 lForecast_DF = self.internal_forecast(self.mTrainingDataset , self.mHorizon) ~\pyaf\TS\SignalHierarchy.py in create_all_levels_models(self, iAllLevelsDataset, H, iDateColumn) 169 lEngine = autof.cForecastEngine() 170 lEngine.mOptions = self.mOptions; --> 171 lEngine.train(iAllLevelsDataset , iDateColumn , signal, H); 172 lEngine.getModelInfo(); 173 self.mModels[level][signal] = lEngine; ~\pyaf\ForecastEngine.py in train(self, iInputDS, iTime, iSignal, iHorizon, iExogenousData) 28 except Exception as error: 29 # print('caught this training error: ' + repr(error)) ---> 30 raise tsutil.PyAF_Error("TRAIN_FAILED"); 31 pass 32 PyAF_Error: TRAIN_FAILED
antoinecarme commented 4 years ago

@vrduddu

Thanks for using pyaf. I would be glad to help if you respect the guidelines for submitting an issue, to be able to reproduce this issue:

image

antoinecarme commented 4 years ago

Closing issue after no response for 30 days. Not blocking. Please repoen if needed.