Metode Time Series, atau biasa dikenal dengan Peramalan Deret Waktu, merupakan metode berbasis statistika yang biasa menduga nilai sebuah variabel di masa depan. Prediktornya adalah data-data historis sebelumnya sebagai dasar pemodelannya. Metode ini berbeda dengan analisis regresi. Metode ini membutuhkan variabel Y dalam bentuk seri waktu secara berurutan.
Pada artikel ini, akan dilakukan analisis prediksi penjualan sebuah perusahaan.Data yang akan digunakan adalah data penjualan dari kuartal pertama tahun 2000 sampai kuartal keempat tahun 2019.
# chunk options
knitr::opts_chunk$set(
message = FALSE,
warning = FALSE,
fig.align = "center",
comment = "#>"
)
# scientific notation
options(scipen = 9999)
# import libs
library(tidyverse)
library(forecast)
library(lubridate)
library(TTR)
library(fpp)
library(xts)
library(tseries)
library(TSstudio)
library(padr)
library(MLmetrics)
library(ggfortify)
library(ggplot2)
library(tidyr)
Mengimpor dataset yang akan digunakan dan memberi nama variabel
sales <- read.csv("sales.csv")
names(sales)<-c("date","sales")
sales
sales_clean <- sales %>%
mutate(date = ymd(date))
sales_clean
range(sales_clean$date)
#> [1] "2000-04-01" "2020-01-01"
Kita akan mengubah data menjadi data dengan tipe time series. Proses konversi data menjadi data bertipe time series adalah sebagai berikut:
sales_ts <- ts(data = sales_clean$sales, start = c(2000,1), frequency = 4)
sales_ts
#> Qtr1 Qtr2 Qtr3 Qtr4
#> 2000 7.75 8.25 8.58 12.32
#> 2001 8.35 9.85 9.33 13.22
#> 2002 9.59 10.07 10.19 14.06
#> 2003 10.32 9.59 9.83 13.68
#> 2004 10.18 10.56 10.91 15.19
#> 2005 11.48 11.99 12.21 16.95
#> 2006 12.86 13.35 13.57 19.71
#> 2007 14.04 14.62 14.84 19.87
#> 2008 14.80 15.47 15.11 19.56
#> 2009 14.83 15.07 15.28 20.18
#> 2010 15.59 15.53 15.61 20.66
#> 2011 15.94 16.24 16.40 22.29
#> 2012 16.87 16.78 16.93 22.73
#> 2013 16.71 17.12 17.26 20.20
#> 2014 16.66 16.96 17.25 21.75
#> 2015 17.12 17.43 17.61 21.63
#> 2016 16.20 16.17 16.44 22.47
#> 2017 16.22 16.63 16.87 22.98
#> 2018 16.78 17.78 17.82 22.98
#> 2019 17.63 18.35 19.15 23.55
Plot akan dibuat dari data time series dengan hasil sebagai berikut
sales_ts %>% ts_plot()
Penjualan memilki trend yang semakin naik dan memiliki pola musiman di kuartal tertentu.
Data akan dibagi menjadi data train dan data tes. Prosesnya adalah sebagai berikut:
sales_train <- head(sales_ts, 17*4)
sales_test <- tail(sales_ts, length(sales_ts)-length(sales_train))
sales_train
#> Qtr1 Qtr2 Qtr3 Qtr4
#> 2000 7.75 8.25 8.58 12.32
#> 2001 8.35 9.85 9.33 13.22
#> 2002 9.59 10.07 10.19 14.06
#> 2003 10.32 9.59 9.83 13.68
#> 2004 10.18 10.56 10.91 15.19
#> 2005 11.48 11.99 12.21 16.95
#> 2006 12.86 13.35 13.57 19.71
#> 2007 14.04 14.62 14.84 19.87
#> 2008 14.80 15.47 15.11 19.56
#> 2009 14.83 15.07 15.28 20.18
#> 2010 15.59 15.53 15.61 20.66
#> 2011 15.94 16.24 16.40 22.29
#> 2012 16.87 16.78 16.93 22.73
#> 2013 16.71 17.12 17.26 20.20
#> 2014 16.66 16.96 17.25 21.75
#> 2015 17.12 17.43 17.61 21.63
#> 2016 16.20 16.17 16.44 22.47
sales_test
#> Qtr1 Qtr2 Qtr3 Qtr4
#> 2017 16.22 16.63 16.87 22.98
#> 2018 16.78 17.78 17.82 22.98
#> 2019 17.63 18.35 19.15 23.55
sales_train%>% decompose() %>% autoplot()
Dari hasil dekomposisi, penjualan memiliki trend yang semakin menaik. Selain itu dalam satu tahun, terdapat pola musiman dimana terjadi kenaikan penjualan pada kuartal tertentu. Jika kita melihat dataset, kuartal keempat (bulan oktober, november, desember) terjadi lonjakan penualan.
Model pertama yang dibuat adalah model STLM. Berikut adalah proses pembuatan model STLM:
stlm_model <- sales_train%>%
stlm(lambda = NULL) %>%
forecast(h=20)
plot(stlm_model)
stlmForecast <- as.vector(stlm_model$mean)
accuracy_stlm <- accuracy(stlmForecast,sales_test)
accuracy_stlm
#> ME RMSE MAE MPE MAPE ACF1 Theil's U
#> Test set -0.6290312 0.7378872 0.6613553 -3.561438 3.7021 -0.3415284 0.1961432
Model kedua yang dibuat adalah model Holt-Winters. Berikut adalah proses pembuatan model Holt-WInters:
sales_hw <- HoltWinters(x = sales_train)
sales_hw_forecast <- forecast(sales_hw, 20)
plot(sales_hw_forecast)
HW_Forecast <- as.vector(sales_hw_forecast$mean)
accuracy_HW<- accuracy(HW_Forecast,sales_test)
accuracy_HW
#> ME RMSE MAE MPE MAPE ACF1
#> Test set -0.01938989 0.5085938 0.4306363 -0.3400511 2.362886 0.3031687
#> Theil's U
#> Test set 0.142743
Model ketiga yang dibuat adalah model ARIMA. Berikut adalah proses pembuatan model ARIMA:
sales_arima <- stlm(sales_train,method="arima")
sales_arima_forecast <- forecast(sales_arima, 20)
plot(sales_arima_forecast)
Arima_Forecast <- as.vector(sales_arima_forecast$mean)
accuracy_Arima<- accuracy(Arima_Forecast,sales_test)
accuracy_Arima
#> ME RMSE MAE MPE MAPE ACF1 Theil's U
#> Test set -0.4285301 0.6093215 0.5324898 -2.520017 3.016724 -0.1142561 0.1580156
result <- rbind(accuracy_stlm, accuracy_HW, accuracy_Arima)
rownames(result) <- c("stlm model", "holt winters model", "arima model")
result
#> ME RMSE MAE MPE MAPE
#> stlm model -0.62903125 0.7378872 0.6613553 -3.5614382 3.702100
#> holt winters model -0.01938989 0.5085938 0.4306363 -0.3400511 2.362886
#> arima model -0.42853012 0.6093215 0.5324898 -2.5200173 3.016724
#> ACF1 Theil's U
#> stlm model -0.3415284 0.1961432
#> holt winters model 0.3031687 0.1427430
#> arima model -0.1142561 0.1580156
Berdasarkan beberapa parameter kinerja (ME, RMSE, MAE, MPE, MAPE), model holt winters memiliki akurasi yang baik dalam melakukan forecasting. Oleh karena itu penggunaan model holt winters adalah yang terbaik.
Tahap berikutnya adalah uji asumsi yang terdiri dari uji normalitas dan ketiadaan autokorelasi terhadap model terbaik yang telah dibuat. Model yang akan diuji tentulah model holt winters.
shapiro.test(sales_hw_forecast$residuals)
#>
#> Shapiro-Wilk normality test
#>
#> data: sales_hw_forecast$residuals
#> W = 0.89501, p-value = 0.00005216
hist(sales_hw_forecast$residuals, breaks = 100)
plot(sales_hw_forecast$residuals)
Karena nilai pvalue < alpha dan histogram berbentuk lonceng simetris, maka residual menyebar secara normal.
Box.test(sales_hw_forecast$residuals, type = "Ljung-Box")
#>
#> Box-Ljung test
#>
#> data: sales_hw_forecast$residuals
#> X-squared = 0.0089629, df = 1, p-value = 0.9246
Karena nilai pvalue > alpha, artinya residual dari model tidak ada autokorelasi
Model terbaik yang digunakan untuk forecasting adalah model holt winters. Penjualan memiliki trend yang semakin menaik dari tahun ke tahun. Selain itu penjualan memiliki pola-pola musiman dimana pada saat bulan oktober, november, dan desember mengalami lonjakan penjualan.