Pada LBB kali ini saya akan melakukan analysis dan forecasting menggunakan data Turkish electricity demand sumber data di dapatkan dari Rob J Hyndman
Kita akan read data turkish electricity demand dan membuat object time series, data di observasi dari tahun 1 january 2000 sampai dengan 31 desember 2008.
dataku <- read.csv("https://robjhyndman.com/data/turkey_elec.csv")
telects <- ts(data = dataku, start = 2000, frequency = 365) ## daily
ts_info(telects)
## The telects series is a ts object with 1 variable and 3287 observations
## Frequency: 365
## Start time: 2000 1
## End time: 2009 2
library(tidyverse) # data wrangling
library(lubridate) # date manipulation
library(forecast) # time series library
library(TTR) # for Simple moving average function
library(MLmetrics) # calculate error
library(tseries) # adf.test
library(TSstudio) # mempercantik visualisasi timeseries
library(plotly) # visualisasi data
library(ggplot2) # visualisasi data
Pada tahap ini kita akan membuat plot tujuannya melihat pola trend dan seasonal pada data sehingga kita bisa memiliki gambaran apakah data yang kita analysis typenya additive atau multiplicative.
telec_plot <-
telects %>%
autoplot()+
theme_minimal()
ggplotly(telec_plot) %>%
layout(title = " daily Turkish electricity demand data.",
xaxis = list(title = "year"),
yaxis = list(title = "Daily data "))
Apa yang bisa kita lihat dari plot di atas :
Decomposition adalah suatu tahapan dalam time series analisis yang digunakan untuk menguraikan beberapa komponen dalam time series data, dengan decompose kita dapat mengurai lebih jelas data elcetricity diantarannya :
Karena pada plot sebelumnya data terlihat additive maka Formula yang di gunakan adalah :
electricity = Trend+Seasonality+Error
Berdasarkan hasil decompose di atas masih ada pola dari trend yang masih belum di tangkap selanjutnya akan mencoba menggunakan multiseasonal time series
Disini kita akan mencoba menggunakan 3 multiple seasonal.periode yaitu mingguan, tahun kabisat dan tahun islam yaitu 7, 365.25 dan 354.37.
Decompose dengan multiseasonal terlihat trend nya cukup smooth artinya pola mampu di tangkap dengan baik jika dibandingkan dengan trend pada decompose sebelumnya, dan error pun lebih kecil jika di bandinkan dengan sebelumnya.
## Warning in adf.test(datakumsts): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: datakumsts
## Dickey-Fuller = -7.7431, Lag order = 14, p-value = 0.01
## alternative hypothesis: stationary
Berdasarkan Augmented Dickey-Fuller Test(adf.test) p-value < 0.05 artinya data stasioner sehingga tidak akan dilakukan differencing.
telco_ets <- stlm(y = telec_train, method = "ets", lambda = 0)
telco_arima <- stlm(y = telec_train, method = "arima", lambda = 0)
telco_forecast_ets <- forecast(telco_ets, h = 2*365)
#head(telco_forecast_ets) # forecast value + confidence interval dari ETS model
datakumsts %>%
autoplot(series = "actual")+
autolayer(telco_forecast_ets$fitted, series = "data train")+
autolayer(telco_forecast_ets$mean, series = "data test")+
scale_color_manual(values = c("#3b3b3b", "blue", "#bf0808"))+
theme_minimal()
telco_forecast_arima <- forecast(telco_arima, h = 2*365)
#head(telco_forecast_arima) # forecast value + confidence interval dari ETS model
datakumsts %>%
autoplot(series = "actual")+
autolayer(telco_forecast_arima$fitted, series = "data train")+
autolayer(telco_forecast_arima$mean, series = "data test")+
scale_color_manual(values = c("#3b3b3b", "blue", "#bf0808"))+
theme_minimal()
bindaccuracy <- rbind(
accuracy(telco_forecast_ets$mean, telec_test),
accuracy(telco_forecast_arima$mean, telec_test))
rownames(bindaccuracy) <- c("STLM ETS", "STLM ARIMA")
bindaccuracy
## ME RMSE MAE MPE MAPE ACF1
## STLM ETS 1640.15196 2131.084 1814.4925 7.1251112 8.192825 0.8754382
## STLM ARIMA -47.72611 1381.207 963.6161 -0.6452799 4.608553 0.8847108
## Theil's U
## STLM ETS 1.395047
## STLM ARIMA 1.056964
Dari hasil analisis di atas model ARIMA adalah model yang lebih baik karena MAPE yang dihasilkan lebih kecil.
Asumsi pada time series diujikan untuk mengukur apakah residual yang diperoleh dari hasil modeling sudah cukup baik untuk menggambarkan dan menangkap informasi pada data.
H0 : residual menyebar normal H1 : residual tidak menyebar normal
##
## Shapiro-Wilk normality test
##
## data: telco_forecast_arima$residuals
## W = 0.88497, p-value < 0.00000000000000022
Untuk normality residual data tidak menyebar normal berdasarkan hasil uji shapiro.test nilai (p-value < 0.05) mungkin dikarenakan jumlah sample yang sedikit.
H0 : residual no-autocorrelation H1 : residual autocorrelation
##
## Box-Ljung test
##
## data: telco_forecast_arima$residuals
## X-squared = 0.0000018104, df = 1, p-value = 0.9989
Berdasarkan hasil asumsi check (p-value > 0.05), gagal tolak H0, tolak H1 artinya tidak ada autocorrelation pada hasil forecasting time series.
Dari hasil forecast yang telah dibuat munggunakan data turki electricty harian model yang baik jika melihat hasil MAPE yaitu STLM arima karena MAPE lebih kecil jika dibandingan dengan model ets.