Modul 5: Analisis Peramalan Time Series

Objectives Praktikum

  1. Praktikan mampu memahami konsep-konsep dan prinsip dasar pada analisis regresi logistik
  2. Praktikan mampu menjalankan prosedur analisis regresi logistik dengan R dan RStudio.
  3. Praktikan mampu melakukan interpretasi hasil analisis regresi logistik dalam konteks PWK.

Review Teori

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.

Berikut ini merupakan tahapan peramalan dalam metode analisis time series :
Berikut ini merupakan tahapan peramalan dalam metode analisis time series :
  • Pilih sekumpulan data time series, yang dibagi menjadi : (1) suatu perangkat data inisialisasi; dan (2) suatu perangkat data untuk uji model.
  • Pilih metode yang sesuai.
  • Awali metode dengan menggunakan data inisialisasi.
  • Gunakan metode untuk melakukan peramalan sepanjang data uji.
  • Modifikasi prosedur inisialisasi dengan cara mencari nilai parameter optimum.
  • Menggunakan model yang sesuai dan melakukan peramalan.

Gambar di bawah ini menunjukkan metode yang dapat digunakan dalam analisis peramalan time series.

Metode Smoothing (Pemulusan)

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.

Metode Dekomposisi

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:

  1. 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 \]

  2. 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 \]

  3. Isolasikan komponen musim dengan merata-ratakannya untuk setiap periode

    • Medial average: Rata-rata setiap periode setelah nilai terbesar dan terkecil dikeluarkan
    • Indeks Season: Nilai medial average yang telah disesuaikan, sehingga rata-rata harganya dalam satu rentang musim sama dengan 100
  4. 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 \]

  5. Kelima, pisahkan hasil tahap kedua dan keempat untuk mendapatkan komponen siklus

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

Handson Praktikum

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.

Rumusan Masalah

Masalah yang akan diteliti adalah sebagai berikut.

  1. Metode dan pendekatan apa yang paling baik digunakan untuk melakukan analisis peramalan terhadap data yang dimiliki?
  2. Bagaimana Anda mengkonfirmasi bahwa model peramalan tersebut memiliki makna yang berarti?
  3. Perkirakan laju inflasi Nasional pada Desember 2019!

Memasukkan Data

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

Mengolah Data

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)

Formatting data date/tanggal

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

Creating Time Series Object

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.

Identifikasi Komponen Pola Data Trend dan Seasonal

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)

  • Teramati (Observed): Ini adalah data deret waktu asli yang ingin Anda pahami. Ini merupakan gabungan dari efek tren, musiman, dan fluktuasi acak yang mendasarinya.
  • Tren (Trend): Komponen ini menangkap arah atau pergerakan jangka panjang dari deret tersebut. Dalam plot ini, tren menunjukkan penurunan secara bertahap dari waktu ke waktu.
  • Musiman (Seasonal): Komponen ini menunjukkan pola atau fluktuasi berulang yang terjadi pada interval waktu yang tetap. Dalam hal ini, pola musiman tampaknya cukup konsisten, dengan puncak dan lembah yang terjadi pada waktu yang hampir sama setiap tahun.
  • Acak (Random): Komponen ini, juga dikenal sebagai residu, mewakili variasi yang tidak dapat dijelaskan dalam data yang tersisa setelah tren dan musiman diperhitungkan. Dalam plot ini, komponen acak relatif kecil dan tidak memiliki pola yang jelas.

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
  • X-squared = 16.829: Ini adalah statistik uji Box-Pierce, yang mengukur seberapa jauh autokorelasi sampel menyimpang dari apa yang diharapkan jika tidak ada autokorelasi dalam populasi.
  • df = 3: Ini adalah derajat kebebasan uji, yang berkaitan dengan jumlah lag yang diuji. Dalam hal ini, uji dilakukan hingga lag ke-3.
  • p-value = 0.0007663: Ini adalah probabilitas untuk mengamati statistik uji sebesar ini atau lebih ekstrim jika tidak ada autokorelasi dalam populasi. Karena p-value sangat kecil (kurang dari 0.05), kita menolak hipotesis nol bahwa tidak ada autokorelasi.

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.

Analisis Smoothing Average

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

Single Moving Average

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

Double Moving Average

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

