Bab 4 Single Moving Average

Simple Moving Average adalah suatu teknik pemulusan yang bertujuan untuk melihat grafik secara eksploratif dengan cara menghitung rata-rata periode sekarang dengan periode sebelumnya. Hal ini bertujuan untuk melihat pola dari suatu data tanpa dipengaruhi data harian yang bergerak lebih ekstrem.(Montgomery et al. 2008)

Rumus dari Simple Moving Average.

$ M_{T} = (y_{T} + y_{(T-1)} + … + y_{(T-n+1)})/n = 1/N $ Tt=Tn+1yt

4.1 Validasi silang untuk SMA

Lakukan validasi silang untuk SMA dengan jumlah data latih awal sebesar 36. Selebihnya, data dibagi menjadi 15 fold sehingga ada (27636)/15=16 observasi di tiap fold. Nilai M yang diuji adalah dari 2 sampai 30.

SMACV<-fcCV(weeklyCrude[,3],initialn=36,folds=15,type="SMA",start=2,end=30,dist=1)

Hasil dari prosedur tersebut:

resultSMA<-SMACV[[3]]

Buat boxplot untuk melihat mana M yang memnimumkan error

library(ggplot2)
ggplot(resultSMA,aes(x=M,y=MSE,group=M))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MSE tiap M untuk SMA")+
  xlab("M")+ylab(" ")

Dapat dilihat bahwa error dari tiap parameter cenderung hampir sama di tiap nilai parameter M. Tetapi, keragaman dari boxplot cenderung terus meningkat jika nilai perameter bertambah dan garis median cenderung sama, atau sedikit naik, dalam setiap nilai parameter Bagaimana dengan MAPE?

library(ggplot2)
ggplot(resultSMA,aes(x=M,y=MAPE,group=M))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MAPE tiap M untuk SMA")+
  xlab("M")+ylab(" ")

Hasil cukup mirip dengan MSE, tetapi ada sedikit perbedaan. Nilai outlier pada boxplot MAPE cenderung meningkat seiring dengan bertambahnya nilai parameter M. Bagaimana dengan MAE:

ggplot(resultSMA,aes(x=M,y=MAE,group=M))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MAE tiap M untuk SMA")+
  xlab("M")+ylab(" ")

Garis median terlihat sedikit membesar saat nilai parameter M makin membesar. Nilai outlier di nilai M6 terlihat menggerombol, sedangkan makin banyak M salah satu outlier bergabung ke boxplot dan satu lagi menjauh dari boxplot. Boxplot membesar sehingga kesalahan lebih beragam makin besar M. Lanjutkan dengan buat agregasi:

aggregateSMA<-resultSMA[,`.`(meanMSE=mean(MSE),
                 varMSE=var(MSE),
                 meanMAPE=mean(MAPE),
                 varMAPE=var(MAPE),
                 meanMAE=mean(MAE),
                 varMAE=var(MAE)), by=list(M)]

Jika dilihat nilai M yang meminimumkan mean dari MSE, MAPE, dan MAE:

knitr::kables(list(
  knitr::kable(head(setorder(aggregateSMA, meanMSE)[,c(1,2)],n=7)),
  knitr::kable(head(setorder(aggregateSMA, meanMAPE)[,c(1,4)],n=7)),
  knitr::kable(head(setorder(aggregateSMA, meanMAE)[,c(1,6)],n=7))
  ),
)
M meanMSE
2 119.0668
3 120.3521
4 127.2576
5 132.0911
6 134.3445
7 137.0462
8 142.5453
M meanMAPE
2 15.27380
3 15.39877
4 15.83089
5 16.19941
6 16.77363
7 17.45599
8 18.28715
M meanMAE
2 7.391500
3 7.582528
4 7.845292
5 7.993500
6 8.167375
7 8.408917
8 8.719646

