Skip to content

FinnTS Revised Architecture

Aadharsh Kannan edited this page Aug 5, 2021 · 3 revisions

FinnTS exposes a single forecast_time_series function that uses ensemble techniques to try out different time series models and produce a single reconciliable function. It requires one to input data in a particular format (details). This document provides a brief overview of the individual code components that build up forecast_time_series.

  1. Load environment
  2. Verify and validate forecasting inputs
  3. Configure forecasting run
  4. Data preparation
  5. Model Fitting (per combo)
    1. Model factory
    2. Recipe factory
    3. Job scheduler
      • Sequential
      • Parallel (Ownbox, and Azure Batch)
    4. Model selection
      • Best Averages
      • Ensembles
  6. Backtesting & Model Results
  7. Forecasting Reconciliation

Recipe Model Factory Notes

model simple_select step_mutate time_series_signature mutate_adj_half rm_date rm_date_adj rm_date_adj_num step_zv step_nzv norm_date_adj_year dummy_one_hot character_factor center scale
arima_boost yes yes yes yes yes yes yes yes
cubist (ensemble) yes yes yes yes yes yes yes
cubist (single) yes yes yes yes yes yes yes
glmnet (ensemble) yes yes yes yes yes yes yes yes yes
glmnet (single) yes yes yes yes yes yes yes yes yes
mars yes yes yes yes yes yes yes
nnetar_xregs yes yes yes yes yes yes yes yes
prophet_boost yes yes yes yes yes yes yes yes
prophet_xregs yes yes yes yes yes yes yes
svm_poly (ensemble) yes yes yes yes yes yes yes
svm_poly (single) yes yes yes yes yes yes yes yes
svm_rbf (ensemble) yes yes yes yes yes yes yes
svm_rbf (single) yes yes yes yes yes yes yes yes
tabnet yes yes yes yes yes
xgboost (ensemble) yes yes yes yes yes yes yes
xgboost (single) yes yes yes yes yes yes yes
model code
simple_select recipes::recipe(Target ~ ., data = train_data %>% dplyr::select(-Combo))
step_mutate recipes::step_mutate(Date_Adj = Date %m+% months(fiscal_year_start-1))
time_series_signature timetk::step_timeseries_signature(Date_Adj)
mutate_adj_half recipes::step_mutate(Date_Adj_half_factor = as.factor(Date_Adj_half),Date_Adj_quarter_factor = as.factor(Date_Adj_quarter))
rm_date recipes::step_rm(matches(date_rm_regex_final), Date)
rm_date_adj_num recipes::step_rm(matches(date_rm_regex_final), Date, Date_Adj)
rm_date_adj_num recipes::step_rm(matches(date_rm_regex_final), Date, Date_Adj, Date_Adj_index.num)
step_zv recipes::step_zv(recipes::all_predictors())
step_nzv recipes::step_nzv(recipes::all_predictors())
norm_date_adj_year recipes::step_normalize(Date_Adj_index.num, Date_Adj_year)
dummy_one_hot recipes::step_dummy(recipes::all_nominal(), one_hot = one_hot)
character_factor recipes::step_mutate_at(where(is.character), fn = ~as.factor(.))
center recipes::step_center(recipes::all_predictors())
scale recipes::step_scale(recipes::all_predictors())

Clone this wiki locally