Pemulusan Data Deret Waktu

Pada kesempatan kali ini akan dilakukan analisis data deret waktu berupa pemulusan (smoothing) pada data pribadi peneliti yakni data mengenai nilai tukar mata uang rupiah terhadap USD per bulan di abad ke-21 (terhitung sejak januari 2001 hingga juli 2023).

Pengerjaan dimulai dengan memanggil library untuk analisis data deret waktu berikut.

library("forecast")
library("graphics")
library("TTR")
library("TSA")

Import Dataset

#install.packages("rio") #install jika belum ada
library(rio)
data<- import("https://raw.githubusercontent.com/fax17/MPDW/main/data/data.csv")

Eksplorasi Data

Eksplorasi dilakukan dengan beberapa fungsi. Melihat data menggunakan fungsi View(), struktur data menggunakan fungsi str(), dan dimensi data menggunakan fungsi dim().

View(data)
str(data)
## 'data.frame':    271 obs. of  3 variables:
##  $ Periode: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ bulan  : chr  "Januari" "Februari" "Maret" "April" ...
##  $ USD    : int  9450 9835 10400 11675 11058 11440 9525 8865 9675 10435 ...
dim(data)
## [1] 271   3

Mengubah data agar terbaca sebagai data deret waktu dengan fungsi ts() .

data.ts <- ts(data$USD)

Menampilkan ringkasan data dengan fungsi summary().

summary(data.ts)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    8279    9175   10320   11346   13776   16367

Membuat plot data deret waktu

ts.plot(data.ts, xlab="Time Period ", ylab="Rupiah", 
        main = "Time Series Plot")
points(data.ts)

Dari keseluruhan data tersebut diambil sebagiannya saja untuk eksplorasi yakni sebanyak 120 amatan yang merupakan data 10 tahun dari 2012-2022.

#Eksplorasi sebagian data
datanew<- data[145:264,]
datanew.ts <- ts(datanew$USD)
ts.plot(datanew.ts, xlab="Time Period ", ylab="Rupiah", 
        main = "Time Series Plot")
points(datanew.ts)

Selanjutnya akan dilakukan smoothing atau pemulusan pada data deret waktu yang dipilih, dan hasil eksplorasi menunjukan data tersebut berpola trend sehingga yang akan dicobakan adalah pemulusan dengan DMA (double moving average) dan DES (double eksponensial smoothing). Adapun sebelum memasuki pemulusan tersebut akan dilakukan pembagian data terlebih dahulu

Pembagian Data

Pembagian data latih (train) dan data uji (test) dilakukan dengan perbandingan 85% data latih dan 15% data uji. Pembagian ini mengikuti keinginan pribadi dari peneliti agar data latih lebih dari 100 amatan dan ini menyesuaikan pada pola data yang ditunjukan.

#membagi data latih dan data uji
train <- datanew[1:102,]
test <- datanew[103:120,]
train.ts <- ts(train$USD)
test.ts <- ts(test$USD)

Eksplorasi Setiap Data

Selanjutnya dilakukan eksplorasi data yang dilakukan pada keseluruhan data, data latih serta data uji menggunakan plot data deret waktu.

#eksplorasi keseluruhan data
plot(datanew.ts, col="red",main="Plot semua data")
points(datanew.ts)

#eksplorasi data latih
plot(train.ts, col="blue",main="Plot data latih")
points(train.ts)

#eksplorasi data uji
plot(test.ts, col="blue",main="Plot data uji")
points(test.ts)

Eksplorasi data juga dapat dilakukan menggunakan package ggplot2 dengan terlebih dahulu memanggil library package ggplot2.

#Eksplorasi dengan GGPLOT
library(ggplot2)
ggplot() + 
  geom_line(data = train, aes(x = Periode, y = USD, col = "Data Latih")) +
  geom_line(data = test, aes(x = Periode, y = USD, col = "Data Uji")) +
  labs(x = "Periode Waktu", y = "Sales", color = "Legend") +
  scale_colour_manual(name="Keterangan:", breaks = c("Data Latih", "Data Uji"),
                      values = c("blue", "red")) + 
  theme_bw() + theme(legend.position = "bottom",
                     plot.caption = element_text(hjust=0.5, size=12))

Single Moving Average & Double Moving Average

Selanjutnya masuk ke metode pemulusan, metode pertama yang dilakukan adalah DMA dan pada metode ini perlu dilakukan SMA (Single Moving Average) terlebih dahulu.

Single Moving Average (SMA)

Ide dasar dari Single Moving Average (SMA) adalah data suatu periode dipengaruhi oleh data periode sebelumnya. Metode pemulusan ini cocok digunakan untuk pola data stasioner atau konstan. Prinsip dasar metode pemulusan ini adalah data pemulusan pada periode ke-t merupakan rata rata dari m buah data pada periode ke-t hingga periode ke (t-m+1). Data pemulusan pada periode ke-t selanjutnya digunakan sebagai nilai peramalan pada periode ke t+1

Pemulusan menggunakan metode SMA dilakukan dengan fungsi SMA(). Dalam hal ini akan dilakukan pemulusan dengan parameter m=4.