Nilai MSE dan MAPE berurutan dari 2, 3, …, 8 dari yang terkecil hingga terbesar. Kemudian, hitung nilai M yang meminimumkan ragam MSE dan MAPE:

knitr::kables(list(
  knitr::kable(head(setorder(aggregateSMA, varMSE)[,c(1,3)],n=7)),
  knitr::kable(head(setorder(aggregateSMA, varMAPE)[,c(1,5)],n=7)),
  knitr::kable(head(setorder(aggregateSMA, varMAE)[,c(1,7)],n=7))
  ),
)
M varMSE
3 43520.54
2 45690.52
7 48362.04
4 48614.81
8 49266.37
9 49569.52
10 49730.12
M varMAPE
4 490.8998
3 496.4185
5 511.1400
2 536.9570
6 552.6315
7 587.2421
8 638.6103
M varMAE
3 42.60989
7 44.93565
2 45.01526
15 45.03317
11 45.07751
16 45.11376
4 45.11526

Urutan nilai M yang meminimumkan ragam metrik-metrik tersebut sedikit berbeda. Walaupun M=2 memiliki performa terbaik dalam meminimumkan rata-rata metrik, M=3 sepertinya lebih baik dalam meminimumkan ragam dari metrik-metrik tersebut. Ini secara umum berarti kesalahan-kesalahan dari M=3 akan lebih sering mendekati suatu nilai tertentu, walaupun rataannya lebih besar dari M=2.

library(ggplot2)
ggplot(resultSMA,aes(x=iter,y=MSE,group=iter))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MSE tiap Iterasi")+
  xlab("Iterasi")+ylab(" ")

Boxplot untuk iterasi ke-9 (saat pandemi) dan ke-15 (pasca pandemi dan perang Rusia-Ukraina) memiliki rataan dan keragaman yang cukup besar dibandingkan iterasi lainnya pada data testing karena adanya fluktuasi yang ekstrem pada rentang waktu tersebut. Fluktuasi tersebut tidak cocok untuk SMA karena kurang dapat menangani data dengan tren.

library(ggplot2)
ggplot(resultSMA,aes(x=iter,y=MAPE,group=iter))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MAPE tiap Iterasi")+
  xlab("Iterasi")+ylab(" ")

Boxplot untuk iterasi ke-15 ternyata tidak memiliki MAPE besar. Ini terjadi karena MAPE lebih memboboti observasi dengan nilai amatan kecil (COVID saat harga minyak turun) daripada saat nilai amatan besar (Ukraina-Rusia saat terjadi inflasi harga minyak).

library(ggplot2)
ggplot(resultSMA,aes(x=iter,y=MAE,group=iter))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MAE tiap Iterasi")+
  xlab("Iterasi")+ylab(" ")

Boxplot MAE per iterasi secara umum lebih mengikuti MSE.

4.1.1 Kesimpulan

Berdasarkan nilai rataan dan ragam MSE dan MAPE, parameter m untuk metode SMA yang dipakai adalah saat M = 2 dan 3.

4.2 DMA

Lakukan validasi silang untuk DMA dengan jumlah data latih awal sebesar 36. Selebihnya, data dibagi menjadi 15 fold sehingga ada (27636)/15=16 observasi di tiap fold. Nilai M yang diuji adalah dari 2 sampai 16.

DMACV<-fcCV(weeklyCrude[,3],initialn=36,folds=15,type="DMA",start=2,end=16,dist=1)

Ambil hasil dari prosedur tersebut:

resultDMA<-DMACV[[3]]

Buat boxplot untuk melihat mana M yang memnimumkan error

library(ggplot2)
ggplot(resultDMA,aes(x=M,y=MSE,group=M))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MSE tiap M")+
  xlab("M")+ylab(" ")

Dapat dilihat bahwa error dari tiap parameter cukup bervariasi di tiap iterasi. Hampir semua boxplot memiliki outlier yang sangat jauh dari kebanyakan observasi. Namun, terlihat bahwa di 9M12 boxplot lebih kecil, outlier lebih dekat, dan garis median lebih rendah dari boxplot lainnya. Ini berarti kesalahan di DMA dengan parameter tersebut biasanya rendah. Bagaimana dengan MAPE?

