In [1]:
%matplotlib inline
import pyaf
import datetime

In [2]:
# !wget https://raw.githubusercontent.com/antoinecarme/TimeSeriesData/master/YahooFinance/nasdaq/yahoo_GOOG.csv

In [3]:
goog_link = 'https://raw.githubusercontent.com/antoinecarme/TimeSeriesData/master/YahooFinance/nasdaq/yahoo_GOOG.csv'
    
import pandas as pd
goog_dataframe = pd.read_csv(goog_link);
goog_dataframe['Date'] = goog_dataframe['Date'].apply(lambda x : datetime.datetime.strptime(x, "%Y-%m-%d"))
goog_dataframe.sort_values(by = 'Date' , ascending=True, inplace=True)
goog_dataframe = goog_dataframe.reset_index(drop=True)
goog_dataframe.tail()


Out[3]:
Unnamed: 0 Symbol Date Close Low Volume Open Adj_Close High
1253 4 GOOG 2016-07-21 738.630005 735.830994 969100 740.359985 738.630005 741.690002
1254 3 GOOG 2016-07-22 742.739990 736.559998 1256300 741.859985 742.739990 743.239990
1255 2 GOOG 2016-07-25 739.770020 737.500000 1030700 740.669983 739.770020 742.609985
1256 1 GOOG 2016-07-26 738.419983 734.270020 1179400 739.039978 738.419983 741.690002
1257 0 GOOG 2016-07-27 741.770020 737.000000 1497100 738.280029 741.770020 744.460022

In [4]:
lDate =  goog_dataframe.Date
goog_dataframe.info()


<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1258 entries, 0 to 1257
Data columns (total 9 columns):
 #   Column      Non-Null Count  Dtype         
---  ------      --------------  -----         
 0   Unnamed: 0  1258 non-null   int64         
 1   Symbol      1258 non-null   object        
 2   Date        1258 non-null   datetime64[ns]
 3   Close       1258 non-null   float64       
 4   Low         1258 non-null   float64       
 5   Volume      1258 non-null   int64         
 6   Open        1258 non-null   float64       
 7   Adj_Close   1258 non-null   float64       
 8   High        1258 non-null   float64       
dtypes: datetime64[ns](1), float64(5), int64(2), object(1)
memory usage: 88.6+ KB

In [5]:
goog_dataframe.Date.min(), goog_dataframe.Date.max()


Out[5]:
(Timestamp('2011-07-28 00:00:00'), Timestamp('2016-07-27 00:00:00'))

In [6]:
lHierarchy = {};
lHierarchy['Levels'] = None;
lHierarchy['Data'] = None;
lHierarchy['Groups']= {};

lHierarchy['Periods']= ["D", "W" , "2W" , "M"]

lHierarchy['Type'] = "Temporal";

In [7]:
# create a model to plot the hierarchy.
import pyaf.HierarchicalForecastEngine as hautof
lEngine = hautof.cHierarchicalForecastEngine()

H = 14

lSignalHierarchy = lEngine.plot_Hierarchy(goog_dataframe , "Date", "Close", H, 
                                          lHierarchy, None);


INFO:pyaf.std:START_HIERARCHICAL_PLOTTING
INFO:pyaf.std:END_HIERARCHICAL_PLOTTING_TIME_IN_SECONDS 0.09484243392944336

In [8]:
goog_dataframe


Out[8]:
Unnamed: 0 Symbol Date Close Low Volume Open Adj_Close High
0 1257 GOOG 2011-07-28 610.941019 603.001016 6240000 605.191021 305.165344 615.981027
1 1256 GOOG 2011-07-29 603.691033 603.691033 8305700 604.231014 301.543972 614.961042
2 1255 GOOG 2011-08-01 606.771021 599.181019 7961800 611.221057 303.082428 615.501085
3 1254 GOOG 2011-08-02 592.400990 591.570985 6425100 606.001054 295.904590 609.671015
4 1253 GOOG 2011-08-03 601.171059 583.630982 7680000 594.271013 300.285244 603.001016
... ... ... ... ... ... ... ... ... ...
1253 4 GOOG 2016-07-21 738.630005 735.830994 969100 740.359985 738.630005 741.690002
1254 3 GOOG 2016-07-22 742.739990 736.559998 1256300 741.859985 742.739990 743.239990
1255 2 GOOG 2016-07-25 739.770020 737.500000 1030700 740.669983 739.770020 742.609985
1256 1 GOOG 2016-07-26 738.419983 734.270020 1179400 739.039978 738.419983 741.690002
1257 0 GOOG 2016-07-27 741.770020 737.000000 1497100 738.280029 741.770020 744.460022

1258 rows × 9 columns


In [9]:
goog_dataframe.describe(include='all')


Out[9]:
Unnamed: 0 Symbol Date Close Low Volume Open Adj_Close High
count 1258.000000 1258 1258 1258.000000 1258.000000 1.258000e+03 1258.000000 1258.000000 1258.000000
unique NaN 1 1258 NaN NaN NaN NaN NaN NaN
top NaN GOOG 2012-02-14 00:00:00 NaN NaN NaN NaN NaN NaN
freq NaN 1258 1 NaN NaN NaN NaN NaN NaN
first NaN NaN 2011-07-28 00:00:00 NaN NaN NaN NaN NaN NaN
last NaN NaN 2016-07-27 00:00:00 NaN NaN NaN NaN NaN NaN
mean 628.500000 NaN NaN 696.285816 690.186479 3.605697e+06 696.447039 491.820009 702.078363
std 363.297628 NaN NaN 168.831035 168.088283 2.526549e+06 168.945199 146.224491 169.631658
min 0.000000 NaN NaN 490.920851 480.600832 7.900000e+03 490.030838 245.215210 495.978230
25% 314.250000 NaN NaN 568.940062 563.376311 1.788850e+06 569.516381 347.184670 574.225972
50% 628.500000 NaN NaN 645.670549 639.901080 3.142550e+06 646.246105 524.662396 650.050058
75% 942.750000 NaN NaN 754.428788 749.542496 4.638225e+06 754.115961 582.637646 761.301311
max 1257.000000 NaN NaN 1220.172036 1218.602083 2.497790e+07 1226.802152 776.599976 1228.882066

In [10]:
# create a hierarchical model and train it
import pyaf.HierarchicalForecastEngine as hautof

lEngine = hautof.cHierarchicalForecastEngine()
lEngine.mOptions.mNbCores = 20
lEngine.mOptions.mHierarchicalCombinationMethod = ["BU" , 'TD' , 'MO' , 'OC']
lDateColumn = "Date"
lSignalVar = "Close";