Forecast Stats

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

    • Nilai RMSE dan MAE memberikan gambaran tentang besarnya kesalahan peramalan. Dalam kasus ini, kedua model memiliki nilai RMSE dan MAE yang cukup tinggi, mengindikasikan kesalahan yang cukup besar.
  • MASE (Mean Absolute Scaled Error):

    • MASE digunakan untuk membandingkan akurasi model dengan model naif (misalnya, peramalan menggunakan nilai terakhir). Nilai MASE lebih dari 1 menunjukkan bahwa model berperforma lebih buruk daripada model naif.
  • 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.

Analisis Exponential Smoothing

Library yang digunakan pun masih sama, yaitu forecast

Simple Exponential Smoothing (SES)

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.

Double Exponential Smoothing (Holt)

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:

  1. ME (Mean Error): -0.007266415
    • Ini menunjukkan kesalahan rata-rata antara nilai aktual dan nilai peramalan. Nilai negatif mengindikasikan bahwa model cenderung meramalkan nilai yang sedikit lebih tinggi daripada nilai aktual.
  2. RMSE (Root Mean Squared Error): 0.6005672
    • RMSE memberikan ukuran kesalahan yang diakar dari rata-rata kuadrat perbedaan antara nilai aktual dan nilai peramalan. Semakin kecil RMSE, semakin baik modelnya.
  3. MAE (Mean Absolute Error): 0.4303020
    • MAE mengukur rata-rata kesalahan absolut antara nilai aktual dan nilai peramalan. Semakin kecil MAE, semakin baik modelnya.
  4. MPE (Mean Percentage Error): 107.5427
    • MPE mengukur rata-rata persentase kesalahan antara nilai aktual dan nilai peramalan. Nilai ini menunjukkan bahwa model memiliki kecenderungan kesalahan yang cukup besar dalam persentase.
  5. MAPE (Mean Absolute Percentage Error): 188.2155
    • MAPE mengukur rata-rata persentase kesalahan absolut antara nilai aktual dan nilai peramalan. Nilai tinggi ini mengindikasikan bahwa model memiliki kesalahan yang signifikan dalam peramalan.
  6. MASE (Mean Absolute Scaled Error): 0.8572701
    • MASE adalah ukuran yang mengkalkulasi kesalahan model relatif terhadap model peramalan naïve (sederhana). Nilai di bawah 1 menunjukkan bahwa model Holt lebih baik dari model naïve.
  7. ACF1 (Autocorrelation of errors at lag 1): 0.18631427
    • ACF1 mengukur autokorelasi dari residual pada lag 1. Nilai mendekati 0 menunjukkan bahwa residual tidak berkorelasi secara signifikan pada lag 1, yang merupakan indikasi bahwa model tidak memiliki pola autokorelasi yang besar.
  8. Theil’s U: NA
    • Tidak tersedia untuk training set.

Test Set:

  1. ME (Mean Error): -0.059659531
    • Kesalahan rata-rata menunjukkan bahwa model cenderung sedikit meramalkan nilai yang lebih tinggi daripada nilai aktual.
  2. RMSE (Root Mean Squared Error): 0.3519530
    • RMSE menunjukkan bahwa kesalahan model pada data test lebih rendah dibandingkan dengan data training, yang bisa menunjukkan bahwa model lebih baik dalam meramalkan data test.
  3. MAE (Mean Absolute Error): 0.2697014
    • MAE menunjukkan kesalahan absolut rata-rata antara nilai aktual dan nilai peramalan, dan ini juga lebih rendah pada data test dibandingkan dengan data training.
  4. MPE (Mean Percentage Error): 118.5672
    • MPE menunjukkan bahwa model memiliki persentase kesalahan rata-rata yang lebih tinggi pada data test dibandingkan dengan data training.
  5. MAPE (Mean Absolute Percentage Error): 149.1229
    • MAPE menunjukkan bahwa kesalahan absolut dalam persentase lebih rendah pada data test dibandingkan dengan data training.
  6. MASE (Mean Absolute Scaled Error): 0.5373132
    • MASE menunjukkan bahwa model lebih baik dalam meramalkan data test dibandingkan dengan data training, dengan nilai di bawah 1 yang signifikan.
  7. ACF1 (Autocorrelation of errors at lag 1): 0.085454341
    • ACF1 pada data test lebih rendah dibandingkan dengan data training, yang menunjukkan bahwa residual pada data test tidak berkorelasi secara signifikan pada lag 1.
  8. Theil’s U: 1.62385
    • Theil’s U adalah ukuran untuk membandingkan performa model dengan peramalan naïve. Nilai di atas 1 menunjukkan bahwa model Holt tidak sebaik model naïve dalam meramalkan data test.

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.

Triple Exponential Smoothing (Holt-Winters Seasonal Model)

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:

  1. ME (Mean Error): -0.01832943
    • Kesalahan rata-rata menunjukkan bahwa model sedikit meramalkan nilai yang lebih tinggi daripada nilai aktual.
  2. RMSE (Root Mean Squared Error): 0.4068432
    • RMSE menunjukkan kesalahan yang diakar dari rata-rata kuadrat perbedaan antara nilai aktual dan nilai peramalan. Nilai ini relatif rendah, yang menunjukkan bahwa model cukup baik.
  3. MAE (Mean Absolute Error): 0.3082340
    • MAE menunjukkan rata-rata kesalahan absolut antara nilai aktual dan nilai peramalan. Nilai ini menunjukkan bahwa kesalahan absolut rata-rata cukup kecil.
  4. MPE (Mean Percentage Error): 21.759628
    • MPE menunjukkan rata-rata persentase kesalahan antara nilai aktual dan nilai peramalan. Nilai ini cukup besar, menunjukkan bahwa model memiliki beberapa kesalahan dalam persentase.
  5. MAPE (Mean Absolute Percentage Error): 103.1204
    • MAPE menunjukkan rata-rata persentase kesalahan absolut antara nilai aktual dan nilai peramalan. Nilai yang tinggi menunjukkan kesalahan yang signifikan dalam persentase.
  6. MASE (Mean Absolute Scaled Error): 0.6140799
    • MASE adalah ukuran kesalahan yang dinormalkan terhadap kesalahan model peramalan naïve. Nilai di bawah 1 menunjukkan bahwa model lebih baik daripada model naïve.
  7. ACF1 (Autocorrelation of errors at lag 1): 0.07395781
    • ACF1 menunjukkan autokorelasi residual pada lag 1. Nilai mendekati 0 menunjukkan bahwa residual tidak berkorelasi secara signifikan pada lag 1, yang merupakan indikasi bahwa model tidak memiliki pola autokorelasi yang besar.
  8. Theil’s U: NA
    • Tidak tersedia untuk training set.

Test Set:

  1. ME (Mean Error): 0.12048776
    • Kesalahan rata-rata menunjukkan bahwa model sedikit meramalkan nilai yang lebih rendah daripada nilai aktual pada data test.
  2. RMSE (Root Mean Squared Error): 0.3568151
    • RMSE menunjukkan bahwa kesalahan model pada data test lebih rendah dibandingkan dengan data training, menunjukkan bahwa model lebih baik dalam meramalkan data test.
  3. MAE (Mean Absolute Error): 0.3080584
    • MAE menunjukkan kesalahan absolut rata-rata antara nilai aktual dan nilai peramalan, yang hampir sama dengan nilai pada data training.
  4. MPE (Mean Percentage Error): 9.150361
    • MPE menunjukkan rata-rata persentase kesalahan yang lebih rendah pada data test dibandingkan dengan data training, menunjukkan perbaikan dalam peramalan.
  5. MAPE (Mean Absolute Percentage Error): 121.3180
    • MAPE menunjukkan bahwa kesalahan absolut dalam persentase sedikit lebih tinggi pada data test dibandingkan dengan data training.
  6. MASE (Mean Absolute Scaled Error): 0.6137301
    • MASE menunjukkan bahwa model sedikit lebih baik dalam meramalkan data test dibandingkan dengan data training, dengan nilai di bawah 1 yang signifikan.
  7. ACF1 (Autocorrelation of errors at lag 1): 0.14759982
    • ACF1 pada data test sedikit lebih tinggi dibandingkan dengan data training, menunjukkan sedikit autokorelasi dalam residual.
  8. Theil’s U: 0.5524106
    • Theil’s U adalah ukuran untuk membandingkan performa model dengan peramalan naïve. Nilai di bawah 1 menunjukkan bahwa model Holt-Winters lebih baik dari model naïve dalam meramalkan data test.

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.

Analisis Dekomposisi (Unobserved Component Model)

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.

Review Ulang Forecast Statistics

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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%.