library(ggplot2)
ggplot(resultDMA,aes(x=M,y=MAPE,group=M))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MAPE tiap M")+
  xlab("M")+ylab(" ")

Hasil cukup mirip dengan MSE, tetapi ada sedikit perbedaan. Terlihat bahwa di 4M7, boxplot tidak memiliki outlier sama sekali. Justru, daerah yang sebelumnya dianggap baik, 9M12 memiliki beberapa outlier.

library(ggplot2)
ggplot(resultDMA,aes(x=M,y=MAE,group=M))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MAE tiap M")+
  xlab("M")+ylab(" ")

Boxplot MAE memiliki pola yang mengikuti MSE. Untuk memastikan, buat agregasi data error dari tiap nilai M:

aggregateDMA<-resultDMA[,`.`(meanMSE=mean(MSE),
                 varMSE=var(MSE),
                 meanMAPE=mean(MAPE),
                 varMAPE=var(MAPE),
                 meanMAE=mean(MAE),
                 varMAE=var(MAE)), by=list(M)]

Jika dilihat nilai M yang meminimumkan mean dari MSE:

knitr::kables(list(
  knitr::kable(head(setorder(aggregateDMA, meanMSE)[,c(1,2)],n=7)),
  knitr::kable(head(setorder(aggregateDMA, meanMAPE)[,c(1,4)],n=7)),
  knitr::kable(head(setorder(aggregateDMA, meanMAE)[,c(1,6)],n=7))
  ),
)
M meanMSE
11 128.7952
10 131.9635
12 147.9552
9 152.3110
13 177.3898
8 200.9722
14 206.7495
M meanMAPE
9 16.22624
10 16.81760
8 17.12738
11 17.26440
12 18.46130
7 18.53496
13 20.00920
M meanMAE
11 7.782634
10 8.014064
12 8.049640
9 8.333288
13 8.709187
8 9.318198
14 9.660206

Tampak bahwa nilai M=10 cukup konsisten baik (ranking 2) di MSE, MAPE, dan MAE. Nilai M=11 juga memeinimumkan nilai harapan MAE dan MSE, tetapi tidad meminimumkan MSE. Bagaimana dengan ragam dari MSE, MAPE, dan MAE?

knitr::kables(list(
  knitr::kable(head(setorder(aggregateDMA, varMSE)[,c(1,3)],n=7)),
  knitr::kable(head(setorder(aggregateDMA, varMAPE)[,c(1,5)],n=7)),
    knitr::kable(head(setorder(aggregateDMA, varMAE)[,c(1,7)],n=7))
  ),
)
M varMSE
11 42115.73
10 45179.02
12 64357.60
9 77201.65
13 106964.60
14 147991.53
8 148454.59
M varMAPE
7 267.6869
8 284.8783
9 380.0983
6 386.6581
4 415.1876
5 444.5219
10 497.9448
M varMAE
10 42.83526
11 47.98709
9 51.54119
12 65.75002
3 70.77650
8 71.69444
13 83.37845

M=10 dan 11 konsisten baik di bebrbagai metrik kecuali ragam dari MAPE.

Dapat juga dilihat iterasi mana yang memiliki error tinggi:

library(ggplot2)
ggplot(resultDMA,aes(x=iter,y=MSE,group=iter))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MSE tiap Iterasi")+
  xlab("Iterasi")+ylab(" ")

Error terbesar ada di iterasi 5, 9, 10, dan 15. Iterasi 15 merupakan perang Rusia-Ukraina. Ada apa di iterasi 9 dan 10 tersebut?

