Analisis time series merupakan analisis yang didasarkan pada identifikasi pola dalam sederetan data historis dan mengekstrapolasikan pola tersebut di masa yang akan datang. Asumsi dalam analisis time series adalah nilai variabel di masa yang akan datang bergantung pada nilai variabel tersebut di masa lalu dan atau kesalahan perkiraan variabel tersebut di masa lalu. Terdapat dua klasifikasi secara umum untuk metode peramalan time series yang dipilih berdasarkan pola data eksisting, yakni metode smoothing (penghalusan) dan metode dekomposisi.
Suatu deretan data memiliki pola-pola tertentu yang dapat diklasifikasikan kedalam pola horisontal, musiman, siklis, dan trend. Kebanyakan data merupakan kombinasi pola tersebut. Oleh karena itu metode yang mampu membedakan pola data tersebut sangat dibutuhkan. Pola data yang dimaksud antara lain pola data horizontal (stasioner) yang cenderung tetap dalam periode waktu tertentu; pola seasonal (musiman) yakni berkaitan dengan fluktuasi periodik dengan panjang konstan (berulang pada interval yang tetap); siklis yakni pola data fluktuasi dalam periode waktu yang relatif panjang dengan interval yang cenderung berbeda antar siklus; serta trend yakni pola data yang cenderung naik atau turun. Pola-pola data tersebut jika direpresentasikan secara grafis ditunjukkan pada gambar di bawah.
Gambar di bawah ini menunjukkan metode yang dapat digunakan dalam analisis peramalan time series.
Metode smoothing digunakan untuk menghilangkan sifat keacakan melalui pemulusan nilai pengamatan masa lalu serta perata-rataan random error. Dalam metode ini, komponen- komponen pola data tidak didentifikasi. Artinya, metode ini melihat data secara utuh tanpa membagi-bagi data ke dalam komponen trend, siklus, dan musimnya. Metode smoothing secara rinci terdiri dari dua metode yakni metode perata-rataan dan exponential smooting. Metode perata- rataan utamanya digunakan jika data yang tersedia terbatas sehingga sifat seasonality dan siklus sulit ditemukan.
Dalam metode perata-rataan, parameter yang digunakan diberikan bobot yang sama. Metode ini terdiri dari simple average, single moving average, dan double moving average. Pada metode simple average, peramalan dilakukan melalui nilai rata-rata seluruh periode data stasioner. Dalam metode single moving average, ditentukan jumlah T periode data terakhir yang tetap untuk melakukan pemulusan dimana semakin besar periode data serta orde moving average maka hasil smoothing akan semakin baik. Dalam metode double moving average, peramalan dilakukan dengan menghitung rata-rata bergerak (moving average) dari rata-rata bergerak (moving average).
Metode single moving average dan double moving average, bersifat lebih presisi dalam melakukan peramalan dimana dalam pemilihannya ditentukan melalui nilai Sum Squared Error (SSE) dan Mean Squared Error (MSE). Jika nilai SSE dan MSE metode single moving average lebih kecil daripada double moving average, maka metode single moving average lah yang akan digunakan, begitu pula jika sebaliknya.
Selain metode perata-rataan, terdapat pula metode exponential smoothing. Metode ini menerapkan parameter dengan bobot yang tidak sama pada data masa lalu. Bobot tersebut secara spesifik naik secara eksponensial dari periode sebelumnya menuju periode terbaru. Secara umum, metode exponential smoothing ini dibagi menjadi 4 metode yakni single exponential smoothing, single exponential smoothing dengan pendekatan adaptif, double exponential smoothing, serta triple exponential smoothing. Perbedaan diantara keempat metode tersebut didasarkan pada perbedaan penggunaan parameter, dimana metode single exponential smoothing menggunakan satu parameter yang dipilih karena menghasilkan error terkecil. Namun sebenarnya nilai parameter berubah secara otomatis bila terjadi perubahan dalam pola dasar . Hal ini diakomodir oleh metode single exponential smoothing dengan pendekatan adaptif. Metode tersebut menggunakan parameter yang dapat berubah dalam suatu cara yang terkendali sesuai perubahan pola data. Sedangkan untuk double exponential smoothing terdapat dua metode yang dapat digunakan, yaitu metode linier satu parameter “Brown” dan metode linier dua parameter “Holt”. Dimana metode linier satu parameter “Brown” memerlukan penggunaan satu parameter yang sama untuk kedua smoothing sedangkan metode linier dua parameter “Holt” menggunakan dua parameter yang berbeda untuk kedua exponential smoothing yang terlibat.
Untuk metode triple exponential smoothing terdapat dua metode yang dapat digunakan, yaitu metode kuadrat satu parameter Brown dan metode trend & season tiga parameter Winter. Dimana metoda kuadrat satu parameter Brown menggunakan satu parameter pada ketiga exponential smoothing. Metode ini dapat digunakan untuk data stasioner dan non stasioner, sepanjang tidak seasonal. Sedangkan metoda trend dan season tiga parameter Winter menggunakan Tiga parameter yang berbeda digunakan untuk masing-masing dari tiga exponential smoothing dan dapat mengatasi pola data season.
Metode double exponential dapat digunakan pada data dengan trend yang jelas, sedangkan triple exponential digunakan pada data dengan sifat trend, siklus, dan seasonality.
Berbeda dengan metode smoothing (pemulusan) yang telah dijelaskan sebelumnya, metode dekomposisi berusaha meramalkan nilai kejadian masa depan melalui pengidentifikasian tiga komponen pola data yakni trend, siklus, dan musim. Metode ini mengasumsikan bahwa data merupakan hasil pola data yang telah dipengaruhi error akibat keacakan, yakni perbedaan antara data aktual dengan pengaruh komponen pola data yang dikombinasikan seperti permodelan dekomposisi di bawah ini.
Dalam peramalan dengan metode ini, masing-masing komponen pola data berusaha diisolasikan secara bertahap. Model dasar dekomposisi dirumuskan seperti dibawah ini.
Dengan keterangan :
\(X_t\) = Nilai data pengamatan pada periode t
\(I_t\) = Indeks Seasonal pada periode t
\(T_t\) = Komponen trend pada periode t
\(C_t\) = Komponen Siklus periode t
\(E_t\) = Komponen error periode t
Tahapan-tahapan permalan metode dekomposisi adalah sebagai berikut:
Perlu dilakukan penghilangan pengaruh musim dan keacakan dengan cara menghaluskan data melalui perhitungan rata-rata bergerak (moving average)
\[ M_t = T_t \times C_t \]
Pisahkan N periode MA dari data untuk mendapatkan komponen trend dan siklus.
\[X_t / M_t = (I_t \times T_t \times C_t \times E_t) / (T_t \times C_t) = I_t \times E_t \]
Isolasikan komponen musim dengan merata-ratakannya untuk setiap periode
Lakukan identifikasi bentuk kecenderungan yang paling sesuai dan hitung nilainya dalam setiap periode.
\[ T_t = a + b_t \]
\[ M_t / T_t = (T_t \times C_t) / (a + b t) = C_t \]
Kelima, pisahkan hasil tahap kedua dan keempat untuk mendapatkan komponen siklus
Pisahkan komponen musim, trend, dan siklus dari data untuk mendapatkan keacakan (error).
Signifikansi model peramalan time series dapat dilihat dari beberapa ukuran kesalahan, baik ukuran kesalahan relatif maupun absolut. Ukuran-ukuran kesalahan yang sering digunakan adalah seperti berikut ini.
Dalam praktikum kali ini akan dilakukan analisis peramalan time series dengan metode smoothing average, metode exponential smoothing, dan metode dekomposisi. Menentukan metode mana yang digunakan dalam analisis time series ini merupakan hal yang sangat krusial. Metode yang digunakan akan sangat bergantung pada pola dari data historis. Selain melihat kecenderungan dan pola data, dibutuhkan pula pengujian nilai error/kesalahan yang dihasikan dengan menggunakan ukuran-ukuran kesalahan seperti yang telah disebutkan pada bagian teori dasar oleh masing- masing metode yang dapat digunakan yakni dalam praktikum kali ini akan menggunakan ukuran root mean square error (RMSE). Metode yang menghasilkan nilai RMSE terkecil merupakan metode yang paling tepat untuk dipilih dalam meramalkan nilai variabel yang diprediksi di masa yang akan datang. Pada bagian ini akan dibahas contoh kasus, rumusan masalah, tahap analisis serta interpretasi.
Kasus:
Dalam menyusun kebijakan ekonomi dan keuangan regional, pemerintah melakukan kajian kondisi perekonomian, salah satunya karakteristik laju inflasi yang digunakan sebagai acuan untuk penentuan perencanaan ekonomi yang dijalankan seperti subsidi, APBD, dan kebijakan sektor perdagangan. Oleh karena itu, pemerintah memiliki peran dalam penetapan sasaran, pemantauan, dan pengendalian inflasi dengan cara mengidentifikasi inflation expectation, yakni proyeksi tingkat inflasi di masa datang berdasarkan karakteristik laju inflasi sebelumnya. Adapun tujuan dari pengolahan data adalah untuk membuat proyeksi nilai laju inflasi bulan Desember 2019 yang akan digunakan untuk menetapkan kebijakan ekonomi pada tahun 2020. Berikut ini merupakan data laju inflasi perbulan Nasional tahun 2014 hingga 2018.
Berdasarkan studi kasus tersebut, maka penyelesaian yang dapat dilakukan terdiri dari beberapa tahapan yang diantaranya adalah: (1) merumuskan masalah; (2) memasukkan data pada R, (3) mengolah data menggunakan R; (4) menganalisis dan menginterpretasikan hasil analisis.
Masalah yang akan diteliti adalah sebagai berikut.
Download dataset pada link ini: https://drive.google.com/file/d/1AsvrAWAKwBH6i3Sm_isNsTvRMIbHnVJy/view?usp=sharing
Load data.csv
pada R. Bisa menggunakan pendakatan import
data langsung pada GUI atau bisa dengan command. JANGAN LUPA
BUAT PROJECT TERLEBIH DAHULU!
# library untuk load file .csv
library(readr)
## Warning: package 'readr' was built under R version 4.3.2
# load data.csv
data <- read_csv("data.csv")
## Rows: 60 Columns: 2
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Periode
## dbl (1): LajuInf
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
data
## # A tibble: 60 × 2
## LajuInf Periode
## <dbl> <chr>
## 1 1.07 2014m1
## 2 0.26 2014m2
## 3 0.08 2014m3
## 4 -0.92 2014m4
## 5 0.16 2014m5
## 6 0.43 2014m6
## 7 1.03 2014m7
## 8 0.47 2014m8
## 9 0.27 2014m9
## 10 0.47 2014m10
## # ℹ 50 more rows
Pengolahan data time-series dengan R ini akan meliputi; 1) Declare data timeseries; 2) Metode Smoothing Average; 3) Metode Exponential Smoothing; 4) Metode Dekomposisi (Unobserved-Components Model)
Sebelum melakukan analisis time series, input data yang digunakan harus dikenali terlebih dahulu oleh aplikasi R sebagai data timeseries. Dalam mendefisikannya, perlu dibuat variabel baru sebagai variabel yang memuat satuan waktu.
Pada praktikum ini akan digunakan library bernama
lubridate
untuk memudahkan proses formatting data datetime.
Berikut adalah cheatsheet penggunaan lubridate
-> Cheatsheet
Lubridate
Bisa dilihat pada data yang ditampilkan sebelumnya, bahwa kolom
periode masih berbentuk string yang berisikan data tahun dan bulan
dengan format 20xxmxx
(Contoh: 2014m1). Pada lubridate, hal
ini bisa dikonversi dengan fungsi ym()
.
# load library lubridate
library(lubridate)
## Warning: package 'lubridate' was built under R version 4.3.2
##
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
# konversi kolom `periode` dan menyimpannya pada kolom baru, ``
data$tanggal <- ym(data$Periode)
# Check the updated dataframe
data
## # A tibble: 60 × 3
## LajuInf Periode tanggal
## <dbl> <chr> <date>
## 1 1.07 2014m1 2014-01-01
## 2 0.26 2014m2 2014-02-01
## 3 0.08 2014m3 2014-03-01
## 4 -0.92 2014m4 2014-04-01
## 5 0.16 2014m5 2014-05-01
## 6 0.43 2014m6 2014-06-01
## 7 1.03 2014m7 2014-07-01
## 8 0.47 2014m8 2014-08-01
## 9 0.27 2014m9 2014-09-01
## 10 0.47 2014m10 2014-10-01
## # ℹ 50 more rows
Dalam R, dataset yang digunakan untuk analisis time series perlu diubah menjadi time series object. Berikut adalah prosesnya.
# convert data into time series object ts_data
ts_data <- ts(data$LajuInf, start = c(2014, 1), frequency = 12)
ts_data
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2014 1.07 0.26 0.08 -0.92 0.16 0.43 1.03 0.47 0.27 0.47 1.50 2.46
## 2015 -0.27 -0.36 0.17 0.36 0.50 0.54 0.93 0.39 -0.45 -0.08 0.21 1.56
## 2016 0.51 -0.13 0.19 -0.65 0.24 0.66 0.99 -0.42 0.22 0.14 0.47 0.42
## 2017 1.27 0.23 -0.12 0.09 0.39 0.89 0.22 -0.07 0.13 -0.01 0.20 1.31
## 2018 0.82 0.17 0.20 -0.10 0.21 0.79 0.28 -0.05 -0.38 0.28 0.27 0.62
Hasil di atas adalah bentuk dari time series object yang digunakan pada R.
Dalam melakukan analisis timeseries utamanya pada metode dekomposisi, identifikasi komponen pola data menjadi penting. Pada bagian ini akan diidentifikasi terlebih dahulu apakah data memiliki komponen trend (kecenderungan) dan seasonal (musiman).
Plotting Time Series Data
Pertama bisa dilakukan dengan pendakatan visualisasi data.
plot.ts(ts_data,
main = "Data Lanju Inflasi (2014-2018)",
xlab = "2014-2018 (monthly data)",
ylab = "Laju Inflasi",
col = "violetred3",
lwd=5)
Dari visualisasi di atas bisa dilihat secara kasar bahwa data memiliki kecenderungan bersifat seasonal. Maka dari itu kita akan mencoba decompose data untuk melihat kecenderungan seasonal, trend, dan random/irregular component.
decompose_data <- decompose(ts_data)
plot(decompose_data)
Dekomposisi ini menunjukkan bahwa deret waktu yang diamati terutama didorong oleh tren menurun dan pola musiman yang teratur. Komponen acak memainkan peran yang relatif kecil, menunjukkan bahwa tren dan komponen musiman menjelaskan sebagian besar variasi dalam data.
Selain dilihat dari dekomposisi secara visual, komponen-komponen time series ini juga bisa diuji secara statistik.
Dickey-Fuller Test
Uji ini dilakukan untuk menguji sifat stationarity yakni apakah data berfluktuasi pada titik nilai yang sama atau dalam kata lain menguji keberadaan komponen trend.
# library untuk adf-test
# jika belum melakukan instalasi -> install.packages('tseries')
library(tseries)
## Warning: package 'tseries' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
# perform adf-test
adf.test(ts_data)
## Warning in adf.test(ts_data): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: ts_data
## Dickey-Fuller = -5.435, Lag order = 3, p-value = 0.01
## alternative hypothesis: stationary
Dari hasil di atas, kita fokus pada 2 nilai, yaitu:
Test statistics: -5.435
p-value: 0.01
Perhatikan juga hipotesa dalam uji statistik ini:
H0: The time series is non-stationary. In other words, it has some time-dependent structure and does not have constant variance over time.
HA: The time series is stationary.
Dari p-value yang benilai 0.01 (<0.05) maka hipotesa alternatif diterima. Data memiliki sifat stationary. Hal ini menunjukkan bahwa komponen trend pada data time series ini tidak signifikan meskipun pada dekomposisi sebelumnya terlihat beberapa kecenderungan.
Uji Korelogram & Box-Pierce’s Autocorrelation/Ljung-Box Test
Untuk menguji seasonality pada data, kita bisa menggunakan Korelogram & Box-Pierce’s test ini. Berikut adalah prosesnya.
# library untuk melakukan korelogram (dan juga analisis time seriesn nantinya)
# jika belum melakukan instalasi -> install.packages('forecast')
library(forecast)
## Warning: package 'forecast' was built under R version 4.3.3
# perintah korelogram melalui ACF plot
Acf(ts_data, main="Autocorrelation Function")
Dari sini bisa terlihat bahwa autocorrelation tinggi pada lag 6,12,18,24 dan sangat negatif pada lag 3, 9, 15, 21. Hal ini mengindikasikan bahwa ada autokorelasi pada datanya. Untuk lebih lanjut bisa dilihat melalui uji formal dengan Box-Pierce’s test.
# melakukan uji Box-Pierce's
Box.test(ts_data, lag = 3, type = "Box-Pierce") # lag 3 sesuai hasil adf test
##
## Box-Pierce test
##
## data: ts_data
## X-squared = 16.829, df = 3, p-value = 0.0007663
Hasil ini menunjukkan adanya bukti kuat bahwa terdapat autokorelasi
yang signifikan pada data time series ts_data
, setidaknya
hingga lag ke-3. Ini mungkin mengindikasikan adanya pola musiman
atau struktur ketergantungan waktu lainnya dalam data.
Apa itu autokorelasi dalam time series?
Autokorelasi dalam deret waktu (time series) adalah korelasi antara nilai-nilai sebuah variabel dengan nilai-nilai sebelumnya pada rentang waktu yang berbeda. Sederhananya, ini mengukur sejauh mana suatu titik data dalam deret waktu dipengaruhi oleh titik data sebelumnya.
Train & Test Split Data
Agar pada akhirnya nanti kita bisa menguji hasil model, maka harus dipisahkan mana data yang digunakan dalam membentuk model dan mana data untuk menguji hasil model.
# Bagi data menjadi data training dan testing
train_data <- window(ts_data, end = c(2017, 12)) # Data hingga Desember 2017
test_data <- window(ts_data, start = c(2018, 1)) # Data mulai Januari 2018
train_data
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2014 1.07 0.26 0.08 -0.92 0.16 0.43 1.03 0.47 0.27 0.47 1.50 2.46
## 2015 -0.27 -0.36 0.17 0.36 0.50 0.54 0.93 0.39 -0.45 -0.08 0.21 1.56
## 2016 0.51 -0.13 0.19 -0.65 0.24 0.66 0.99 -0.42 0.22 0.14 0.47 0.42
## 2017 1.27 0.23 -0.12 0.09 0.39 0.89 0.22 -0.07 0.13 -0.01 0.20 1.31
test_data
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2018 0.82 0.17 0.20 -0.10 0.21 0.79 0.28 -0.05 -0.38 0.28 0.27 0.62
SMA bisa dilakukan dengan menggunakan library forecast
pada fungsi ma()
. Berikut adalah perintah SMA dengan lag
order 3 (sesuai dengan hasil optimum pada adf-test).
# library(forecast) sudah dirun pada chunk code sebelumnya, jika belum bisa run kembali
# perintah sma dengan lag order 3
sma <- ma(train_data, order = 3)
# visualisasi hasil moving average
plot(train_data)
lines(sma, col = "red")
Melakukan forecasting dari sma.
forecast_sma <- forecast(sma, h = 13) # karena point data awal (Jan 2014) dan akhir (Dec 2014) tidak ada saat menghitung sma
## Warning in ets(object, lambda = lambda, biasadj = biasadj,
## allow.multiplicative.trend = allow.multiplicative.trend, : Missing values
## encountered. Using longest contiguous portion of time series
print(forecast_sma)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Dec 2017 0.4999606 0.06113894 0.9387824 -0.1711592 1.171081
## Jan 2018 0.4999606 -0.12059593 1.1205172 -0.4490987 1.449020
## Feb 2018 0.4999606 -0.26005016 1.2599715 -0.6623756 1.662297
## Mar 2018 0.4999606 -0.37761692 1.3775382 -0.8421784 1.842100
## Apr 2018 0.4999606 -0.48119600 1.4811173 -1.0005890 2.000510
## May 2018 0.4999606 -0.57483902 1.5747603 -1.1438036 2.143725
## Jun 2018 0.4999606 -0.66095291 1.6608742 -1.2755034 2.275425
## Jul 2018 0.4999606 -0.74110593 1.7410272 -1.3980869 2.398008
## Aug 2018 0.4999606 -0.81638742 1.8163087 -1.5132200 2.513141
## Sep 2018 0.4999606 -0.88759050 1.8875118 -1.6221157 2.622037
## Oct 2018 0.4999606 -0.95531395 1.9552352 -1.7256898 2.725611
## Nov 2018 0.4999606 -1.02002295 2.0199442 -1.8246537 2.824575
## Dec 2018 0.4999606 -1.08208742 2.0820087 -1.9195731 2.919494
Sesuai dengan namanya, double moving average ini adalah perhitungan
moving average yang dilakukan 2 kali. Maka dari itu, hasil dari
sma
tadi bisa langsung dihitung kembali dengan moving
average dengan order lag yang sama.
# melakukan dma
dma <- ma(sma, order = 3)
# visualisasi hasil moving average (sma dan dma)
plot(train_data)
lines(sma, col = "red")
lines(dma, col = "blue")
Melakukan forecasting pada dma
forecast_dma <- forecast(dma, h = 14) # karena 2 point data awal (Jan, Feb 2014) dan 2 akhir (Nov, Dec 2014) tidak ada saat menghitung dma
## Warning in ets(object, lambda = lambda, biasadj = biasadj,
## allow.multiplicative.trend = allow.multiplicative.trend, : Missing values
## encountered. Using longest contiguous portion of time series
print(forecast_dma)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Nov 2017 0.2077642 -0.0568154 0.4723438 -0.1968754 0.6124038
## Dec 2017 0.2077642 -0.1663892 0.5819176 -0.3644540 0.7799824
## Jan 2018 0.2077642 -0.2504706 0.6659990 -0.4930454 0.9085739
## Feb 2018 0.2077642 -0.3213553 0.7368838 -0.6014543 1.0169827
## Mar 2018 0.2077642 -0.3838065 0.7993349 -0.6969651 1.1124935
## Apr 2018 0.2077642 -0.4402668 0.8557953 -0.7833138 1.1988422
## May 2018 0.2077642 -0.4921877 0.9077161 -0.8627198 1.2782482
## Jun 2018 0.2077642 -0.5405145 0.9560429 -0.9366293 1.3521577
## Jul 2018 0.2077642 -0.5859041 1.0014325 -1.0060467 1.4215751
## Aug 2018 0.2077642 -0.6288347 1.0443631 -1.0717034 1.4872319
## Sep 2018 0.2077642 -0.6696673 1.0851958 -1.1341515 1.5496800
## Oct 2018 0.2077642 -0.7086824 1.1242109 -1.1938200 1.6093485
## Nov 2018 0.2077642 -0.7461031 1.1616315 -1.2510500 1.6665784
## Dec 2018 0.2077642 -0.7821101 1.1976386 -1.3061180 1.7216464
Untuk menguji model time series mana yang lebih baik, maka dilihat perhitungan forecast statistics-nya yang berisikan beberapa perhitungan penting dalam time series analysis:
ME: Mean Error
RMSE: Root Mean Squared Error
MAE: Mean Absolute Error
MPE: Mean Percentage Error
MAPE: Mean Absolute Percentage Error
MASE: Mean Absolute Scaled Error
ACF1: Autocorrelation of errors at lag 1.
Theil’s U: Theil’s U Test Statistics
# untuk sma
accuracy(forecast_sma, test_data)
## ME RMSE MAE MPE MAPE MASE
## Training set 0.0006500298 0.3348879 0.2647181 54.80079 157.2193 0.9629546
## Test set -0.2407939812 0.4153585 0.3624803 108.50984 229.2493 1.3185804
## ACF1 Theil's U
## Training set 0.2539532 NA
## Test set 0.1172247 2.192347
# untuk dma
accuracy(forecast_dma, test_data)
## ME RMSE MAE MPE MAPE MASE
## Training set 0.004341877 0.2017059 0.1669798 12.61824 92.66601 0.7935673
## Test set 0.051402445 0.3423203 0.2512060 103.53636 107.88575 1.1938501
## ACF1 Theil's U
## Training set 0.4658684 NA
## Test set 0.1172247 1.469024
Kedua model (SMA dan DMA) menunjukkan kinerja yang kurang baik dalam
meramalkan data test_data
. Hal ini terlihat dari nilai MAPE
(Mean Absolute Percentage Error) yang sangat tinggi, baik pada training
set maupun test set. Nilai MAPE yang tinggi mengindikasikan bahwa
rata-rata kesalahan peramalan cukup besar dibandingkan dengan nilai
aktualnya.
MAPE:
SMA: MAPE pada training set (157.22%) dan test set (229.25%) sangat tinggi, menunjukkan kesalahan peramalan yang signifikan.
DMA: MAPE pada training set (92.67%) dan test set (107.89%) juga tinggi, meskipun sedikit lebih baik daripada SMA.
ME (Mean Error):
SMA: ME negatif pada test set (-0.24) mengindikasikan bahwa model cenderung overestimate (meramalkan nilai lebih tinggi dari aktual).
DMA: ME positif pada test set (0.05) menunjukkan sedikit underestimate (meramalkan nilai lebih rendah).
RMSE (Root Mean Squared Error) dan MAE (Mean Absolute Error):
MASE (Mean Absolute Scaled Error):
Theil’s U Test
Theil’s U adalah metrik statistik yang digunakan untuk mengukur akurasi peramalan. Nilai Theil’s U berkisar antara 0 hingga 1, dengan interpretasi sebagai berikut:
U = 0: Peramalan sempurna.
U < 1: Peramalan lebih baik daripada peramalan naif (misalnya, menggunakan nilai terakhir sebagai peramalan).
U = 1: Peramalan sama baiknya dengan peramalan naif.
U > 1: Peramalan lebih buruk daripada peramalan naif.
Hasil:
SMA: Nilai Theil’s U lebih besar dari 1, baik pada training set maupun test set. Ini menunjukkan bahwa model SMA berperforma lebih buruk daripada model naif (peramalan menggunakan nilai terakhir).
DMA: Nilai Theil’s U pada training set sedikit di bawah 1, menunjukkan bahwa model DMA sedikit lebih baik daripada model naif. Namun, pada test set, nilai Theil’s U sedikit di atas 1, menunjukkan bahwa model DMA sedikit lebih buruk daripada model naif.
Berdasarkan hasil ini, dapat disimpulkan bahwa baik model SMA maupun DMA tidak cukup baik dalam meramalkan data yang digunakan. Hal ini sangat berkaitan dengan asumsi pada pendekatan moving average yang bersifat stasioner-linier. Data yang kita miliki meskipun memiliki sifat stasioner dan tidak memiliki komponen trend (dari hasil Dickey-Fuller test), masih cenderung mempunyai komponen seasonal yang cukup berpengaruh.
Dengan sifatnya yang stasioner-linier, hasil moving average ini biasa
direpresentasikan dalam bentuk formula linear. Formula linear ini bisa
didapatkan dengan analisis regresi linear pada R (lm()
)
# Regresi linear pada MA
model <- lm(sma ~ time(sma))
# Tampilkan persamaan
cat("Persamaan linear:",
round(coef(model)[2], 2), "x +", round(coef(model)[1], 2), "\n")
## Persamaan linear: -0.04 x + 80.96
Notes: x
adalah waktu. Maka untuk mencari tahu berapa
nilai inflasi pada target waktu tertentu (dihitung dari data terakhir
sma), bisa memasukkan nilai tersebut pada variabel x. Misal, dengan data
terakhir pada sma adalah Dec 2017, untuk mengetahui data prediksi pada
Jan 2019 maka nilai x adalah 13.
Library yang digunakan pun masih sama, yaitu
forecast
Perintah pemodelan SES. Fungsi ses()
ini sudah sepaket
dengan proses forecasting.
ses_model <- ses(train_data)
print(ses_model)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Jan 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Feb 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Mar 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Apr 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## May 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Jun 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Jul 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Aug 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Sep 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Oct 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
plot(ses_model)
Melihat summary model.
summary(ses_model)
##
## Forecast method: Simple exponential smoothing
##
## Model Information:
## Simple exponential smoothing
##
## Call:
## ses(y = train_data)
##
## Smoothing parameters:
## alpha = 1e-04
##
## Initial states:
## l = 0.3742
##
## sigma: 0.6143
##
## AIC AICc BIC
## 142.9943 143.5397 148.6079
##
## Error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.0002510842 0.6013507 0.4336756 124.2088 203.3787 0.8639913
## ACF1
## Training set 0.1902232
##
## Forecasts:
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Jan 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Feb 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Mar 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Apr 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## May 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Jun 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Jul 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Aug 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Sep 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
## Oct 2018 0.3741596 -0.4130776 1.161397 -0.8298158 1.578135
Smoothing parameters:
alpha = 1e-04
: Ini adalah nilai
smoothing parameter α yang digunakan dalam model SES. Nilai ini sangat
kecil, menunjukkan bahwa model memberikan bobot yang sangat kecil pada
pengamatan terbaru.Initial states:
l = 0.3742
: Ini adalah nilai awal
untuk level komponen dari model SES.Sigma:
sigma = 0.6143
: Ini adalah estimasi
standar deviasi dari residual (error) dari model SES.Melihat forecast stats.
accuracy(ses_model, test_data)
## ME RMSE MAE MPE MAPE MASE
## Training set -0.0002510842 0.6013507 0.4336756 124.2088 203.3787 0.8639913
## Test set -0.1521595562 0.3823461 0.3244957 127.5349 198.0552 0.6464774
## ACF1 Theil's U
## Training set 0.19022321 NA
## Test set 0.09767548 1.883911
Training Set:
ME (Mean Error): -0.0002510842. Nilai ini sangat mendekati nol, menunjukkan bahwa rata-rata kesalahan prediksi model pada training set sangat kecil.
RMSE (Root Mean Squared Error): 0.6013507. RMSE mengukur seberapa besar kesalahan prediksi model secara keseluruhan. Nilai ini relatif rendah, menunjukkan bahwa model cukup baik dalam memprediksi nilai pada training set.
MAE (Mean Absolute Error): 0.4336756. MAE mirip dengan RMSE, tetapi tidak memberikan bobot lebih pada kesalahan yang lebih besar. Nilai ini juga relatif rendah.
MPE (Mean Percentage Error): 124.2088. MPE menunjukkan persentase kesalahan rata-rata. Nilai ini positif dan cukup tinggi, menunjukkan bahwa model cenderung overestimate (memprediksi terlalu tinggi) pada training set.
MAPE (Mean Absolute Percentage Error): 203.3787. MAPE mirip dengan MPE, tetapi tidak memperhitungkan arah kesalahan (overestimate atau underestimate). Nilai ini juga cukup tinggi.
MASE (Mean Absolute Scaled Error): 0.8639913. MASE membandingkan kesalahan model dengan kesalahan metode peramalan naif (misalnya, menggunakan nilai terakhir sebagai prediksi). Nilai kurang dari 1 menunjukkan bahwa model lebih baik daripada metode naif.
ACF1 (Autocorrelation of errors at lag 1): 0.19022321. ACF1 mengukur korelasi antara kesalahan prediksi pada waktu t dan kesalahan prediksi pada waktu t-1. Nilai ini relatif rendah, menunjukkan bahwa tidak ada autokorelasi yang kuat pada kesalahan model.
Test Set:
ME: -0.1521595562. Nilai ini negatif dan lebih besar dari ME pada training set, menunjukkan bahwa model cenderung underestimate (memprediksi terlalu rendah) pada test set.
RMSE: 0.3823461. Nilai ini lebih rendah dari RMSE pada training set, menunjukkan bahwa kesalahan prediksi pada test set lebih kecil.
MAE: 0.3244957. Nilai ini juga lebih rendah dari MAE pada training set.
MPE: 127.5349. Nilai ini positif dan lebih tinggi dari MPE pada training set, menunjukkan bahwa model cenderung overestimate pada test set.
MAPE: 198.0552. Nilai ini juga cukup tinggi.
MASE: 0.6464774. Nilai ini kurang dari 1, menunjukkan bahwa model lebih baik daripada metode naif.
ACF1: 0.09767548. Nilai ini lebih rendah dari ACF1 pada training set, menunjukkan bahwa tidak ada autokorelasi yang kuat pada kesalahan model.
Theil’s U: 1.883911. Theil’s U membandingkan model dengan model peramalan naif yang sempurna. Nilai lebih dari 1 menunjukkan bahwa model lebih buruk daripada model naif yang sempurna.
Model masih cenderung belum bisa memprediksi dengan baik nilai inflasi yang kita miliki. Hal ini juga berkaitan dengan pendekatan exponential smoothing yang masih “tidak ramah” komponen seasonality, meskipun cukup baik untuk analisis time series dengan data kecil.
Jika data memiliki tren, metode Holt dapat digunakan. Gunakan fungsi
holt()
.
holt_model <- holt(train_data)
print(holt_model)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Jan 2018 0.2970658 -0.5068156 1.100947 -0.9323647 1.526496
## Feb 2018 0.2936422 -0.5102392 1.097524 -0.9357884 1.523073
## Mar 2018 0.2902186 -0.5136629 1.094100 -0.9392120 1.519649
## Apr 2018 0.2867950 -0.5170866 1.090677 -0.9426358 1.516226
## May 2018 0.2833713 -0.5205103 1.087253 -0.9460595 1.512802
## Jun 2018 0.2799477 -0.5239341 1.083830 -0.9494834 1.509379
## Jul 2018 0.2765241 -0.5273579 1.080406 -0.9529073 1.505955
## Aug 2018 0.2731005 -0.5307818 1.076983 -0.9563313 1.502532
## Sep 2018 0.2696768 -0.5342057 1.073559 -0.9597555 1.499109
## Oct 2018 0.2662532 -0.5376298 1.070136 -0.9631797 1.495686
plot(holt_model)
Melihat summary model.
summary(holt_model)
##
## Forecast method: Holt's method
##
## Model Information:
## Holt's method
##
## Call:
## holt(y = train_data)
##
## Smoothing parameters:
## alpha = 1e-04
## beta = 1e-04
##
## Initial states:
## l = 0.4648
## b = -0.0034
##
## sigma: 0.6273
##
## AIC AICc BIC
## 146.8691 148.2977 156.2251
##
## Error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.007266415 0.6005672 0.430302 107.5427 188.2155 0.8572701
## ACF1
## Training set 0.1863143
##
## Forecasts:
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Jan 2018 0.2970658 -0.5068156 1.100947 -0.9323647 1.526496
## Feb 2018 0.2936422 -0.5102392 1.097524 -0.9357884 1.523073
## Mar 2018 0.2902186 -0.5136629 1.094100 -0.9392120 1.519649
## Apr 2018 0.2867950 -0.5170866 1.090677 -0.9426358 1.516226
## May 2018 0.2833713 -0.5205103 1.087253 -0.9460595 1.512802
## Jun 2018 0.2799477 -0.5239341 1.083830 -0.9494834 1.509379
## Jul 2018 0.2765241 -0.5273579 1.080406 -0.9529073 1.505955
## Aug 2018 0.2731005 -0.5307818 1.076983 -0.9563313 1.502532
## Sep 2018 0.2696768 -0.5342057 1.073559 -0.9597555 1.499109
## Oct 2018 0.2662532 -0.5376298 1.070136 -0.9631797 1.495686
Melihat forecast stats.
accuracy(holt_model, test_data)
## ME RMSE MAE MPE MAPE MASE
## Training set -0.007266415 0.6005672 0.4303020 107.5427 188.2155 0.8572701
## Test set -0.059659531 0.3519530 0.2697014 118.5672 149.1229 0.5373132
## ACF1 Theil's U
## Training set 0.18631427 NA
## Test set 0.08545341 1.623585
Training Set:
Test Set:
Secara keseluruhan, model Holt ini tampaknya lebih baik dalam meramalkan data test dibandingkan dengan data training, berdasarkan nilai-nilai kesalahan yang lebih rendah pada data test. Namun, nilai Theil’s U yang lebih dari 1 pada data test menunjukkan bahwa model naïve mungkin lebih baik dalam beberapa kasus.
Holt-Winters ini dapat menangkap komponen seasonal pada data.
hw_model <- hw(train_data)
print(hw_model)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Jan 2018 0.2068109 -0.43175953 0.8453813 -0.76979829 1.1834201
## Feb 2018 -0.2893511 -0.92792156 0.3492193 -1.26596033 0.6872581
## Mar 2018 -0.1991174 -0.83768788 0.4394530 -1.17572667 0.7774918
## Apr 2018 -0.3656019 -1.00417238 0.2729687 -1.34221120 0.6110075
## May 2018 0.1879705 -0.45060009 0.8265411 -0.78863894 1.1645800
## Jun 2018 0.4850161 -0.15355460 1.1235868 -0.49159351 1.4616257
## Jul 2018 0.6793436 0.04077271 1.3179145 -0.29726629 1.6559535
## Aug 2018 -0.1224722 -0.76104326 0.5160989 -1.09908237 0.8541380
## Sep 2018 -0.2508768 -0.88944811 0.3876946 -1.22748736 0.7257338
## Oct 2018 -0.1545320 -0.79310363 0.4840397 -1.13114305 0.8220791
## Nov 2018 0.3826521 -0.25591998 1.0212241 -0.59395960 1.3592637
## Dec 2018 1.1043051 0.46573256 1.7428776 0.12769269 2.0809174
## Jan 2019 0.1054782 -0.53309496 0.7440513 -0.87113516 1.0820915
## Feb 2019 -0.3906838 -1.02925760 0.2478899 -1.36729814 0.5859305
## Mar 2019 -0.3004501 -0.93902462 0.3381244 -1.27706554 0.6761653
## Apr 2019 -0.4669346 -1.10550989 0.1716407 -1.44355124 0.5096821
## May 2019 0.0866378 -0.55193844 0.7252140 -0.88998028 1.0632559
## Jun 2019 0.3836834 -0.25489387 1.0222607 -0.59293626 1.3603031
## Jul 2019 0.5780109 -0.06056756 1.2165893 -0.39861056 1.5546323
## Aug 2019 -0.2238049 -0.86238461 0.4147748 -1.20042829 0.7528185
## Sep 2019 -0.3522095 -0.99079061 0.2863716 -1.32883504 0.6244161
## Oct 2019 -0.2558647 -0.89444736 0.3827180 -1.23249261 0.7207632
## Nov 2019 0.2813194 -0.35726501 0.9199037 -0.69531116 1.2579499
## Dec 2019 1.0029724 0.36438614 1.6415586 0.02633902 1.9796057
plot(hw_model)
Melihat summary model.
summary(hw_model)
##
## Forecast method: Holt-Winters' additive method
##
## Model Information:
## Holt-Winters' additive method
##
## Call:
## hw(y = train_data)
##
## Smoothing parameters:
## alpha = 1e-04
## beta = 1e-04
## gamma = 1e-04
##
## Initial states:
## l = 0.5986
## b = -0.0084
## s = 1.012 0.282 -0.2637 -0.3685 -0.2485 0.5449
## 0.3422 0.0367 -0.5253 -0.3674 -0.4661 0.0216
##
## sigma: 0.4983
##
## AIC AICc BIC
## 133.4822 153.8822 165.2926
##
## Error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.01832943 0.4068432 0.308234 21.75693 103.1204 0.6140799
## ACF1
## Training set 0.07395781
##
## Forecasts:
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Jan 2018 0.2068109 -0.43175953 0.8453813 -0.76979829 1.1834201
## Feb 2018 -0.2893511 -0.92792156 0.3492193 -1.26596033 0.6872581
## Mar 2018 -0.1991174 -0.83768788 0.4394530 -1.17572667 0.7774918
## Apr 2018 -0.3656019 -1.00417238 0.2729687 -1.34221120 0.6110075
## May 2018 0.1879705 -0.45060009 0.8265411 -0.78863894 1.1645800
## Jun 2018 0.4850161 -0.15355460 1.1235868 -0.49159351 1.4616257
## Jul 2018 0.6793436 0.04077271 1.3179145 -0.29726629 1.6559535
## Aug 2018 -0.1224722 -0.76104326 0.5160989 -1.09908237 0.8541380
## Sep 2018 -0.2508768 -0.88944811 0.3876946 -1.22748736 0.7257338
## Oct 2018 -0.1545320 -0.79310363 0.4840397 -1.13114305 0.8220791
## Nov 2018 0.3826521 -0.25591998 1.0212241 -0.59395960 1.3592637
## Dec 2018 1.1043051 0.46573256 1.7428776 0.12769269 2.0809174
## Jan 2019 0.1054782 -0.53309496 0.7440513 -0.87113516 1.0820915
## Feb 2019 -0.3906838 -1.02925760 0.2478899 -1.36729814 0.5859305
## Mar 2019 -0.3004501 -0.93902462 0.3381244 -1.27706554 0.6761653
## Apr 2019 -0.4669346 -1.10550989 0.1716407 -1.44355124 0.5096821
## May 2019 0.0866378 -0.55193844 0.7252140 -0.88998028 1.0632559
## Jun 2019 0.3836834 -0.25489387 1.0222607 -0.59293626 1.3603031
## Jul 2019 0.5780109 -0.06056756 1.2165893 -0.39861056 1.5546323
## Aug 2019 -0.2238049 -0.86238461 0.4147748 -1.20042829 0.7528185
## Sep 2019 -0.3522095 -0.99079061 0.2863716 -1.32883504 0.6244161
## Oct 2019 -0.2558647 -0.89444736 0.3827180 -1.23249261 0.7207632
## Nov 2019 0.2813194 -0.35726501 0.9199037 -0.69531116 1.2579499
## Dec 2019 1.0029724 0.36438614 1.6415586 0.02633902 1.9796057
Melihat forecast stats.
accuracy(hw_model, test_data)
## ME RMSE MAE MPE MAPE MASE
## Training set -0.01832943 0.4068432 0.3082340 21.756928 103.1204 0.6140799
## Test set 0.12048776 0.3568151 0.3080584 9.150361 121.3180 0.6137301
## ACF1 Theil's U
## Training set 0.07395781 NA
## Test set 0.14759982 0.5524106
Training Set:
Test Set:
Secara keseluruhan, model Holt-Winters ini tampaknya lebih baik dalam meramalkan data test dibandingkan dengan data training berdasarkan beberapa metrik kesalahan yang lebih rendah atau sebanding. Nilai Theil’s U yang di bawah 1 menunjukkan bahwa model ini lebih baik dibandingkan dengan model naïve.
Dari seluruh model exponential smoothing ini sangat jelas bahwa model terbaik adalah model Holt-Winters karena memang Holt-Winters mampu menangkap elemen seasonal dalam data yang kita miliki.
Dalam membentuk model dekomposisi, pendekatan UCM menampilkan
karakteristik dari model yang dibentuk dengan command sebagai berikut.
Ada pun dalam R (rucm
), setiap komponen baik itu trend,
seasonal, dan siklus bersifat optional, namun dalam praktikum ini akan
diidentifikasikan ketiga komponen tersebut.
Library yang digunakan adalah rucm
.
# library yang dibutuhkan
library(rucm) # jika belum instalasi, lakukan instalasi install.packages("rucm")
## Warning: package 'rucm' was built under R version 4.3.3
## Loading required package: KFAS
## Warning: package 'KFAS' was built under R version 4.3.3
## Please cite KFAS in publications by using:
##
## Jouni Helske (2017). KFAS: Exponential Family State Space Models in R. Journal of Statistical Software, 78(10), 1-39. doi:10.18637/jss.v078.i10.
# melakukan model ucm dengan periode cycle 3 bulan dan season 1 tahun (12 bulan)
model_ucm <- ucm(formula = train_data ~ 0, data = train_data, level = TRUE, slope= TRUE, irregular = TRUE, cycle = TRUE, cycle.period = 1, season = TRUE, season.length = 12)
## Warning in KFS(modelH, filtering = "state", smoothing = "state"): Model is
## degenerate, diffuse phase did not end.
## Warning in KFS(modelH, filtering = "state", smoothing = "state"): Possible error in diffuse filtering: Number of nonzero elements in Finf is not equal to the number of diffuse states.
## Either model is degenerate or numerical errors occured. Check the model or try changing the tolerance parameter 'tol' or P1/P1inf of the model.
model_ucm
## Call:
## ucm(formula = train_data ~ 0, data = train_data, irregular = TRUE,
## level = TRUE, slope = TRUE, season = TRUE, season.length = 12,
## cycle = TRUE, cycle.period = 1)
##
## Parameter estimates:
## NULL
##
## Estimated variance:
## Irregular_Variance Level_Variance Slope_Variance Season_Variance
## 0.2118 0.0000 0.0000 0.0000
## Cycle_Variance
## 0.0000
Dari estimated variance (tidak termasuk dalam signifikansi secara statistik, pada R ini untuk UCM tidak ada), terlihat bahwa variansi terbesar ada pada elemen irregular yang berarti data cenderung acak. Pada komponen lain sama sekali tidak terdeteksi.
Melihat visualisasinya.
plot(train_data, ylab = "Inflasi")
lines(model_ucm$s.level, col = "blue")
lines(model_ucm$s.lope, col = "red")
lines(model_ucm$s.season, col = "green")
lines(model_ucm$s.cycle, col = "orange")
legend("topright", legend = c("Observed Inflasi","S_level", "S_lope", "S_Season", "S_cycle"), col = c("black","blue", "red", "green", "orange"), lty = 1)
Dari visualisasi terlihat bahwa komponen seasonal muncul yang menunjukkan bahwa ada sedikit pengaruh seasonal pada data.
Kita coba lakukan prediksi dan ukur performa modelnya melalui data test.
forecast_ucm <- predict(model_ucm$model, n.ahead = 12)
## Warning in KFS(model = object, filtering = "none", smoothing = "mean"): Model
## is degenerate, diffuse phase did not end.
## Warning in KFS(model = object, filtering = "none", smoothing = "mean"): Possible error in diffuse filtering: Number of nonzero elements in Finf is not equal to the number of diffuse states.
## Either model is degenerate or numerical errors occured. Check the model or try changing the tolerance parameter 'tol' or P1/P1inf of the model.
forecast_ucm
## Jan Feb Mar Apr May Jun
## 2018 0.45520889 -0.18979111 -0.10979111 -0.46979111 0.13270889 0.44020889
## Jul Aug Sep Oct Nov Dec
## 2018 0.60270889 -0.09729111 -0.14729111 -0.05979111 0.40520889 1.24770889
accuracy(forecast_ucm, test_data)
## ME RMSE MAE MPE MAPE ACF1 Theil's U
## Test set 0.07499944 0.3306376 0.294722 -4.687278 117.1373 0.1131115 0.7414451
Bisa dilihat bahwa nilai MAPE masih cukup besar meskipun sudah cukup berfokus pada seasonal component. Namun dari Theil’s U test dilihat bahwa kedekatannya cukup baik. Dalam kasus ini, nilai Theil’s U sebesar 0.7414451 menunjukkan bahwa model prediksi memiliki kinerja yang lebih baik daripada model naif, tetapi perbedaannya tidak terlalu besar.
Single Moving Average
accuracy(forecast_sma, test_data)
## ME RMSE MAE MPE MAPE MASE
## Training set 0.0006500298 0.3348879 0.2647181 54.80079 157.2193 0.9629546
## Test set -0.2407939812 0.4153585 0.3624803 108.50984 229.2493 1.3185804
## ACF1 Theil's U
## Training set 0.2539532 NA
## Test set 0.1172247 2.192347
Double Moving Average
accuracy(forecast_dma, test_data)
## ME RMSE MAE MPE MAPE MASE
## Training set 0.004341877 0.2017059 0.1669798 12.61824 92.66601 0.7935673
## Test set 0.051402445 0.3423203 0.2512060 103.53636 107.88575 1.1938501
## ACF1 Theil's U
## Training set 0.4658684 NA
## Test set 0.1172247 1.469024
Simple Exponential Smoothing
accuracy(ses_model, test_data)
## ME RMSE MAE MPE MAPE MASE
## Training set -0.0002510842 0.6013507 0.4336756 124.2088 203.3787 0.8639913
## Test set -0.1521595562 0.3823461 0.3244957 127.5349 198.0552 0.6464774
## ACF1 Theil's U
## Training set 0.19022321 NA
## Test set 0.09767548 1.883911
Double Exponential Smoothing (Holt)
accuracy(holt_model, test_data)
## ME RMSE MAE MPE MAPE MASE
## Training set -0.007266415 0.6005672 0.4303020 107.5427 188.2155 0.8572701
## Test set -0.059659531 0.3519530 0.2697014 118.5672 149.1229 0.5373132
## ACF1 Theil's U
## Training set 0.18631427 NA
## Test set 0.08545341 1.623585
Tripe Exponential Smoothing (Holt-Winter)
accuracy(hw_model, test_data)
## ME RMSE MAE MPE MAPE MASE
## Training set -0.01832943 0.4068432 0.3082340 21.756928 103.1204 0.6140799
## Test set 0.12048776 0.3568151 0.3080584 9.150361 121.3180 0.6137301
## ACF1 Theil's U
## Training set 0.07395781 NA
## Test set 0.14759982 0.5524106
UCM
accuracy(forecast_ucm, test_data)
## ME RMSE MAE MPE MAPE ACF1 Theil's U
## Test set 0.07499944 0.3306376 0.294722 -4.687278 117.1373 0.1131115 0.7414451
Dari hasil di atas, MAPE terkecil dan Theil’s U terbaik ada didapatkan dengan metode UCM. Model lain yang cukup baik adalah model Holt-Winter. Hal ini cocok karena sifat data yang cenderung bersifat seasonal, bukan trend. Maka dari itu untuk melakukan prediksi digunakan hasil model UCM.
Pertanyaan terakhir: Perkirakan laju inflasi Nasional pada Desember 2019!
forecast_ucm
## Jan Feb Mar Apr May Jun
## 2018 0.45520889 -0.18979111 -0.10979111 -0.46979111 0.13270889 0.44020889
## Jul Aug Sep Oct Nov Dec
## 2018 0.60270889 -0.09729111 -0.14729111 -0.05979111 0.40520889 1.24770889
Hasilnya adalah 0.40520%.