data.sma<-SMA(train.ts, n=4)
data.sma
## Time Series:
## Start = 1 
## End = 102 
## Frequency = 1 
##   [1]       NA       NA       NA  9701.50  9727.50  9793.00  9932.75 10233.25
##   [9] 10686.00 11012.25 11437.00 11753.25 11906.50 12006.50 11863.25 11699.00
##  [17] 11545.25 11629.00 11675.75 11722.00 11872.25 11900.50 12051.75 12232.50
##  [25] 12335.75 12531.00 12753.00 12877.25 13023.75 13141.00 13240.25 13512.75
##  [33] 13874.25 13951.00 14040.75 13982.75 13780.00 13719.00 13578.00 13430.25
##  [41] 13372.50 13318.75 13273.25 13297.25 13143.00 13110.75 13228.00 13262.00
##  [49] 13348.25 13422.25 13361.75 13334.50 13329.00 13322.00 13322.50 13328.50
##  [57] 13371.25 13434.50 13482.25 13531.50 13511.75 13545.50 13606.00 13688.25
##  [65] 13822.75 13997.00 14161.25 14369.75 14614.25 14820.00 14801.50 14744.00
##  [73] 14529.75 14238.50 14214.75 14148.25 14226.50 14246.25 14191.75 14197.25
##  [81] 14144.50 14111.25 14130.25 14046.25 13918.25 13974.75 14541.00 14855.00
##  [89] 15122.75 15139.75 14711.25 14560.50 14606.75 14703.75 14572.50 14460.25
##  [97] 14251.75 14136.50 14247.50 14338.25 14394.75 14461.50

Data pemulusan pada periode ke-t selanjutnya digunakan sebagai nilai peramalan pada periode ke t+1 sehingga hasil peramalan 1 periode kedepan adalah sebagai berikut.

data.ramal<-c(NA,data.sma)
data.ramal #forecast 1 periode ke depan
##   [1]       NA       NA       NA       NA  9701.50  9727.50  9793.00  9932.75
##   [9] 10233.25 10686.00 11012.25 11437.00 11753.25 11906.50 12006.50 11863.25
##  [17] 11699.00 11545.25 11629.00 11675.75 11722.00 11872.25 11900.50 12051.75
##  [25] 12232.50 12335.75 12531.00 12753.00 12877.25 13023.75 13141.00 13240.25
##  [33] 13512.75 13874.25 13951.00 14040.75 13982.75 13780.00 13719.00 13578.00
##  [41] 13430.25 13372.50 13318.75 13273.25 13297.25 13143.00 13110.75 13228.00
##  [49] 13262.00 13348.25 13422.25 13361.75 13334.50 13329.00 13322.00 13322.50
##  [57] 13328.50 13371.25 13434.50 13482.25 13531.50 13511.75 13545.50 13606.00
##  [65] 13688.25 13822.75 13997.00 14161.25 14369.75 14614.25 14820.00 14801.50
##  [73] 14744.00 14529.75 14238.50 14214.75 14148.25 14226.50 14246.25 14191.75
##  [81] 14197.25 14144.50 14111.25 14130.25 14046.25 13918.25 13974.75 14541.00
##  [89] 14855.00 15122.75 15139.75 14711.25 14560.50 14606.75 14703.75 14572.50
##  [97] 14460.25 14251.75 14136.50 14247.50 14338.25 14394.75 14461.50

Selanjutnya akan dilakukan peramalan sejumlah data uji yaitu 18 periode. Pada metode SMA, hasil peramalan 18 periode ke depan akan bernilai sama dengan hasil peramalan 1 periode kedepan. Dalam hal ini akan dilakukan pengguabungan data aktual train, data hasil pemulusan dan data hasil ramalan 18 periode kedepan.

