Artikel ini menyimpan syntax yang digunakan untuk proses Sarimax pada analisis Time series. Sarimax digunakan untuk seasional time series, jika auto Arima dirasa belum tepat melakukan peramalan bisnis. Kriteria yang perlu diperhatikan untuk mencerminkan model Auto Arima perlu diperbaiki menggunakan Sarimax adalah:
- Ada lag tertentu pada output ACF dan PACF yang signifikan. Ini adalah salah satu indikator yang perlu ditelusuri apakah data memiliki sifat musiman.
- Nilai Sigma2 pada output Auto Arima signifikan. Ini adalah indikator ada variabel lain yang mempengaruhi nilai Y. variabel itu bisa saja nilai AR atau MA atau seasional. Indikator yang patut dicoba dan memperkuat poin no 1.
Jika kedua poin itu ditemukan pada model arima atau auto arima, maka patut dicoba menggunakan model sarima.
Syntax sarimax di phyton
from statsmodels.graphics.tsaplots import plot_pacf
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.tsa.statespace.sarimax import SARIMAX
from statsmodels.tsa.holtwinters import ExponentialSmoothing
from statsmodels.tsa.stattools import adfuller
import matplotlib.pyplot as plt
from tqdm import tqdm_notebook
import numpy as np
import pandas as pd
from itertools import product
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
data = pd.read_csv('ekspor.csv')
print(data.tail())
kode diatas adalah import module-module yang akan digunakan dalam analisis sarimax. selanjutnya inti dari proses sarimax adalah dengan menuliskan kode dibawah ini:
#setting sarima
def optimize_SARIMA(parameters_list, d, D, s, exog):
"""
Return dataframe with parameters, corresponding AIC and SSE
parameters_list - list with (p, q, P, Q) tuples
d - integration order
D - seasonal integration order
s - length of season
exog - the exogenous variable
"""
results = []
for param in tqdm_notebook(parameters_list):
try:
model = SARIMAX(exog, order=(param[0], d, param[1]), seasonal_order=(param[2], D, param[3], s)).fit(disp=-1)
except:
continue
aic = model.aic
results.append([param, aic])
result_df = pd.DataFrame(results)
result_df.columns = ['(p,q)x(P,Q)', 'AIC']
#Sort in ascending order, lower AIC is better
result_df = result_df.sort_values(by='AIC', ascending=True).reset_index(drop=True)
return result_df
#simulasi mencari model sarimax terbaik
p = range(0, 2, 1)
d = 0
q = range(0, 2, 1)
P = range(0, 2, 1)
D = 0
Q = range(0, 2, 1)
s = 6
parameters = product(p, q, P, Q)
parameters_list = list(parameters)
print(len(parameters_list))
result_df = optimize_SARIMA(parameters_list, 1, 1, 2, data['Eskpor'])
result_df
kode diatas kita langsung mensimulasikan beberapa ordo dalam model [(p,d,q) (P,D,Q) S] dan memerintahkan pyton untuk langsung melisting model yang memiliki AIC terendah. d dan D bernilai 0 karena kebetulan dalam contoh kali ini tidak perlu di differencing datanya. kemudian nilai s = 6 adalah hasil identifikasi seasional yang telah dilakukan sebelumnya. Selanjutnya model inilah yang akan terpilih untuk melakukan forecasting. hasilnya terlihat sbb:
hasil terlihat bahwa model (0,0,1)(0,0,1) merupakan model terbaik karena memiliki nilai AIC paling rendah. selanjutnya kita ingin melihat hasil dari model tersebut dengan menulis syntax sbb:
best_model = SARIMAX(data['Eskpor'], order=(0, 0, 1), seasonal_order=(0, 0, 1, 6)).fit(dis=-1)
print(best_model.summary())
best_model.plot_diagnostics(figsize=(15,12));
data['arima_model'] = best_model.fittedvalues
data['arima_model'][:4+1] = np.NaN
forecast = best_model.predict(start=data.shape[0], end=data.shape[0] + 8)
forecast = data['arima_model'].append(forecast)
plt.figure(figsize=(15, 7.5))
plt.plot(forecast, color='r', label='model')
plt.axvspan(data.index[-1], forecast.index[-1], alpha=0.5, color='lightgrey')
plt.plot(data['Eskpor'], label='actual')
#plt.plot(data['data'], label='actual')
plt.legend()
plt.show()
maka hasil yang akan diperoleh adalah sebagai berikut:
Secara teknis, step by step dijelaskan lebih detil pada video dibawah ini:
Sedangkan pembahasan outputnya ada disini:
Jangan pusing dulu yaaaa…. Selamat belajar!
pak agung izin bertanya syarat model arima/sarima datanya stasioner, kemudian untuk melakukan pembagian data uji dan data tes serta untuk pelatihan model itu menggunakan data asli(yang tidak stasioner) atau data yang telah stasioner tersebut? tolong jelaskan pak peran dari data stasioner untuk dimana seperti.
Data yang digunakan untuk pelatihan model adalah data awal yang diberi keterangan berapa nilai d nya. Peran difference adalah menghilangkan trend agar fluktuasi setiap lag bisa makin terlihat, dengan begitu nilai auto korelasi diharapkan lebih signifikan. Terima kasih
Pak, bagaimana proses / cara kerja yang terjadi di dalam auto arima sehingga menghasilkan parameter dan bagaimana mengetahui hasil parameter dr auto arima tersebut memenuhi asumsi “baik” jika dilihat dari output summary nya saja apakah bisa seperti dilihat dr nilai ljungbox sampai dgn jarque apakah ada nilai ketentuan jika dilihat dr sudut pandang summary tersebut?
Terima kasih
Ada disini penjelasannya. https://agungbudisantoso.com/interpretasi-hasil-arima-dan-sarima-forecasting/
Terima kasih
pak, mengapa menggunakan probabilitasnya 0.05 atau 5% pak ?
karena 5 persen biasa digunakan di forum ilmiah. terutama untuk bidang ekonomi sosial.