#
N = goog_dataframe.shape[0];
train_df = goog_dataframe

print(train_df)
lSignalHierarchy = lEngine.train(train_df , lDateColumn, lSignalVar, H, lHierarchy, None);


INFO:pyaf.std:START_HIERARCHICAL_TRAINING
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_TEMPORAL_HORIZONS_FIRST_RESAMPLED_DATA D {'TH_D_start': {0: Timestamp('2011-07-28 00:00:00'), 1: Timestamp('2011-07-29 00:00:00'), 2: Timestamp('2011-07-30 00:00:00'), 3: Timestamp('2011-07-31 00:00:00'), 4: Timestamp('2011-08-01 00:00:00')}, 'Close': {0: 610.9410190000001, 1: 603.6910330000001, 2: 0.0, 3: 0.0, 4: 606.771021}}
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_TEMPORAL_HORIZONS_FIRST_RESAMPLED_DATA W {'TH_W_start': {0: Timestamp('2011-07-28 00:00:00'), 1: Timestamp('2011-08-04 00:00:00'), 2: Timestamp('2011-08-11 00:00:00'), 3: Timestamp('2011-08-18 00:00:00'), 4: Timestamp('2011-08-25 00:00:00')}, 'Close': {0: 1214.6320520000002, 1: 2956.9050859999998, 2: 2794.344764, 3: 2625.184499, 4: 2587.1843790000003}}
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_TEMPORAL_HORIZONS_FIRST_RESAMPLED_DATA 2W {'TH_2W_start': {0: Timestamp('2011-07-28 00:00:00'), 1: Timestamp('2011-08-11 00:00:00'), 2: Timestamp('2011-08-25 00:00:00'), 3: Timestamp('2011-09-08 00:00:00'), 4: Timestamp('2011-09-22 00:00:00')}, 'Close': {0: 1214.6320520000002, 1: 5751.24985, 2: 5212.368878, 3: 4794.108336, 4: 5359.629179}}
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_TEMPORAL_HORIZONS_FIRST_RESAMPLED_DATA M {'TH_M_start': {0: Timestamp('2011-07-28 00:00:00'), 1: Timestamp('2011-08-28 00:00:00'), 2: Timestamp('2011-09-27 00:00:00'), 3: Timestamp('2011-10-28 00:00:00'), 4: Timestamp('2011-11-27 00:00:00')}, 'Close': {0: 1214.6320520000002, 1: 12584.361559, 2: 11175.609259999997, 3: 11796.610139999997, 4: 12483.521440000002}}
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_TEMPORAL_HORIZONS {'D': 14, 'W': 2, '2W': 1, 'M': 1}
INFO:pyaf.hierarchical:TRAINING_HIERARCHICAL_MODELS_LEVEL_SIGNAL [(0, 'Close_D'), (1, 'Close_W'), (2, 'Close_2W'), (3, 'Close_M')]
      Unnamed: 0 Symbol       Date       Close         Low   Volume  \
0           1257   GOOG 2011-07-28  610.941019  603.001016  6240000   
1           1256   GOOG 2011-07-29  603.691033  603.691033  8305700   
2           1255   GOOG 2011-08-01  606.771021  599.181019  7961800   
3           1254   GOOG 2011-08-02  592.400990  591.570985  6425100   
4           1253   GOOG 2011-08-03  601.171059  583.630982  7680000   
...          ...    ...        ...         ...         ...      ...   
1253           4   GOOG 2016-07-21  738.630005  735.830994   969100   
1254           3   GOOG 2016-07-22  742.739990  736.559998  1256300   
1255           2   GOOG 2016-07-25  739.770020  737.500000  1030700   
1256           1   GOOG 2016-07-26  738.419983  734.270020  1179400   
1257           0   GOOG 2016-07-27  741.770020  737.000000  1497100   

            Open   Adj_Close        High  
0     605.191021  305.165344  615.981027  
1     604.231014  301.543972  614.961042  
2     611.221057  303.082428  615.501085  
3     606.001054  295.904590  609.671015  
4     594.271013  300.285244  603.001016  
...          ...         ...         ...  
1253  740.359985  738.630005  741.690002  
1254  741.859985  742.739990  743.239990  
1255  740.669983  739.770020  742.609985  
1256  739.039978  738.419983  741.690002  
1257  738.280029  741.770020  744.460022  

[1258 rows x 9 columns]
INFO:pyaf.std:START_TRAINING 'Close_W'
INFO:pyaf.std:START_TRAINING 'Close_2W'
INFO:pyaf.std:START_TRAINING 'Close_D'
INFO:pyaf.std:START_TRAINING 'Close_M'
INFO:pyaf.std:END_TRAINING_TIME_IN_SECONDS 'Close_M' 4.861104726791382
INFO:pyaf.std:END_TRAINING_TIME_IN_SECONDS 'Close_2W' 6.084774732589722
INFO:pyaf.std:END_TRAINING_TIME_IN_SECONDS 'Close_W' 7.977045774459839
INFO:pyaf.std:END_TRAINING_TIME_IN_SECONDS 'Close_D' 9.622517108917236
INFO:pyaf.hierarchical:TRAINING_HIERARCHICAL_MODEL_COMPUTE_TOP_DOWN_HISTORICAL_PROPORTIONS
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODELS_LEVEL_SIGNAL [(0, 'Close_D'), (1, 'Close_W'), (2, 'Close_2W'), (3, 'Close_M')]
INFO:pyaf.std:START_FORECASTING 'Close_D'
INFO:pyaf.std:START_FORECASTING 'Close_W'
INFO:pyaf.std:START_FORECASTING 'Close_2W'
INFO:pyaf.std:START_FORECASTING 'Close_M'
INFO:pyaf.std:END_FORECAST_TIME_IN_SECONDS  'Close_W' 0.3165409564971924
INFO:pyaf.std:END_FORECAST_TIME_IN_SECONDS  'Close_M' 0.2951540946960449
INFO:pyaf.std:END_FORECAST_TIME_IN_SECONDS  'Close_D' 0.36931705474853516
INFO:pyaf.std:END_FORECAST_TIME_IN_SECONDS  'Close_2W' 0.5673017501831055
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODEL_COMBINATION_METHODS ['BU', 'TD', 'MO', 'OC']
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODEL_BOTTOM_UP_METHOD BU
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODEL_TOP_DOWN_METHOD AHP_TD
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODEL_TOP_DOWN_METHOD PHA_TD
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODEL_MIDDLE_OUT_METHOD MO
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODEL_OPTIMAL_COMBINATION_METHOD OC
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODEL_OPTIMAL_COMBINATION_METHOD
INFO:pyaf.hierarchical:STRUCTURE [0, 1, 2, 3]
INFO:pyaf.hierarchical:DATASET_COLUMNS Index(['TH_D_start', 'Close_D', 'Close_D_Forecast',
       'Close_D_Forecast_Lower_Bound', 'Close_D_Forecast_Upper_Bound', 'Date',
       'TH_W_start', 'Close_W', 'Close_W_Forecast',
       'Close_W_Forecast_Lower_Bound', 'Close_W_Forecast_Upper_Bound',
       'TH_2W_start', 'Close_2W', 'Close_2W_Forecast',
       'Close_2W_Forecast_Lower_Bound', 'Close_2W_Forecast_Upper_Bound',
       'TH_M_start', 'Close_M', 'Close_M_Forecast',
       'Close_M_Forecast_Lower_Bound', 'Close_M_Forecast_Upper_Bound',
       'Close_D_BU_Forecast', 'Close_W_BU_Forecast', 'Close_2W_BU_Forecast',
       'Close_M_BU_Forecast', 'Close_M_AHP_TD_Forecast',
       'Close_2W_AHP_TD_Forecast', 'Close_W_AHP_TD_Forecast',
       'Close_D_AHP_TD_Forecast', 'Close_M_PHA_TD_Forecast',
       'Close_2W_PHA_TD_Forecast', 'Close_W_PHA_TD_Forecast',
       'Close_D_PHA_TD_Forecast', 'Close_2W_MO_Forecast',
       'Close_W_MO_Forecast', 'Close_D_MO_Forecast', 'Close_M_MO_Forecast',
       'Close_D_OC_Forecast', 'Close_W_OC_Forecast', 'Close_2W_OC_Forecast',
       'Close_M_OC_Forecast'],
      dtype='object')