knitr::kables(list(
  knitr::kable(c(DMACV[[1]][5],DMACV[[2]][5]),col.names = 
               "Range data iterasi 5"),
  knitr::kable(c(DMACV[[1]][9],DMACV[[1]][10],DMACV[[2]][10]),col.names = 
               "Range data iterasi 9-10")
)
)
Range data iterasi 5
101
116
Range data iterasi 9-10
165
181
196

Cari tanggal tanggal tersebut:

knitr::kable(weeklyCrude[,2][c(101,116,165,181,196)])
Date
2018-12-07
2019-03-22
2020-02-28
2020-06-19
2020-10-02

Dari 2018-2019, harga turun. Tentu, 2020 adalah COVID. Namun, dari MSE terlihat bahwa performa DMA beragam. Di SMA, di iterasi tersebut boxplot hampir homogen memiliki nilai error tinggi. Ini berarti, ada nilai-nilai M tertentu yang dapat meminimukan error di data tren tersebut.

library(ggplot2)
ggplot(resultDMA,aes(x=iter,y=MAE,group=iter))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MAE tiap Iterasi")+
  xlab("Iterasi")+ylab(" ")

Profil boxplot MAE untuk iterasi relatif sama dengan boxplot MSE.

library(ggplot2)
ggplot(resultDMA,aes(x=iter,y=MAPE,group=iter))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MAPE tiap Iterasi")+
  xlab("Iterasi")+ylab(" ")

MAPE tidak memboboti error saat perang Ukraina dan Rusia, sama seperti saat SMA. Parameter terbaika dalah M=10 dan M=11.

4.3 SES

SESCV<-fcCV(weeklyCrude[,3],initialn=36,folds=15,type="SES",alphrange=seq(0.01,1,0.01))

Masukkan hasilnya:

resultSES<-SESCV[[3]]

Karena ada 100 nilai alpha yang berbeda, tidak praktis untuk membuat boxplot untuk semua nilai tersebut. Bulatkan nilai alpha sebesar satu desimal (0.1,0.2,) lalu buat boxplot:

ggplot(resultSES,aes(x=alpha,y=MSE,group=round(alpha,1)))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MSE tiap Alpha")+
  xlab("Alpha")+ylab(" ")

Sepertinya, makin besar nilai alpha hasil pemulusan semakin baik. Ini berarti bobot observasi sekarang lebih besar dari observasi sebelumnya. :

ggplot(resultSES,aes(x=alpha,y=MAE,group=round(alpha,1)))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MAE tiap Alpha")+
  xlab("Alpha")+ylab(" ")

MAE nampaknya juga mengikuti pola tersebut.

ggplot(resultSES,aes(x=alpha,y=MAPE,group=round(alpha,1)))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MAE tiap Alpha")+
  xlab("Alpha")+ylab(" ")

MAPE juga mengikuti pola umum tersebut, tetapi nampaknya di α=0.5 nilai outlier minimum. Lakukan agregasi:

aggregateSES<-resultSES[,`.`(meanMSE=mean(MSE),
                 varMSE=var(MSE),
                 meanMAPE=mean(MAPE),
                 varMAPE=var(MAPE),
                 meanMAE=mean(MAE),
                 varMAE=var(MAE)), by=list(alpha)]

Jika dilihat nilai α yang meminimumkan mean dari MSE, MAPE, MAE:

knitr::kables(list(
  knitr::kable(head(setorder(aggregateSES, meanMSE)[,c(1,2)],n=20)),
  knitr::kable(head(setorder(aggregateSES, meanMAPE)[,c(1,4)],n=20)),
  knitr::kable(head(setorder(aggregateSES, meanMAE)[,c(1,6)],n=20))
  ),
)
alpha meanMSE
0.93 118.6033
0.94 118.6035
0.92 118.6046
0.95 118.6050
0.91 118.6075
0.96 118.6076
0.97 118.6114
0.90 118.6122
0.98 118.6161
0.89 118.6187
0.99 118.6215
0.88 118.6272
1.00 118.6276
0.87 118.6379
0.86 118.6509
0.85 118.6663
0.84 118.6842
0.83 118.7049
0.82 118.7283
0.81 118.7547
alpha meanMAPE
0.67 15.52554
0.68 15.52555
0.66 15.52661
0.69 15.52669
0.65 15.52823
0.70 15.52864
0.64 15.53044
0.71 15.53101
0.63 15.53324
0.72 15.53382
0.62 15.53667
0.73 15.53710
0.74 15.54075
0.61 15.54091
0.75 15.54475
0.60 15.54606
0.76 15.54908
0.59 15.55193
0.77 15.55423
0.58 15.55857
alpha meanMAE
0.80 7.473352
0.79 7.473372
0.81 7.473460
0.78 7.473519
0.82 7.473694
0.77 7.473794
0.83 7.474054
0.76 7.474408
0.84 7.474539
0.85 7.475329
0.75 7.475478
0.86 7.476259
0.74 7.476700
0.87 7.477311
0.73 7.478074
0.88 7.478557
0.72 7.479601
0.89 7.479915
0.71 7.481337
0.90 7.481384

Nilai-nilai dari tabel ini cukup kontradiktif. Untuk meminimumkan MSE, sebaiknya mengambil α sekitar 0.9. MAPE minimum di α 0.6 sampai 0.7, sedangkan MAE minimum di α 0.8. Bagaimana dengan ragam dari MSE, MAPE, dan MAE?

knitr::kables(list(
  knitr::kable(head(setorder(aggregateSES, varMSE)[,c(1,3)],n=7)),
  knitr::kable(head(setorder(aggregateSES, varMAPE)[,c(1,5)],n=7)),
    knitr::kable(head(setorder(aggregateSES, varMAE)[,c(1,7)],n=7))
  ),
)
alpha varMSE
1.00 43152.94
0.99 43192.67
0.98 43230.95
0.97 43267.90
0.96 43303.65
0.95 43338.34
0.94 43372.09
alpha varMAPE
0.53 533.5416
0.52 533.5533
0.54 533.5771
0.51 533.6371
0.55 533.6623
0.50 533.8066
0.56 533.8173
alpha varMAE
1.00 42.69278
0.99 42.72831
0.98 42.76264
0.97 42.79589
0.96 42.82827
0.95 42.85969
0.94 42.89025

Ragam minimum MSE dan MAE minimum saat alpha mendekati 1, sedangkan ragam MAPE minimum saat alpha mendekati 0.5. Bagaimana dengan performa di tiap iterasi?

library(ggplot2)
ggplot(resultSES,aes(x=iter,y=MSE,group=iter))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MSE tiap Iterasi")+
  xlab("Iterasi")+ylab(" ")

Boxplot untuk iterasi ke-9 (saat pandemi) dan ke-15 (pasca pandemi dan perang Rusia-Ukraina) memiliki rataan dan keragaman yang cukup besar dibandingkan iterasi lainnya pada data testing karena adanya fluktuasi yang ekstrem pada rentang waktu tersebut. Fluktuasi tersebut tidak cocok untuk SES karena kurang dapat menangani data dengan tren.

library(ggplot2)
ggplot(resultSES,aes(x=iter,y=MAPE,group=iter))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MAPE tiap Iterasi")+
  xlab("Iterasi")+ylab(" ")

Boxplot untuk iterasi ke-15 ternyata tidak memiliki MAPE besar. Ini terjadi karena MAPE lebih memboboti observasi dengan nilai amatan kecil (COVID saat harga minyak turun) daripada saat nilai amatan besar (Ukraina-Rusia saat terjadi inflasi harga minyak).

library(ggplot2)
ggplot(resultSES,aes(x=iter,y=MAE,group=iter))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MAE tiap Iterasi")+
  xlab("Iterasi")+ylab(" ")

Boxplot MAE per iterasi secara umum lebih mengikuti MSE. Sama seperti SMA, nilai error homogen buruk di iterasi 9 dan 16.

