Eksplorasi dan Pemulusan Data Time Series

Kelompok 5

P2-MPDW 2022

Anggota:

Hanung Safrizal (G1401201050)
Maulana Ahsan Fadillah (G1401201062)
Muhammad Irsyad Robbani (G1401201064)
Muhammad Raziv Zulfikar (G1401201083)
Dhea Puspita Adinda (G1401201090)

Pendahuluan

Latar Belakang

Beras merupakan makanan pokok bagi sebagian besar masyarakat Indonesia. Konsumsi beras di Indonesia meningkat setiap tahunnya seiring dengan meningkatnya jumlah penduduk di Indonesia. Ketergantungan masyarakat Indonesia terhadap beras bisa menimbulkan masalah jika ketersediaan beras sudah tidak dapat tercukupi. Pemenuhan kebutuhan dan stabilitas harga beras merupakan isu yang tetap relevan dari waktu ke waktu. Jumlah penduduk yang besar menjadikan permasalahan beras bukan hanya pada jumlah ketersediaan dan harga saja, namun termasuk keberagaman kualitas dan jenis produk beras (BPS 2009). Pada awal tahun 2018 harga beras mengalami peningkatan. Kenaikan harga beras ini jika terus dibiarkan akan menyebabkan terjadinya inflasi yang berdampak pada melambatnya pertumbuhan ekonomi nasional serta dampak negatif lainnya. Dalam rangka perumusan kebijakan pengendalian inflasi maka data dan informasi terkait proyeksi keadaan pasar sangat dibutuhkan. Oleh karena itu, pemodelan harga beras di Indonesia sangat perlu dilakukan.

Tujuan

  1. Mengeksplorasi dan forecasting data time series harga beras premium di Indonesia per bulan pada tahun 2013-2022.

Tinjauan Pustaka

Metode Single Moving Average

Metode single moving average adalah metode peramalan yang menggunakan sejumlah data aktual permintaan yang baru untuk membangkitkan nilai ramalan untuk permintaan dimasa yang akan datang.(Naufal dan Andrean, 2017).

Metode Double Moving Average

Metode Double Moving Average adalah merupakan suatu metode peramalan yang dilakukan dengan menghitung nilai rata-rata bergerak sebanyak dua kali, lalu dilanjutkan dengan meramal menggunakan suatu persamaan. Metode DMA digunakan untuk mengatasi galat sistematis yang terjadi apabila rata-rata bergerak data dipakai pada data yang memiliki tren. Metode ini merupakan pengembangan dari metode SMA (Muzaki 2022).

Metode Single Exponential Smoothing

Metode Single Exponential Smoothing adalah metode yang menunjukan pembobotan menurun secara eksponensial terhadap nilai observasi yang lebih tua. Yaitu nilai yang lebih baru diberikan bobot yang relatif lebih besar dibanding nilai observasi yang lebih lama. Metode ini memberikan sebuah pembobotan eksponensial rata-rata bergerak dari semua nilai observasi sebelumnya (Hartono et.al, 2012).

Metode Double Exponential Smoothing

Metode Double Exponential Smoothing merupakan metode yang digunakan untuk meramalkan data yang mengalami trend kenaikan. Jika data yang digunakan semakin banyak dalam perhitungan peramalan, maka persentase error peramalannya akan semakin kecil dan sebaliknya (Hanief dan Purwanto 2017).

Winter Smoothing

Metode pemulusan eksponensial linear dari Winter’s digunakan untuk peramalan jika data memiliki komponen musiman. Metode winter didasarkan pada tiga persamaan pemulusan, yaitu stasioneritas, trend, dan musiman. Holt Winter sendiri memiliki dua metode yang berbeda, bergantung pada sifat musiman itu sendiri, yaitu aditif atau multiplikatif.

SSE

Sum Square Error (SSE) menjumlahkan kuadrat dari kesalahan.

MSE

Mean Squared Error (MSE) merata-ratakan kuadrat dari kesalahan menggunakan penyebut n tanpa memperhatikan derajat bebas model. MSE banyak dipakai dalam optimalisasi pembobotan karena memberikan ketelitian yang lebih baik.

RMSE

Root Mean Square Error (RMSE) diperoleh dengan mengakarkan hasil MSE.

MAD

Simpangan absolut rata-rata atau mean absolute deviation (MAD) merata-ratakan nilai absolut kesalahan peramalan dalam unit ukuran yang sama seperti data aktual.

MAPE

Mean absolute percentage error (MAPE) merata-ratakan persentase absolut kesalahan dan memberikan gambaran seberapa kesalahan peramalan dibanding dengan nilai sebenarnya. MAPE banyak dipakai dalam perbandingan data-data yang mempunyai skala interval waktu yang berbeda.

Package dan Data

1. Memanggil Library

Packages yang digunakan dalam analisis eksplorasi dan pemulusan data deret waktu, sebagai berikut:

library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(TTR)
library(TSA)
## Registered S3 methods overwritten by 'TSA':
##   method       from    
##   fitted.Arima forecast
##   plot.Arima   forecast
## 
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
## 
##     acf, arima
## The following object is masked from 'package:utils':
## 
##     tar
library(readxl)

2. Memanggil Data