INFO:pyaf.hierarchical:STRUCTURE_LEVEL (0, ['Close_D'])
INFO:pyaf.hierarchical:MODEL_LEVEL (0, ['Close_D'])
INFO:pyaf.hierarchical:STRUCTURE_LEVEL (1, ['Close_W'])
INFO:pyaf.hierarchical:MODEL_LEVEL (1, ['Close_W'])
INFO:pyaf.hierarchical:STRUCTURE_LEVEL (2, ['Close_2W'])
INFO:pyaf.hierarchical:MODEL_LEVEL (2, ['Close_2W'])
INFO:pyaf.hierarchical:STRUCTURE_LEVEL (3, ['Close_M'])
INFO:pyaf.hierarchical:MODEL_LEVEL (3, ['Close_M'])
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_2W_AHP_TD_Forecast', 'Length': 995, 'MAPE': 2776032921475.9487, 'RMSE': 2737.5848411293773, 'MAE': 952.5951585290619, 'SMAPE': 0.2576, 'ErrorMean': -369.84385686993306, 'ErrorStdDev': 2712.487102995502, 'R2': -0.7016167171133239, 'Pearson': -0.018367787198827003}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_2W_AHP_TD_Forecast', 'Length': 249, 'MAPE': 3825166537693.5825, 'RMSE': 2864.4445048657763, 'MAE': 1057.4950468336053, 'SMAPE': 0.2811, 'ErrorMean': -292.4617392949088, 'ErrorStdDev': 2849.475118772638, 'R2': -0.9982550521290008, 'Pearson': -0.06813589537097635}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_2W_BU_Forecast', 'Length': 995, 'MAPE': 3345651520166.883, 'RMSE': 1608.2278980436922, 'MAE': 673.5692136559799, 'SMAPE': 0.263, 'ErrorMean': -0.26203214271358155, 'ErrorStdDev': 1608.2278766969525, 'R2': 0.41275172202364296, 'Pearson': 0.6424576380265884}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_2W_BU_Forecast', 'Length': 249, 'MAPE': 3513041187778.162, 'RMSE': 1530.8936991572916, 'MAE': 689.1391409411646, 'SMAPE': 0.2755, 'ErrorMean': 13.46909661445786, 'ErrorStdDev': 1530.8344461619245, 'R2': 0.4292312786510575, 'Pearson': 0.6553438393838626}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_2W_MO_Forecast', 'Length': 995, 'MAPE': 0.009, 'RMSE': 252.2875406738142, 'MAE': 56.31200347511345, 'SMAPE': 0.0089, 'ErrorMean': 0.4189053213835233, 'ErrorStdDev': 252.2871928924914, 'R2': 0.9855483253669476, 'Pearson': 0.9927481207362143}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_2W_MO_Forecast', 'Length': 249, 'MAPE': 0.0061, 'RMSE': 158.1108826921304, 'MAE': 41.374497557833145, 'SMAPE': 0.0062, 'ErrorMean': -1.6287428552427792, 'ErrorStdDev': 158.10249340980084, 'R2': 0.9939117339736898, 'Pearson': 0.9969520798027944}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_2W_OC_Forecast', 'Length': 995, 'MAPE': 3464529399322.8633, 'RMSE': 1542.6180002764122, 'MAE': 749.7589258476539, 'SMAPE': 1.8812, 'ErrorMean': -46.557779444026, 'ErrorStdDev': 1541.9152596527601, 'R2': 0.45968956124563076, 'Pearson': 0.7186638424149668}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_2W_OC_Forecast', 'Length': 249, 'MAPE': 3910685985154.9287, 'RMSE': 1547.4705127139694, 'MAE': 795.8218586386099, 'SMAPE': 1.885, 'ErrorMean': -13.684661607635995, 'ErrorStdDev': 1547.4100031200262, 'R2': 0.4168035675631455, 'Pearson': 0.6660794172718046}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_2W_PHA_TD_Forecast', 'Length': 995, 'MAPE': 1941463088906.119, 'RMSE': 2467.6697383242617, 'MAE': 864.8445702333548, 'SMAPE': 0.2573, 'ErrorMean': -461.9343211535002, 'ErrorStdDev': 2424.048394810175, 'R2': -0.3826130104278689, 'Pearson': -0.018367787198827003}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_2W_PHA_TD_Forecast', 'Length': 249, 'MAPE': 2675191487967.812, 'RMSE': 2518.6713134211805, 'MAE': 942.4975418610283, 'SMAPE': 0.2811, 'ErrorMean': -407.45924426748576, 'ErrorStdDev': 2485.4943470689577, 'R2': -0.5449452225367206, 'Pearson': -0.06813589537097633}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_D_AHP_TD_Forecast', 'Length': 995, 'MAPE': 0.9838, 'RMSE': 711.0037085402807, 'MAE': 682.6197776102641, 'SMAPE': 1.9479, 'ErrorMean': -663.7626601541538, 'ErrorStdDev': 254.84388268725178, 'R2': -13.273727139752086, 'Pearson': 0.01723878979653144}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_D_AHP_TD_Forecast', 'Length': 249, 'MAPE': 0.9766, 'RMSE': 686.5856981610767, 'MAE': 680.238805606447, 'SMAPE': 1.9335, 'ErrorMean': -656.9629594537939, 'ErrorStdDev': 199.49834792560532, 'R2': -204.16066529229056, 'Pearson': 0.02539554181880069}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_D_BU_Forecast', 'Length': 995, 'MAPE': 0.0112, 'RMSE': 20.824307340848147, 'MAE': 7.480356877386935, 'SMAPE': 0.0109, 'ErrorMean': 0.06471460402010061, 'ErrorStdDev': 20.824206785520754, 'R2': 0.987755676705081, 'Pearson': 0.9938766114047678}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_D_BU_Forecast', 'Length': 249, 'MAPE': 0.0123, 'RMSE': 12.679197146142299, 'MAE': 8.433778807228913, 'SMAPE': 0.0123, 'ErrorMean': -0.5976305100401604, 'ErrorStdDev': 12.665104738777812, 'R2': 0.9300338297228191, 'Pearson': 0.9659469967328196}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_D_MO_Forecast', 'Length': 995, 'MAPE': 0.9075, 'RMSE': 683.9171568549807, 'MAE': 631.0062078639555, 'SMAPE': 1.8061, 'ErrorMean': -625.023257915492, 'ErrorStdDev': 277.6483468441775, 'R2': -12.206892892853324, 'Pearson': 0.07000778624986768}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_D_MO_Forecast', 'Length': 249, 'MAPE': 0.9044, 'RMSE': 662.5512235424183, 'MAE': 630.1077693108908, 'SMAPE': 1.804, 'ErrorMean': -626.5016298974506, 'ErrorStdDev': 215.56862376837987, 'R2': -190.04844802025605, 'Pearson': 0.02143634358885203}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_D_OC_Forecast', 'Length': 995, 'MAPE': 1.0883, 'RMSE': 1012.521465962027, 'MAE': 740.4937183965897, 'SMAPE': 1.1292, 'ErrorMean': -66.07724585005614, 'ErrorStdDev': 1010.3630617826266, 'R2': -27.946905074282803, 'Pearson': 0.09266731601743053}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_D_OC_Forecast', 'Length': 249, 'MAPE': 1.0881, 'RMSE': 1017.7330788922806, 'MAE': 758.0471843522033, 'SMAPE': 1.1232, 'ErrorMean': -35.53108734659183, 'ErrorStdDev': 1017.1126592976464, 'R2': -449.7880286769803, 'Pearson': 0.040075654908449804}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_D_PHA_TD_Forecast', 'Length': 995, 'MAPE': 0.9742, 'RMSE': 709.2472150859768, 'MAE': 677.4978108333861, 'SMAPE': 1.9421, 'ErrorMean': -673.3104342383566, 'ErrorStdDev': 222.90058603101392, 'R2': -13.203289422233622, 'Pearson': 0.01723878979653145}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_D_PHA_TD_Forecast', 'Length': 249, 'MAPE': 0.9621, 'RMSE': 684.1267817735454, 'MAE': 670.1741488454644, 'SMAPE': 1.9219, 'ErrorMean': -668.8856944108495, 'ErrorStdDev': 143.6014670967674, 'R2': -202.69378483847834, 'Pearson': 0.025395541818800684}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_M_AHP_TD_Forecast', 'Length': 995, 'MAPE': 0.0177, 'RMSE': 830.5523098115353, 'MAE': 115.61477484045227, 'SMAPE': 0.0083, 'ErrorMean': -3.6562601076298623e-14, 'ErrorStdDev': 830.5523098115353, 'R2': 0.9060575364102789, 'Pearson': 0.9518705460356883}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_M_AHP_TD_Forecast', 'Length': 249, 'MAPE': 0.0026, 'RMSE': 228.18956087704387, 'MAE': 38.863976915662676, 'SMAPE': 0.0026, 'ErrorMean': -3.198519037148638, 'ErrorStdDev': 228.16714305356746, 'R2': 0.9937872694257572, 'Pearson': 0.9969040392383512}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_M_BU_Forecast', 'Length': 995, 'MAPE': 6610282025093.147, 'RMSE': 3459.048242851759, 'MAE': 1117.1464262548284, 'SMAPE': 0.2571, 'ErrorMean': 206.39107728620766, 'ErrorStdDev': 3452.8853832110435, 'R2': -0.6294506153446426, 'Pearson': -0.02060826648071987}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_M_BU_Forecast', 'Length': 249, 'MAPE': 6733496502090.183, 'RMSE': 3643.1783833322443, 'MAE': 1263.6987668917452, 'SMAPE': 0.2811, 'ErrorMean': 83.00053352628333, 'ErrorStdDev': 3642.232782815192, 'R2': -0.5836231714521563, 'Pearson': -0.06789777755155059}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_M_MO_Forecast', 'Length': 995, 'MAPE': 6610282025093.147, 'RMSE': 3459.048242851759, 'MAE': 1117.1464262548284, 'SMAPE': 0.2571, 'ErrorMean': 206.39107728620766, 'ErrorStdDev': 3452.8853832110435, 'R2': -0.6294506153446426, 'Pearson': -0.02060826648071987}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_M_MO_Forecast', 'Length': 249, 'MAPE': 6733496502090.183, 'RMSE': 3643.1783833322443, 'MAE': 1263.6987668917452, 'SMAPE': 0.2811, 'ErrorMean': 83.00053352628333, 'ErrorStdDev': 3642.232782815192, 'R2': -0.5836231714521563, 'Pearson': -0.06789777755155059}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_M_OC_Forecast', 'Length': 995, 'MAPE': 4974338705865.516, 'RMSE': 2268.4273346235955, 'MAE': 843.3008711937699, 'SMAPE': 1.9717, 'ErrorMean': 159.41439252079812, 'ErrorStdDev': 2262.818955180625, 'R2': 0.2992264390928284, 'Pearson': 0.5923508921705316}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_M_OC_Forecast', 'Length': 249, 'MAPE': 5041008848525.577, 'RMSE': 2363.951899294798, 'MAE': 937.2571549312195, 'SMAPE': 1.9661, 'ErrorMean': 70.94461477389014, 'ErrorStdDev': 2362.8870992525367, 'R2': 0.33324198376620917, 'Pearson': 0.6505448339141023}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_M_PHA_TD_Forecast', 'Length': 995, 'MAPE': 0.0177, 'RMSE': 830.5523098115353, 'MAE': 115.61477484045227, 'SMAPE': 0.0083, 'ErrorMean': -3.6562601076298623e-14, 'ErrorStdDev': 830.5523098115353, 'R2': 0.9060575364102789, 'Pearson': 0.9518705460356883}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_M_PHA_TD_Forecast', 'Length': 249, 'MAPE': 0.0026, 'RMSE': 228.18956087704387, 'MAE': 38.863976915662676, 'SMAPE': 0.0026, 'ErrorMean': -3.198519037148638, 'ErrorStdDev': 228.16714305356746, 'R2': 0.9937872694257572, 'Pearson': 0.9969040392383512}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_W_AHP_TD_Forecast', 'Length': 995, 'MAPE': 1240260018834.081, 'RMSE': 1734.9964251298188, 'MAE': 793.2183984298831, 'SMAPE': 0.4454, 'ErrorMean': -523.2553118877048, 'ErrorStdDev': 1654.2117378964979, 'R2': -0.5077121645183675, 'Pearson': -0.01633332545763576}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_W_AHP_TD_Forecast', 'Length': 249, 'MAPE': 1715558923178.67, 'RMSE': 1763.8432245055267, 'MAE': 851.5078985405795, 'SMAPE': 0.475, 'ErrorMean': -499.1770801501836, 'ErrorStdDev': 1691.7343654624954, 'R2': -0.6656955211606534, 'Pearson': -0.049381651149181006}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_W_BU_Forecast', 'Length': 995, 'MAPE': 5554731227196.139, 'RMSE': 1400.465595836037, 'MAE': 1091.100032286432, 'SMAPE': 1.8609, 'ErrorMean': 19.84621315276382, 'ErrorStdDev': 1400.3249669072825, 'R2': 0.017650204967116556, 'Pearson': 0.1335951801411986}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_W_BU_Forecast', 'Length': 249, 'MAPE': 5534286741727.069, 'RMSE': 1365.7025818284144, 'MAE': 1100.4248983333332, 'SMAPE': 1.859, 'ErrorMean': 6.4324500120482, 'ErrorStdDev': 1365.6874333461665, 'R2': 0.0014083815798241472, 'Pearson': 0.03788206979138008}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_W_MO_Forecast', 'Length': 995, 'MAPE': 0.1116, 'RMSE': 1134.8309894426818, 'MAE': 377.78030112282846, 'SMAPE': 0.2103, 'ErrorMean': -334.36037070941194, 'ErrorStdDev': 1084.4558622177856, 'R2': 0.3549644601377061, 'Pearson': 0.6482899970119079}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_W_MO_Forecast', 'Length': 249, 'MAPE': 0.1128, 'RMSE': 1096.81650445594, 'MAE': 377.9494623195107, 'SMAPE': 0.217, 'ErrorMean': -349.8849402430323, 'ErrorStdDev': 1039.5128537146988, 'R2': 0.35591437051876196, 'Pearson': 0.6555957042377438}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_W_OC_Forecast', 'Length': 995, 'MAPE': 2343761442265.795, 'RMSE': 1080.8877101697558, 'MAE': 549.6539400711623, 'SMAPE': 1.7241, 'ErrorMean': -46.295747301312424, 'ErrorStdDev': 1079.8958032041014, 'R2': 0.4148294946718465, 'Pearson': 0.6483403146875693}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_W_OC_Forecast', 'Length': 249, 'MAPE': 2704660530134.3774, 'RMSE': 1082.6351910407116, 'MAE': 578.0573424462906, 'SMAPE': 1.7207, 'ErrorMean': -28.50100682450347, 'ErrorStdDev': 1082.2599731532841, 'R2': 0.3724621360584125, 'Pearson': 0.6227352342547627}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_FIT_PERF {'Signal': 'Close_W_PHA_TD_Forecast', 'Length': 995, 'MAPE': 878673508467.635, 'RMSE': 1642.6286968889538, 'MAE': 751.539286605809, 'SMAPE': 0.4442, 'ErrorMean': -567.7582670097286, 'ErrorStdDev': 1541.3888497342946, 'R2': -0.3514503083491063, 'Pearson': -0.01633332545763576}
INFO:pyaf.hierarchical:REPORT_COMBINED_FORECASTS_VALID_PERF {'Signal': 'Close_W_PHA_TD_Forecast', 'Length': 249, 'MAPE': 1215403346976.707, 'RMSE': 1643.3198066391965, 'MAE': 797.8305913457029, 'SMAPE': 0.4742, 'ErrorMean': -554.7499219504016, 'ErrorStdDev': 1546.8524528825333, 'R2': -0.4458386669503469, 'Pearson': -0.04938165114918099}
INFO:pyaf.std:END_HIERARCHICAL_TRAINING_TIME_IN_SECONDS 11.185094594955444