data.gab<-cbind(aktual=c(train.ts,rep(NA,18)),pemulusan=c(data.sma,rep(NA,18)),ramalan=c(data.ramal,rep(data.ramal[length(data.ramal)],17)))
data.gab #forecast 24 periode ke depan
##        aktual pemulusan  ramalan
##   [1,]   9698        NA       NA
##   [2,]   9667        NA       NA
##   [3,]   9719        NA       NA
##   [4,]   9722   9701.50       NA
##   [5,]   9802   9727.50  9701.50
##   [6,]   9929   9793.00  9727.50
##   [7,]  10278   9932.75  9793.00
##   [8,]  10924  10233.25  9932.75
##   [9,]  11613  10686.00 10233.25
##  [10,]  11234  11012.25 10686.00
##  [11,]  11977  11437.00 11012.25
##  [12,]  12189  11753.25 11437.00
##  [13,]  12226  11906.50 11753.25
##  [14,]  11634  12006.50 11906.50
##  [15,]  11404  11863.25 12006.50
##  [16,]  11532  11699.00 11863.25
##  [17,]  11611  11545.25 11699.00
##  [18,]  11969  11629.00 11545.25
##  [19,]  11591  11675.75 11629.00
##  [20,]  11717  11722.00 11675.75
##  [21,]  12212  11872.25 11722.00
##  [22,]  12082  11900.50 11872.25
##  [23,]  12196  12051.75 11900.50
##  [24,]  12440  12232.50 12051.75
##  [25,]  12625  12335.75 12232.50
##  [26,]  12863  12531.00 12335.75
##  [27,]  13084  12753.00 12531.00
##  [28,]  12937  12877.25 12753.00
##  [29,]  13211  13023.75 12877.25
##  [30,]  13332  13141.00 13023.75
##  [31,]  13481  13240.25 13141.00
##  [32,]  14027  13512.75 13240.25
##  [33,]  14657  13874.25 13512.75
##  [34,]  13639  13951.00 13874.25
##  [35,]  13840  14040.75 13951.00
##  [36,]  13795  13982.75 14040.75
##  [37,]  13846  13780.00 13982.75
##  [38,]  13395  13719.00 13780.00
##  [39,]  13276  13578.00 13719.00
##  [40,]  13204  13430.25 13578.00
##  [41,]  13615  13372.50 13430.25
##  [42,]  13180  13318.75 13372.50
##  [43,]  13094  13273.25 13318.75
##  [44,]  13300  13297.25 13273.25
##  [45,]  12998  13143.00 13297.25
##  [46,]  13051  13110.75 13143.00
##  [47,]  13563  13228.00 13110.75
##  [48,]  13436  13262.00 13228.00
##  [49,]  13343  13348.25 13262.00
##  [50,]  13347  13422.25 13348.25
##  [51,]  13321  13361.75 13422.25
##  [52,]  13327  13334.50 13361.75
##  [53,]  13321  13329.00 13334.50
##  [54,]  13319  13322.00 13329.00
##  [55,]  13323  13322.50 13322.00
##  [56,]  13351  13328.50 13322.50
##  [57,]  13492  13371.25 13328.50
##  [58,]  13572  13434.50 13371.25
##  [59,]  13514  13482.25 13434.50
##  [60,]  13548  13531.50 13482.25
##  [61,]  13413  13511.75 13531.50
##  [62,]  13707  13545.50 13511.75
##  [63,]  13756  13606.00 13545.50
##  [64,]  13877  13688.25 13606.00
##  [65,]  13951  13822.75 13688.25
##  [66,]  14404  13997.00 13822.75
##  [67,]  14413  14161.25 13997.00
##  [68,]  14711  14369.75 14161.25
##  [69,]  14929  14614.25 14369.75
##  [70,]  15227  14820.00 14614.25
##  [71,]  14339  14801.50 14820.00
##  [72,]  14481  14744.00 14801.50
##  [73,]  14072  14529.75 14744.00
##  [74,]  14062  14238.50 14529.75
##  [75,]  14244  14214.75 14238.50
##  [76,]  14215  14148.25 14214.75
##  [77,]  14385  14226.50 14148.25
##  [78,]  14141  14246.25 14226.50
##  [79,]  14026  14191.75 14246.25
##  [80,]  14237  14197.25 14191.75
##  [81,]  14174  14144.50 14197.25
##  [82,]  14008  14111.25 14144.50
##  [83,]  14102  14130.25 14111.25
##  [84,]  13901  14046.25 14130.25
##  [85,]  13662  13918.25 14046.25
##  [86,]  14234  13974.75 13918.25
##  [87,]  16367  14541.00 13974.75
##  [88,]  15157  14855.00 14541.00
##  [89,]  14733  15122.75 14855.00
##  [90,]  14302  15139.75 15122.75
##  [91,]  14653  14711.25 15139.75
##  [92,]  14554  14560.50 14711.25
##  [93,]  14918  14606.75 14560.50
##  [94,]  14690  14703.75 14606.75
##  [95,]  14128  14572.50 14703.75
##  [96,]  14105  14460.25 14572.50
##  [97,]  14084  14251.75 14460.25
##  [98,]  14229  14136.50 14251.75
##  [99,]  14572  14247.50 14136.50
## [100,]  14468  14338.25 14247.50
## [101,]  14310  14394.75 14338.25
## [102,]  14496  14461.50 14394.75
## [103,]     NA        NA 14461.50
## [104,]     NA        NA 14461.50
## [105,]     NA        NA 14461.50
## [106,]     NA        NA 14461.50
## [107,]     NA        NA 14461.50
## [108,]     NA        NA 14461.50
## [109,]     NA        NA 14461.50
## [110,]     NA        NA 14461.50
## [111,]     NA        NA 14461.50
## [112,]     NA        NA 14461.50
## [113,]     NA        NA 14461.50
## [114,]     NA        NA 14461.50
## [115,]     NA        NA 14461.50
## [116,]     NA        NA 14461.50
## [117,]     NA        NA 14461.50
## [118,]     NA        NA 14461.50
## [119,]     NA        NA 14461.50
## [120,]     NA        NA 14461.50

Adapun plot data deret waktu dari hasil peramalan yang dilakukan adalah sebagai berikut.

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

Setelah didapat hasil dari SMA, barulah kita berlanjut ke DMA.

Double Moving Average (DMA)

Metode pemulusan Double Moving Average (DMA) pada dasarnya mirip dengan SMA. Namun demikian, metode ini lebih cocok digunakan untuk pola data trend. Proses pemulusan dengan rata rata dalam metode ini dilakukan sebanyak 2 kali.

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:18
f = c()

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

