
Kelompok 3 Paralel 2
| NIM | Nama |
|---|---|
| G14190060 | Aryo Seto Ramadhan |
| G1401201013 | Dhiya Ulayya Tsabitah |
| G1401201025 | Reza Arya Sukma |
| G1401201041 | Febrian Adhitya Cahya Belardi |
| G1401201081 | Zakiyah Azzahra |
Pendahuluan
Menjadi mata uang tertua di dunia, poundsterling atau GBP merupakan mata uang keempat yang sering diperdagangkan pada pasar valuta asing setelah dolar Amerika Serikat (USD), mata uang negara Uni Eropa (EUR), dan mata uang negara Jepang (JPY) (Prayitno 2013). Adapun nilai tukar rupiah terhadap GBP memiliki dampak yang luas bagi kelangsungan perekonomian negara. Oleh karena itu, besar kecilnya nilai tukar mata uang GBP perlu dilakukan pemantauan secara berkala (Nafisah 2017). Hal ini dilakukan untuk memastikan perekonomian dalam keadaan yang stabil ataupun sebaliknya (Bau et al. 2016).
Pada dasarnya nilai kurs mata uang bersifat fluktuatif terhadap segala situasi dan kondisi (Sudarmanto et al. 2021). Pergerakan ini dapat dipengaruhi oleh beberapa faktor makroekonomi, seperti tingginya angka pengangguran dan kemiskinan, jumlah uang yang beredar, dan sebagai kasus terbaru yaitu pandemi Covid-19 (Made 2020). Per tanggal 2 Maret 2020, sejak pertama kali diumumkan sebagai pandemi, nilai rupiah mengalami pelemahan sebanyak 3,7% (Lestari dan Anggaraeni 2021). Adapun nilai tukar rupiah terhadap GBP mengalami penurunan 1% menyentuh angka 19.494 rupiah dan menurun secara signifikan. Kondisi di mana nilai tukar rupiah yang terdepresiasi secara terus-menerus dapat berdampak pada kelangsungan perekonomian negara (Sari dan Fakhruddin 2016). Salah satunya sebagai pemicu terjadinya inflasi (Noor 2011). Selain itu, nilai tukar berperan besar terhadap perubahan harga saham badan usaha ketika Indonesia mengalami krisis ekonomi (Amrillah 2016).
Maka dari itu, peneliti mengambil topik peramalan nilai tukar rupiah terhadap mata uang GBP dalam konteks kurs jual untuk mengetahui pola data deret waktu dan meramalkan nilai tukar rupiah terhadap GBP selama 14 periode ke depan agar dapat membantu pelaku ekonomi dalam membuat keputusan yang tepat dengan menggunakan metode ARIMA pada rentang tahun 2021. Metode yang digunakan, ARIMA, merupakan sebuah metode peramalan data deret waktu yang menggunakan sifat dan karakteristik data historis untuk meramalkan data deret waktu selanjutnya.
Tinjauan Pustaka
Autoregressive Integrated Moving Average (ARIMA)
Metode ARIMA(p,d,q) merupakan model peramalan time series pada data variabel dependen historis untuk memperoleh hasil peramalan jangka pendek yang akurat (Purnama dan Juliana 2020). Dalam perhitungannya, ARIMA mengabaikan variabel independen dengan syarat data dalam kondisi yang stasioner (Hendrawan et al. 2020). Oleh karena itu, terdapat parameter d atau differencing untuk menstasionerkan data aktual (Ilyas et al. 2022). Adapun model ARIMA dirumuskan dengan notasi p yang menunjukan orde atau derajat Autoregressive (AR) dan q menunjukan orde atau derajat Moving Average (MA) dengan bentuk (Lin dan Huang 2021):
\(\displaystyle \phi_p(B)Y_{t}^{*} = \theta_0 + \theta_q(B)e_t\)
Keterangan :
\(Y_{t}^{*}= data\ deret\ waktu\ yang\ telah\ dilakukan\ differencing\)
\(\phi_p(B)=1-\phi_1B-\phi_1B^{2}-...-\phi_1B^{p}\)
\(\phi_q(B)=1-\phi_1B-\phi_1B^{2}-...-\phi_1B^{q}\)
\((1-B)^{d}=differencing\ non-musiman\ pada\ orde\ ke-d\)
\(e_t = nilai\ kesalahan\ pada\ waktu\ ke-t\)
Mean Absolute Percentage Error (MAPE)
MAPE merupakan pengukuran kesalahan yang menghitung persentase penyimpangan antara data aktual dengan data peramalan (Krisma et al. 2019). Sebagai metode untuk mengukur tingkat akurasi model, hasil prediksi dinyatakan baik apabila nilai kurang dari 10% (Ayuni dan Fitrianah 2019). Metode ini relatif sering digunakan dalam perbandingan error karena dapat memberikan hasil yang relatif akurat (Nugroho dan Purqon 2015). Adapun rumus persamaan MAPE sebagai berikut :
\(\displaystyle MAPE = \frac{1}{n} \sum_{i = 1}^{n} |\frac{y'_i - y_i}{y_i}|\) x \(100\)
Keterangan :
\(n : Jumlah data\)
\(y'_i : Hasil\ prediksi\ pada\ indeks\ ke-i\)
\(y_i : Nilai\ aktual\ pada\ indeks\ ke-i\)
Prosedur Analisis
Pada proses menganalisis data, peneliti menggunakan bantuan software R Studio untuk memperoleh hasil yang lebih akurat. Berikut merupakan langkah-langkah dalam menganalisis data kurs jual poundsterling terhadap rupiah :
1. Melakukan eksplorasi data untuk melihat pola kestasioneran data
2. Splitting atau membagi data menjadi data training dan testing berdasarkan pola yang cenderung mirip. Pada konteks dataset, data training terbentuk dari 145 data amatan dan data testing terbentuk dari 61 data sisanya.
3. Pemodelan ARIMA
a. Memeriksa kestasioneran data dalam rataan dengan plot ACF, uji formal dengan ADF test. Apabila data belum stasioner dalam rataan, perlu dilakukan differencing terlebih dahulu.
b. Mengidentifikasi model ARIMA dengan plot Autocorrelation Function (ACF), Partial Autocorrelation Function (PACF), dan Extended ACF (EACF). Adapun identifikasi ini bertujuan untuk memperoleh beberapa model tentatif (Rahmawati et al. 2021).
c. Menduga parameter dan pemeriksaan signifikansi parameter
d. Memilih model terbaik dengan membandingkan nilai Aike Information Criterion (AIC) dan memilih model dengan AIC minimum. Metode AIC merupakan metode yang digunakan untuk memiliki model
e. Melakukan overfitting terhadap satu model tentatif terbaik, pemeriksaan signifikansi parameter kedua serta perbandingan nilai AIC terminimum.
f. Melakukan uji diagnostik sisaan terhadap model terbaik menggunakan Uji Kolmogorov-Smirnov untuk asumsi normalitas, Uji Ljung-Box untuk asumsi kebebasan sisaan, dan Uji T untuk asumsi nilai tengah sisaan sama dengan nol.
g. Melakukan validasi model terbaik pada data testing serta evaluasi model dengan Mean Absolute Percentage Error (MAPE).
4. Melakukan peramalan 14 periode ke depan.
Packages
Berikut adalah package yang kami gunakan dalam analisis kali ini.
library(readxl)
library(TTR)
library(forecast)
library(tseries)
library(TSA)
library(dynlm)
library(lmtest)
library(imputeTS)
library(stats)
library(MASS)
library(kableExtra)
library(padr)
library(astsa)
library(tfarima)
library(ggplot2)
Data
Data yang digunakan adalah data sekunder harian mengenai kurs jual rupiah terhadap mata uang poundsterling pada periode waktu Maret hingga Desember 2021. Adapun data yang dianalisis terdiri atas satu peubah numerik berjumlah 206 amatan. Data tersebut diperoleh dari website resmi Bank Indonesia yang kemudian akan dianalisis lebih lanjut menggunakan metode ARIMA.
Import Data
dataset <- read_excel("D:/KULIAH/TAHUN Ke-3/Semester 5/Metode Peramalan Deret Waktu/DATA KURS FIX MPDW.xlsx")
str(dataset)
## tibble [206 × 1] (S3: tbl_df/tbl/data.frame)
## $ GBP: num [1:206] 20177 20118 20183 20208 20240 ...
data <- dataset$GBP
Eksplorasi Data
Mengubah Data Menjadi Time Series
data.ts <- ts(data)
Eksplorasi Data
Eksplorasi data dilakukan untuk melihat pola data time series. Pola yang terlihat berpengaruh terhadap metode analisis yang didigunakan dan juga berguna untuk menentukan data training dan juga data testing.
Plot Data Kurs Jual
plot(data.ts, xlab ="Waktu", ylab = "Data Kurs (Ribu)", col="red", main = "Plot Data Kurs Jual")
points(data.ts)
Plot di atas menunjukkan bahwa nilai jual kurs GBP memilikki trend menurun setiap waktunya.
Splitting Data (Training dan Testing)
Splitting data digunakan untuk membagi data awal menjadi dua bagian yaitu, data training dan testing. Data training digunakan untuk membangun model dan data testing digunakan untuk memvalidasi hasil pemodelan. Berdasarkan eksplorasi data yang telah dilakukan sebelumnya akan dilakukan splitting data dimana data training dimulai dari Maret hingga Oktober 2021 (145 amatan) dan untuk data testing dimulai dari Oktober hingga Desember 2021 (61 amatan)
Splitting Data Kurs Jual
data.train <- ts(data[1:145])
data.test <- ts(data[146:206], start = 146)
#Time Series Data
training.ts<-ts(data.train)
testing.ts<-ts(data.test)
Plot Pembagian Training Testing
Berikut merupakan visualisasi dari splitting data yang telah dilakukan. Garis biru menunjukkan data training dan garis merah menunjukkan data testing.
## Plot Data Training dan testing kurs
ts.plot(data.ts, xlab = "Periode", ylab ="Data Inflasi (Persen)",
main = "Plot Data Training dan Data Testing")
lines(data.train, col = "blue")
lines(data.test, col="Red")
legend(-0.9,22100,c("Data Training","Data Testing"),
lty=8, col=c("blue","red"), cex=0.8)
abline(v=146, col=c("black"), lty=1, lwd=1)
Plot Data Training dan Testing Kurs Jual
par(mfrow=c(2,1))
plot(data.train, xlab ="Waktu", ylab = "Data Kurs (Ribu)", col="red", main = "Plot Data Training")
points(data.train)
plot(data.test, xlab ="Waktu", ylab = "Data Kurs (Ribu)", col="red", main = "Plot Data Testing")
points(data.test)
Setelah dilakukan splitting, baik data testing maupun training cenderung memiliki trend negatif.
Pemodelan Arima
Cek Kestasioneran Data
Secara Eksploratif
acf(data.train)
pacf(data.train)
Secara eksplorasi, data tidak stasioner karena jika ditinjau dari plot ACF terbentuk
Uji Formal
Augmented Dickey-Fuller (ADF) Test digunakan untuk menguji secara akurat apakah sebuah data stasioner atau tidak dengan hipotesis sebagai berikut.
\(\displaystyle H_0 : Data\ tidak\ stasioner\)
\(\displaystyle H_1 : Data\ stasioner\)
adf.test(data.train)
##
## Augmented Dickey-Fuller Test
##
## data: data.train
## Dickey-Fuller = -1.7439, Lag order = 5, p-value = 0.6831
## alternative hypothesis: stationary
Didapat nilai p−value(0.6831) > 0.05 maka tak tolak H0 pada taraf nyata 5% sehingga dapat dikatakan bahwa cukup bukti untuk mengatakan bahwa data tidak stasioner sehingga perlu penanganan berupa differencing.
Differencing 1
data.dif1<-diff(data.train,differences = 1)
plot.ts(data.dif1,lty=1,ylab= "Data Inflasi Pembedaan 1", main="Plot Differencing Data Kurs")
Uji Kestasioneran Data
adf.test(data.dif1)
## Warning in adf.test(data.dif1): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: data.dif1
## Dickey-Fuller = -6.0691, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
Didapat nilai p−value(0.01) < 0.05 maka tolak H0 pada taraf nyata 5% sehingga dapat dikatakan bahwa cukup bukti untuk mengatakan bahwa data telah stasioner setelah melalui porses differencing.
Plot Data ACF & PACF
acfdif <- acf(data.dif1, lag.max = 24)
pacfdif <- pacf(data.dif1, lag.max = 24)
Jika ditinjau dari plot ACF dan PACF tidak terdapat cuts off pada kedua plot sehingga tidak ada model yang dapat ditentukan.
Plot Data EACF
eacf(data.dif1)
## AR/MA
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## 0 o o o o o o o o o o o o o o
## 1 x o o o o o o o o o o o o o
## 2 x x o o o o o o o o o o o o
## 3 x o o o o o o o o o o o o o
## 4 x x x o o o o o o o o o o o
## 5 x o x o o o o o o o o o o o
## 6 x o x x o x o o o o o o o o
## 7 o x o x o o x o o o o o o o
Berdasarakan plot ** EACF** diperoleh dua model, yaitu Arima(0,1,1) dan Arima(1,1,1) sebagai model tentatif.
Pemodelan
model1 <- Arima(data.dif1, order=c(0,0,1), method="ML")
model2 <- Arima(data.dif1, order=c(1,0,1), method="ML")
Penduga Parameter Model
Arima(0,1,1)
summary(model1)
## Series: data.dif1
## ARIMA(0,0,1) with non-zero mean
##
## Coefficients:
## ma1 mean
## -0.0128 -4.5817
## s.e. 0.0885 5.9316
##
## sigma^2 = 5271: log likelihood = -820.36
## AIC=1646.72 AICc=1646.89 BIC=1655.63
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set -0.004889663 72.0954 57.04043 Inf Inf 0.6892305 0.000664753
lmtest::coeftest((model1))
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ma1 -0.012801 0.088526 -0.1446 0.8850
## intercept -4.581735 5.931583 -0.7724 0.4399
Arima(1,1,1)
summary(model2)
## Series: data.dif1
## ARIMA(1,0,1) with non-zero mean
##
## Coefficients:
## ar1 ma1 mean
## 0.8109 -0.9087 -4.4045
## s.e. 0.1006 0.0689 2.9854
##
## sigma^2 = 5160: log likelihood = -818.39
## AIC=1644.79 AICc=1645.08 BIC=1656.67
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0.1051731 71.08231 55.96397 Inf Inf 0.6762235 0.05622012
lmtest::coeftest((model2))
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 0.81093 0.10060 8.0610 7.568e-16 ***
## ma1 -0.90869 0.06889 -13.1905 < 2.2e-16 ***
## intercept -4.40454 2.98543 -1.4753 0.1401
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Perbandingan Kebaikan Model
modelaccuracy<-data.frame(
"Model"=c("ARIMA(0,1,1)", "ARIMA(1,1,1)"),
"AIC"=c(model1$aic, model2$aic),
"BIC"=c(model1$bic, model2$bic),
"Signifikansi"=c("Tidak Signifikan","Signifikan"))
modelaccuracy
Berdasarkan tabel tersebut, dari kedua model tentatif yang terbentuk, ARIMA(1,1,1) memiliki tingkat signifikan yang menyeluruh untuk semua parameternya. Dan apabila dibandingkan dengan model lainnya, ARIMA(1,1,1) memiliki nilai AIC terkecil sebesar 1644.62 yang membuat model ini (ARIMA(1,1,1)) menjadi model terbaik.
Diagnostik Model
Overfitting
Overfitting merupakan tahapan perbandingan model dengan model lainnya yang berbeda satu orde diatasnya (Wisisono et al. 2018). Overfitting dilakukan dengan menaikkan orde AR(p) dan MA(q) bergantian dari model terbaik yang telah ditentukan sebelumnya yaitu ARIMA(1,1,1). Adapun kandidat model untuk perlakuan overfitting adalah ARIMA(2,1,1) dan ARIMA(1,1,2)
model2a <- Arima(data.dif1, order=c(2,0,1), method="ML")
model2b <- Arima(data.dif1, order=c(1,0,2), method="ML")
Model Arima(1,1,1)
summary(model2)
## Series: data.dif1
## ARIMA(1,0,1) with non-zero mean
##
## Coefficients:
## ar1 ma1 mean
## 0.8109 -0.9087 -4.4045
## s.e. 0.1006 0.0689 2.9854
##
## sigma^2 = 5160: log likelihood = -818.39
## AIC=1644.79 AICc=1645.08 BIC=1656.67
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0.1051731 71.08231 55.96397 Inf Inf 0.6762235 0.05622012
coeftest(model2)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 0.81093 0.10060 8.0610 7.568e-16 ***
## ma1 -0.90869 0.06889 -13.1905 < 2.2e-16 ***
## intercept -4.40454 2.98543 -1.4753 0.1401
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Model Arima(2,1,1)
summary(model2a)
## Series: data.dif1
## ARIMA(2,0,1) with non-zero mean
##
## Coefficients:
## ar1 ar2 ma1 mean
## 0.8462 -0.0778 -0.8872 -4.4268
## s.e. 0.1156 0.0869 0.0825 2.9871
##
## sigma^2 = 5168: log likelihood = -818
## AIC=1646 AICc=1646.43 BIC=1660.85
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set -0.0008694306 70.88068 55.4863 NaN Inf 0.6704516 -0.003598524
coeftest(model2a)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 0.846216 0.115621 7.3189 2.501e-13 ***
## ar2 -0.077786 0.086883 -0.8953 0.3706
## ma1 -0.887180 0.082539 -10.7486 < 2.2e-16 ***
## intercept -4.426797 2.987122 -1.4820 0.1384
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Model Arima(1,1,2)
summary(model2b)
## Series: data.dif1
## ARIMA(1,0,2) with non-zero mean
##
## Coefficients:
## ar1 ma1 ma2 mean
## 0.7580 -0.8041 -0.0783 -4.4240
## s.e. 0.1326 0.1492 0.0922 2.9829
##
## sigma^2 = 5171: log likelihood = -818.04
## AIC=1646.08 AICc=1646.51 BIC=1660.93
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0.02118501 70.9016 55.55722 NaN Inf 0.6713086 0.002150356
coeftest(model2b)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 0.757961 0.132560 5.7179 1.079e-08 ***
## ma1 -0.804110 0.149159 -5.3910 7.008e-08 ***
## ma2 -0.078296 0.092203 -0.8492 0.3958
## intercept -4.424045 2.982870 -1.4832 0.1380
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Perbandingan Kebaikan ModelOverfitting
modelaccuracy<-data.frame(
"Model"=c("ARIMA(1,1,1)", "ARIMA(2,1,1)", "ARIMA(1,1,2)"),
"AIC"=c(model2$aic, model2a$aic, model2b$aic),
"BIC"=c(model2$bic, model2a$bic, model2b$bic),
"Signifikansi"=c("Signifikan","Tidak Signifikan","Tidak Signifikan"))
modelaccuracy
Terlihat dari hasil overfitting pada tabel di atas diperoleh bahwa model ARIMA(1,1,1) masih menjadi model terbaik. Terbukti dari perbandingan nilai siginifikan keseluruhan parameter dan nilai AIC yang tergolong kecil apabila dibandingkan dengan kedua model lainnya.
Uji Diagnostik
Diagnostik Model : Eksploratif
sisaan <- model2$residuals
par(mfrow = c(2,2))
qqnorm(sisaan)
qqline(sisaan, col = "blue", lwd = 2)
plot(sisaan, type="o",
ylab = "Sisaan", xlab = "Order", main = "Sisaan vs Order")
abline(h = 0, col='blue')
acf(sisaan, lag.max=100)
pacf(sisaan, lag.max=100)
Terlihat dari hasil eksplorasi di atas, plot normal Q-Q terlihat bahwa banyak amatan yang di sepanjang garis QQ-plot distribusi normal . Dilihat dari plot sisaan vs order , titik pada plot kebebasan sisaan kebanyakan di sekitar titik nol. Namun, terdapat beberapa titik amatan yang terletak cukup jauh dari titik nol. Sehingga, belum dapat disimpulkan apakah terdapat autokorelasi atau tidak. Berdasarkan plot ACF dan PACF , baik dari plot ACF maupun plot PACF, tidak terdapat garis vertikal di lag tertentu yang melebihi tinggi garis biru horizontal. Artinya, tidak terdapat autokorelasi pada model. Oleh karena itu, berdasarkan hasil tersebut, masih dibutuhkan pengecekan sisaan model yang lebih akurat dengan menggunakan uji formal.
Diagnostik Model : Uji Formal
Uji formal terhadap sisaan digunakan untuk melakukan pengecekan kembali secara spesifik apakah asumsi dari sisaan model sudah terpenuhi. Beberapa uji yang digunakan adalah uji Shapiro-Wilk untuk menguji normalitas model, uji Ljung-Box untuk melihat kebebasan sisaan, serta uji T untuk menguji asumsi apakah nilai tengah sama dengan nol.
Uji Shapiro Wilk
\(\displaystyle H_0 : Sisaan\ menyebar\ secara\ normal\)
\(\displaystyle H_1 : Sisaan\ tidak\ menyebar\ secara\ normal\)
shapiro.test(sisaan)
##
## Shapiro-Wilk normality test
##
## data: sisaan
## W = 0.98953, p-value = 0.3566
Berdasarkan uji normalitas dengan Uji Shapiro Wilk diperoleh nilai P−value>0.05 sehingga dapat dikatakan bahwa data menyebar secara normal.
Uji Ljung Box
\(\displaystyle H_0 : Sisaan \ saling\ bebas\)
\(\displaystyle H_1 : Sisaan\ tidak\ saling\ bebas\)
Box.test(sisaan, type = "Ljung")
##
## Box-Ljung test
##
## data: sisaan
## X-squared = 0.46469, df = 1, p-value = 0.4954
Berdasarkan uji autokorelasi dengan L-Jung Box Test diperoleh nilai P−value>0.05 sehingga dapat dikatakan bahwa tidak terdapat korelasi sisaan antar lagnya.
Uji T
\(\displaystyle H_0 : Rataan\ sissan\ sama\ dengan 0\)
\(\displaystyle H_1 : Rataan\ sisaan\ tidak\ sama\ dengan\ 0\)
t.test(sisaan, mu = 0, conf.level = 0.95)
##
## One Sample t-test
##
## data: sisaan
## t = 0.017693, df = 143, p-value = 0.9859
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## -11.64467 11.85502
## sample estimates:
## mean of x
## 0.1051731
Berdasarkan uji rataan dengan uji T diperoleh nilai P−value=0>0.05, sehingga dapat dikatakan bahwa sisasaannya sama dengan 0.
Validasi Model
ramalan <- forecast(Arima(data.train, order=c(1,1,1),method="ML",include.drift = TRUE),h = length(data.test))
data.ramalan <- ramalan$mean
data.ramalan.ts <- ts(data.ramalan, start = 146)
plot(ramalan,col="black",col.sub ="black",col.axis="black",
col.lab="black",col.main="black",lwd=2)
box(col="black",lwd=2)
ts.plot(data.ts, ylab = "Data Kurs", col="black",lwd=2,main="Forecasting ARIMA(1,1,1)",gpars = list(col.main="black",col.axis="black",col.sub="black"))
lines(data.ramalan.ts, col = "blue",lwd=2)
lines(data.test, col = "red", lwd =2)
legend(100,16400,c("Data Training", "Data Testing","Data Forecast ARIMA"),
lwd=2, col=c("black","red","blue"), cex=0.8)
box(col="black",lwd=2)
perbandingan.temp<-matrix(data=c(data.test[1:10], data.ramalan[1:10]), nrow = 10, ncol = 2)
colnames(perbandingan.temp)<-c("Aktual","Hasil Forecast")
head(perbandingan.temp)
## Aktual Hasil Forecast
## [1,] 19409.94 19518.68
## [2,] 19439.03 19518.57
## [3,] 19445.60 19517.64
## [4,] 19490.78 19516.05
## [5,] 19428.94 19513.94
## [6,] 19478.72 19511.39
error <- data.frame(data.test)-data.frame(data.ramalan[1:61])
## SSE (Sum Square Error)
SSE <- sum(error^2, na.rm = T)
## MSE (Mean Squared Error)
MSE<- sapply(error^2, mean, na.rm = T)
## RMSE (Root Mean Square Error)
RMSE <- sqrt(MSE)
## MAD (Mean Absolute Deviation)
MAD <- sapply(abs(error), mean, na.rm = T)
## MAPE (Mean Absolute Percentage Error)
r.error <- (error/data.frame(data.test))*100 # Relative Error
MAPE <- sapply(abs(r.error), mean, na.rm = T)
akurasifarima <- data.frame(
"Ukuran Keakuratan" = c("SSE", "MSE", "MAPE", "RMSE", "MAD"),
"Forecasting" = c(SSE, MSE, MAPE, RMSE, MAD))
akurasifarima
Untuk menentukan model terbaik, perbandingan tidak hanya dilakukan secara eksploratif, tetapi juga melalui nilai keakuratan model. Berdasarkan nilai interpretasi keakuratan model pada Tabel 7, terlihat nilai MAPE berada di nilai 0.743% atau lebih kecil dari MAPE 10%. Di mana apabila nilai MAPE 10%, maka hasil peramalan dapat dikatakan sangat akurat. Semakin kecil nilai MAPE, maka akan semakin akurat model tersebut dalam melakukan peramalan. Oleh karena itu, dapat ditarik kesimpulan bahwa** peramalan model ARIMA terbaik tepat untuk digunakan pada model data sebagai model peramalan terbaik.
Peramalan
Peramalan dilakukan dengan model terbaik yang telah diperoleh dan divalidasi pada poin 3.5 yaitu ARIMA(1,1,1) untuk 14 periode kedepan. Persamaan yang digunakan dapat diperoleh sebagai berikut:
model <- Arima(data.ts, order=c(1,1,1),method="ML",include.drift = TRUE)
coeftest(model)
##
## z test of coefficients:
##
## Estimate Std. Error z value Pr(>|z|)
## ar1 0.829759 0.083573 9.9285 < 2e-16 ***
## ma1 -0.921550 0.056178 -16.4041 < 2e-16 ***
## drift -4.835577 2.332838 -2.0728 0.03819 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ramal <- forecast(model, h=14)
ramal
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 207 19277.43 19188.08 19366.77 19140.79 19414.07
## 208 19258.51 19137.81 19379.20 19073.92 19443.09
## 209 19241.98 19100.23 19383.74 19025.19 19458.77
## 210 19227.45 19069.93 19384.97 18986.55 19468.36
## 211 19214.57 19044.54 19384.60 18954.53 19474.60
## 212 19203.06 19022.71 19383.40 18927.25 19478.87
## 213 19192.68 19003.58 19381.79 18903.47 19481.89
## 214 19183.25 18986.52 19379.97 18882.38 19484.11
## 215 19174.60 18971.12 19378.08 18863.40 19485.79
## 216 19166.60 18957.03 19376.17 18846.09 19487.11
## 217 19159.13 18944.00 19374.27 18830.11 19488.16
## 218 19152.12 18931.83 19372.41 18815.22 19489.02
## 219 19145.48 18920.38 19370.58 18801.21 19489.74
## 220 19139.14 18909.50 19368.78 18787.94 19490.34
plot(ramal)
Kesimpulan
Peramalan data kurs jual Poundsterling terhadap rupiah periode Maret 2021 - Desember 2021 memiliki pola trend yang menurun. Analisis yang digunakan untuk dapat mengetahui nilai kurs jual poundsterling terhadap rupiah pada periode selanjutnya, dapat digunakan pemodelan ARIMA. Model ARIMA terbaik yang didapatkan yaitu model ARIMA (1,1,1) karena memiliki akurasi nilai MAPE yang dikategorikan sangat baik yaitu 0.743% dan parameter yang signifikan. Peramalan nilai kurs jual Poundsterling terhadap rupiah untuk 14 periode ke depan dengan ARIMA(1,1,1) terus mengalami penurunan setiap harinya.