In [11]:
train_df


Out[11]:
Unnamed: 0 Symbol Date Close Low Volume Open Adj_Close High
0 1257 GOOG 2011-07-28 610.941019 603.001016 6240000 605.191021 305.165344 615.981027
1 1256 GOOG 2011-07-29 603.691033 603.691033 8305700 604.231014 301.543972 614.961042
2 1255 GOOG 2011-08-01 606.771021 599.181019 7961800 611.221057 303.082428 615.501085
3 1254 GOOG 2011-08-02 592.400990 591.570985 6425100 606.001054 295.904590 609.671015
4 1253 GOOG 2011-08-03 601.171059 583.630982 7680000 594.271013 300.285244 603.001016
... ... ... ... ... ... ... ... ... ...
1253 4 GOOG 2016-07-21 738.630005 735.830994 969100 740.359985 738.630005 741.690002
1254 3 GOOG 2016-07-22 742.739990 736.559998 1256300 741.859985 742.739990 743.239990
1255 2 GOOG 2016-07-25 739.770020 737.500000 1030700 740.669983 739.770020 742.609985
1256 1 GOOG 2016-07-26 738.419983 734.270020 1179400 739.039978 738.419983 741.690002
1257 0 GOOG 2016-07-27 741.770020 737.000000 1497100 738.280029 741.770020 744.460022

