Pada kesempatan kali ini akan dibahas metode pemulusan menggunakan Single Exponential Smoothing (SES) dan Double Exponential Smoothing (DES).
Data yang digunakan adalah data terkait penjualan yang terdapat pada buku Montgomery (Appendix B, Table B.2).
Single Exponential Smoothing merupakan metode pemulusan yang tepat digunakan untuk data stasioner. Pada kesempatan kali ini akan dilakukan pemulusan pada data penjualan menggunakan \(\lambda\) = 0.1 dan 0.6.
library(readxl)
sales <- read_xlsx("D:/ASPRAK/ADW/PERTEMUAN 3/sales.xlsx", sheet = 1)
dim(sales)
## [1] 120 2
head(sales, n =6)
summary(sales)
## Period Sales
## Min. : 1.00 Min. : 9815
## 1st Qu.: 30.75 1st Qu.:10210
## Median : 60.50 Median :10392
## Mean : 60.50 Mean :10379
## 3rd Qu.: 90.25 3rd Qu.:10535
## Max. :120.00 Max. :10827
#Mengubah data menjadi data time series
sales.ts<- ts(sales$Sales, start = 1, end = 120)
plot.ts(sales.ts, col = "blue", ylab = "Sales", xlab = "Week")
title(main = "Time Series Plot of Sales", sub = "Source : Montgomery (Appendix B, Table B.2)",
cex.sub = 0.8)
points(sales.ts, pch = 20, col = "blue")
Deskripsi Data
Data terdiri dari 120 observasi yang berarti data tersebut diukur dalam rentang waktu 120 minggu. Berdasarkan summary data, terlihat bahwa data berada pada range 9815-10827 dengan rata-rata sebesar 10379. Selanjutnya, berdasarkan plot deret waktu diatas, terlihat bahwa data cenderung stasioner.
Pemulusan Data dengan \(\lambda\) = 0.1 dan \(\lambda\) = 0.6
Pemulusan data dilakukan menggunakan package forecast dengan fungsi ses(data = , h = , alpha= ).h adalah jumlah periode yang ada di forecast, alpha adalah parameter pemulusan
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
#lambda = 0.1
ses.1 <- ses(sales.ts, h = 10, alpha = 0.1)
plot(ses.1)
#menampilkan ramalan 10 periode kedepan
ses.1
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 121 10407.6 10117.09 10698.11 9963.305 10851.90
## 122 10407.6 10115.64 10699.56 9961.089 10854.11
## 123 10407.6 10114.20 10701.00 9958.884 10856.32
## 124 10407.6 10112.77 10702.44 9956.690 10858.51
## 125 10407.6 10111.34 10703.86 9954.506 10860.70
## 126 10407.6 10109.92 10705.29 9952.333 10862.87
## 127 10407.6 10108.50 10706.70 9950.170 10865.03
## 128 10407.6 10107.10 10708.11 9948.018 10867.19
## 129 10407.6 10105.69 10709.51 9945.875 10869.33
## 130 10407.6 10104.30 10710.90 9943.742 10871.46
#lambda = 0.6
ses.6 <- ses(sales.ts, h = 10, alpha = 0.6)
plot(ses.6)
#menampilkan ramalan 10 periode kedepan
ses.6
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 121 10245.94 9919.432 10572.46 9746.586 10745.30
## 122 10245.94 9865.169 10626.72 9663.598 10828.29
## 123 10245.94 9817.727 10674.16 9591.042 10900.85
## 124 10245.94 9775.041 10716.85 9525.760 10966.13
## 125 10245.94 9735.915 10755.97 9465.922 11025.97
## 126 10245.94 9699.584 10792.31 9410.358 11081.53
## 127 10245.94 9665.523 10826.37 9358.266 11133.62
## 128 10245.94 9633.352 10858.54 9309.065 11182.83
## 129 10245.94 9602.789 10889.10 9262.322 11229.57
## 130 10245.94 9573.613 10918.28 9217.702 11274.19
Selain menggunakan fungsi ses yang terdapat pada package forecast, pemulusan single exponential dapat dilakukan menggunakan fungsi HoltWinters yang terdapat di R. Berikut ilustrasinya.
# lambda = 0.1
ses1<- HoltWinters(sales.ts, gamma = FALSE, beta = FALSE, alpha = 0.1)
plot(ses1)
legend("bottomright",c("data aktual","data pemulusan"), lty=8, col=c("black","red"), cex=0.8)
ramalan1<- forecast(ses1, h=10)
#menampilkan ramalan 10 periode
ramalan1
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 121 10407.6 10111.46 10703.74 9954.697 10860.51
## 122 10407.6 10109.99 10705.22 9952.438 10862.77
## 123 10407.6 10108.52 10706.69 9950.191 10865.01
## 124 10407.6 10107.05 10708.15 9947.954 10867.25
## 125 10407.6 10105.60 10709.61 9945.728 10869.48
## 126 10407.6 10104.15 10711.05 9943.513 10871.69
## 127 10407.6 10102.71 10712.50 9941.308 10873.90
## 128 10407.6 10101.27 10713.93 9939.114 10876.09
## 129 10407.6 10099.85 10715.36 9936.930 10878.27
## 130 10407.6 10098.42 10716.78 9934.756 10880.45
# lambda = 0.6
ses6<- HoltWinters(sales.ts, gamma = FALSE, beta = FALSE, alpha = 0.6)
plot(ses6)
legend("bottomright",c("data aktual","data pemulusan"), lty=8, col=c("black","red"), cex=0.8)
ramalan6<- forecast(ses6, h=10)
#menampilkan ramalan 10 periode
ramalan6
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 121 10245.94 9919.364 10572.53 9746.483 10745.41
## 122 10245.94 9865.089 10626.80 9663.477 10828.41
## 123 10245.94 9817.638 10674.25 9590.906 10900.98
## 124 10245.94 9774.943 10716.95 9525.610 10966.28
## 125 10245.94 9735.809 10756.08 9465.760 11026.13
## 126 10245.94 9699.471 10792.42 9410.184 11081.71
## 127 10245.94 9665.402 10826.49 9358.081 11133.81
## 128 10245.94 9633.225 10858.67 9308.870 11183.02
## 129 10245.94 9602.655 10889.23 9262.118 11229.77
## 130 10245.94 9573.474 10918.42 9217.489 11274.40
Menghitung Nilai Keakuratan
Ukuran kebaikan metode pemulusan yang akan digunakan yaitu SSE, MSE, dan MAPE. Semakin kecil nilai SSE, MSE, dan RMSE berarti metode pemulusan semakin baik. Adapun rumus perhitungan dari masing-masing akurasi sebagai berikut:
SSE = \(\sum_i (y_{t} - \hat{y}_{t})^{2}\)
MSE = \(\frac{1}{n}\sum_i (y_{t} - \hat{y}_{t})^{2}\)
# Nilai akurasiSES dengan lambda = 0.1
# Berdasarkan hasil pemulusan menggunakan fungsi HoltWinters
SSE1 <- ses1$SSE
MSE1 <- ses1$SSE/length(sales.ts)
RMSE1 <- sqrt(MSE1)
akurasi1 <- matrix(c(SSE1,MSE1,RMSE1))
row.names(akurasi1)<- c("SSE", "MSE", "RMSE")
colnames(akurasi1) <- c("Akurasi lambda = 0.1")
akurasi1
## Akurasi lambda = 0.1
## SSE 6338093.1366
## MSE 52817.4428
## RMSE 229.8205
# Nilai akurasiSES dengan lambda = 0.6
# Berdasarkan hasil pemulusan menggunakan fungsi HoltWinters
SSE6 <- ses6$SSE
MSE6 <- ses6$SSE/length(sales.ts)
RMSE6 <- sqrt(MSE6)
akurasi6 <- matrix(c(SSE6,MSE6,RMSE6))
row.names(akurasi6)<- c("SSE", "MSE", "RMSE")
colnames(akurasi6) <- c("Akurasi lambda = 0.6")
akurasi6
## Akurasi lambda = 0.6
## SSE 7666104.6927
## MSE 63884.2058
## RMSE 252.7533
Berdasarkan hasil perhitungan akurasi diatas, terlihat bahwa dari ketiga ukuran kebaikan (SSE,MSE, dan RMSE), metode pemulusan dengan lambda = 0.1 memiliki nilai akurasi lebih kecil dibandingkan metode pemulusan dengan lambda = 0.6. Oleh karena itu, dalam kasus ini dapat disimpulkan bahwa metode pemulusan dengan lambda = 0.1 lebih baik digunakan untuk melakukan peramalan data. Selanjutnya, akan dilakukan mulusan menggunakan Double Exponential Smoothing
Metode pemulusan Double Exponential Smoothing (DES) digunakan untuk data yang memiliki pola trend. Berbeda dengan metode sebelumnya, pemulusan menggunakan metode ini akan menghasilkan permalan tidak konstan untuk periode berikutnya. Berikut penerapan metode Double Exponential Smoothing pada R dengan kombinasi nilai parameter (\(\lambda\) = 0.1, \(\gamma\) = 0.1) dan (\(\lambda\) = 0.6 dan \(\gamma\) = 0.3)
Pemulusan Double Exponential Smoothing (DES) Pemulusan data dilakukan menggunakan HoltWinters yang terdapat di R. Berikut ilustrasinya.
# lambda = 0.1 dan gamma = 0.1
des.1<- HoltWinters(sales.ts, gamma = FALSE, beta = 0.1, alpha = 0.1)
plot(des.1)
legend("bottomright",c("data aktual","data pemulusan"), lty=8, col=c("black","red"), cex=0.8)
ramalan.1<- forecast(des.1, h=10)
#menampilkan ramalan 10 periode
ramalan.1
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 121 10435.40 10074.19 10796.61 9882.974 10987.82
## 122 10436.36 10072.97 10799.75 9880.599 10992.11
## 123 10437.31 10071.35 10803.28 9877.616 10997.01
## 124 10438.27 10069.30 10807.24 9873.984 11002.55
## 125 10439.23 10066.81 10811.64 9869.666 11008.79
## 126 10440.18 10063.85 10816.52 9864.626 11015.74
## 127 10441.14 10060.39 10821.89 9858.836 11023.44
## 128 10442.10 10056.43 10827.77 9852.268 11031.93
## 129 10443.05 10051.94 10834.16 9844.902 11041.21
## 130 10444.01 10046.92 10841.10 9836.720 11051.30
# lambda = 0.6 dan gamma = 0.3
des.6<- HoltWinters(sales.ts, gamma = FALSE, beta = 0.3, alpha = 0.6)
plot(des.6)
legend("bottomright",c("data aktual","data pemulusan"), lty=8, col=c("black","red"), cex=0.8)
ramalan.6<- forecast(des.6, h=10)
#menampilkan ramalan 10 periode
ramalan.6
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 121 10151.956 9784.668 10519.24 9590.238 10713.67
## 122 10074.087 9608.282 10539.89 9361.700 10786.47
## 123 9996.218 9412.010 10580.43 9102.750 10889.69
## 124 9918.348 9199.589 10637.11 8819.101 11017.60
## 125 9840.479 8973.493 10707.47 8514.538 11166.42
## 126 9762.610 8735.385 10789.84 8191.605 11333.62
## 127 9684.741 8486.436 10883.05 7852.091 11517.39
## 128 9606.872 8227.511 10986.23 7497.321 11716.42
## 129 9529.002 7959.277 11098.73 7128.314 11929.69
## 130 9451.133 7682.268 11220.00 6745.888 12156.38
Menghitung Nilai Keakuratan
# Akurasi DES lambda = 0.1 dan gamma = 0.1
SSE1= des.1$SSE
MSE1= SSE1/length(sales.ts)
RMSE1 = sqrt(MSE1)
akurasi.des1 <- matrix(c(SSE1,MSE1,RMSE1))
row.names(akurasi.des1)<- c("SSE", "MSE", "RMSE")
colnames(akurasi.des1) <- c("Akurasi lambda = 0.1 dan gamma=0.1")
akurasi.des1
## Akurasi lambda = 0.1 dan gamma=0.1
## SSE 9852893.520
## MSE 82107.446
## RMSE 286.544
# Akurasi DES lambda = 0.6 dan gamma = 0.3
SSE6= des.6$SSE
MSE6= SSE6/length(sales.ts)
RMSE6 = sqrt(MSE6)
akurasi.des6 <- matrix(c(SSE6,MSE6,RMSE6))
row.names(akurasi.des6)<- c("SSE", "MSE", "RMSE")
colnames(akurasi.des6) <- c("Akurasi lambda = 0.6 dan gamma=0.3")
akurasi.des6
## Akurasi lambda = 0.6 dan gamma=0.3
## SSE 9610087.6462
## MSE 80084.0637
## RMSE 282.9913
Berdasarkan hasil perhitungan kebaikan model diatas, terlihat bahwa nilai akurasi DES dengan lambda = 0.6 dan gamma=0.3 lebih kecil. Dapat disimpulkan bahwa DES dengan lambda = 0.6 dan gamma=0.3 adalah metode yang lebih baik.
Menentukan Metode Pemulusan Terbaik
akurasi1
## Akurasi lambda = 0.1
## SSE 6338093.1366
## MSE 52817.4428
## RMSE 229.8205
akurasi.des6
## Akurasi lambda = 0.6 dan gamma=0.3
## SSE 9610087.6462
## MSE 80084.0637
## RMSE 282.9913
Berdasarkan hasil diatas, didapatkan model terbaik antara masing-masing metode. Berdasarkan hasil diatas terlihat bahwa nilai SSE, MSE, dan RMSE metode pemulusan SES dengan \(\lambda\) = 0.1 lebih kecil dibandingkan metode pemulusan DES dengan \(\lambda\) = 0.6 dan \(\gamma\)= 0.3. Hal tersebut menunjukkan bahwa metode SES dengan \(\lambda\) = 0.1 lebih baik digunakan.