4.4 DES

Load fungsi:

DESCV<-fcCV(weeklyCrude[,3],initialn=36,folds=15,type="DES",alphrange=seq(0.1,1,0.1),betarange=seq(0.1,1,0.1))

Masukkan hasilnya:

resultDES<-DESCV[[3]]

Karena parameter DES memiliki dua dimensi (alpha dan beta), cukup susah untuk menampilkan hasil optimalisasi parameter dalam suatu boxplot atau scatterplot. Oleh karena itu langsung buat agregasi:

aggregateDES<-resultDES[,`.`(meanMSE=mean(MSE),
                 varMSE=var(MSE),
                 meanMAPE=mean(MAPE),
                 varMAPE=var(MAPE),
                 meanMAE=mean(MAE),
                 varMAE=var(MAE)), by=list(alphrange,betarange)]

Buat heatmap untuk melihat titik mana memiliki rata-rata MSE yang rendah:

ggplot(aggregateDES, aes(alphrange, betarange)) +
  geom_tile(aes(fill = sqrt(meanMSE)), colour = "white") +
  scale_fill_gradient(low="#FFFFE0",high="#DB0000")+
  theme_minimal()+xlab("Alpha")+ylab("Beta")

Terlihat bahwa di beta lebih dari 0.1 rata-rata dari MSE relatif lebih besar. Bagaimana dengan ragam dari MSE (menggunakan skala log agar mudah dilihat).

ggplot(aggregateDES, aes(alphrange, betarange)) +
  geom_tile(aes(fill = log(varMSE)), colour = "white") +
  scale_fill_gradient(low="#FFFFE0",high="#DB0000")+
  theme_minimal()+xlab("Alpha")+ylab("Beta")

Ragam dari MSE mengikuti rata-rata MSE. Di beta lebih dari 0.1, ragam MSE relatif besar. Tampak bahwa ragam MSE juga mengecil jika alpha mendekati 1. Bagaimana dengan MAPE?

ggplot(aggregateDES, aes(alphrange, betarange)) +
  geom_tile(aes(fill = meanMAPE), colour = "white") +
  scale_fill_gradient(low="#FFFFE0",high="#DB0000")+
  theme_minimal()+xlab("Alpha")+ylab("Beta")

Pola cukup mengikuti MSE sebelumnya, tetapi tampaknya MAPE minimum di alpha mendekati 0.5. Bagaimana dengan ragamnya:

ggplot(aggregateDES, aes(alphrange, betarange)) +
  geom_tile(aes(fill = sqrt(varMAPE)), colour = "white") +
  scale_fill_gradient(low="#FFFFE0",high="#DB0000")+
  theme_minimal()+xlab("Alpha")+ylab("Beta")

Ragam MAPE memiliki pola yang cukup beda. Ragam tersebut nampak minimum di diagonal antara Beta 0.5 dan alpha mendekati nol ke Beta 0.2 dan Alpha 0.25. Lakukan pemeringkatan:

ggplot(aggregateDES, aes(alphrange, betarange)) +
  geom_tile(aes(fill = meanMAE), colour = "white") +
  scale_fill_gradient(low="#FFFFE0",high="#DB0000")+
  theme_minimal()+xlab("Alpha")+ylab("Beta")

Mean dari MAE memiliki pola sama seperti sebelumnya.

ggplot(aggregateDES, aes(alphrange, betarange)) +
  geom_tile(aes(fill = sqrt(varMAE)), colour = "white") +
  scale_fill_gradient(low="#FFFFE0",high="#DB0000")+
  theme_minimal()+xlab("Alpha")+ylab("Beta")

Akar dari ragam MAE tampak minimum di diagonal dan di alpha 0.3 sampai 0.6.

