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).

Pemulusan Single Exponential Smoothing

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

Pemulusan Double Exponential Smoothing (DES)

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.