1258 rows × 9 columns


In [12]:
lEngine.getModelInfo()


INFO:pyaf.std:TIME_DETAIL TimeVariable='TH_D_start' TimeMin=2011-07-28T00:00:00.000000 TimeMax=2015-07-13T00:00:00.000000 TimeDelta=<DateOffset: days=1> Horizon=14
INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Close_D' Length=1258  Min=490.92085099999997 Max=1220.172036  Mean=696.2858158593004 StdDev=168.76391868223206
INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='_Close_D' Min=490.92085099999997 Max=1220.172036  Mean=696.2858158593004 StdDev=168.76391868223206
INFO:pyaf.std:BEST_TRANSOFORMATION_TYPE '_'
INFO:pyaf.std:BEST_DECOMPOSITION  '_Close_D_Lag1Trend_residue_zeroCycle_residue_NoAR' [Lag1Trend + NoCycle + NoAR]
INFO:pyaf.std:TREND_DETAIL '_Close_D_Lag1Trend' [Lag1Trend]
INFO:pyaf.std:CYCLE_DETAIL '_Close_D_Lag1Trend_residue_zeroCycle' [NoCycle]
INFO:pyaf.std:AUTOREG_DETAIL '_Close_D_Lag1Trend_residue_zeroCycle_residue_NoAR' [NoAR]
INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.0112 MAPE_Forecast=0.0123 MAPE_Test=0.0069
INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.0109 SMAPE_Forecast=0.0123 SMAPE_Test=0.0069
INFO:pyaf.std:MODEL_MASE MASE_Fit=0.999 MASE_Forecast=1.0029 MASE_Test=1.0891
INFO:pyaf.std:MODEL_L1 L1_Fit=7.480356877386935 L1_Forecast=8.433778807228913 L1_Test=4.977870357142884
INFO:pyaf.std:MODEL_L2 L2_Fit=20.824307340848147 L2_Forecast=12.679197146142299 L2_Test=6.114957523107389
INFO:pyaf.std:MODEL_COMPLEXITY 32
INFO:pyaf.std:AR_MODEL_DETAIL_START
INFO:pyaf.std:AR_MODEL_DETAIL_END
INFO:pyaf.std:TIME_DETAIL TimeVariable='TH_W_start' TimeMin=2011-07-28T00:00:00.000000 TimeMax=2015-07-09T00:00:00.000000 TimeDelta=<DateOffset: days=7> Horizon=2
INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Close_W' Length=253  Min=1214.6320520000002 Max=6087.550444  Mean=3365.884921806324 StdDev=854.991935799981
INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='_Close_W' Min=1214.6320520000002 Max=6087.550444  Mean=3365.884921806324 StdDev=854.991935799981
INFO:pyaf.std:BEST_TRANSOFORMATION_TYPE '_'
INFO:pyaf.std:BEST_DECOMPOSITION  '_Close_W_ConstantTrend_residue_bestCycle_byL2_residue_NoAR' [ConstantTrend + Cycle + NoAR]
INFO:pyaf.std:TREND_DETAIL '_Close_W_ConstantTrend' [ConstantTrend]
INFO:pyaf.std:CYCLE_DETAIL '_Close_W_ConstantTrend_residue_bestCycle_byL2' [Cycle]
INFO:pyaf.std:AUTOREG_DETAIL '_Close_W_ConstantTrend_residue_bestCycle_byL2_residue_NoAR' [NoAR]
INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.2301 MAPE_Forecast=0.0823 MAPE_Test=0.0722
INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.2217 SMAPE_Forecast=0.0806 SMAPE_Test=0.075
INFO:pyaf.std:MODEL_MASE MASE_Fit=2.8928 MASE_Forecast=1.1166 MASE_Test=2.6438
INFO:pyaf.std:MODEL_L1 L1_Fit=765.81600104325 L1_Forecast=267.1474366921568 L1_Test=263.8219616000001
INFO:pyaf.std:MODEL_L2 L2_Fit=947.0066837670896 L2_Forecast=305.9217832752113 L2_Test=270.60575339538264
INFO:pyaf.std:MODEL_COMPLEXITY 8
INFO:pyaf.std:AR_MODEL_DETAIL_START
INFO:pyaf.std:AR_MODEL_DETAIL_END
INFO:pyaf.std:TIME_DETAIL TimeVariable='TH_2W_start' TimeMin=2011-07-28T00:00:00.000000 TimeMax=2015-06-25T00:00:00.000000 TimeDelta=<DateOffset: days=14> Horizon=1
INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Close_2W' Length=127  Min=1214.6320520000002 Max=12157.820753000002  Mean=6678.270371968504 StdDev=1688.3262820022314
INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='_Close_2W' Min=1214.6320520000002 Max=12157.820753000002  Mean=6678.270371968504 StdDev=1688.3262820022314
INFO:pyaf.std:BEST_TRANSOFORMATION_TYPE '_'
INFO:pyaf.std:BEST_DECOMPOSITION  '_Close_2W_ConstantTrend_residue_bestCycle_byL2_residue_AR(31)' [ConstantTrend + Cycle + AR]
INFO:pyaf.std:TREND_DETAIL '_Close_2W_ConstantTrend' [ConstantTrend]
INFO:pyaf.std:CYCLE_DETAIL '_Close_2W_ConstantTrend_residue_bestCycle_byL2' [Cycle]
INFO:pyaf.std:AUTOREG_DETAIL '_Close_2W_ConstantTrend_residue_bestCycle_byL2_residue_AR(31)' [AR]
INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.0891 MAPE_Forecast=0.0623 MAPE_Test=0.0509
INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.0882 SMAPE_Forecast=0.0623 SMAPE_Test=0.0522
INFO:pyaf.std:MODEL_MASE MASE_Fit=0.9634 MASE_Forecast=0.8389 MASE_Test=None
INFO:pyaf.std:MODEL_L1 L1_Fit=556.1363266296128 L1_Forecast=412.27156487219423 L1_Test=370.5392450308518
INFO:pyaf.std:MODEL_L2 L2_Fit=794.7139543552947 L2_Forecast=496.0805996019726 L2_Test=370.5392450308518
INFO:pyaf.std:MODEL_COMPLEXITY 33
INFO:pyaf.std:AR_MODEL_DETAIL_START
INFO:pyaf.std:AR_MODEL_COEFF 1 _Close_2W_ConstantTrend_residue_bestCycle_byL2_residue_Lag1 0.8565222359721328
INFO:pyaf.std:AR_MODEL_COEFF 2 _Close_2W_ConstantTrend_residue_bestCycle_byL2_residue_Lag5 -0.21867934678037904
INFO:pyaf.std:AR_MODEL_COEFF 3 _Close_2W_ConstantTrend_residue_bestCycle_byL2_residue_Lag8 -0.18495551541802976
INFO:pyaf.std:AR_MODEL_COEFF 4 _Close_2W_ConstantTrend_residue_bestCycle_byL2_residue_Lag10 -0.17097808622334001
INFO:pyaf.std:AR_MODEL_COEFF 5 _Close_2W_ConstantTrend_residue_bestCycle_byL2_residue_Lag6 0.16849013201276541
INFO:pyaf.std:AR_MODEL_COEFF 6 _Close_2W_ConstantTrend_residue_bestCycle_byL2_residue_Lag19 -0.15289628622103105
INFO:pyaf.std:AR_MODEL_COEFF 7 _Close_2W_ConstantTrend_residue_bestCycle_byL2_residue_Lag18 0.1425129912047825
INFO:pyaf.std:AR_MODEL_COEFF 8 _Close_2W_ConstantTrend_residue_bestCycle_byL2_residue_Lag9 0.13131996647951633
INFO:pyaf.std:AR_MODEL_COEFF 9 _Close_2W_ConstantTrend_residue_bestCycle_byL2_residue_Lag7 0.110728709846457
INFO:pyaf.std:AR_MODEL_COEFF 10 _Close_2W_ConstantTrend_residue_bestCycle_byL2_residue_Lag22 0.10214549806041835
INFO:pyaf.std:AR_MODEL_DETAIL_END
INFO:pyaf.std:TIME_DETAIL TimeVariable='TH_M_start' TimeMin=2011-07-28T00:00:00.000000 TimeMax=2015-05-28T00:00:00.000000 TimeDelta=<DateOffset: days=45> Horizon=1
INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Close_M' Length=42  Min=1214.6320520000002 Max=23863.911013999998  Mean=14639.012529952382 StdDev=4080.495125298337
INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='_Close_M' Min=1214.6320520000002 Max=23863.911013999998  Mean=14639.012529952382 StdDev=4080.495125298337
INFO:pyaf.std:BEST_TRANSOFORMATION_TYPE '_'
INFO:pyaf.std:BEST_DECOMPOSITION  '_Close_M_ConstantTrend_residue_zeroCycle_residue_NoAR' [ConstantTrend + NoCycle + NoAR]
INFO:pyaf.std:TREND_DETAIL '_Close_M_ConstantTrend' [ConstantTrend]
INFO:pyaf.std:CYCLE_DETAIL '_Close_M_ConstantTrend_residue_zeroCycle' [NoCycle]
INFO:pyaf.std:AUTOREG_DETAIL '_Close_M_ConstantTrend_residue_zeroCycle_residue_NoAR' [NoAR]
INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.5514 MAPE_Forecast=0.0666 MAPE_Test=0.0594
INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.2595 SMAPE_Forecast=0.0664 SMAPE_Test=0.0612
INFO:pyaf.std:MODEL_MASE MASE_Fit=1.8633 MASE_Forecast=0.8219 MASE_Test=None
INFO:pyaf.std:MODEL_L1 L1_Fit=3594.8969051953122 L1_Forecast=972.7200135972229 L1_Test=922.6501296250008
INFO:pyaf.std:MODEL_L2 L2_Fit=4631.306692084218 L2_Forecast=1160.1850995003742 L2_Test=922.6501296250008
INFO:pyaf.std:MODEL_COMPLEXITY 0
INFO:pyaf.std:AR_MODEL_DETAIL_START
INFO:pyaf.std:AR_MODEL_DETAIL_END