knitr::kables(list(
  knitr::kable(head(setorder(aggregateDES, meanMSE)[,c(1,2,3)],n=5)),
  knitr::kable(head(setorder(aggregateDES, meanMAPE)[,c(1,2,5)],n=5)),
  knitr::kable(head(setorder(aggregateDES, meanMAE)[,c(1,2,7)],n=5))
  ),
)
alphrange betarange meanMSE
0.3 0.1 124.1593
0.4 0.1 126.4938
0.5 0.1 129.2457
1.0 0.1 129.8730
0.9 0.1 130.2131
alphrange betarange meanMAPE
0.4 0.1 14.87823
0.5 0.1 14.97848
0.6 0.1 15.25584
0.3 0.1 15.48863
0.7 0.1 15.54700
alphrange betarange meanMAE
0.4 0.1 7.407114
0.3 0.1 7.488104
0.5 0.1 7.501632
0.6 0.1 7.607473
0.7 0.1 7.695825

Nampak kombinasi alpha dan beta 0.4 dan 0.1 cukup baik dalam meminmumkan rataan error. Terlihat bahwa range alpha yang meminimumkan MSE dan MAPE kira kira 0.3 sampai 0.6. Pencarian lebih detail dapat dilakukan di daerah ini.

knitr::kables(list(
  knitr::kable(head(setorder(aggregateDES, varMSE)[,c(1,2,4)],n=7)),
  knitr::kable(head(setorder(aggregateDES, varMAPE)[,c(1,2,6)],n=7)),
  knitr::kable(head(setorder(aggregateDES, varMAE)[,c(1,2,8)],n=7))
    ),
)
alphrange betarange varMSE
1.0 0.1 36523.70
0.9 0.1 38084.94
0.8 0.1 39798.92
0.7 0.1 42024.62
0.1 0.4 42996.48
0.6 0.1 44950.56
0.3 0.1 45411.60
alphrange betarange varMAPE
0.1 0.5 267.1882
0.2 0.3 279.9528
0.3 0.2 291.4916
0.4 0.2 301.5072
0.5 0.2 320.4104
0.1 0.4 325.4686
0.6 0.2 350.0392
alphrange betarange varMAE
0.1 0.4 32.54265
1.0 0.1 39.70195
0.9 0.1 41.10155
0.8 0.1 42.32328
0.7 0.1 43.49530
0.3 0.1 44.09136
1.0 0.2 44.69995

Terlihat bahwa kriteria peminimuman ragam MSE dan MAPE berbeda dari peminimuman rata-rata MSE dan MAPE.

Lakukan iterasi kedua untuk range α 0.30.6, β 0.010.2:

DESCV2<-fcCV(weeklyCrude[,3],initialn=36,folds=15,type="DES",alphrange=seq(0.3,0.6,0.01),betarange=seq(0.01,0.2,0.01))

Masukkan hasilnya:

resultDES2<-DESCV2[[3]]

Langsung lakukan agregasi:

aggregateDES2<-resultDES2[,`.`(meanMSE=mean(MSE),
                 varMSE=var(MSE),
                 meanMAPE=mean(MAPE),
                 varMAPE=var(MAPE),
                 meanMAE=mean(MAE),
                 varMAE=var(MAE)), by=list(alphrange,betarange)]

Nilai nilai apa saja yang menimumkan MSE, MAPE, dan MAE:

knitr::kables(list(
  knitr::kable(head(setorder(aggregateDES2, meanMSE)[,c(1,2,3)],n=5)),
  knitr::kable(head(setorder(aggregateDES2, meanMAPE)[,c(1,2,5)],n=5)),
  knitr::kable(head(setorder(aggregateDES2, meanMAE)[,c(1,2,7)],n=5))
  ),
)
alphrange betarange meanMSE
0.59 0.05 116.5930
0.60 0.05 116.5934
0.58 0.05 116.5967
0.57 0.05 116.6047
0.56 0.05 116.6175
alphrange betarange meanMAPE
0.36 0.12 14.82092
0.37 0.12 14.82199
0.35 0.12 14.82834
0.38 0.12 14.83348
0.34 0.13 14.83575
alphrange betarange meanMAE
0.39 0.09 7.390671
0.40 0.09 7.390987
0.38 0.09 7.392621
0.41 0.09 7.392794
0.42 0.09 7.395522

