Kursus
Bayangkan Anda sedang meramalkan permintaan listrik bulanan. Anda memiliki model ARIMA yang solid yang menangkap autokorelasi dan tren deret tersebut. Lalu gelombang panas datang, dan ramalan Anda meleset 15%. Deretnya tidak berubah; cuacanya yang berubah. Inilah tepatnya situasi yang dibangun untuk ARIMAX: peramalan deret waktu ketika faktor eksternal mendorong variasi sebesar sejarah deret itu sendiri.
Kita akan membahas apa itu ARIMAX, bagaimana bedanya dengan ARIMA dan SARIMAX, serta kapan masuk akal menggunakan salah satunya. Kita juga akan menelusuri implementasi Python lengkap mencakup persiapan data, pemodelan, diagnosis, dan evaluasi ramalan, sehingga Anda bisa langsung menerapkannya.
Apa itu ARIMAX?
ARIMAX adalah singkatan dari AutoRegressive Integrated Moving Average with eXogenous variables. Ini adalah model ARIMA yang juga menerima masukan eksternal, artinya prediktor dari luar deret target itu sendiri. Contoh yang muncul: belanja iklan, suhu, penanda promosi, suku bunga.
Notasi umumnya adalah ARIMAX(p, d, q) dengan satu atau lebih peubah eksogen. Parameter p, d, dan q memiliki arti yang sama seperti pada ARIMA: orde autoregresif, derajat pembedaan (differencing), dan orde moving average. Huruf "X" berarti Anda dapat memasukkan kolom tambahan yang diyakini memengaruhi target. Satu hal yang perlu dicatat: beberapa paket perangkat lunak mengimplementasikan ARIMAX sebagai regresi dengan galat ARIMA alih-alih memperlakukan variabel eksternal sebagai masukan AR langsung. Perbedaannya secara matematis halus, tetapi penting untuk cara Anda menafsirkan koefisien. Kita akan kembali ke ini saat melihat keluaran statsmodels.
Cara Kerja ARIMAX
ARIMAX menggabungkan dua hal: memori deret itu sendiri, dan daya jelaskan dari variabel luar.
Komponen AR, I, dan MA
Komponen AR (autoregresif) menggunakan nilai tertunda dari deret target untuk memprediksi nilai saat ini. Jika penjualan bulan lalu tinggi, itu berpengaruh.
Komponen I (integrated) membedakan deret untuk menghilangkan tren atau akar unit, membuatnya stasioner.
Komponen MA (moving average) menggunakan galat ramalan masa lalu untuk mengoreksi kesalahan sistematis yang dibuat model.
Bersama-sama, ketiga elemen ini menangani banyak hal yang menggerakkan deret waktu khas: tren, siklus, dan autokorelasi pada residual.
Di mana variabel eksogen berperan
Variabel eksogen menyumbang informasi yang tidak dapat disediakan oleh sejarah deret itu sendiri. Jika Anda meramalkan penjualan, penjualan lampau memberi tahu pola tipikal. Namun penurunan harga atau pesaing baru masuk pasar adalah informasi baru. Model mengestimasi koefisien untuk setiap prediktor eksternal sambil secara simultan memperhitungkan autokorelasi pada galat.
Intinya secara praktis: jika deret target Anda dijelaskan dengan baik oleh nilai-nilai lampau dan Anda tidak memiliki prediktor eksternal yang andal, ARIMA biasa mungkin sudah cukup. Namun ketika Anda tahu faktor eksternal ikut bermain, dan ketika Anda benar-benar memiliki nilai prediktor tersebut di masa depan, ARIMAX cenderung memberikan ramalan yang lebih akurat.
ARIMA vs. ARIMAX vs. SARIMAX
SARIMAX dibangun di atas SARIMA dengan menambahkan variabel eksogen. Dalam praktiknya, sebagian besar implementasi ARIMAX di Python menggunakan SARIMAX() dari statsmodels, dengan seasonal order disetel ke nol.
Itu bukan jalan pintas. Itulah pendekatan standar. SARIMAX adalah pilihan pertama yang baik saat deret Anda memiliki pola musiman yang jelas atau ketika Anda memerlukan peubah eksternal; model ini menangani keduanya dengan bersih. Satu catatan: "ARIMAX" dan "SARIMAX" tidak dapat dipertukarkan di setiap pustaka. Di beberapa paket, SARIMAX tanpa istilah musiman dan ARIMAX secara fungsional identik. Di paket lain, keduanya berbeda dalam cara variabel eksogen masuk ke fungsi kemungkinan. Periksa dokumentasi alat yang Anda gunakan.
Kapan Menggunakan ARIMAX
Biasanya kembali pada satu hal: apakah Anda memiliki prediktor eksternal yang secara masuk akal memengaruhi target, dan apakah Anda akan memiliki nilai masa depannya saat waktunya meramalkan?
Situasi di mana ARIMAX menambah nilai
Kandidat yang baik termasuk peramalan penjualan dengan penanda promosi atau perubahan harga, permintaan energi dengan masukan suhu, trafik situs web dengan belanja kampanye, dan indikator ekonomi bersama data suku bunga. Dalam setiap kasus, variabel eksternal memberikan informasi yang tidak dapat dihasilkan deret itu sendiri.
ARIMA biasa mungkin memadai ketika prediktor eksternal tidak tersedia, tidak andal, atau tidak meningkatkan akurasi out-of-sample. Menambahkan prediktor yang hanya membawa noise tanpa sinyal tidak membantu. Lebih banyak masukan tidak menjamin ramalan lebih baik. Evaluasilah setiap prediktor yang diusulkan pada data yang disisihkan sebelum menggunakannya.
Sekilas tentang kausalitas
Hubungan antara prediktor dan target tidak membuktikan kausalitas. ARIMAX adalah kerangka peramalan; model ini mengestimasi asosiasi. Jika belanja iklan berkorelasi dengan penjualan karena keduanya naik pada Desember, model mungkin menangkapnya, tetapi tidak akan memberi tahu bahwa iklan menyebabkan kenaikan tersebut. Pembedaan ini penting jika Anda menggunakan ramalan untuk menginformasikan keputusan, bukan sekadar memprediksi hasil. Ada baiknya menyatakan hal ini secara eksplisit saat menyajikan hasil.
Cara Membangun Model ARIMAX di Python
Sekarang ke implementasinya.
Kita akan menggunakan contoh yang dapat direplikasi: penjualan es krim bulanan (unit terjual) dengan suhu (°C) dan penanda promosi sebagai prediktor eksogen. Dataset mencakup 48 bulan, dibagi menjadi 36 bulan untuk pelatihan dan 12 untuk evaluasi.
Siapkan data
Mulailah dengan memuat atau membangun DataFrame dengan indeks tanggal bulanan yang konsisten. Identifikasi variabel target dan kolom eksogen Anda, lalu selaraskan semuanya berdasarkan tanggal. Tangani nilai hilang sebelum melakukan pemisahan. Jangan melakukan imputasi melintasi batas train/test, karena itu menyebabkan kebocoran.
Aturan yang perlu diinternalisasi sejak awal: nilai eksogen apa pun yang Anda berikan saat pelatihan, Anda akan memerlukan nilai masa depan yang setara saat meramalkan. Jika Anda tidak bisa mendapatkan prakiraan suhu ke depan, Anda tidak dapat menggunakan suhu sebagai prediktor. Ini bukan catatan kaki kecil; ini menggugurkan banyak kandidat.
import pandas as pd
import numpy as np
from statsmodels.tsa.statespace.sarimax import SARIMAX
from statsmodels.tsa.stattools import adfuller
from sklearn.metrics import mean_absolute_error
# Construct a sample monthly dataset
np.random.seed(42)
dates = pd.date_range(start="2020-01", periods=48, freq="MS")
temperature = 15 + 10 * np.sin(np.linspace(0, 4 * np.pi, 48)) + np.random.normal(0, 1, 48)
promotion = np.where((np.arange(48) % 6 == 0), 1, 0)
sales = (
500
+ 8 * temperature
+ 150 * promotion
+ np.cumsum(np.random.normal(0, 10, 48))
)
df = pd.DataFrame({"sales": sales, "temperature": temperature, "promotion": promotion}, index=dates)
# Train/test split
train = df.iloc[:36]
test = df.iloc[36:]
Penskalaan biasanya tidak diperlukan untuk estimasi statsmodels, tetapi membantu stabilitas numerik saat prediktor berada pada skala yang sangat berbeda. Apakah perlu penskalaan adalah keputusan berbasis pertimbangan.
Periksa deret dan prediktor
Sebelum memilih parameter model, inspeksi deret target secara visual dan jalankan uji stasioneritas. Uji Augmented Dickey-Fuller (ADF) adalah standar. Nilai p di bawah 0,05 menunjukkan deret stasioner dan kemungkinan tidak perlu pembedaan (d=0). Jika deret memiliki tren yang jelas, Anda biasanya menetapkan d=1. Uji hanyalah salah satu masukan; pengetahuan domain dan inspeksi visual juga penting.
Periksa juga prediktor Anda: apakah selaras dengan target? Adakah kemungkinan prediktor diukur setelah tanggal ramalan? Penanda promosi yang ditetapkan sebelum bulan dimulai tidak masalah. Pendapatan dari bulan itu tidak.
Pilih parameter kandidat dan latih model
Plot ACF dan PACF membantu menyarankan nilai kandidat untuk p dan q. Puncak signifikan pada lag 1 di PACF dengan ACF yang menurun sering menyarankan AR(1); kebalikannya menyarankan MA(1). Bandingkan sejumlah kecil kandidat menggunakan AIC atau BIC pada data pelatihan, dan simpan set uji hanya untuk evaluasi akhir.
# Fit ARIMAX(1,1,1) via SARIMAX with no seasonal order
exog_train = train[["temperature", "promotion"]]
exog_test = test[["temperature", "promotion"]]
model = SARIMAX(
train["sales"],
exog=exog_train,
order=(1, 1, 1),
seasonal_order=(0, 0, 0, 0),
trend="n"
)
result = model.fit(disp=False)
print(result.summary())
Keluaran summary() menampilkan koefisien ARIMA bersamaan dengan koefisien variabel eksogen. Koefisien suhu itu memberi tahu Anda seberapa besar kenaikan satu derajat dikaitkan dengan perubahan level penjualan, setelah struktur autoregresif mempertimbangkan momentum deret itu sendiri. Satu hal yang perlu diketahui: statsmodels menggunakan formulasi regresi dengan galat ARIMA, yang berarti pembedaan (d=1) diterapkan pada proses galat, bukan pada persamaan regresi itu sendiri. Koefisien merepresentasikan efek pada level penjualan terlepas dari d. Dalam formulasi ARIMAX transfer-function (digunakan oleh beberapa paket lain), d=1 berarti koefisien mencerminkan efek pada perubahan, bukan level. Pembedaan ini sering membingungkan, jadi ada baiknya memeriksa dokumentasi alat yang Anda gunakan.
Periksa residual dan evaluasi ramalan
Residual seharusnya tampak seperti white noise. Periksa plot ACF residual untuk autokorelasi yang tersisa. Puncak signifikan berarti model melewatkan struktur. Jika Anda melihat pola sistematis pada lag musiman, beralihlah ke SARIMAX dengan seasonal order.
# Generate out-of-sample predictions
predictions = result.forecast(steps=12, exog=exog_test)
# Evaluate
mae = mean_absolute_error(test["sales"], predictions)
# Naive baseline: forecast each period using the previous period's actual value
naive_forecast = np.concatenate([[train["sales"].iloc[-1]], test["sales"].values[:-1]])
naive_mae = mean_absolute_error(test["sales"], naive_forecast)
print(f"ARIMAX MAE: {mae:.1f}")
print(f"Naive MAE: {naive_mae:.1f}")
Bandingkan MAE ARIMAX dengan baseline naif (menggunakan nilai periode sebelumnya sebagai ramalan). Jika ARIMAX tidak mengalahkan model naif pada set uji Anda, itu hasil yang bermakna. Kompleksitas tambahannya tidak terjustifikasi. Saya sering melihat ini terjadi, terutama ketika prediktor eksogen lebih berisik daripada yang terlihat di in-sample.
Meramalkan nilai masa depan
Peramalan melampaui periode pelatihan berjalan sama seperti evaluasi out-of-sample: berikan nilai eksogen masa depan bersama pemanggilan forecast(). Untuk penanda promosi, ini biasanya mudah karena Anda tahu kalender promosi lebih dulu. Untuk suhu, Anda biasanya menggunakan prakiraan cuaca atau rata-rata musiman historis.
Ingat ini: interval kepercayaan yang dikembalikan statsmodels bersyarat pada nilai prediktor yang Anda berikan. Interval tersebut tidak memperhitungkan ketidakpastian dalam prediktor. Jika prakiraan suhu Anda tidak pasti, ketidakpastian ramalan yang sebenarnya lebih lebar daripada yang disarankan interval. Perlu dikomunikasikan jika Anda mempresentasikan hasil kepada pihak yang mungkin bertindak atasnya.
Tantangan dan Keterbatasan Umum
Implementasi di atas mencakup jalur ideal. Berikut area yang sering menjadi titik lemah.
- Prediktor masa depan mungkin tidak diketahui: Ini adalah hambatan praktis yang paling umum. Jika Anda tidak dapat memperoleh nilai masa depan variabel eksogen secara andal, Anda tidak dapat menggunakannya. Meramalkan permintaan energi dengan suhu besok memerlukan prakiraan suhu, bukan suhu kemarin.
- Prediktor dapat menyebabkan kebocoran informasi: Variabel yang diukur setelah tanggal ramalan dapat membuat evaluasi in-sample Anda tampak jauh lebih baik daripada kenyataannya. Berhati-hatilah dengan penandaan waktu (timestamp) yang sebenarnya sesuai untuk prediktor Anda.
- Hubungan dapat berubah: Koefisien yang diestimasi dari data historis mungkin tidak berlaku ke depan. Elastisitas harga yang stabil selama dua tahun bisa bergeser setelah guncangan pasar, dan 2024 serta 2025 memberikan cukup banyak guncangan untuk membuat ini terasa kurang teoretis daripada sebelumnya. Mengestimasi ulang model secara berkala adalah praktik yang baik.
- Prediktor yang berkorelasi mempersulit penafsiran: Masukan yang sangat kolinear dapat membuat estimasi koefisien individu tidak stabil. Ini tidak selalu merusak akurasi ramalan, tetapi menyulitkan untuk mengatakan prediktor mana yang berperan.
- Lebih banyak masukan tidak menjamin ramalan lebih baik: Evaluasilah setiap prediktor yang diusulkan terhadap baseline pada data yang disisihkan. Beberapa fitur yang tampak informatif di in-sample justru menambah noise di out-of-sample.
- Musiman memerlukan istilah musiman: Jika deret Anda memiliki pola musiman yang konsisten, seperti penjualan bulanan dengan lonjakan Desember, SARIMAX dengan seasonal order adalah pilihan tepat. ARIMAX saja tidak akan menangkapnya.
- Kausalitas tidak dibuktikan: Perlu diulang: ARIMAX adalah kerangka peramalan, bukan metode inferensi kausal. Jangan gunakan tanda koefisien untuk membuat klaim kausal tanpa analisis tambahan.
Kesimpulan
ARIMAX pantas digunakan ketika Anda memiliki faktor eksternal yang benar-benar memengaruhi target, dan Anda dapat menyediakan nilai masa depannya saat meramalkan. Ini adalah perluasan alami dari ARIMA, bukan pengganti. Jika deret Anda berperilaku baik dan Anda tidak memiliki prediktor andal, ARIMA biasa biasanya titik awal yang lebih baik. Menambahkan variabel terasa seperti kemajuan. Kadang tidak demikian.
Alur kerjanya bermuara pada empat hal yang dilakukan dengan baik:
- selaraskan prediktor Anda dengan benar,
- periksa kebocoran sebelum mengevaluasi,
- validasi pada data yang benar-benar disisihkan, dan
- selalu bandingkan dengan baseline sederhana.
Model ARIMAX yang hanya sedikit mengalahkan ramalan naif tidak lebih baik daripada ramalan naif. Hanya lebih mahal.
Jika Anda ingin memperdalam landasan deret waktu, kursus Time Series Analysis in Python kami membahas ARIMA, stasioneritas, dan diagnosis secara mendetail. Untuk sisi statsmodels, kursus Introduction to Regression with statsmodels in Python kami membangun intuisi statistik yang Anda perlukan saat menafsirkan ringkasan model dan memeriksa residual.
Vinod Chugani memulai kariernya di Tokyo sebagai Kepala Meja Penjualan Hedge Fund termuda di JPMorgan dan kemudian mencetak rekor penjualan individu di Lehman Brothers, lalu membangun bisnis distribusi elektronik di 30 negara dengan pendapatan melampaui SG$100 juta sebelum beralih ke data. Lulusan Ekonomi Duke dan alumni NYC Data Science Academy, ia menjadi salah satu dari tiga penerima beasiswa dari lebih dari 100 pelamar untuk kursus Building AI Applications oleh Hugo Bowne-Anderson di Maven. Saat ini, ia menulis untuk DataCamp, KDnuggets, Machine Learning Mastery, dan Statology tentang topik mulai dari statistika hingga AI agensial, dan membimbing para profesional data di NYC Data Science Academy dengan lebih dari 1.000 sesi tatap muka atas namanya.
FAQs
Apa perbedaan antara ARIMAX dan ARIMA?
ARIMA meramalkan deret target hanya menggunakan nilai lampau dan galat ramalan lampau dari deret itu sendiri. ARIMAX memperluas ini dengan memasukkan variabel eksogen—masukan eksternal seperti suhu, promosi, atau suku bunga—yang diyakini memengaruhi target. Jika faktor eksternal tersebut benar-benar mendorong variasi dalam deret Anda dan Anda dapat memberikan nilai masa depannya, ARIMAX biasanya menghasilkan ramalan yang lebih baik dibanding ARIMA saja.
Bagaimana perbedaan ARIMAX dari SARIMAX?
ARIMAX menangani variabel eksternal tetapi bukan pola musiman. SARIMAX menambahkan komponen AR musiman, pembedaan musiman, dan MA di atas ARIMAX, sehingga menjadi pilihan tepat saat deret Anda memiliki struktur musiman berulang. Di statsmodels Python, ARIMAX biasanya diimplementasikan melalui SARIMAX() dengan seasonal order disetel ke (0, 0, 0, 0). Secara fungsional, keduanya adalah model yang sama dalam konfigurasi tersebut.
Apakah saya perlu menyediakan nilai masa depan variabel eksogen untuk meramal dengan ARIMAX?
Ya—ini adalah salah satu kendala praktis paling penting. Saat menghasilkan ramalan di luar periode pelatihan, Anda harus menyediakan nilai untuk setiap variabel eksogen di setiap langkah waktu mendatang. Untuk penanda promosi atau indikator hari libur, ini biasanya mudah. Untuk variabel seperti suhu atau harga komoditas, Anda memerlukan nilai yang diprakirakan atau asumsi yang masuk akal, yang memperkenalkan ketidakpastian tambahan.
Bagaimana cara memilih p, d, dan q untuk model ARIMAX?
Mulailah dengan plot ACF dan PACF dari deret (yang telah dibedakan). Puncak signifikan pada lag 1 di PACF dan ACF yang meredup sering menyarankan AR(1); pola sebaliknya menyarankan MA(1). Gunakan pengetahuan domain dan uji ADF untuk menentukan d. Lalu bandingkan sejumlah kecil kombinasi (p, d, q) kandidat menggunakan AIC atau BIC pada data pelatihan. Hindari menggunakan set uji selama tahap pemilihan ini—set uji hanya untuk evaluasi akhir.
Apa arti koefisien pada variabel eksogen dalam model ARIMAX?
Koefisien merepresentasikan perkiraan perubahan pada level deret target yang terkait dengan kenaikan satu satuan pada prediktor tersebut, setelah memperhitungkan struktur autoregresif. Di statsmodels, ini tetap berlaku meskipun d=1, karena pembedaan diterapkan pada proses galat, bukan pada persamaan regresi (ini adalah formulasi regresi dengan galat ARIMA). Beberapa paket lain menggunakan formulasi transfer-function di mana d=1 membuat koefisien mencerminkan efek pada perubahan alih-alih level, jadi periksa dokumentasi alat Anda. Penafsiran juga bisa jadi rumit ketika prediktor berada pada skala berbeda atau saling berkorelasi, jadi ada baiknya melakukan standardisasi masukan saat Anda peduli membandingkan koefisien.
Bagaimana cara mendeteksi dan menangani multikolinearitas pada prediktor eksogen?
Hitung Variance Inflation Factor (VIF) untuk setiap prediktor sebelum pemodelan. Nilai di atas 10 menunjukkan kolinearitas yang bermasalah. Jika Anda menemukannya, coba hapus prediktor yang paling lemah justifikasinya secara teoretis, atau gabungkan variabel yang berkorelasi menjadi satu komposit. Kolinearitas tinggi tidak selalu merusak akurasi ramalan, tetapi membuat koefisien individu tidak andal dan sulit ditafsirkan.
Bagaimana saya harus mengevaluasi apakah ARIMAX benar-benar menambah nilai?
Selalu bandingkan dengan baseline sederhana—ramalan naif (menggunakan nilai periode sebelumnya) adalah titik awal yang baik. Jika ARIMAX tidak mengalahkannya pada data uji yang disisihkan, model tersebut tidak layak atas kompleksitasnya. MAE dan RMSE keduanya metrik yang masuk akal; MAE lebih mudah dijelaskan ke pemangku kepentingan. Jalankan perbandingan pada set uji yang benar-benar tidak digunakan dalam pemilihan parameter.
Kapan saya harus menggunakan SARIMAX alih-alih ARIMAX?
Gunakan SARIMAX saat deret Anda menunjukkan pola musiman yang konsisten—penjualan bulanan dengan puncak Desember, trafik web mingguan dengan lonjakan Senin, dan seterusnya. SARIMAX menambahkan komponen AR, pembedaan, dan MA musiman yang tidak dimiliki ARIMAX. Karena statsmodels Python juga mengimplementasikan ARIMAX melalui SARIMAX(), pertanyaan praktisnya hanyalah apakah perlu menetapkan seasonal order non-nol. Jika residual Anda menunjukkan autokorelasi signifikan pada lag musiman setelah memasang ARIMAX, itu sinyal untuk menambahkan istilah musiman.