data.gab2 <- cbind(aktual = c(train.ts,rep(NA,18)), pemulusan1 = c(data.sma,rep(NA,18)),pemulusan2 = c(data.dma, rep(NA,18)),At = c(At, rep(NA,18)), Bt = c(Bt,rep(NA,18)),ramalan = c(data.ramal2, f[-1]))
data.gab2
##        aktual pemulusan1 pemulusan2       At          Bt  ramalan
##   [1,]   9698         NA         NA       NA          NA       NA
##   [2,]   9667         NA         NA       NA          NA       NA
##   [3,]   9719         NA         NA       NA          NA       NA
##   [4,]   9722    9701.50         NA       NA          NA       NA
##   [5,]   9802    9727.50         NA       NA          NA       NA
##   [6,]   9929    9793.00         NA       NA          NA       NA
##   [7,]  10278    9932.75   10172.85 10076.81   96.041667       NA
##   [8,]  10924   10233.25   10752.62 10544.88  207.750000 10172.85
##   [9,]  11613   10686.00   11560.58 11210.75  349.833333 10752.62
##  [10,]  11234   11012.25   11922.56 11558.44  364.125000 11560.58
##  [11,]  11977   11437.00   12428.46 12031.88  396.583333 11922.56
##  [12,]  12189   11753.25   12638.46 12284.38  354.083333 12428.46
##  [13,]  12226   11906.50   12538.58 12285.75  252.833333 12638.46
##  [14,]  11634   12006.50   12390.98 12237.19  153.791667 12538.58
##  [15,]  11404   11863.25   11831.38 11844.12  -12.750000 12390.98
##  [16,]  11532   11699.00   11415.98 11529.19 -113.208333 11831.38
##  [17,]  11611   11545.25   11156.50 11312.00 -155.500000 11415.98
##  [18,]  11969   11629.00   11537.12 11573.88  -36.750000 11156.50
##  [19,]  11591   11675.75   11739.92 11714.25   25.666667 11537.12
##  [20,]  11717   11722.00   11853.67 11801.00   52.666667 11739.92
##  [21,]  12212   11872.25   12118.08 12019.75   98.333333 11853.67
##  [22,]  12082   11900.50   12080.29 12008.38   71.916667 12118.08
##  [23,]  12196   12051.75   12326.96 12216.88  110.083333 12080.29
##  [24,]  12440   12232.50   12596.25 12450.75  145.500000 12326.96
##  [25,]  12625   12335.75   12678.46 12541.38  137.083333 12596.25
##  [26,]  12863   12531.00   12936.42 12774.25  162.166667 12678.46
##  [27,]  13084   12753.00   13236.23 13042.94  193.291667 12936.42
##  [28,]  12937   12877.25   13298.92 13130.25  168.666667 13236.23
##  [29,]  13211   13023.75   13402.92 13251.25  151.666667 13298.92
##  [30,]  13332   13141.00   13461.42 13333.25  128.166667 13402.92
##  [31,]  13481   13240.25   13523.06 13409.94  113.125000 13461.42
##  [32,]  14027   13512.75   13984.94 13796.06  188.875000 13523.06
##  [33,]  14657   13874.25   14594.56 14306.44  288.125000 13984.94
##  [34,]  13639   13951.00   14461.73 14257.44  204.291667 14594.56
##  [35,]  13840   14040.75   14367.52 14236.81  130.708333 14461.73
##  [36,]  13795   13982.75   14017.02 14003.31   13.708333 14367.52
##  [37,]  13846   13780.00   13515.62 13621.38 -105.750000 14017.02
##  [38,]  13395   13719.00   13449.62 13557.38 -107.750000 13515.62
##  [39,]  13276   13578.00   13266.44 13391.06 -124.625000 13449.62
##  [40,]  13204   13430.25   13102.65 13233.69 -131.041667 13266.44
##  [41,]  13615   13372.50   13118.44 13220.06 -101.625000 13102.65
##  [42,]  13180   13318.75   13141.88 13212.62  -70.750000 13118.44
##  [43,]  13094   13273.25   13147.52 13197.81  -50.291667 13141.88
##  [44,]  13300   13297.25   13266.94 13279.06  -12.125000 13147.52
##  [45,]  12998   13143.00   12951.23 13027.94  -76.708333 13266.94
##  [46,]  13051   13110.75   12951.90 13015.44  -63.541667 12951.23
##  [47,]  13563   13228.00   13283.42 13261.25   22.166667 12951.90
##  [48,]  13436   13262.00   13388.77 13338.06   50.708333 13283.42
##  [49,]  13343   13348.25   13533.25 13459.25   74.000000 13388.77
##  [50,]  13347   13422.25   13600.79 13529.38   71.416667 13533.25
##  [51,]  13321   13361.75   13383.73 13374.94    8.791667 13600.79
##  [52,]  13327   13334.50   13280.85 13302.31  -21.458333 13383.73
##  [53,]  13321   13329.00   13274.21 13296.12  -21.916667 13280.85
##  [54,]  13319   13322.00   13297.31 13307.19   -9.875000 13274.21
##  [55,]  13323   13322.50   13315.00 13318.00   -3.000000 13297.31
##  [56,]  13351   13328.50   13333.50 13331.50    2.000000 13315.00
##  [57,]  13492   13371.25   13429.90 13406.44   23.458333 13333.50
##  [58,]  13572   13434.50   13551.69 13504.81   46.875000 13429.90
##  [59,]  13514   13482.25   13612.46 13560.38   52.083333 13551.69
##  [60,]  13548   13531.50   13659.21 13608.12   51.083333 13612.46
##  [61,]  13413   13511.75   13548.00 13533.50   14.500000 13659.21
##  [62,]  13707   13545.50   13591.75 13573.25   18.500000 13548.00
##  [63,]  13756   13606.00   13701.52 13663.31   38.208333 13591.75
##  [64,]  13877   13688.25   13855.54 13788.62   66.916667 13701.52
##  [65,]  13951   13822.75   14084.62 13979.88  104.750000 13855.54
##  [66,]  14404   13997.00   14361.17 14215.50  145.666667 14084.62
##  [67,]  14413   14161.25   14567.81 14405.19  162.625000 14361.17
##  [68,]  14711   14369.75   14839.85 14651.81  188.041667 14567.81
##  [69,]  14929   14614.25   15162.06 14942.94  219.125000 14839.85
##  [70,]  15227   14820.00   15367.81 15148.69  219.125000 15162.06
##  [71,]  14339   14801.50   15051.71 14951.62  100.083333 15367.81
##  [72,]  14481   14744.00   14742.44 14743.06   -0.625000 15051.71
##  [73,]  14072   14529.75   14206.31 14335.69 -129.375000 14742.44
##  [74,]  14062   14238.50   13671.94 13898.56 -226.625000 14206.31
##  [75,]  14244   14214.75   13853.08 13997.75 -144.666667 13671.94
##  [76,]  14215   14148.25   13923.98 14013.69  -89.708333 13853.08
##  [77,]  14385   14226.50   14259.00 14246.00   13.000000 13923.98
##  [78,]  14141   14246.25   14308.44 14283.56   24.875000 14259.00
##  [79,]  14026   14191.75   14172.69 14180.31   -7.625000 14308.44
##  [80,]  14237   14197.25   14166.94 14179.06  -12.125000 14172.69
##  [81,]  14174   14144.50   14060.44 14094.06  -33.625000 14166.94
##  [82,]  14008   14111.25   14028.02 14061.31  -33.291667 14060.44
##  [83,]  14102   14130.25   14104.31 14114.69  -10.375000 14028.02
##  [84,]  13901   14046.25   13943.23 13984.44  -41.208333 14104.31
##  [85,]  13662   13918.25   13696.17 13785.00  -88.833333 13943.23
##  [86,]  14234   13974.75   13903.71 13932.12  -28.416667 13696.17
##  [87,]  16367   14541.00   15242.56 14961.94  280.625000 13903.71
##  [88,]  15157   14855.00   15742.92 15387.75  355.166667 15242.56
##  [89,]  14733   15122.75   15955.04 15622.12  332.916667 15742.92
##  [90,]  14302   15139.75   15514.96 15364.88  150.083333 15955.04
##  [91,]  14653   14711.25   14301.35 14465.31 -163.958333 15514.96
##  [92,]  14554   14560.50   14022.06 14237.44 -215.375000 14301.35
##  [93,]  14918   14606.75   14360.40 14458.94  -98.541667 14022.06
##  [94,]  14690   14703.75   14800.73 14761.94   38.791667 14360.40
##  [95,]  14128   14572.50   14508.54 14534.12  -25.583333 14800.73
##  [96,]  14105   14460.25   14250.98 14334.69  -83.708333 14508.54
##  [97,]  14084   14251.75   13842.90 14006.44 -163.541667 14250.98
##  [98,]  14229   14136.50   13771.92 13917.75 -145.833333 13842.90
##  [99,]  14572   14247.50   14203.33 14221.00  -17.666667 13771.92
## [100,]  14468   14338.25   14496.17 14433.00   63.166667 14203.33
## [101,]  14310   14394.75   14587.25 14510.25   77.000000 14496.17
## [102,]  14496   14461.50   14629.83 14562.50   67.333333 14587.25
## [103,]     NA         NA         NA       NA          NA 14629.83
## [104,]     NA         NA         NA       NA          NA 14697.17
## [105,]     NA         NA         NA       NA          NA 14764.50
## [106,]     NA         NA         NA       NA          NA 14831.83
## [107,]     NA         NA         NA       NA          NA 14899.17
## [108,]     NA         NA         NA       NA          NA 14966.50
## [109,]     NA         NA         NA       NA          NA 15033.83
## [110,]     NA         NA         NA       NA          NA 15101.17
## [111,]     NA         NA         NA       NA          NA 15168.50
## [112,]     NA         NA         NA       NA          NA 15235.83
## [113,]     NA         NA         NA       NA          NA 15303.17
## [114,]     NA         NA         NA       NA          NA 15370.50
## [115,]     NA         NA         NA       NA          NA 15437.83
## [116,]     NA         NA         NA       NA          NA 15505.17
## [117,]     NA         NA         NA       NA          NA 15572.50
## [118,]     NA         NA         NA       NA          NA 15639.83
## [119,]     NA         NA         NA       NA          NA 15707.17
## [120,]     NA         NA         NA       NA          NA 15774.50