Data yang digunakan pada pengerjaan tugas analisis eksplorasi dan pemulusan deret waktua adalah data beras premium di Indonesia per bulan dari tahun 2013 hingga 2022. Data diperoleh dari web BPS Indonesia ( https://www.bps.go.id/indicator/36/500/1/harga-beras-di-penggilingan-menurut-kualitas.html). Pada data harga beras terdapat 3 peubah yang digunakan yaitu beras premium, medium, dan luar kualitas tetapi peubah yang digunakan dalam eksplorasi kali ini adalah data beras premium dengan jumlah amatan sebanyak 115 amatan.

data <- read_xlsx("C:/0 SEM5/MPDW/p1/Data Kelompok 15.xlsx")

3. Split Data

Spliting data dilakukan untuk memisahkan data menjadi dua bagian yaitu data training dan data testing. Data training digunakan untuk menentukan model yang sesuai dengan keseluruhan data dan membuat model, sedangkan data testing digunakan untuk menguji performa dari model yang telah didapatkan. Data dibagi dengan perbandingan 80% : 20%. Jumlah data training sebanyak 92 amatan (amatan 1 sampai 92) dan data testing sebanyak 23 amatan (amatan 93 sampai 115).

train <- data[1:92, 3]
test <- data[93:115, 3]
data.premium <- ts(data[,3])
train.ts <- ts(train,start = 2013, frequency = 12)
test.ts <- ts(test)
data.ts <- ts(data[,3], start = 2013, frequency = 12)

Eksplorasi Data Analisis

Plot Data Time Series

Plot Time Series Harga Beras Premium

data.premium <- ts(data$Premium, start = 2013, frequency = 12)
ts.plot(data.premium, main = "Harga Beras Premium Tahun 2013 - 2022", ylab = "Harga", lwd = 1.5)
points(data.premium)
legend("topleft", c("Premium"), cex = 0.7,
       col = c("black", "red", "blue"), lty = 1)

plot(data$`Harga Gabah`, data$Premium, pch = 20, col = "blue", main = "Harga Beras Premium vs Harga Gabah Kering")

Berdasarkan scatter plot di atas, dapat dilihat bahwa hubungan peubah harga beras premium (X) dan harga gabah kering (Y) memiliki hubungan yang positif cukup kuat yaitu dengan nilai korelasi sebesar 0.817009, artinya dengan kenaikan harga beras premium, harga gabah juga naik.

Single Moving Average (SMA)

Pemulusan SMA dengan n=4

data.sma<-SMA(train.ts, n=4)
data.sma
##        Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
## 2013    NA    NA    NA 13.00 11.50 10.50 11.75 13.00 13.75 15.50 16.25 18.00
## 2014 21.00 23.25 24.25 23.75 23.00 22.00 22.50 25.00 26.50 28.25 29.50 31.00
## 2015 43.00 55.25 65.00 65.75 54.75 43.25 34.25 34.00 39.25 44.75 53.50 63.00
## 2016 68.75 74.75 75.00 65.75 56.75 48.00 42.00 43.75 42.75 41.50 40.25 39.75
## 2017 43.25 45.75 47.50 47.25 47.50 48.75 48.50 51.00 53.00 54.75 60.00 68.00
## 2018 55.00 41.75 46.00 41.50 56.00 69.00 63.75 61.25 62.75 66.00 69.50 75.75
## 2019 59.50 41.50 42.00 36.25 49.00 64.25 60.00 62.25 66.00 69.00 72.50 76.50
## 2020 59.25 41.75 23.75  3.50 23.25 43.75 64.25 85.75
data.ramal<-c(NA,data.sma)
data.ramal #forecast 1 periode ke depan
##  [1]    NA    NA    NA    NA 13.00 11.50 10.50 11.75 13.00 13.75 15.50 16.25
## [13] 18.00 21.00 23.25 24.25 23.75 23.00 22.00 22.50 25.00 26.50 28.25 29.50
## [25] 31.00 43.00 55.25 65.00 65.75 54.75 43.25 34.25 34.00 39.25 44.75 53.50
## [37] 63.00 68.75 74.75 75.00 65.75 56.75 48.00 42.00 43.75 42.75 41.50 40.25
## [49] 39.75 43.25 45.75 47.50 47.25 47.50 48.75 48.50 51.00 53.00 54.75 60.00
## [61] 68.00 55.00 41.75 46.00 41.50 56.00 69.00 63.75 61.25 62.75 66.00 69.50
## [73] 75.75 59.50 41.50 42.00 36.25 49.00 64.25 60.00 62.25 66.00 69.00 72.50
## [85] 76.50 59.25 41.75 23.75  3.50 23.25 43.75 64.25 85.75
data.gab<-cbind(aktual=c(train.ts,rep(NA,5)),pemulusan=c(data.sma,rep(NA,5)),ramalan=c(data.ramal,rep(data.ramal[length(data.ramal)],4)))
data.gab #forecast 5 periode ke depan
##       aktual pemulusan ramalan
##  [1,]     16        NA      NA
##  [2,]     15        NA      NA
##  [3,]     12        NA      NA
##  [4,]      9     13.00      NA
##  [5,]     10     11.50   13.00
##  [6,]     11     10.50   11.50
##  [7,]     17     11.75   10.50
##  [8,]     14     13.00   11.75
##  [9,]     13     13.75   13.00
## [10,]     18     15.50   13.75
## [11,]     20     16.25   15.50
## [12,]     21     18.00   16.25
## [13,]     25     21.00   18.00
## [14,]     27     23.25   21.00
## [15,]     24     24.25   23.25
## [16,]     19     23.75   24.25
## [17,]     22     23.00   23.75
## [18,]     23     22.00   23.00
## [19,]     26     22.50   22.00
## [20,]     29     25.00   22.50
## [21,]     28     26.50   25.00
## [22,]     30     28.25   26.50
## [23,]     31     29.50   28.25
## [24,]     35     31.00   29.50
## [25,]     76     43.00   31.00
## [26,]     79     55.25   43.00
## [27,]     70     65.00   55.25
## [28,]     38     65.75   65.00
## [29,]     32     54.75   65.75
## [30,]     33     43.25   54.75
## [31,]     34     34.25   43.25
## [32,]     37     34.00   34.25
## [33,]     53     39.25   34.00
## [34,]     55     44.75   39.25
## [35,]     69     53.50   44.75
## [36,]     75     63.00   53.50
## [37,]     76     68.75   63.00
## [38,]     79     74.75   68.75
## [39,]     70     75.00   74.75
## [40,]     38     65.75   75.00
## [41,]     40     56.75   65.75
## [42,]     44     48.00   56.75
## [43,]     46     42.00   48.00
## [44,]     45     43.75   42.00
## [45,]     36     42.75   43.75
## [46,]     39     41.50   42.75
## [47,]     41     40.25   41.50
## [48,]     43     39.75   40.25
## [49,]     50     43.25   39.75
## [50,]     49     45.75   43.25
## [51,]     48     47.50   45.75
## [52,]     42     47.25   47.50
## [53,]     51     47.50   47.25
## [54,]     54     48.75   47.50
## [55,]     47     48.50   48.75
## [56,]     52     51.00   48.50
## [57,]     59     53.00   51.00
## [58,]     61     54.75   53.00
## [59,]     68     60.00   54.75
## [60,]     84     68.00   60.00
## [61,]      7     55.00   68.00
## [62,]      8     41.75   55.00
## [63,]     85     46.00   41.75
## [64,]     66     41.50   46.00
## [65,]     65     56.00   41.50
## [66,]     60     69.00   56.00
## [67,]     64     63.75   69.00
## [68,]     56     61.25   63.75
## [69,]     71     62.75   61.25
## [70,]     73     66.00   62.75
## [71,]     78     69.50   66.00
## [72,]     81     75.75   69.50
## [73,]      6     59.50   75.75
## [74,]      1     41.50   59.50
## [75,]     80     42.00   41.50
## [76,]     58     36.25   42.00
## [77,]     57     49.00   36.25
## [78,]     62     64.25   49.00
## [79,]     63     60.00   64.25
## [80,]     67     62.25   60.00
## [81,]     72     66.00   62.25
## [82,]     74     69.00   66.00
## [83,]     77     72.50   69.00
## [84,]     83     76.50   72.50
## [85,]      3     59.25   76.50
## [86,]      4     41.75   59.25
## [87,]      5     23.75   41.75
## [88,]      2      3.50   23.75
## [89,]     82     23.25    3.50
## [90,]     86     43.75   23.25
## [91,]     87     64.25   43.75
## [92,]     88     85.75   64.25
## [93,]     NA        NA   85.75
## [94,]     NA        NA   85.75
## [95,]     NA        NA   85.75
## [96,]     NA        NA   85.75
## [97,]     NA        NA   85.75
data.gabb <- ts(data.gab, start = 2013, frequency = 12)

Hasil peramalan dengan menggunakan N=5 pada metode SMA adalah sebesar 85.75

Plot time series

ts.plot(data.gabb[,1], xlab="Time Period ", ylab="Sales", main= "SMA N=4 Data Premium")
points(data.gabb[,1])
lines(data.gabb[,2],col="green",lwd=2)
lines(data.gabb[,3],col="red",lwd=2)
legend("topleft",c("data aktual","data pemulusan","data peramalan"), lty=8, col=c("black","green","red"), cex=0.8)

Menghitung nilai keakuratan

data.premium=as.numeric(data.premium)
error.sma = test.ts-data.ramal[1:length(test.ts)]
SSE.sma = sum(error.sma[5:length(test.ts)]^2)
MSE.sma = mean(error.sma[5:length(test.ts)]^2)
MAPE.sma = mean(abs((error.sma[5:length(test.ts)]/test.ts[5:length(test.ts)])*100))

akurasi.sma <- matrix(c(SSE.sma, MSE.sma, MAPE.sma))
row.names(akurasi.sma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi.sma) <- c("Akurasi m = 4")
akurasi.sma
##      Akurasi m = 4
## SSE      2631.6875
## MSE       138.5099
## MAPE      249.5628

Double Moving Average (DMA)

Pemulusan DMA dengan n=4

dma <- SMA(data.sma, n = 4)
At <- 2*data.sma - dma
Bt <- 2/(4-1)*(data.sma - dma)
data.dma<- At+Bt
data.ramal2<- c(NA, data.dma)

t = 1:5
f = c()

for (i in t) {
  f[i] = At[length(At)] + Bt[length(Bt)]*(i)
}

data.gab2 <- cbind(aktual = c(train.ts,rep(NA,5)), pemulusan1 = c(data.sma,rep(NA,5)),pemulusan2 = c(data.dma, rep(NA,5)),At = c(At, rep(NA,5)), Bt = c(Bt,rep(NA,5)),ramalan = c(data.ramal2, f[-1]))
data.gab2
##       aktual pemulusan1 pemulusan2       At           Bt    ramalan
##  [1,]     16         NA         NA       NA           NA         NA
##  [2,]     15         NA         NA       NA           NA         NA
##  [3,]     12         NA         NA       NA           NA         NA
##  [4,]      9      13.00         NA       NA           NA         NA
##  [5,]     10      11.50         NA       NA           NA         NA
##  [6,]     11      10.50         NA       NA           NA         NA
##  [7,]     17      11.75  11.854167  11.8125   0.04166667         NA
##  [8,]     14      13.00  15.187500  14.3125   0.87500000  11.854167
##  [9,]     13      13.75  16.250000  15.2500   1.00000000  15.187500
## [10,]     18      15.50  18.833333  17.5000   1.33333333  16.250000
## [11,]     20      16.25  18.958333  17.8750   1.08333333  18.833333
## [12,]     21      18.00  21.541667  20.1250   1.41666667  18.958333
## [13,]     25      21.00  26.520833  24.3125   2.20833333  21.541667
## [14,]     27      23.25  29.291667  26.8750   2.41666667  26.520833
## [15,]     24      24.25  28.625000  26.8750   1.75000000  29.291667
## [16,]     19      23.75  24.895833  24.4375   0.45833333  28.625000
## [17,]     22      23.00  22.062500  22.4375  -0.37500000  24.895833
## [18,]     23      22.00  19.916667  20.7500  -0.83333333  22.062500
## [19,]     26      22.50  21.979167  22.1875  -0.20833333  19.916667
## [20,]     29      25.00  28.125000  26.8750   1.25000000  21.979167
## [21,]     28      26.50  30.666667  29.0000   1.66666667  28.125000
## [22,]     30      28.25  32.729167  30.9375   1.79166667  30.666667
## [23,]     31      29.50  33.145833  31.6875   1.45833333  32.729167
## [24,]     35      31.00  34.645833  33.1875   1.45833333  33.145833
## [25,]     76      43.00  59.770833  53.0625   6.70833333  34.645833
## [26,]     79      55.25  81.187500  70.8125  10.37500000  59.770833
## [27,]     70      65.00  92.395833  81.4375  10.95833333  81.187500
## [28,]     38      65.75  79.916667  74.2500   5.66666667  92.395833
## [29,]     32      54.75  45.687500  49.3125  -3.62500000  79.916667
## [30,]     33      43.25  20.020833  29.3125  -9.29166667  45.687500
## [31,]     34      34.25   8.833333  19.0000 -10.16666667  20.020833
## [32,]     37      34.00  21.395833  26.4375  -5.04166667   8.833333
## [33,]     53      39.25  41.854167  40.8125   1.04166667  21.395833
## [34,]     55      44.75  55.895833  51.4375   4.45833333  41.854167
## [35,]     69      53.50  71.208333  64.1250   7.08333333  55.895833
## [36,]     75      63.00  84.458333  75.8750   8.58333333  71.208333
## [37,]     76      68.75  87.500000  80.0000   7.50000000  84.458333
## [38,]     79      74.75  91.000000  84.5000   6.50000000  87.500000
## [39,]     70      75.00  82.708333  79.6250   3.08333333  91.000000
## [40,]     38      65.75  56.895833  60.4375  -3.54166667  82.708333
## [41,]     40      56.75  37.895833  45.4375  -7.54166667  56.895833
## [42,]     44      48.00  25.708333  34.6250  -8.91666667  37.895833
## [43,]     46      42.00  23.458333  30.8750  -7.41666667  25.708333
## [44,]     45      43.75  37.291667  39.8750  -2.58333333  23.458333
## [45,]     36      42.75  40.458333  41.3750  -0.91666667  37.291667
## [46,]     39      41.50  39.833333  40.5000  -0.66666667  40.458333
## [47,]     41      40.25  37.229167  38.4375  -1.20833333  39.833333
## [48,]     43      39.75  37.562500  38.4375  -0.87500000  37.229167
## [49,]     50      43.25  46.687500  45.3125   1.37500000  37.562500
## [50,]     49      45.75  51.583333  49.2500   2.33333333  46.687500
## [51,]     48      47.50  53.229167  50.9375   2.29166667  51.583333
## [52,]     42      47.25  49.437500  48.5625   0.87500000  53.229167
## [53,]     51      47.50  48.333333  48.0000   0.33333333  49.437500
## [54,]     54      48.75  50.416667  49.7500   0.66666667  48.333333
## [55,]     47      48.50  49.333333  49.0000   0.33333333  50.416667
## [56,]     52      51.00  54.437500  53.0625   1.37500000  49.333333
## [57,]     59      53.00  57.479167  55.6875   1.79166667  54.437500
## [58,]     61      54.75  59.645833  57.6875   1.95833333  57.479167
## [59,]     68      60.00  68.854167  65.3125   3.54166667  59.645833
## [60,]     84      68.00  83.104167  77.0625   6.04166667  68.854167
## [61,]      7      55.00  47.604167  50.5625  -2.95833333  83.104167
## [62,]      8      41.75  17.687500  27.3125  -9.62500000  47.604167
## [63,]     85      46.00  34.854167  39.3125  -4.45833333  17.687500
## [64,]     66      41.50  33.895833  36.9375  -3.04166667  34.854167
## [65,]     65      56.00  72.145833  65.6875   6.45833333  33.895833
## [66,]     60      69.00  95.458333  84.8750  10.58333333  72.145833
## [67,]     64      63.75  74.062500  69.9375   4.12500000  95.458333
## [68,]     56      61.25  59.166667  60.0000  -0.83333333  74.062500
## [69,]     71      62.75  60.354167  61.3125  -0.95833333  59.166667
## [70,]     73      66.00  70.270833  68.5625   1.70833333  60.354167
## [71,]     78      69.50  77.208333  74.1250   3.08333333  70.270833
## [72,]     81      75.75  87.833333  83.0000   4.83333333  77.208333
## [73,]      6      59.50  45.854167  51.3125  -5.45833333  87.833333
## [74,]      1      41.50   8.062500  21.4375 -13.37500000  45.854167
## [75,]     80      42.00  20.854167  29.3125  -8.45833333   8.062500
## [76,]     58      36.25  21.979167  27.6875  -5.70833333  20.854167
## [77,]     57      49.00  60.354167  55.8125   4.54166667  21.979167
## [78,]     62      64.25  91.541667  80.6250  10.91666667  60.354167
## [79,]     63      60.00  72.708333  67.6250   5.08333333  91.541667
## [80,]     67      62.25  67.875000  65.6250   2.25000000  72.708333
## [81,]     72      66.00  70.791667  68.8750   1.91666667  67.875000
## [82,]     74      69.00  76.812500  73.6875   3.12500000  70.791667
## [83,]     77      72.50  80.937500  77.5625   3.37500000  76.812500
## [84,]     83      76.50  85.666667  82.0000   3.66666667  80.937500
## [85,]      3      59.25  42.479167  49.1875  -6.70833333  85.666667
## [86,]      4      41.75   7.166667  21.0000 -13.83333333  42.479167
## [87,]      5      23.75 -20.520833  -2.8125 -17.70833333   7.166667
## [88,]      2       3.50 -44.104167 -25.0625 -19.04166667 -20.520833
## [89,]     82      23.25  23.562500  23.4375   0.12500000 -44.104167
## [90,]     86      43.75  77.395833  63.9375  13.45833333  23.562500
## [91,]     87      64.25 115.187500  94.8125  20.37500000  77.395833
## [92,]     88      85.75 138.250000 117.2500  21.00000000 115.187500
## [93,]     NA         NA         NA       NA           NA 138.250000
## [94,]     NA         NA         NA       NA           NA 159.250000
## [95,]     NA         NA         NA       NA           NA 180.250000
## [96,]     NA         NA         NA       NA           NA 201.250000
## [97,]     NA         NA         NA       NA           NA 222.250000
data.gabb2<- ts(data.gab2, start = 2013, frequency = 12)

Hasil peramalan dengan menggunakan N=5 selama 5 periode kedepan pada metode DMA terus menurun dari 138.25 sampai 222.25

Plot time series

ts.plot(data.gabb2[,1], xlab="Time Period ", ylab="Sales", main= "DMA N=4 Data Premium")
points(data.gabb2[,1])
lines(data.gabb2[,3],col="green",lwd=2)
lines(data.gabb2[,6],col="red",lwd=2)
legend("topleft",c("data aktual","data pemulusan","data peramalan"), lty=8, col=c("black","green","red"), cex=0.7)

Menghitung nilai keakuratan

error.dma = test.ts-data.ramal2[1:length(test.ts)]
SSE.dma = sum(error.dma[8:length(test.ts)]^2)
MSE.dma = mean(error.dma[8:length(test.ts)]^2)
MAPE.dma = mean(abs((error.dma[8:length(test.ts)]/test.ts[8:length(test.ts)])*100))

akurasi.dma <- matrix(c(SSE.dma, MSE.dma, MAPE.dma))
row.names(akurasi.dma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi.dma) <- c("Akurasi m = 4")
akurasi.dma
##      Akurasi m = 4
## SSE      3981.2444
## MSE       248.8278
## MAPE      362.7550
akurasi.sma
##      Akurasi m = 4
## SSE      2631.6875
## MSE       138.5099
## MAPE      249.5628

Dengan metode SMA, diketahui SSE, MSE, dan MAPE bernilai lebih kecil Metode SMA lebih baik digunakan # Looping for Best M value ## SMA

m = 2:30
akurasi.full <- c()
data.premium <- as.numeric(train.ts)

for(i in m){
  data.sma <- SMA(train.ts, n = i)
  data.ramal <- c(NA, data.sma)
  
  error.sma = train.ts - data.ramal[1:length(train.ts)]
  SSE.sma = sum(error.sma[(i+1):length(train.ts)]^2)
  MSE.sma = mean(error.sma[(i+1):length(train.ts)]^2)
  MAPE.sma = mean(abs((error.sma[(i+1):length(train.ts)]/train.ts[(i+1):length(train.ts)])*100))
  
  tabel <- matrix(c(SSE.sma, MSE.sma, MAPE.sma))
  colnames(tabel) <- paste("M =", i)
  rownames(tabel) <- c("SSE", "MSE", "MAPE")
  
  akurasi.full <- cbind(akurasi.full, tabel)
}

View(akurasi.full)
akurasi.full
##           M = 2      M = 3      M = 4      M = 5      M = 6      M = 7
## SSE  50223.7500 51596.6667 54846.0625 55266.4800 54076.7222 52865.6531
## MSE    558.0417   579.7378   623.2507   635.2469   628.7991   621.9489
## MAPE   136.2434   160.1736   182.5107   194.4230   198.9245   203.1741
##           M = 8      M = 9     M = 10     M = 11     M = 12     M = 13
## SSE  51381.3750 50182.5062 49873.9400 48060.7851 45059.3472 44181.6627
## MSE    611.6830   604.6085   608.2188   593.3430   563.2418   559.2616
## MAPE   205.8848   208.7878   212.5577   214.0558   206.0703   202.9866
##          M = 14     M = 15     M = 16     M = 17     M = 18     M = 19
## SSE  44222.2857 44859.6578 46146.3086 47110.8270 47919.2500 48384.4432
## MSE    566.9524   582.5930   607.1883   628.1444   647.5574   662.8006
## MAPE   205.6333   208.1853   213.3207   217.2473   220.3528   222.7301
##          M = 20     M = 21     M = 22     M = 23     M = 24     M = 25
## SSE  48529.4375 48620.6417 49008.7831 49250.6181 48977.2101 45993.0672
## MSE    674.0200   684.7978   700.1255   713.7771   720.2531   686.4637
## MAPE   225.0758   227.5231   230.2930   232.7044   234.3229   236.7789
##          M = 26     M = 27     M = 28     M = 29     M = 30
## SSE  42808.1701 41010.5446 41406.6403 41782.3769 42084.0256
## MSE    648.6086   630.9315   646.9788   663.2123   678.7746
## MAPE   237.3118   238.2589   241.5601   244.2212   247.0938

Nilai error yang terkecil merupakan n optimal, terlihat error yang terkecil ada pada N=27

DMA

m = 2:30
akurasi.full2 <- c()

for(i in m){
  data.sma <- SMA(train.ts, n = i)
  dma <- SMA(data.sma, n = i)
  At <- 2*data.sma - dma
  Bt <- 2/(i - 1) * (data.sma - dma)
  data.dma <- At + Bt
  data.ramal2 <- c(NA, data.dma)
  
  error.dma <- test.ts - data.ramal2[1:length(test.ts)]
  SSE.dma <- sum(error.dma[(i*2):length(test.ts)]^2)
  MSE.dma <- mean(error.dma[(i*2):length(test.ts)]^2)
  MAPE.dma <- mean(abs(error.dma[(i*2):115]/test.ts[(i*2):115]) * 100)
  
  tabel2 <- matrix(c(SSE.dma, MSE.dma, MAPE.dma))
  colnames(tabel2) <- paste("M =", i)
  rownames <- c("SSE", "MSE", "MAPE")
  
  akurasi.full2 <- cbind(akurasi.full2, tabel2)
}

akurasi.full2 <- as.data.frame(akurasi.full2)
View(akurasi.full2)
akurasi.full2
##       M = 2    M = 3     M = 4     M = 5     M = 6     M = 7     M = 8   M = 9
## 1 4744.1875 4446.432 3981.2444 3529.1308 3012.3062 2514.1415 1898.7657 1883.22
## 2  237.2094  247.024  248.8278  252.0808  251.0255  251.4141  237.3457  313.87
## 3        NA       NA        NA        NA        NA        NA        NA      NA
##      M = 10    M = 11 M = 12 M = 13 M = 14 M = 15 M = 16 M = 17 M = 18 M = 19
## 1 1865.0093 1009.2550     NA     NA     NA     NA     NA     NA     NA     NA
## 2  466.2523  504.6275     NA     NA     NA     NA     NA     NA     NA     NA
## 3        NA        NA     NA     NA     NA     NA     NA     NA     NA     NA
##   M = 20 M = 21 M = 22 M = 23 M = 24 M = 25 M = 26 M = 27 M = 28 M = 29 M = 30
## 1     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
## 2     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA
## 3     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     NA

Nilai error yang terkecil merupakan n optimal, terlihat error yang terkecil ada pada N=11

Perbandingan SMA dan DMA

comp <- cbind(akurasi.full[,26], akurasi.full2[,10])
colnames(comp) <- c("SMA","DMA")
rownames(comp) <- c("SSE","MSE","MAPE")
comp <- as.data.frame(comp)
comp
##             SMA       DMA
## SSE  41010.5446 1009.2550
## MSE    630.9315  504.6275
## MAPE   238.2589        NA

Jika dibandingkan antara SMA dan DMA pada nilai n optimum, metode DMA menghasilkan error yang lebih kecil dibanding SMA pada ketiga ukuran kebaikan diatas.

Pemulusan Eksponensial

Import data

dataekspo <- read_xlsx("C:/0 SEM5/MPDW/p1/Data Kelompok 15.xlsx")
dataekspo$Premium <- as.numeric(dataekspo$Premium)
str(dataekspo)
## tibble [115 x 7] (S3: tbl_df/tbl/data.frame)
##  $ Tahun        : num [1:115] 2013 2013 2013 2013 2013 ...
##  $ Bulan        : chr [1:115] "Januari" "Februari" "Maret" "April" ...
##  $ Premium      : num [1:115] 7798 7773 7576 7421 7545 ...
##  $ Medium       : chr [1:115] "7697.37" "7645.05" "7503.27" "7290.96" ...
##  $ Luar Kualitas: chr [1:115] "7545.32" "7328.44" "7033.14" "6870.91" ...
##  $ IHK          : num [1:115] 1.03 1.79 2.43 2.32 2.3 3.35 6.75 7.94 7.57 7.66 ...
##  $ Harga Gabah  : chr [1:115] "4333.19" "4265.58" "3783.15" "3669.04" ...

Membentuk objek time series

training<-dataekspo[1:92,3] 
testing<-dataekspo[93:115,3] 
dataekspo.ts<-ts(dataekspo$Premium,start = 2013, frequency = 12) 
training.ts<-ts(training,start = 2013, frequency = 12)
testing.ts<-ts(testing,start=93)

Eksplorasi

dataekspo.ts <- as.numeric(dataekspo.ts)
plot(dataekspo.ts, col="red",main="Plot seluruh data")
points(dataekspo.ts)

plot(training.ts, col="blue",main="Plot data training")
points(training.ts)

plot(testing.ts, col="blue",main="Plot data testing")
points(testing.ts)

Single Exponential

Fungsi Holtwinter

ses1<- HoltWinters(training.ts, gamma = FALSE, beta = FALSE, alpha = 0.2)
plot(ses1)

## Fungsi Holtwinter optimal

sesopt<- HoltWinters(training.ts, gamma = FALSE, beta = FALSE)
sesopt
## Holt-Winters exponential smoothing without trend and without seasonal component.
## 
## Call:
## HoltWinters(x = training.ts, beta = FALSE, gamma = FALSE)
## 
## Smoothing parameters:
##  alpha: 0.9999339
##  beta : FALSE
##  gamma: FALSE
## 
## Coefficients:
##       [,1]
## a 9962.648
plot(sesopt)

## Fungsi Holtwinter

ramalan1<- forecast(ses1, h=10)
ramalan1$mean
## Time Series:
## Start = 93 
## End = 102 
## Frequency = 1 
##  [1] 9912.331 9912.331 9912.331 9912.331 9912.331 9912.331 9912.331 9912.331
##  [9] 9912.331 9912.331

Fungsi Holtwinter optimal

ramalanopt<- forecast(sesopt, h=10)
ramalanopt
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  93       9962.648 9719.807 10205.49 9591.254 10334.04
##  94       9962.648 9619.230 10306.07 9437.435 10487.86
##  95       9962.648 9542.053 10383.24 9319.403 10605.89
##  96       9962.648 9476.989 10448.31 9219.897 10705.40
##  97       9962.648 9419.667 10505.63 9132.230 10793.07
##  98       9962.648 9367.843 10557.45 9052.973 10872.32
##  99       9962.648 9320.186 10605.11 8980.088 10945.21
## 100       9962.648 9275.828 10649.47 8912.248 11013.05
## 101       9962.648 9234.167 10691.13 8848.532 11076.76
## 102       9962.648 9194.762 10730.53 8788.267 11137.03

Akurasi Data Training

SSE

ses1<- HoltWinters(training.ts, gamma = FALSE, beta = FALSE, alpha = 0.2)
sse1.train <- ses1$SSE
sse1.train
## [1] 9045657
sseopt.train <- sesopt$SSE
sseopt.train
## [1] 3283102

MSE

mse1.train <- sse1.train/length(training.ts)
mse1.train
## [1] 98322.36
mseopt.train <- sseopt.train/length(training.ts)
mseopt.train
## [1] 35685.89

RMSE

rmse1.train <- sqrt(mse1.train)
rmse1.train
## [1] 313.564
rmseopt.train <- sqrt(mseopt.train)
rmseopt.train
## [1] 188.9071
akurasi.ses1 <- matrix(c(sse1.train, mse1.train, rmse1.train, sseopt.train, mseopt.train, rmseopt.train), nrow=3, ncol=2)
row.names(akurasi.ses1)<- c("SSE", "MSE", "RMSE")
colnames(akurasi.ses1) <- c("alpha=0.2", "alpha=0.762373")
akurasi.ses1
##        alpha=0.2 alpha=0.762373
## SSE  9045657.450   3283102.1245
## MSE    98322.364     35685.8927
## RMSE     313.564       188.9071

Metode SES memiliki parameter pemulusan yaitu alpha yang bernilai antara 0 dan 1. Pada awal pemulusan, digunakan alpha 0.2. Lalu dilakukan pemulusan dengan alpha yang optimal secara otomatis dengan program, didapatkan alpha sebesar 0.762373. Parameter pemulusan yang dipilih adalah alpha =0.762373 karena memiliki error yang lebih kecil.

Double Exponential

des1<- HoltWinters(training.ts, gamma = FALSE, beta = 0.2, alpha = 0.2)
plot(des1)

desopt<- HoltWinters(training.ts, gamma = FALSE)
desopt
## Holt-Winters exponential smoothing with trend and without seasonal component.
## 
## Call:
## HoltWinters(x = training.ts, gamma = FALSE)
## 
## Smoothing parameters:
##  alpha: 1
##  beta : 0.01810342
##  gamma: FALSE
## 
## Coefficients:
##         [,1]
## a 9962.65000
## b   10.61376
plot(desopt)

## Forecasting

ramalandes1<- forecast(des1, h=10)
ramalandes1
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  93       10040.14 9628.400 10451.89 9410.436 10669.85
##  94       10069.77 9646.330 10493.20 9422.177 10717.35
##  95       10099.39 9660.538 10538.24 9428.225 10770.55
##  96       10129.01 9670.808 10587.21 9428.251 10829.77
##  97       10158.63 9677.051 10640.21 9422.118 10895.15
##  98       10188.26 9679.290 10697.22 9409.860 10966.65
##  99       10217.88 9677.630 10758.13 9391.640 11044.12
## 100       10247.50 9672.237 10822.76 9367.711 11127.29
## 101       10277.12 9663.307 10890.94 9338.373 11215.87
## 102       10306.74 9651.051 10962.44 9303.947 11309.54
ramalandesopt<- forecast(desopt, h=10)
ramalandesopt
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
##  93       9973.264 9725.983 10220.54 9595.081 10351.45
##  94       9983.878 9630.990 10336.76 9444.183 10523.57
##  95       9994.491 9558.389 10430.59 9327.530 10661.45
##  96      10005.105 9497.015 10513.19 9228.049 10782.16
##  97      10015.719 9442.588 10588.85 9139.190 10892.25
##  98      10026.333 9392.931 10659.73 9057.628 10995.04
##  99      10036.946 9346.765 10727.13 8981.404 11092.49
## 100      10047.560 9303.263 10791.86 8909.256 11185.86
## 101      10058.174 9261.857 10854.49 8840.312 11276.04
## 102      10068.788 9222.137 10915.44 8773.947 11363.63

Akurasi data training

SSE

sse.des.train <- des1$SSE
sse.des.train
## [1] 9207195
sseopt.des.train <- desopt$SSE
sseopt.des.train
## [1] 3355077

MSE

mse.des.train <- sse1.train/length(training.ts)
mse.des.train
## [1] 98322.36
mseopt.des.train <- sseopt.train/length(training.ts)
mseopt.des.train
## [1] 35685.89

RMSE

rmse.des.train <- sqrt(mse.des.train)
rmse.des.train
## [1] 313.564
rmseopt.des.train <- sqrt(mseopt.des.train)
rmseopt.des.train
## [1] 188.9071
akurasi.des1 <- matrix(c(sse.des.train,mse.des.train,rmse.des.train,sseopt.des.train,mseopt.des.train,rmseopt.des.train), nrow=3, ncol=2)
row.names(akurasi.des1)<- c("SSE", "MSE", "RMSE")
colnames(akurasi.des1) <- c("alpha=0.2, beta=0.2", "alpha=0.7916783, beta=0")
akurasi.des1
##      alpha=0.2, beta=0.2 alpha=0.7916783, beta=0
## SSE          9207194.764            3355076.8907
## MSE            98322.364              35685.8927
## RMSE             313.564                188.9071

Metode DES memiliki dua parameter pemulusan yaitu alpha dan beta yang bernilai antara 0 dan 1. Pada awal pemulusan, digunakan alpha dan beta sebesar 0.2. Lalu dilakukan pemulusan dengan alpha dan beta yang optimal secara otomatis dengan program, didapatkan alpha sebesar 0.7916783 dan beta sebesar 0. Parameter pemulusan yang dipilih adalah alpha = 0.7916783 dan beta = 0 karena memiliki error yang lebih kecil. ## Perbandingan Single Exponential dan Double Exponential

selisihses<-ramalanopt$mean-testing.ts
selisihses
## Time Series:
## Start = 93 
## End = 102 
## Frequency = 1 
##       testing.ts
##  [1,]   91.52795
##  [2,]  149.74795
##  [3,]  248.14795
##  [4,]  174.78795
##  [5,]  182.45795
##  [6,]  190.54795
##  [7,]  355.67795
##  [8,]  412.88795
##  [9,]  335.56795
## [10,]  425.48795
SSEtestingses<-sum(selisihses^2)
str(testing.ts)
##  Time-Series [1:23, 1] from 93 to 115: 9871 9813 9714 9788 9780 ...
##  - attr(*, "dimnames")=List of 2
##   ..$ : NULL
##   ..$ : chr "Premium"
selisihdes<-ramalandesopt$mean-testing.ts
selisihdes
## Time Series:
## Start = 93 
## End = 102 
## Frequency = 1 
##       testing.ts
##  [1,]   102.1438
##  [2,]   170.9775
##  [3,]   279.9913
##  [4,]   217.2450
##  [5,]   235.5288
##  [6,]   254.2325
##  [7,]   429.9763
##  [8,]   497.8001
##  [9,]   431.0938
## [10,]   531.6276
SSEtestingdes<-sum(selisihdes^2)

akurasi <- matrix(c(SSEtestingses, SSEtestingdes), nrow=1, ncol=2)
row.names(akurasi)<- "SSE"
colnames(akurasi) <- c("SES", "DES")
akurasi
##          SES     DES
## SSE 783158.6 1186519

Dibandingkan degan metode moving average, metode exponential memiliki error yang jauh lebih kecil, hal ini menandakan bahwa adanya perbedaan pengaruh harga beras antar periode sehingga metode exponential lebih cocok digunakan.

Pemulusan Winter

Import data

winter <- data

Membagi data menjadi training dan testing

training<-winter[1:92,3]
testing<-winter[93:115,3]

Membentuk objek time series

winter.ts<-ts(winter$Premium,  start=2013, frequency = 12,)
training.ts<-ts(training, start=2013, frequency = 12)
testing.ts<-ts(testing, start=93, frequency = 12)

Membuat plot time series

plot(winter.ts, col="red")
points(winter.ts)

plot(training.ts, col="blue")
points(training.ts)

# Winter Aditif

Pemulusan

aditif <- HoltWinters(training.ts, seasonal = "additive")
aditif 
## Holt-Winters exponential smoothing with trend and additive seasonal component.
## 
## Call:
## HoltWinters(x = training.ts, seasonal = "additive")
## 
## Smoothing parameters:
##  alpha: 0.8548849
##  beta : 0
##  gamma: 1
## 
## Coefficients:
##            [,1]
## a    89.2468595
## b     1.0007284
## s1    1.0606530
## s2    0.3786525
## s3    3.0591237
## s4    5.4550945
## s5  -21.6750436
## s6   -1.1475027
## s7   19.0352662
## s8   -5.8143374
## s9    4.4927227
## s10  -2.5830969
## s11  -1.8064322
## s12  -1.2468595

Forecasting

ramalan1 <- forecast(aditif, h=23)
ramalan1
##        Point Forecast       Lo 80    Hi 80     Lo 95    Hi 95
## Sep  8       91.30824  62.2785608 120.3379  46.91118 135.7053
## Oct  8       91.62697  53.4352486 129.8187  33.21777 150.0362
## Nov  8       95.30817  49.7615697 140.8548  25.65066 164.9657
## Dec  8       98.70487  46.8360156 150.5737  19.37830 178.0314
## Jan  9       72.57546  15.0753450 130.0756 -15.36338 160.5143
## Feb  9       94.10373  31.4766712 156.7308  -1.67609 189.8835
## Mar  9      115.28722  47.9222982 182.6522  12.26146 218.3130
## Apr  9       91.43835  19.6475528 163.2291 -18.35620 201.2329
## May  9      102.74614  26.7869144 178.7054 -13.42347 218.9157
## Jun  9       96.67105  16.7605418 176.5816 -25.54152 218.8836
## Jul  9       98.44844  14.7730315 182.1238 -29.52205 226.4189
## Aug  9      100.00874  12.7306846 187.2868 -33.47153 233.4890
## Sep  9      103.31698  11.3377373 195.2962 -37.35313 243.9871
## Oct  9      103.63571   8.3673173 198.9041 -42.06472 249.3361
## Nov  9      107.31691   8.8691986 205.7646 -43.24587 257.8797
## Dec  9      110.71361   9.1860906 212.2411 -44.55933 265.9865
## Jan 10       84.58420 -19.9324126 189.1008 -75.26016 244.4286
## Feb 10      106.11247  -1.3100957 213.5350 -58.17617 270.4011
## Mar 10      127.29597  17.0440159 237.5479 -41.31984 295.9118
## Apr 10      103.44709  -9.5634293 216.4576 -69.38759 276.2818
## May 10      114.75488  -0.9484604 230.4582 -62.19811 291.7079
## Jun 10      108.67979  -9.6551095 227.0147 -72.29782 289.6574
## Jul 10      110.45718 -10.4520125 231.3664 -74.45747 295.3718

Akurasi data training

SSE

sse1.train <- aditif$SSE
sse1.train
## [1] 40536.24

Winter Multiplikatif

Pemulusan

multi <- HoltWinters(training.ts,seasonal = "multiplicative")
multi
## Holt-Winters exponential smoothing with trend and multiplicative seasonal component.
## 
## Call:
## HoltWinters(x = training.ts, seasonal = "multiplicative")
## 
## Smoothing parameters:
##  alpha: 0.8058113
##  beta : 0
##  gamma: 0.9152878
## 
## Coefficients:
##           [,1]
## a   94.1463388
## b    1.0007284
## s1   0.9197850
## s2   0.9274307
## s3   1.0152787
## s4   1.0986079
## s5   0.1342742
## s6   0.2141852
## s7   0.8424770
## s8   0.6074020
## s9   0.9713126
## s10  0.8706238
## s11  0.9139195
## s12  0.9351503

Forecasting

ramalan2 <- forecast(multi, h=23)
ramalan2
##        Point Forecast      Lo 80     Hi 80      Lo 95     Hi 95
## Sep  8       87.51485   61.52127 113.50843   47.76110 127.26859
## Oct  8       89.17042   55.45444 122.88640   37.60627 140.73457
## Nov  8       98.63282   56.54037 140.72528   34.25796 163.00769
## Dec  8      107.82754   57.92646 157.72862   31.51042 184.14466
## Jan  9       13.31329  -13.32401  39.95059  -27.42495  54.05153
## Feb  9       21.45080  -22.31968  65.22128  -45.49037  88.39197
## Mar  9       85.21776  -78.73445 249.16997 -165.52551 335.96103
## Apr  9       62.04743  -58.50379 182.59865 -122.31975 246.41461
## May  9      100.19371  -92.86186 293.24928 -195.05931 395.44673
## Jun  9       90.67862  -83.79501 265.15226 -176.15578 357.51302
## Jul  9       96.10261  -88.22008 280.42531 -185.79463 377.99985
## Aug  9       99.27095  -90.27886 288.82077 -190.62047 389.16238
## Sep  9       98.56031  -89.76996 286.89058 -189.46599 386.58660
## Oct  9      100.30769  -90.75909 291.37448 -191.90373 392.51912
## Nov  9      110.82504  -99.21155 320.86163 -210.39820 432.04829
## Dec  9      121.02044 -107.08416 349.12505 -227.83545 469.87633
## Jan 10       14.92575  -25.92065  55.77216  -47.54343  77.39493
## Feb 10       24.02289  -39.32223  87.36802  -72.85511 120.90090
## Mar 10       95.33485 -141.53193 332.20162 -266.92162 457.59132
## Apr 10       69.34157 -103.37411 242.05724 -194.80427 333.48740
## May 10      111.85795 -163.90453 387.62044 -309.88438 533.60028
## Jun 10      101.13372 -147.13417 349.40161 -278.55925 480.82669
## Jul 10      107.07764 -154.31856 368.47383 -292.69335 506.84862

Akurasi data training

SSE

sse2.train <- multi$SSE
sse2.train
## [1] 33622.63

Akurasi data testing

selisih1<-as.numeric(ramalan1$mean)-as.numeric(testing.ts)
selisih1
##  [1]  68.30824  71.62697  80.30817  79.70487  55.57546  78.10373 104.28722
##  [8]  82.43835  90.74614  89.67105  97.44844  95.00874 100.31698 101.63571
## [15]  99.31691  96.71361  63.58420  84.11247 109.29597  93.44709 108.75488
## [22] 104.67979  97.45718
SSEtesting1<-sum(selisih1^2)

selisih2<-as.numeric(ramalan2$mean)-as.numeric(testing.ts)
selisih2
##  [1]  64.514846  69.170419  83.632824  88.827542  -3.686713   5.450799
##  [7]  74.217761  53.047432  88.193711  83.678622  95.102613  94.270954
## [13]  95.560306  98.307694 102.825043 107.020440  -6.074248   2.022893
## [19]  77.334849  59.341565 105.857953  97.133718  94.077635
SSEtesting2<-sum(selisih2^2)

akurasi <- matrix(c(SSEtesting1, SSEtesting2), nrow=1, ncol=2)
row.names(akurasi)<- "SSE"
colnames(akurasi) <- c("Aditif", "Multiplikatif")
akurasi
##       Aditif Multiplikatif
## SSE 187947.9        144766

Kesimpulan

  1. Metode Exponential lebih cocok digunakan dibandingkan dengan metode moving average. Adanya perbedaan pengaruh harga beras antar periode membuat metode exponential lebih cocok digunakan.
  2. Dalam Metode Eksponensial, metode Double Exponential Smoothing lebih cocok digunakan dibandingkan Single Exponential Smoothing.
  3. Pada metode Winter, multiplikative lebih cocok digunakan dibandingkan additive.

Daftar Pustaka

Fani E, Widjajati FA, Soehardjoepri. 2017. Perbandingan Metode Winter Eksponensial Smoothing dan Metode Event Based untuk Menentukan Penjualan Produk Terbaik di Perusahaan X. Jurnal Sains dan Seni ITS. 6(1):2337-3529.

H. R. Naufal and R Adrean, “R. naufal Hayâ and R. Adrean, ‘Sistem Informasi Inventory Berdasarkan Prediksi Data Penjualan Barang Menggunakan Metode Single Moving Average Pada CV. Agung Youanda,’ ProTekInfo (Pengembangan Ris. dan Obs.Tek. Inform., vol. 4, pp. 29–33, 2017,” ProTekInfo (Pengembangan Ris. dan Obs. Tek.Inf., vol. 4, pp. 29–33, 2017.

Hartono A, Dwijana D, Handiwidjojo. 2012. Perbandingan metode single exponential smoothing dan exponential smoothing adjusted for trend untuk meramalkan penjualan. Studi kasus: Toko onderdil mobil “Prodi, Purwodadi”. Jurnal EKSIS. 5(1):8-18.

Hapsari, V. 2013. Perbandingan Metode Dekomposisi Klasik dengan Metode Pemulusan Eksponensial Holt-Winter dalam meramalkan Tingkat Pencemaran Udara di Kota Bandung Periode 2003-2012. Universitas Pendidikan Indonesia.

Muzaki L. 2022. Contoh studi kasus metode double moving average, kelebihan kekurangan, dan cara menghitung [internet]. [diacu pada 2022 Oktober 25]. Tersedia dari: https://www.pengadaanbarang.co.id/2022/05/metode-double-moving-average.html.

M. Layakana, S. Iskandar. “Penerapan Metode Double Moving Average dan Double Eksponensial Smoothing Dalam Meramalkan Jumlah Produksi Crude Palm Oil(CPO) Pada PT.Perkebunan Nusantara IV Unit Dolok Sinumbah. 6(1): 47.

Purwanto A, Hanief S. 2017. Teknik peramalan dengan double exponential smoothing pada distributor gula. Jurnal Teknologi Informasi dan Komputer. 3(1):362-367

https://www.bps.go.id/indicator/36/500/10/rata-rata-harga-beras-bulanan-di-tingkat-penggilingan-menurut-kualitas.html