In [13]:
lForecast = lEngine.forecast(train_df, iHorizon=14)


INFO:pyaf.std:START_HIERARCHICAL_FORECASTING
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODELS_LEVEL_SIGNAL [(0, 'Close_D'), (1, 'Close_W'), (2, 'Close_2W'), (3, 'Close_M')]
INFO:pyaf.std:START_FORECASTING 'Close_D'
INFO:pyaf.std:START_FORECASTING 'Close_W'
INFO:pyaf.std:START_FORECASTING 'Close_2W'
INFO:pyaf.std:START_FORECASTING 'Close_M'
INFO:pyaf.std:END_FORECAST_TIME_IN_SECONDS  'Close_M' 0.27402520179748535
INFO:pyaf.std:END_FORECAST_TIME_IN_SECONDS  'Close_W' 0.30748581886291504
INFO:pyaf.std:END_FORECAST_TIME_IN_SECONDS  'Close_D' 0.3749048709869385
INFO:pyaf.std:END_FORECAST_TIME_IN_SECONDS  'Close_2W' 0.5345020294189453
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODEL_COMBINATION_METHODS ['BU', 'TD', 'MO', 'OC']
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODEL_BOTTOM_UP_METHOD BU
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODEL_TOP_DOWN_METHOD AHP_TD
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODEL_TOP_DOWN_METHOD PHA_TD
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODEL_MIDDLE_OUT_METHOD MO
INFO:pyaf.hierarchical:FORECASTING_HIERARCHICAL_MODEL_OPTIMAL_COMBINATION_METHOD OC
INFO:pyaf.std:END_HIERARCHICAL_FORECAST_TIME_IN_SECONDS 0.9984056949615479