Hasil pemulusan menggunakan metode DMA divisualisasikan sebagai berikut

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

Selanjutnya dilakukan perhitungan akurasi yakni dengan ukuran akurasi Sum Squares Error (SSE), Mean Square Error (MSE) dan Mean Absolute Percentage Error (MAPE). Perhitungan akurasi dilakukan baik pada data latih maupun pada data uji.

#Menghitung nilai keakuratan data latih
error_train.dma = train.ts-data.ramal2[1:length(train.ts)]
SSE_train.dma = sum(error_train.dma[8:length(train.ts)]^2)
MSE_train.dma = mean(error_train.dma[8:length(train.ts)]^2)
MAPE_train.dma = mean(abs((error_train.dma[8:length(train.ts)]/train.ts[8:length(train.ts)])*100))

akurasi_train.dma <- matrix(c(SSE_train.dma, MSE_train.dma, MAPE_train.dma))
row.names(akurasi_train.dma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_train.dma) <- c("Akurasi m = 4")
akurasi_train.dma
##      Akurasi m = 4
## SSE   2.431937e+07
## MSE   2.559933e+05
## MAPE  2.448192e+00

Perhitungan akurasi pada data latih menggunakan nilai MAPE menghasilkan nilai MAPE yang kurang dari 10 sehingga dikategorikan sangat baik. Selanjutnya, perhitungan nilai akurasi dilakukan pada data uji.

