Skip to content

Commit

Permalink
Merge pull request #61 from Nixtla/ImprovedDocumentation2
Browse files Browse the repository at this point in the history
Fixed missing documentation plots, working README example
  • Loading branch information
kdgutier committed Sep 30, 2022
2 parents 94688e7 + aa1ef2f commit a0334fe
Show file tree
Hide file tree
Showing 6 changed files with 2,947 additions and 116 deletions.
28 changes: 17 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,36 +76,42 @@ import pandas as pd

#obtain hierarchical dataset
from datasetsforecast.hierarchical import HierarchicalData

# compute base forecast no coherent
from statsforecast.core import StatsForecast
from statsforecast.models import AutoARIMA, Naive

#obtain hierarchical reconciliation methods and evaluation
from hierarchicalforecast.core import HierarchicalReconciliation
from hierarchicalforecast.evaluation import HierarchicalEvaluation
from hierarchicalforecast.methods import BottomUp, TopDown, MiddleOut
# compute base forecast no coherent
from statsforecast.core import StatsForecast
from statsforecast.models import AutoARIMA, Naive


# Load TourismSmall dataset
Y_df, S, tags = HierarchicalData.load('./data', 'TourismSmall')
Y_df['ds'] = pd.to_datetime(Y_df['ds'])

#split train/test sets
Y_df_test = Y_df.groupby('unique_id').tail(12)
Y_df_train = Y_df.drop(Y_df_test.index)
Y_df_test = Y_df_test.set_index('unique_id')
Y_df_train = Y_df_train.set_index('unique_id')
Y_test_df = Y_df.groupby('unique_id').tail(12)
Y_train_df = Y_df.drop(Y_test_df.index)
Y_test_df = Y_test_df.set_index('unique_id')
Y_train_df = Y_train_df.set_index('unique_id')

# Compute base auto-ARIMA predictions
fcst = StatsForecast(df=Y_df_train, models=[AutoARIMA(season_length=12), Naive()], freq='M', n_jobs=-1)
fcst = StatsForecast(df=Y_train_df,
models=[AutoARIMA(season_length=12), Naive()],
freq='M', n_jobs=-1)
Y_hat_df = fcst.forecast(h=12)

# Reconcile the base predictions
reconcilers = [
BottomUp(),
TopDown(method='forecast_proportions'),
MiddleOut(level='Country/Purpose/State', top_down_method='forecast_proportions')
MiddleOut(middle_level='Country/Purpose/State',
top_down_method='forecast_proportions')
]
hrec = HierarchicalReconciliation(reconcilers=reconcilers)
Y_rec_df = hrec.reconcile(Y_hat_df, Y_df_train, S, tags)
Y_rec_df = hrec.reconcile(Y_hat_df, Y_train_df, S, tags)
```

### Evaluation
Expand All @@ -115,7 +121,7 @@ def mse(y, y_hat):
return np.mean((y-y_hat)**2)

evaluator = HierarchicalEvaluation(evaluators=[mse])
evaluator.evaluate(Y_h=Y_rec_df, Y_test=Y_df_test,
evaluator.evaluate(Y_h=Y_rec_df, Y_test=Y_test_df,
tags=tags, benchmark='Naive')
```

Expand Down
Loading

0 comments on commit a0334fe

Please sign in to comment.