Import Datasets

setwd("~/Documents/MSAE/Predictive Analytics")
energydata <- read.csv("ENERGY_BILL.csv")

Creating Tsibble

energydata <- energydata %>% 
  mutate(Month = yearmonth(Month)) %>% 
  tsibble(index = Month)

Training Set (2000-2012) & Test Set (2013-2016)

training <- energydata %>% 
  filter(year(Month) < 2013)

test <- energydata %>% 
  filter(year(Month) > 2012)

Classical Decomposition

# training %>% 
#   model(classical_decomposition(Invoice, type = "additive")) %>% 
#   components() %>% 
#   autoplot()

training %>% 
  model(classical_decomposition(Invoice, type = "multiplicative")) %>% 
  components() %>% 
  autoplot() + 
  labs(title ="Multiplicative Decomposition")
## Warning: Removed 6 rows containing missing values (`geom_line()`).

Auto ETS

ets_auto = training %>% 
  model(ETS(Invoice))

report(ets_auto)
## Series: Invoice 
## Model: ETS(M,N,M) 
##   Smoothing parameters:
##     alpha = 0.1750898 
##     gamma = 0.0001101634 
## 
##   Initial states:
##    l[0]      s[0]     s[-1]    s[-2]    s[-3]    s[-4]    s[-5]    s[-6]
##  94.491 0.6372401 0.8044204 1.218123 1.470163 1.586314 1.533305 1.045628
##      s[-7]    s[-8]     s[-9]    s[-10]    s[-11]
##  0.6951536 0.708991 0.8773018 0.7380101 0.6853498
## 
##   sigma^2:  0.0114
## 
##      AIC     AICc      BIC 
## 1494.091 1497.520 1539.839

ANN

fit_ANN <- training %>% 
  model(ETS(Invoice ~ error("A") + trend("N") + season("N")))

report(fit_ANN)
## Series: Invoice 
## Model: ETS(A,N,N) 
##   Smoothing parameters:
##     alpha = 0.9999 
## 
##   Initial states:
##     l[0]
##  55.3252
## 
##   sigma^2:  651.3436
## 
##      AIC     AICc      BIC 
## 1802.494 1802.652 1811.644

MAM

fit_MAM <- training %>% 
  model(ETS(Invoice ~ error("M") + trend("A") + season("M")))

report(fit_MAM)
## Series: Invoice 
## Model: ETS(M,A,M) 
##   Smoothing parameters:
##     alpha = 0.1740911 
##     beta  = 0.002379536 
##     gamma = 0.0001602308 
## 
##   Initial states:
##      l[0]      b[0]      s[0]     s[-1]    s[-2]    s[-3]    s[-4]    s[-5]
##  93.89049 0.1923745 0.6417322 0.8025718 1.239336 1.421435 1.577418 1.559019
##     s[-6]     s[-7]     s[-8]     s[-9]    s[-10]    s[-11]
##  1.053287 0.7043064 0.7080554 0.8746414 0.7399429 0.6782553
## 
##   sigma^2:  0.0115
## 
##      AIC     AICc      BIC 
## 1499.498 1503.933 1551.345

MNM

fit_MNM <- training %>% 
  model(ETS(Invoice ~ error("M") + trend("N") + season("M")))

report(fit_MNM)
## Series: Invoice 
## Model: ETS(M,N,M) 
##   Smoothing parameters:
##     alpha = 0.1750898 
##     gamma = 0.0001101634 
## 
##   Initial states:
##    l[0]      s[0]     s[-1]    s[-2]    s[-3]    s[-4]    s[-5]    s[-6]
##  94.491 0.6372401 0.8044204 1.218123 1.470163 1.586314 1.533305 1.045628
##      s[-7]    s[-8]     s[-9]    s[-10]    s[-11]
##  0.6951536 0.708991 0.8773018 0.7380101 0.6853498
## 
##   sigma^2:  0.0114
## 
##      AIC     AICc      BIC 
## 1494.091 1497.520 1539.839
components(fit_MAM) %>% 
  autoplot() 
## Warning: Removed 12 rows containing missing values (`geom_line()`).

augment(fit_MNM) %>% autoplot(.innov)

MAdM

fit_MAdM <- training %>% 
  model(ETS(Invoice ~ error("M") + trend("Ad") + season("M")))

report(fit_MAdM)
## Series: Invoice 
## Model: ETS(M,Ad,M) 
##   Smoothing parameters:
##     alpha = 0.196201 
##     beta  = 0.001629913 
##     gamma = 0.0001209931 
##     phi   = 0.979966 
## 
##   Initial states:
##      l[0]      b[0]      s[0]     s[-1]    s[-2]    s[-3]    s[-4]    s[-5]
##  92.02809 0.2948465 0.6347478 0.7997201 1.235634 1.442742 1.571952 1.548123
##     s[-6]     s[-7]     s[-8]     s[-9]    s[-10]    s[-11]
##  1.058653 0.7022054 0.7188107 0.8770077 0.7387544 0.6716492
## 
##   sigma^2:  0.0115
## 
##      AIC     AICc      BIC 
## 1499.633 1504.626 1554.530

AAA

fit_AAA <- training %>% 
  model(ETS(Invoice ~ error("A") + trend("A") + season("A")))

report(fit_AAA)
## Series: Invoice 
## Model: ETS(A,A,A) 
##   Smoothing parameters:
##     alpha = 0.1049032 
##     beta  = 0.0001000803 
##     gamma = 0.0001001949 
## 
##   Initial states:
##      l[0]       b[0]      s[0]     s[-1]    s[-2]    s[-3]    s[-4]    s[-5]
##  96.19013 -0.1276873 -32.47107 -18.97218 21.20725 39.16519 53.29404 50.74027
##    s[-6]     s[-7]     s[-8]     s[-9]    s[-10]    s[-11]
##  4.27698 -27.08083 -25.59006 -10.60247 -24.16347 -29.80366
## 
##   sigma^2:  131.196
## 
##      AIC     AICc      BIC 
## 1565.660 1570.095 1617.508

Forecasting & Plot

MNM_fcst <- fit_MNM %>% forecast(test)
MAM_fcst <- fit_MNM %>% forecast(test)


MNM_plot <- fit_MNM %>% forecast(energydata) %>% autoplot(energydata)
MAM_plot <- fit_MAM %>% forecast(energydata) %>% autoplot(energydata)

Accuracy Metrics

accuracy(MAM_fcst, training)
## Warning: The future dataset is incomplete, incomplete out-of-sample data will be treated as missing. 
## 39 observations are missing between 2013 Jan and 2016 Mar
## # A tibble: 1 × 10
##   .model                   .type    ME  RMSE   MAE   MPE  MAPE  MASE RMSSE  ACF1
##   <chr>                    <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 "ETS(Invoice ~ error(\"… Test    NaN   NaN   NaN   NaN   NaN   NaN   NaN    NA
accuracy(MAM_fcst, test)
## # A tibble: 1 × 10
##   .model                   .type    ME  RMSE   MAE   MPE  MAPE  MASE RMSSE  ACF1
##   <chr>                    <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 "ETS(Invoice ~ error(\"… Test   1.71  7.69  5.98  1.38  7.86   NaN   NaN 0.490
accuracy(MAM_fcst, energydata)
## # A tibble: 1 × 10
##   .model                   .type    ME  RMSE   MAE   MPE  MAPE  MASE RMSSE  ACF1
##   <chr>                    <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 "ETS(Invoice ~ error(\"… Test   1.71  7.69  5.98  1.38  7.86 0.594 0.500 0.490