In [14]:
lForecast


Out[14]:
TH_D_start Close_D Close_D_Forecast Close_D_Forecast_Lower_Bound Close_D_Forecast_Upper_Bound Date TH_W_start Close_W Close_W_Forecast Close_W_Forecast_Lower_Bound ... Close_W_PHA_TD_Forecast Close_D_PHA_TD_Forecast Close_2W_MO_Forecast Close_W_MO_Forecast Close_D_MO_Forecast Close_M_MO_Forecast Close_D_OC_Forecast Close_W_OC_Forecast Close_2W_OC_Forecast Close_M_OC_Forecast
0 2011-07-28 610.941019 610.941019 NaN NaN 2011-07-28 2011-07-28 1214.632052 3292.628598 NaN ... 3362.615927 695.684197 1951.478567 985.11477 203.808223 1951.478567 5118.774516 5118.774516 5118.774516 5118.774516
1 2011-07-29 603.691033 610.941019 NaN NaN 2011-07-29 NaT 0.000000 0.000000 NaN ... 0.000000 0.000000 0.000000 0.00000 0.000000 0.000000 152.735255 152.735255 152.735255 152.735255
2 2011-08-01 606.771021 603.691033 NaN NaN 2011-08-01 NaT 0.000000 0.000000 NaN ... 0.000000 0.000000 0.000000 0.00000 0.000000 0.000000 150.922758 150.922758 150.922758 150.922758
3 2011-08-02 592.400990 606.771021 NaN NaN 2011-08-02 NaT 0.000000 0.000000 NaN ... 0.000000 0.000000 0.000000 0.00000 0.000000 0.000000 151.692755 151.692755 151.692755 151.692755
4 2011-08-03 601.171059 592.400990 NaN NaN 2011-08-03 NaT 0.000000 0.000000 NaN ... 0.000000 0.000000 0.000000 0.00000 0.000000 0.000000 148.100248 148.100248 148.100248 148.100248
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
1267 2016-08-06 NaN 741.770020 667.994786 815.545254 2016-08-06 NaT NaN 0.000000 NaN ... 0.000000 0.000000 0.000000 0.00000 0.000000 0.000000 185.442505 185.442505 185.442505 185.442505
1268 2016-08-07 NaN 741.770020 665.662316 817.877724 2016-08-07 NaT NaN 0.000000 NaN ... 0.000000 0.000000 0.000000 0.00000 0.000000 0.000000 185.442505 185.442505 185.442505 185.442505
1269 2016-08-08 NaN 741.770020 663.261926 820.278114 2016-08-08 NaT NaN 0.000000 NaN ... 0.000000 0.000000 0.000000 0.00000 0.000000 0.000000 185.442505 185.442505 185.442505 185.442505
1270 2016-08-09 NaN 741.770020 661.346074 822.193966 2016-08-09 NaT NaN 0.000000 NaN ... 0.000000 0.000000 0.000000 0.00000 0.000000 0.000000 185.442505 185.442505 185.442505 185.442505
1271 2016-08-10 NaN 741.770020 659.492849 824.047191 2016-08-10 NaT NaN 0.000000 NaN ... 0.000000 0.000000 0.000000 0.00000 0.000000 0.000000 185.442505 185.442505 185.442505 185.442505