#Menghitung nilai keakuratan data uji
error_test.dma = test.ts-data.gab2[103:120,6]
SSE_test.dma = sum(error_test.dma^2)
MSE_test.dma = mean(error_test.dma^2)
MAPE_test.dma = mean(abs((error_test.dma/test.ts*100)))

akurasi_test.dma <- matrix(c(SSE_test.dma, MSE_test.dma, MAPE_test.dma))
row.names(akurasi_test.dma)<- c("SSE", "MSE", "MAPE")
colnames(akurasi_test.dma) <- c("Akurasi m = 4")
akurasi_test.dma
##      Akurasi m = 4
## SSE   5.427430e+06
## MSE   3.015239e+05
## MAPE  3.336995e+00

Perhitungan akurasi menggunakan data latih menghasilkan nilai MAPE yang kurang dari 10 sehingga nilai akurasi ini dapat dikategorikan sebagai sangat baik.

Selanjutnya dicobakan teknik pemulusan kedua yakni DES.

Double Exponential Smoothing

Metode Exponential Smoothing adalah metode pemulusan dengan melakukan pembobotan menurun secara eksponensial. Nilai yang lebih baru diberi bobot yang lebih besar dari nilai terdahulu. Terdapat satu atau lebih parameter pemulusan yang ditentukan secara eksplisit, dan hasil pemilihan parameter tersebut akan menentukan bobot yang akan diberikan pada nilai pengamatan. Ada dua macam model, yaitu model tunggal atau biasa disebut Single Exponential Smoothing (SES) dan model ganda yang disebut Double Exponential Smoothing (DES). Pada pemulusan ini dicobakan DES karena SES merupakan metode pemulusan yang tepat digunakan untuk data dengan pola stasioner atau konstan sementara DES digunakan untuk data yang memiliki pola tren. Metode DES adalah metode semacam SES, hanya saja dilakukan dua kali, yaitu pertama untuk tahapan ‘level’ dan kedua untuk tahapan ‘tren’. Pemulusan menggunakan metode ini akan menghasilkan peramalan tidak konstan untuk periode berikutnya. Adapun pemulusan dengan metode DES kali ini akan menggunakan fungsi HoltWinters(). Disini saya mencobakan beberapa pemulusan dengan lamda dan gamma berbeda kemudian dilakukan des optimumnya dengan lamda dan gamma yang dikosongkan agar otomatis terisi.

#Lamda=0.2 dan gamma=0.2
des.1<- HoltWinters(train.ts, gamma = FALSE, beta = 0.2, alpha = 0.2)
plot(des.1)

#ramalan
ramalandes1<- forecast(des.1, h=18)
ramalandes1
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 103       14350.73 13648.98 15052.48 13277.50 15423.96
## 104       14327.58 13605.90 15049.25 13223.87 15431.29
## 105       14304.43 13556.48 15052.38 13160.54 15448.31
## 106       14281.28 13500.35 15062.21 13086.95 15475.61
## 107       14258.13 13437.36 15078.91 13002.86 15513.40
## 108       14234.98 13367.53 15102.43 12908.34 15561.63
## 109       14211.83 13291.07 15132.59 12803.65 15620.02
## 110       14188.68 13208.24 15169.12 12689.23 15688.14
## 111       14165.53 13119.39 15211.68 12565.59 15765.48
## 112       14142.38 13024.86 15259.90 12433.28 15851.48
## 113       14119.23 12925.03 15313.44 12292.85 15945.62
## 114       14096.09 12820.22 15371.95 12144.81 16047.36
## 115       14072.94 12710.75 15435.12 11989.65 16156.22
## 116       14049.79 12596.91 15502.66 11827.81 16271.76
## 117       14026.64 12478.97 15574.31 11659.68 16393.59
## 118       14003.49 12357.14 15649.83 11485.62 16521.35
## 119       13980.34 12231.65 15729.03 11305.95 16654.73
## 120       13957.19 12102.66 15811.72 11120.93 16793.44
#Lamda=0.6 dan gamma=0.3
des.2<- HoltWinters(train.ts, gamma = FALSE, beta = 0.3, alpha = 0.6)
plot(des.2)

#ramalan
ramalandes2<- forecast(des.2, h=18)
ramalandes2
##     Point Forecast     Lo 80    Hi 80     Lo 95    Hi 95
## 103       14480.66 13931.245 15030.07 13640.405 15320.91
## 104       14510.05 13813.270 15206.83 13444.418 15575.68
## 105       14539.44 13665.548 15413.33 13202.937 15875.94
## 106       14568.83 13493.669 15643.99 12924.512 16213.15
## 107       14598.22 13301.334 15895.11 12614.802 16581.65
## 108       14627.62 13091.031 16164.20 12277.612 16977.62
## 109       14657.01 12864.511 16449.50 11915.621 17398.39
## 110       14686.40 12623.069 16749.73 11530.808 17841.99
## 111       14715.79 12367.701 17063.88 11124.698 18306.88
## 112       14745.18 12099.209 17391.15 10698.516 18791.85
## 113       14774.57 11818.251 17730.90 10253.268 19295.88
## 114       14803.97 11525.384 18082.55  9789.808 19818.12
## 115       14833.36 11221.088 18445.63  9308.868 20357.85
## 116       14862.75 10905.782 18819.71  8811.091 20914.41
## 117       14892.14 10579.840 19204.44  8297.046 21487.24
## 118       14921.53 10243.593 19599.47  7767.242 22075.82
## 119       14950.92  9897.344 20004.50  7222.140 22679.71
## 120       14980.32  9541.366 20419.26  6662.161 23298.47

Selanjutnya jika ingin membandingkan plot data latih dan data uji adalah sebagai berikut.

#Visually evaluate the prediction
plot(datanew.ts)
lines(des.2$fitted[,1], lty=2, col="blue")
lines(ramalandes2$mean, col="red")

Untuk mendapatkan nilai parameter optimum dari DES, argumen alpha dan beta dapat dibuat NULL seperti berikut.

#Lamda dan gamma optimum
des.opt<- HoltWinters(train.ts, gamma = FALSE)
des.opt
## Holt-Winters exponential smoothing with trend and without seasonal component.
## 
## Call:
## HoltWinters(x = train.ts, gamma = FALSE)
## 
## Smoothing parameters:
##  alpha: 0.8671094
##  beta : 0.01435857
##  gamma: FALSE
## 
## Coefficients:
##         [,1]
## a 14476.6333
## b    17.3523
plot(des.opt)

#ramalan
ramalandesopt<- forecast(des.opt, h=18)
ramalandesopt
##     Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 103       14493.99 13991.97 14996.00 13726.22 15261.75
## 104       14511.34 13842.77 15179.91 13488.85 15533.83
## 105       14528.69 13724.01 15333.37 13298.03 15759.35
## 106       14546.04 13622.10 15469.99 13132.99 15959.10
## 107       14563.39 13531.14 15595.65 12984.69 16142.10
## 108       14580.75 13447.95 15713.54 12848.28 16313.21
## 109       14598.10 13370.59 15825.61 12720.79 16475.41
## 110       14615.45 13297.78 15933.13 12600.24 16630.66
## 111       14632.80 13228.60 16037.01 12485.26 16780.35
## 112       14650.16 13162.40 16137.91 12374.83 16925.48
## 113       14667.51 13098.68 16236.34 12268.19 17066.82
## 114       14684.86 13037.05 16332.67 12164.75 17204.97
## 115       14702.21 12977.19 16427.24 12064.02 17340.41
## 116       14719.57 12918.86 16520.27 11965.63 17473.50
## 117       14736.92 12861.86 16611.98 11869.26 17604.58
## 118       14754.27 12806.00 16702.54 11774.65 17733.89
## 119       14771.62 12751.15 16792.10 11681.58 17861.67
## 120       14788.97 12697.18 16880.77 11589.85 17988.09
#Visually evaluate the prediction optimum
plot(datanew.ts)
lines(des.opt$fitted[,1], lty=2, col="blue")
lines(ramalandesopt$mean, col="red")

Selanjutnya akan dilakukan perhitungan akurasi pada data latih maupun data uji dengan ukuran akurasi SSE, MSE dan MAPE.

Akurasi Data Latih

