Digunakan data dari UBS khusus produk A
library(readxl)
product_A <- read_excel("~/produk_G.xlsx",sheet = "ProdukA")
product_A$date<-as.Date(product_A$date)
product_A
## # A tibble: 48 x 2
## date sales_22_K
## <date> <dbl>
## 1 2014-01-01 20.9
## 2 2014-02-01 16.5
## 3 2014-03-01 20.8
## 4 2014-04-01 45.7
## 5 2014-05-01 38.1
## 6 2014-06-01 30.9
## 7 2014-07-01 50.1
## 8 2014-08-01 37.3
## 9 2014-09-01 25.1
## 10 2014-10-01 36.2
## # ... with 38 more rows
summary(product_A)
## date sales_22_K
## Min. :2014-01-01 Min. : 4.322
## 1st Qu.:2014-12-24 1st Qu.:10.253
## Median :2015-12-16 Median :18.903
## Mean :2015-12-16 Mean :22.166
## 3rd Qu.:2016-12-08 3rd Qu.:35.078
## Max. :2017-12-01 Max. :50.053
Dapat terlihat datanya kita ringkas selama 48 bulan dari bulan 1 tahun 2014 hingga bulan 12 tahun 2017.
Digunakan data dari 01-01-2014 hingga 01-12-2016 untuk menjadi data training atau data yang dijadikan model preidksinya
data_train<-ts(product_A$sales_22_K[c(1:36,1)], frequency = 12, start = c(2014, 1))
Kita lakukan dengan tiga model prediksi klasik yakni secara rerata atau meanf, dengan drift, dan dengan seasonal naive didapatkan hasil sebagai berikut :
library(forecast)
library(ggplot2)
fit1 <- meanf(data_train,h=12)
fit2 <- rwf(data_train,drift=TRUE,h=12)
fit3 <- snaive(data_train,h=12)
autoplot(ts(product_A$sales_22_K, start=c(2014, 1), end=c(2017, 12), frequency=12))+
autolayer(fit1, series="Mean", PI=FALSE) +
autolayer(fit2, series="Drift", PI=FALSE) +
autolayer(fit3, series="Seasonal naïve", PI=FALSE) +
xlab("Year") + ylab("22_K-gram") +
ggtitle("Forecasts for quarterly Gold production Product_A") +
guides(colour=guide_legend(title="Forecast"))
Terlihat hasil prediksi yang merah adalah dengan metode drift, hijau meanf, dan biru seasonal naive, sedangkan yang hitam adalah data aktualnya di tahun 2017.
secara grafik maka yang biru atau seasonal naive yang mendekati nilai aktualnya mari kita buktikan dengan perhitungan
myts <- ts(product_A$sales_22_K, start=c(2014, 1), end=c(2017, 12), frequency=12)
test <- window(myts, start=c(2017,1),end=c(2017,12))
akurasi_drift<-accuracy(fit1, test)
akurasi_Mean<-accuracy(fit2, test)
akurasi_naive_seasonal<-accuracy(fit3, test)
print(akurasi_drift)
## ME RMSE MAE MPE MAPE MASE
## Training set 8.647274e-16 13.89182 12.217907 -59.45967 89.46288 1.2017676
## Test set -1.433024e+00 11.50303 9.738517 -58.17690 81.28658 0.9578919
## ACF1 Theil's U
## Training set 0.2584618 NA
## Test set 0.2285933 1.226519
print(akurasi_Mean)
## ME RMSE MAE MPE MAPE MASE
## Training set -5.214346e-13 17.14537 13.389857 -34.30549 76.21082 1.3170419
## Test set 4.389000e-01 11.42185 9.475168 -45.15046 73.45884 0.9319886
## ACF1 Theil's U
## Training set -0.3855861 NA
## Test set 0.2285933 1.122846
print(akurasi_naive_seasonal)
## ME RMSE MAE MPE MAPE MASE
## Training set -5.938163 13.106908 10.166614 -69.901559 89.66713 1.0000000
## Test set 3.038200 9.484444 8.344264 1.737932 50.13813 0.8207516
## ACF1 Theil's U
## Training set -0.008566125 NA
## Test set -0.360968667 1.149015
terbukti dari parameternya memang naive seasonal yang bisa diandalkan untuk model yang klasik.
Mengerti konsep matematika dan statistika di belakang proses prediksi ini membuat para pengguna banyak menggunakan teknik prediksitif automatis, berikut hasilnya.
etsfit <- ets(myts[1:36])
etsfit
## ETS(M,N,N)
##
## Call:
## ets(y = myts[1:36])
##
## Smoothing parameters:
## alpha = 1e-04
##
## Initial states:
## l = 22.7848
##
## sigma: 0.6358
##
## AIC AICc BIC
## 325.4326 326.1826 330.1831
Berikut Parameter otomatisnya
Berikut akurasi modelnya
train<- ets(myts[1:36])
test <- ets(myts[37:48], model = train,use.initial.values=TRUE)
accuracy(test)
## ME RMSE MAE MPE MAPE MASE
## Training set -2.463553 11.66371 10.04302 -65.20805 86.28989 0.8940663
## ACF1
## Training set 0.251818
accuracy(forecast(train,12), myts[37:48])
## ME RMSE MAE MPE MAPE MASE
## Training set -0.007093078 14.08059 12.51841 -61.28555 91.99955 0.9330854
## Test set -2.466460861 11.66344 10.04350 -65.22526 86.30010 0.7486128
## ACF1
## Training set 0.2547086
## Test set NA
fets<-forecast(train)
fets
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 37 22.7848 4.220271 41.34934 -5.607199 51.17681
## 38 22.7848 4.220271 41.34934 -5.607199 51.17681
## 39 22.7848 4.220271 41.34934 -5.607199 51.17681
## 40 22.7848 4.220271 41.34934 -5.607199 51.17681
## 41 22.7848 4.220271 41.34934 -5.607200 51.17681
## 42 22.7848 4.220270 41.34934 -5.607200 51.17681
## 43 22.7848 4.220270 41.34934 -5.607200 51.17681
## 44 22.7848 4.220270 41.34934 -5.607200 51.17681
## 45 22.7848 4.220270 41.34934 -5.607200 51.17681
## 46 22.7848 4.220270 41.34934 -5.607201 51.17681
plot(fets)
arimafit <- auto.arima(myts[1:36])
arimafit
## Series: myts[1:36]
## ARIMA(1,0,0) with non-zero mean
##
## Coefficients:
## ar1 mean
## 0.2554 22.6297
## s.e. 0.1609 3.0185
##
## sigma^2 estimated as 195.9: log likelihood=-145.08
## AIC=296.16 AICc=296.91 BIC=300.91
Berikut Model yang cocok Arima(1,0,0)
fcast <- forecast(arimafit,h=12)
fcast
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 37 18.99233 1.056582 36.92808 -8.438029 46.42269
## 38 21.70066 3.189103 40.21222 -6.610323 50.01164
## 39 22.39242 3.843917 40.94092 -5.975066 50.75990
## 40 22.56911 4.018197 41.12001 -5.802060 50.94027
## 41 22.61424 4.063170 41.16530 -5.757171 50.98564
## 42 22.62576 4.074686 41.17684 -5.745660 50.99718
## 43 22.62871 4.077630 41.17978 -5.742717 51.00013
## 44 22.62946 4.078382 41.18053 -5.741965 51.00088
## 45 22.62965 4.078574 41.18073 -5.741773 51.00107
## 46 22.62970 4.078623 41.18078 -5.741724 51.00112
## 47 22.62971 4.078635 41.18079 -5.741711 51.00113
## 48 22.62972 4.078639 41.18079 -5.741708 51.00114
plot(fcast)
accuracy(forecast(arimafit,12), myts[37:48])
## ME RMSE MAE MPE MAPE MASE
## Training set 0.01421341 13.60102 11.767218 -54.02549 82.96056 0.8770934
## Test set -1.90427808 11.26403 9.585385 -60.09828 81.48507 0.7144661
## ACF1
## Training set 0.001468944
## Test set NA
Demikian Analisa Time Series Produk A
Author : Heru Wiryanto Co Author : Amany Ageng Wijayanti