Dan ragamnya.

knitr::kables(list(
  knitr::kable(head(setorder(aggregateDES2, varMSE)[,c(1,2,4)],n=5)),
  knitr::kable(head(setorder(aggregateDES2, varMAPE)[,c(1,2,6)],n=5)),
  knitr::kable(head(setorder(aggregateDES2, varMAE)[,c(1,2,8)],n=5))
  ),
)
alphrange betarange varMSE
0.60 0.03 32909.41
0.59 0.03 32944.17
0.58 0.03 32979.66
0.60 0.04 32988.31
0.57 0.03 33015.65
alphrange betarange varMAPE
0.31 0.2 291.3369
0.30 0.2 291.4916
0.32 0.2 291.5246
0.33 0.2 292.0687
0.34 0.2 292.9031
alphrange betarange varMAE
0.60 0.01 36.00838
0.59 0.01 36.02458
0.58 0.01 36.04035
0.57 0.01 36.05709
0.56 0.01 36.07567

Plot iterasi mana yang susah:

ggplot(resultDES,aes(x=iter,y=MAPE,group=iter))+
  geom_boxplot()+theme_bw()+
  ggtitle("Boxplot MAPE tiap Iterasi")+
  xlab("Iterasi")+ylab(" ")

Sama seperti sebelumnya, performa pemulusan buruk saat COVID.

4.5 Bantuan untuk kesimpulan

knitr::kables(list(
  knitr::kable(head(setorder(aggregateSMA, meanMSE)[,c(1,2)],n=1)),
  knitr::kable(head(setorder(aggregateSMA, meanMAPE)[,c(1,4)],n=1)),
  knitr::kable(head(setorder(aggregateSMA, meanMAE)[,c(1,6)],n=1))
  ),caption="SMA"
)
Table 4.1: SMA
M meanMSE
2 119.0668
M meanMAPE
2 15.2738
M meanMAE
2 7.3915
knitr::kables(list(
  knitr::kable(head(setorder(aggregateDMA, meanMSE)[,c(1,2)],n=1)),
  knitr::kable(head(setorder(aggregateDMA, meanMAPE)[,c(1,4)],n=1)),
  knitr::kable(head(setorder(aggregateDMA, meanMAE)[,c(1,6)],n=1))
  ),caption="DMA"
)
Table 4.1: DMA
M meanMSE
11 128.7952
M meanMAPE
9 16.22624
M meanMAE
11 7.782634
knitr::kables(list(
  knitr::kable(head(setorder(aggregateSES, meanMSE)[,c(1,2)],n=1)),
  knitr::kable(head(setorder(aggregateSES, meanMAPE)[,c(1,4)],n=1)),
  knitr::kable(head(setorder(aggregateSES, meanMAE)[,c(1,6)],n=1))
  ),caption="SES"
)
Table 4.1: SES
alpha meanMSE
0.93 118.6033
alpha meanMAPE
0.67 15.52554
alpha meanMAE
0.8 7.473352
knitr::kables(list(
  knitr::kable(head(setorder(aggregateDES2, meanMSE)[,c(1,2,3)],n=1)),
  knitr::kable(head(setorder(aggregateDES2, meanMAPE)[,c(1,2,5)],n=1)),
  knitr::kable(head(setorder(aggregateDES2, meanMAE)[,c(1,2,7)],n=1))
  ),caption="DES"
)
Table 4.1: DES
alphrange betarange meanMSE
0.59 0.05 116.593
alphrange betarange meanMAPE
0.36 0.12 14.82092
alphrange betarange meanMAE
0.39 0.09 7.390671