#Akurasi Data Training
ssedes.train1<-des.1$SSE
msedes.train1<-ssedes.train1/length(train.ts)
sisaandes1<-ramalandes1$residuals
head(sisaandes1)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1]       NA       NA  83.0000  97.0800 181.4608 288.7070
mapedes.train1 <- sum(abs(sisaandes1[3:length(train.ts)]/train.ts[3:length(train.ts)])
                      *100)/length(train.ts)

akurasides.1 <- matrix(c(ssedes.train1,msedes.train1,mapedes.train1))
row.names(akurasides.1)<- c("SSE", "MSE", "MAPE")
colnames(akurasides.1) <- c("Akurasi lamda=0.2 dan gamma=0.2")
akurasides.1
##      Akurasi lamda=0.2 dan gamma=0.2
## SSE                     2.968458e+07
## MSE                     2.910253e+05
## MAPE                    3.058644e+00
ssedes.train2<-des.2$SSE
msedes.train2<-ssedes.train2/length(train.ts)
sisaandes2<-ramalandes2$residuals
head(sisaandes2)
## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1]       NA       NA  83.0000  52.2600 107.5572 157.3158
mapedes.train2 <- sum(abs(sisaandes2[3:length(train.ts)]/train.ts[3:length(train.ts)])
                      *100)/length(train.ts)

akurasides.2 <- matrix(c(ssedes.train2,msedes.train2,mapedes.train2))
row.names(akurasides.2)<- c("SSE", "MSE", "MAPE")
colnames(akurasides.2) <- c("Akurasi lamda=0.6 dan gamma=0.3")
akurasides.2
##      Akurasi lamda=0.6 dan gamma=0.3
## SSE                     1.819638e+07
## MSE                     1.783959e+05
## MAPE                    1.954768e+00

Hasil akurasi dari data latih didapatkan skenario 2 dengan lamda=0.6 dan gamma=0.3 memiliki hasil yang lebih baik. Namun untuk kedua skenario dapat dikategorikan peramalan sangat baik berdasarkan nilai MAPE-nya.

Akurasi Data Uji

#Akurasi Data Testing
selisihdes1<-ramalandes1$mean-test$USD
selisihdes1
## Time Series:
## Start = 103 
## End = 120 
## Frequency = 1 
##  [1]  -140.272399   -46.421712    -2.571026    82.279660   -81.869654
##  [6]   -34.018968  -169.168281  -182.317595  -183.466909  -275.616223
## [11]  -424.765537  -751.914850  -885.064164  -825.213478 -1220.362792
## [16] -1538.512106 -1756.661419 -1773.810733
SSEtestingdes1<-sum(selisihdes1^2)
MSEtestingdes1<-SSEtestingdes1/length(test$USD)
MAPEtestingdes1<-sum(abs(selisihdes1/test$USD)*100)/length(test$USD)

selisihdes2<-ramalandes2$mean-test$USD
selisihdes2
## Time Series:
## Start = 103 
## End = 120 
## Frequency = 1 
##  [1]  -10.34341  136.04829  232.43999  369.83169  258.22338  358.61508
##  [7]  276.00678  315.39848  366.79018  327.18188  230.57358  -44.03472
## [13] -124.64302  -12.25132 -354.85962 -620.46792 -786.07622 -750.68452
SSEtestingdes2<-sum(selisihdes2^2)
MSEtestingdes2<-SSEtestingdes2/length(test$USD)
MAPEtestingdes2<-sum(abs(selisihdes2/test$USD)*100)/length(test$USD)

selisihdesopt<-ramalandesopt$mean-test$USD
selisihdesopt
## Time Series:
## Start = 103 
## End = 120 
## Frequency = 1 
##  [1]    2.985636  137.337935  221.690235  347.042534  223.394834  311.747134
##  [7]  217.099433  244.451733  283.804032  232.156332  123.508631 -163.139069
## [13] -255.786770 -155.434470 -510.082171 -787.729871 -965.377572 -942.025272
SSEtestingdesopt<-sum(selisihdesopt^2)
MSEtestingdesopt<-SSEtestingdesopt/length(test$USD)
MAPEtestingdesopt<-sum(abs(selisihdesopt/test$USD)*100)/length(test$USD)

akurasitestingdes <-
  matrix(c(SSEtestingdes1,MSEtestingdes1,MAPEtestingdes1,SSEtestingdes2,MSEtestingdes2,
           MAPEtestingdes2,SSEtestingdesopt,MSEtestingdesopt,MAPEtestingdesopt),
         nrow=3,ncol=3)
row.names(akurasitestingdes)<- c("SSE", "MSE", "MAPE")
colnames(akurasitestingdes) <- c("des ske1","des ske2","des opt")
akurasitestingdes
##          des ske1     des ske2      des opt
## SSE  1.250664e+07 2.585081e+06 3.408400e+06
## MSE  6.948131e+05 1.436156e+05 1.893556e+05
## MAPE 3.784652e+00 2.076933e+00 2.263921e+00

Dengan demikian telah dicobakan kedua teknik dan dapat kita perhatikan MAPE-nya untuk menentukan yang lebih baik dan disini tampak MAPE pada DES lebih baik dari DMA terutama ketika DES optimum atau DES dengan parameter kedua yang dicobakan

Sekian & Terimakasih