1272 rows × 41 columns


In [15]:
lForecast.columns


Out[15]:
Index(['TH_D_start', 'Close_D', 'Close_D_Forecast',
       'Close_D_Forecast_Lower_Bound', 'Close_D_Forecast_Upper_Bound', 'Date',
       'TH_W_start', 'Close_W', 'Close_W_Forecast',
       'Close_W_Forecast_Lower_Bound', 'Close_W_Forecast_Upper_Bound',
       'TH_2W_start', 'Close_2W', 'Close_2W_Forecast',
       'Close_2W_Forecast_Lower_Bound', 'Close_2W_Forecast_Upper_Bound',
       'TH_M_start', 'Close_M', 'Close_M_Forecast',
       'Close_M_Forecast_Lower_Bound', 'Close_M_Forecast_Upper_Bound',
       'Close_D_BU_Forecast', 'Close_W_BU_Forecast', 'Close_2W_BU_Forecast',
       'Close_M_BU_Forecast', 'Close_M_AHP_TD_Forecast',
       'Close_2W_AHP_TD_Forecast', 'Close_W_AHP_TD_Forecast',
       'Close_D_AHP_TD_Forecast', 'Close_M_PHA_TD_Forecast',
       'Close_2W_PHA_TD_Forecast', 'Close_W_PHA_TD_Forecast',
       'Close_D_PHA_TD_Forecast', 'Close_2W_MO_Forecast',
       'Close_W_MO_Forecast', 'Close_D_MO_Forecast', 'Close_M_MO_Forecast',
       'Close_D_OC_Forecast', 'Close_W_OC_Forecast', 'Close_2W_OC_Forecast',
       'Close_M_OC_Forecast'],
      dtype='object')

In [16]:
lForecast.plot('Date' , ['Close_D' , 'Close_W' , 'Close_2W'] )


Out[16]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f7c282ca910>

In [17]:
lForecast.plot('TH_D_start' , ['Close_D' , 'Close_D_Forecast', 'Close_D_Forecast_Lower_Bound', 'Close_D_Forecast_Upper_Bound', 'Close_D_OC_Forecast'] )


Out[17]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f7c281ca040>

In [18]:
lForecast.plot('TH_W_start' , ['Close_W' , 'Close_W_Forecast', 'Close_W_Forecast_Lower_Bound', 'Close_W_Forecast_Upper_Bound', 'Close_W_OC_Forecast'  ] )


Out[18]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f7c281537f0>

In [19]:
lForecast.plot('TH_2W_start' , ['Close_2W' , 'Close_2W_Forecast' ,'Close_2W_Forecast_Lower_Bound', 'Close_2W_Forecast_Upper_Bound', 'Close_2W_OC_Forecast'    ] )


Out[19]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f7c2814a190>

In [20]:
lForecast.plot('TH_M_start' , ['Close_M' , 'Close_M_Forecast' ,  'Close_M_Forecast_Lower_Bound', 'Close_M_Forecast_Upper_Bound', 'Close_M_OC_Forecast'  ] )


Out[20]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f7c280a3850>

In [21]:
lForecast[lForecast.Date > goog_dataframe.Date.max()].sum()


Out[21]:
Close_D                              0.000000
Close_D_Forecast                 10384.780280
Close_D_Forecast_Lower_Bound      9515.444399
Close_D_Forecast_Upper_Bound     11254.116161
Close_W                              0.000000
Close_W_Forecast                  6761.284900
Close_W_Forecast_Lower_Bound      5562.071510
Close_W_Forecast_Upper_Bound      7960.498291
Close_2W                             0.000000
Close_2W_Forecast                 7217.101281
Close_2W_Forecast_Lower_Bound     6244.783305
Close_2W_Forecast_Upper_Bound     8189.419256
Close_M                              0.000000
Close_M_Forecast                     0.000000
Close_M_Forecast_Lower_Bound         0.000000
Close_M_Forecast_Upper_Bound         0.000000
Close_D_BU_Forecast              10384.780280
Close_W_BU_Forecast              10384.780280
Close_2W_BU_Forecast              6761.284900
Close_M_BU_Forecast               7217.101281
Close_M_AHP_TD_Forecast              0.000000
Close_2W_AHP_TD_Forecast             0.000000
Close_W_AHP_TD_Forecast              0.000000
Close_D_AHP_TD_Forecast              0.000000
Close_M_PHA_TD_Forecast              0.000000
Close_2W_PHA_TD_Forecast             0.000000
Close_W_PHA_TD_Forecast              0.000000
Close_D_PHA_TD_Forecast              0.000000
Close_2W_MO_Forecast              7217.101281
Close_W_MO_Forecast               3643.223752
Close_D_MO_Forecast                753.738532
Close_M_MO_Forecast               7217.101281
Close_D_OC_Forecast               6090.791615
Close_W_OC_Forecast               6090.791615
Close_2W_OC_Forecast              6090.791615
Close_M_OC_Forecast               6090.791615
dtype: float64

In [ ]: