PEMODELAN IHSG DENGAN ARIMA SERTA ANALISIS OUTLIER DAN INTERVENSI
LAPORAN PRAKTIKUM MATA KULIAH METODE PERAMALAN
Moh. Zulfikar Satrio Adi
Indeks Harga Saham Gabungan (IHSG) merupakan salah satu indeks pasar saham yang digunakan oleh Bursa Efek Indonesia. Setiap hari IHSG mengalami fluktuasi secara tidak pasti dan menjadikan kegiatan perdagangan saham beresiko tinggi. Fluktuasi yang tinggi pada data IHSG kemungkinan besar akan memiliki nilai pencilan. Pada beberapa hari terakhir, terdapat kebijakan pemerintah yang ramai dan menimbulkan sentimen negatif sehingga membuat saham-saham di Indonesia menjadi anjlok termasuk IHSG. Kebijakan pemerintah tersebut adalah pengesahan RUU TNI yang disahkan pada tanggal 20 Maret 2025. Semenjak RUU TNI disahkan, nilai IHSG mengalami penurunan dan pada awal bulan April 2025 mengalami penurunan yang sangat tinggi. Berdasarkan karakteristik dari data IHSG yang selalu mengalami perubahan perlu dilakukan peramalan. Peramalan pada data close price IHSG dapat membantu investor dalam mengambil keputusan dalam berinvestasi.
Berdasarkan permasalahan pada data IHSG terdapat beberapa pertanyaan yang ditetapkan:
library(tseries)
library(FSA)
library(knitr)
library(TSA)
library(lmtest)
library(forecast)
library(MLmetrics)
library(xts)
library(readxl)
# Import data
ihsg = read_excel("Moh. Zulfikar Satrio Adi - ihsg 2.xlsx")
str(ihsg)tibble [311 × 2] (S3: tbl_df/tbl/data.frame)
$ Tanggal : POSIXct[1:311], format: "2023-12-12" "2023-12-13" ...
$ Harga Saham Penutup: num [1:311] 7125 7075 7176 7191 7120 ...
tibble [311 × 2] (S3: tbl_df/tbl/data.frame)
$ Tanggal : Date[1:311], format: "2023-12-12" "2023-12-13" ...
$ Harga Saham Penutup: num [1:311] 7125 7075 7176 7191 7120 ...
[1] 0
[1] FALSE
[1] 311
Hasil eksplorasi data menggunakan plot time series memberikan grafik sebagai berikut:
plot(ihsg$Tanggal, ihsg$`Harga Saham Penutup`,
type = "l",
col = "blue",
main = "Plot Deret Waktu IHSG",
xlab = "Tanggal",
ylab = "Harga Saham Penutup")Gambar 4.1. Plot Time Series IHSG
Dari plot IHSG, terlihat bahwa pergerakan data tidak acak. Di awal periode (akhir 2023 sampai awal 2024), nilainya relatif stabil di kisaran 7100–7300 dengan fluktuasi yang masih wajar. Setelah itu, sekitar pertengahan hingga akhir 2024, IHSG sempat naik cukup jelas hingga mendekati 7800, yang menunjukkan adanya kecenderungan tren naik.
Namun setelah mencapai titik tersebut, pola berubah menjadi tren menurun yang cukup tajam hingga awal 2025. Penurunannya juga tidak halus, tetapi disertai fluktuasi yang lebih besar dan beberapa penurunan drastis dalam waktu singkat. Hal ini mengindikasikan adanya kejadian khusus (shock) yang memengaruhi pergerakan IHSG.
Selain itu, fluktuasi di bagian akhir data terlihat lebih besar dibandingkan sebelumnya, yang menunjukkan variansi yang tidak stabil. Secara keseluruhan, karena adanya tren dan perubahan pola yang cukup jelas, data ini belum stasioner dalam rata-rata, sehingga perlu dilakukan pengujian dan transformasi lebih lanjut sebelum pemodelan.
Hasil uji stasioneritas rata-rata menggunakan Augmented Dickey-Fuller Test memberikan hasil sebagai berikut:
Augmented Dickey-Fuller Test
data: ihsg$`Harga Saham Penutup`
Dickey-Fuller = -0.59149, Lag order = 6, p-value = 0.9773
alternative hypothesis: stationary
Hipotesis dari uji ini adalah:
Hasil test menunjukkan bahwa p-value bernilai 0.9773, maka dengan taraf nyata 0.05, keputusan yang diambil adalah gagal menolak H₀, yang berarti deret waktu memiliki akar unit atau tidak stasioner berdasarkan rata-rata. Hal ini sejalan dengan pola pada plot deret waktu sebelumnya yang menunjukkan adanya tren dan perubahan pola yang cukup jelas.
Oleh karena itu, untuk mengatasi ketidakstasioneran tersebut, dilakukan proses differencing agar data menjadi stasioner sebelum dilakukan pemodelan lebih lanjut.
# Differencing orde 1
diff1 <- diff(ihsg$`Harga Saham Penutup`)
# Plot hasil differencing
plot(diff1,
type = "l",
col = "blue",
main = "Differencing Orde 1",
ylab = "Nilai")Gambar 4.2. Plot Time Series setelah Differencing Orde 1
Augmented Dickey-Fuller Test
data: diff1
Dickey-Fuller = -7.703, Lag order = 6, p-value = 0.01
alternative hypothesis: stationary
Hasil pengujian menunjukkan nilai p-value sebesar 0.01, sehingga dengan taraf nyata 0.05 dapat disimpulkan bahwa hipotesis nol ditolak dan data telah stasioner dalam rata-rata. Dengan demikian, dapat ditentukan bahwa orde differencing yang digunakan dalam pemodelan deret waktu adalah sebesar satu (d = 1).
Identifikasi model dilakukan dengan melihat plot ACF dan PACF yang dihasilkan oleh data setelah differencing.
Gambar 4.3. Plot ACF setelah Differencing 1 Kali
Gambar 4.4. Plot PACF setelah Differencing 1 Kali
Pada plot ACF, terlihat terdapat beberapa nilai autokorelasi yang melewati batas signifikansi, terutama pada lag awal. Namun, pola yang terbentuk tidak menunjukkan pemutusan yang jelas pada lag tertentu, melainkan cenderung menurun secara bertahap. Hal ini menunjukkan bahwa model Moving Average (MA) murni kurang sesuai.
Pada plot PACF, juga terlihat beberapa nilai yang signifikan pada beberapa lag, termasuk pada lag kecil. Meskipun demikian, pola yang terbentuk tidak menunjukkan pemutusan yang tegas, melainkan menyebar pada beberapa lag. Hal ini mengindikasikan bahwa model Autoregressive (AR) murni juga kurang tepat.
Secara keseluruhan, meskipun terdapat nilai yang signifikan pada beberapa lag awal, pola ACF dan PACF tidak menunjukkan bentuk yang jelas untuk model AR atau MA secara tunggal. Oleh karena itu, model yang lebih sesuai adalah model kombinasi AR dan MA, yaitu ARIMA(p,1,q). Dengan mempertimbangkan prinsip parsimony, beberapa kandidat model yang dapat ditentukan adalah ARIMA(1,1,1), ARIMA(1,1,0), dan ARIMA(0,1,1).
Pendugaan parameter dilakukan untuk tiap kandidat model yang terpilih, serta dilakukan uji signifikansi parameter model yang terbentuk.
# Pendugaan Parameter
model1 <- arima(ihsg$`Harga Saham Penutup`, order = c(1,1,1))
model2 <- arima(ihsg$`Harga Saham Penutup`, order = c(1,1,0))
model3 <- arima(ihsg$`Harga Saham Penutup`, order = c(0,1,1))
model1
Call:
arima(x = ihsg$`Harga Saham Penutup`, order = c(1, 1, 1))
Coefficients:
ar1 ma1
-0.6527 0.7032
s.e. 0.2355 0.2190
sigma^2 estimated as 5595: log likelihood = -1777.48, aic = 3558.95
Call:
arima(x = ihsg$`Harga Saham Penutup`, order = c(1, 1, 0))
Coefficients:
ar1
-0.0088
s.e. 0.0568
sigma^2 estimated as 5619: log likelihood = -1778.12, aic = 3558.23
Call:
arima(x = ihsg$`Harga Saham Penutup`, order = c(0, 1, 1))
Coefficients:
ma1
-0.0115
s.e. 0.0648
sigma^2 estimated as 5618: log likelihood = -1778.11, aic = 3558.22
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ar1 -0.65269 0.23546 -2.7719 0.005572 **
ma1 0.70318 0.21897 3.2113 0.001321 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ar1 -0.008768 0.056757 -0.1545 0.8772
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ma1 -0.011455 0.064824 -0.1767 0.8597
Berdasarkan hasil uji signifikansi parameter menggunakan uji z, model ARIMA(1,1,1) menunjukkan bahwa seluruh parameter, yaitu AR(1) dan MA(1), signifikan dengan nilai p-value masing-masing sebesar 0.005572 dan 0.001321. Hal ini menunjukkan bahwa kedua parameter memiliki kontribusi yang nyata dalam model.
Sementara itu, pada model ARIMA(1,1,0), parameter AR(1) memiliki nilai p-value sebesar 0.8772, sehingga tidak signifikan. Demikian pula pada model ARIMA(0,1,1), parameter MA(1) tidak signifikan dengan nilai p-value sebesar 0.8597. Nilai koefisien pada kedua model tersebut mendekati nol, yang mengindikasikan bahwa komponen AR maupun MA tidak memberikan pengaruh yang berarti.
Oleh karena itu, berdasarkan hasil uji signifikansi parameter, dipilih model ARIMA(1,1,1) untuk tahap pengujian selanjutnya.
Pengujian asumsi dilakukan terhadap residual model ARIMA(1,1,1) menggunakan uji Ljung-Box untuk memeriksa apakah residual bersifat white noise. Hipotesis yang digunakan:
Box-Ljung test
data: res
X-squared = 39.155, df = 20, p-value = 0.006377
Nilai p-value sebesar 0.006377, lebih kecil dari taraf nyata 0.05, sehingga keputusannya adalah menolak H₀. Hal ini menunjukkan bahwa residual masih mengandung autokorelasi dan belum memenuhi asumsi white noise.
Maka dari itu, dapat disimpulkan bahwa model ARIMA(1,1,1) belum sepenuhnya mampu menangkap pola yang terdapat dalam data. Hal ini kemungkinan disebabkan oleh adanya perubahan pola atau kejadian khusus (shock) pada data yang tidak dapat dijelaskan oleh model ARIMA sederhana. Perlu dilakukan analisis Intervensi atau Outlier untuk menangkap efek kejadian khusus tersebut.
Berdasarkan hasil pengujian sebelumnya, model ARIMA(1,1,1) belum sepenuhnya memenuhi asumsi white noise pada residual. Hal ini mengindikasikan bahwa masih terdapat pola tertentu yang belum dapat dijelaskan oleh model.
Untuk mengidentifikasi adanya kejadian khusus (outlier), dilakukan analisis terhadap residual model dengan melihat nilai yang berada di luar batas ±2 standar deviasi.
[1] 109 150 183 189 281 287 290 291 292 293 302 308 310
[1] 310
[1] 109
Berdasarkan hasil tersebut, terlihat bahwa terdapat beberapa nilai ekstrem yang terkonsentrasi pada periode akhir pengamatan, khususnya pada rentang indeks sekitar 280 hingga 310. Pola ini menunjukkan bahwa penyimpangan tidak terjadi secara tunggal, melainkan membentuk kelompok (cluster) yang mengindikasikan adanya perubahan struktur atau pola data pada periode tersebut.
Oleh karena itu, titik awal dari kelompok nilai ekstrem tersebut dipilih sebagai waktu terjadinya intervensi, yaitu pada indeks ke-281. Selanjutnya, dibentuk variabel intervensi berupa fungsi step, yang bernilai 0 sebelum periode ke-281 dan bernilai 1 setelahnya.
# Variabel intervensi step
t0 <- 281
intervensi <- rep(0, n)
intervensi[t0:n] <- 1
# Model ARIMA dengan intervensi step
model_interv <- arima(
ihsg$`Harga Saham Penutup`,
order = c(1,1,1),
xreg = intervensi
)
coeftest(model_interv)
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ar1 -0.65379 0.31073 -2.1041 0.03537 *
ma1 0.68989 0.29660 2.3260 0.02002 *
xreg 184.07288 74.77974 2.4615 0.01383 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Hasil estimasi model ARIMA(1,1,1) dengan penambahan variabel intervensi menunjukkan bahwa seluruh parameter dalam model, termasuk variabel intervensi, signifikan pada taraf nyata 0.05. Parameter intervensi memiliki nilai p-value sebesar 0.01383, yang menunjukkan bahwa variabel tersebut memberikan pengaruh yang signifikan terhadap model.
Box-Ljung test
data: residuals(model_interv)
X-squared = 35.852, df = 20, p-value = 0.01601
Diperoleh nilai p-value sebesar 0.01601, yang lebih kecil dari taraf nyata 0.05 sehingga keputusannya adalah menolak H₀, menunjukkan bahwa model masih belum memenuhi asumsi residual white noise. Kondisi ini mengindikasikan bahwa terdapat lebih dari satu bentuk penyimpangan atau kejadian khusus dalam data.
Berdasarkan hasil pengujian pada model intervensi sebelumnya, diketahui bahwa penambahan satu variabel intervensi berupa fungsi step belum mampu menghasilkan residual yang memenuhi asumsi white noise. Oleh karena itu, dilakukan pengembangan model dengan menambahkan satu variabel intervensi tambahan berupa fungsi pulse untuk menangkap lonjakan ekstrem pada indeks ke-310.
# Variabel intervensi pulse
pulse <- rep(0, n)
pulse[310] <- 1
# Model ARIMA dengan intervensi step + pulse
model_interv2 <- arima(
ihsg$`Harga Saham Penutup`,
order = c(1,1,1),
xreg = cbind(intervensi, pulse)
)
coeftest(model_interv2)
z test of coefficients:
Estimate Std. Error z value Pr(>|z|)
ar1 -0.60543 0.34597 -1.7499 0.08013 .
ma1 0.65787 0.32540 2.0218 0.04320 *
intervensi 180.83644 72.07781 2.5089 0.01211 *
pulse -240.63005 49.20948 -4.8899 1.009e-06 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Berdasarkan hasil estimasi, variabel intervensi step dan pulse terbukti signifikan secara statistik, dengan nilai p-value masing-masing sebesar 0.01211 dan 1.009×10⁻⁶. Hal ini menunjukkan bahwa kedua komponen tersebut mampu menangkap perubahan pola dan lonjakan ekstrem yang sebelumnya tidak dapat dijelaskan oleh model. Parameter MA(1) juga signifikan, sedangkan parameter AR(1) memiliki signifikansi yang lebih lemah dengan p-value sebesar 0.08013, namun tetap signifikan pada taraf nyata 0.1.
Box-Ljung test
data: residuals(model_interv2)
X-squared = 27.543, df = 20, p-value = 0.1207
Hasil pengujian menunjukkan nilai p-value sebesar 0.1207, yang lebih besar dari taraf nyata 0.05. Dengan demikian, keputusan yang diambil adalah gagal menolak H₀, yang berarti residual tidak lagi mengandung autokorelasi. Hal ini menunjukkan bahwa model ARIMA(1,1,1) dengan penambahan dua komponen intervensi, yaitu fungsi step dan pulse, telah mampu menghasilkan residual yang bersifat white noise.
Pada tahap ini dilakukan pemilihan model terbaik berdasarkan beberapa kriteria, yaitu signifikansi parameter serta pemenuhan asumsi white noise pada residual.
| Model | Parameter Signifikan | Uji Ljung-Box (p-value) | Kesimpulan |
|---|---|---|---|
| ARIMA(1,1,1) | Ya | 0.006377 (< 0.05) | Residual tidak white noise |
| ARIMA(1,1,1) + step | Ya | 0.01601 (< 0.05) | Residual tidak white noise |
| ARIMA(1,1,1) + step + pulse | Ya | 0.1207 (> 0.05) | Residual white noise ✓ |
Berdasarkan perbandingan tersebut, model ARIMA(1,1,1) dengan penambahan dua komponen intervensi (fungsi step dan pulse) dipilih sebagai model terbaik karena mampu memenuhi asumsi white noise serta memberikan representasi yang lebih baik terhadap pola data.
Evaluasi kinerja model dilakukan dengan melihat kesesuaian antara nilai aktual dan nilai hasil pemodelan, serta melalui perhitungan ukuran kesalahan prediksi.
actual_val <- ihsg$`Harga Saham Penutup`
fitted_val <- actual_val - residuals(model_interv2)
error <- actual_val - fitted_val
MAE <- mean(abs(error))
MSE <- mean(error^2)
MAPE <- mean(abs(error / actual_val)) * 100
MAE[1] 53.5305
[1] 5080.32
[1] 0.760065
| Ukuran Kesalahan | Nilai |
|---|---|
| MAE | 53.5305 |
| MSE | 5080.32 |
| MAPE | 0.760065% |
Berdasarkan hasil perhitungan, diperoleh nilai Mean Absolute Error (MAE) sebesar 53.53, Mean Squared Error (MSE) sebesar 5080.32, dan Mean Absolute Percentage Error (MAPE) sebesar 0.76%. Nilai MAPE yang relatif sangat kecil menunjukkan bahwa secara rata-rata kesalahan prediksi model kurang dari 1% terhadap nilai aktual.
Hal ini mengindikasikan bahwa model memiliki kemampuan yang sangat baik dalam mengikuti pola data historis. Selain itu, hasil uji Ljung-Box sebelumnya menunjukkan bahwa residual telah memenuhi asumsi white noise, sehingga model dinilai telah mampu menangkap pola utama dalam data.
Peramalan dilakukan menggunakan model ARIMA(1,1,1) dengan penambahan komponen intervensi berupa fungsi step dan pulse yang telah dipilih sebagai model terbaik. Variabel intervensi step diasumsikan tetap bernilai 1 karena merepresentasikan perubahan level yang bersifat permanen, sedangkan variabel pulse diasumsikan bernilai 0 karena hanya merepresentasikan kejadian sesaat yang tidak berulang.
h <- 10
interv_future <- rep(1, h) # efek step berlanjut
pulse_future <- rep(0, h) # tidak ada shock baru
forecast_result <- predict(
model_interv2,
n.ahead = h,
newxreg = cbind(interv_future, pulse_future)
)
forecast_result$pred # nilai prediksiTime Series:
Start = 312
End = 321
Frequency = 1
[1] 5961.781 5965.540 5963.264 5964.642 5963.808 5964.313 5964.007 5964.192
[9] 5964.080 5964.148
Time Series:
Start = 312
End = 321
Frequency = 1
[1] 71.39009 103.64192 126.69367 146.84277 164.16955 180.04051 194.50606
[8] 208.03318 220.69558 232.69129
| Periode ke- | Nilai Prediksi | Standard Error |
|---|---|---|
| 312 | 5961.781 | 71.39009 |
| 313 | 5965.540 | 103.64192 |
| 314 | 5963.264 | 126.69367 |
| 315 | 5964.642 | 146.84277 |
| 316 | 5963.808 | 164.16955 |
| 317 | 5964.313 | 180.04051 |
| 318 | 5964.007 | 194.50606 |
| 319 | 5964.192 | 208.03318 |
| 320 | 5964.080 | 220.69558 |
| 321 | 5964.148 | 232.69129 |
Nilai IHSG pada 10 periode mendatang cenderung berada pada kisaran 5960 dengan fluktuasi yang relatif kecil antar periode. Selain itu, nilai standard error yang semakin meningkat seiring bertambahnya horizon peramalan menunjukkan bahwa tingkat ketidakpastian prediksi juga meningkat. Hasil peramalan menunjukkan adanya penurunan level dibandingkan dengan data historis sebelumnya, yang kemungkinan dipengaruhi oleh kejadian ekstrem pada periode akhir pengamatan yang ditangkap oleh model melalui komponen intervensi.
Oleh karena itu, hasil peramalan perlu diinterpretasikan secara hati-hati, terutama karena model mengasumsikan bahwa tidak terdapat kejadian ekstrem baru di masa mendatang serta bahwa pola yang terbentuk pada akhir periode pengamatan akan berlanjut.
Berdasarkan analisis yang telah dilakukan, kesimpulan yang dapat ditarik adalah sebagai berikut:
Model deret waktu yang sesuai untuk memodelkan data IHSG pada kasus ini adalah model ARIMA(1,1,1) dengan penambahan komponen intervensi berupa fungsi step dan pulse. Model ARIMA tanpa intervensi belum mampu menangkap seluruh pola data, khususnya yang berkaitan dengan perubahan level dan kejadian ekstrem.
Model yang diperoleh memiliki kemampuan yang baik dalam memodelkan data IHSG, yang ditunjukkan oleh terpenuhinya asumsi white noise pada residual serta nilai kesalahan prediksi yang relatif kecil. Namun, karena evaluasi dilakukan secara in-sample, kemampuan model dalam memprediksi data baru tetap perlu diinterpretasikan secara hati-hati.
Hasil peramalan menunjukkan bahwa nilai IHSG pada periode mendatang cenderung berada pada kisaran yang relatif stabil, namun dengan tingkat ketidakpastian yang meningkat seiring bertambahnya horizon waktu. Selain itu, hasil prediksi juga dipengaruhi oleh kejadian ekstrem pada periode akhir pengamatan, sehingga interpretasi hasil peramalan perlu mempertimbangkan kemungkinan adanya perubahan kondisi eksternal di masa mendatang.
Berdasarkan hasil analisis, disarankan agar penelitian selanjutnya perlu mempertimbangkan penggunaan evaluasi out-of-sample untuk memperoleh gambaran kinerja model yang lebih objektif. Dalam proses peramalan, perlu diperhatikan bahwa model sensitif terhadap kejadian ekstrem dan mengasumsikan tidak adanya shock baru di masa mendatang, sehingga interpretasi hasil prediksi harus dilakukan secara hati-hati dengan mempertimbangkan kondisi aktual pasar.
| No | Tanggal | Harga Saham Penutup |
|---|---|---|
| 1 | 12-Dec-23 | 7125.31 |
| 2 | 13-Dec-23 | 7075.34 |
| 3 | 14-Dec-23 | 7176.02 |
| 4 | 15-Dec-23 | 7190.99 |
| 5 | 18-Dec-23 | 7119.52 |
| ⋮ | ⋮ | ⋮ |
| 310 | 08-Apr-25 | 5996.14 |
| 311 | 09-Apr-25 | 5967.99 |