Lewati ke konten utama

Model SARIMA: Panduan Lengkap Peramalan Deret Waktu Musiman

Pelajari bagaimana SARIMA memperluas ARIMA untuk menangani musiman, pahami tujuh parameternya, dan bangun model yang berjalan di Python mulai dari pengumpulan data hingga peramalan.
Diperbarui 31 Jul 2026  · 15 mnt baca

Jelajahi dengan AI

Buka di ChatGPTBuka di ClaudeBuka di Perplexity

Setiap Desember, pengecer menambah stok untuk musim liburan. Setiap musim panas, jaringan listrik bersiap menghadapi lonjakan penggunaan AC. Pola-pola ini berulang dari tahun ke tahun, dan jika Anda membangun peramalan deret waktu tanpa mempertimbangkannya, Anda sedang mengorbankan akurasi.

Model Seasonal AutoRegressive Integrated Moving Average (disingkat SARIMA) memperluas kerangka ARIMA yang banyak digunakan untuk menangkap pola musiman berulang di samping tren reguler. Dalam artikel ini, Anda akan mempelajari apa itu SARIMA, bagaimana komponen-komponennya bekerja, kapan memilihnya dibanding ARIMA, dan cara membangunnya langkah demi langkah di Python.

Apa Itu SARIMA?

SARIMA adalah model peramalan deret waktu yang menangani pola non-musiman dan musiman dalam data. Model ini dibangun langsung di atas ARIMA, jadi jika Anda sudah pernah bekerja dengan ARIMA, Anda akan mengenali sebagian besar mekanismenya. Perbedaan utamanya adalah SARIMA menambahkan lapisan kedua parameter yang dirancang khusus untuk memodelkan perilaku yang berulang pada interval tetap, seperti siklus bulanan, kuartalan, atau mingguan.

Secara formal, model SARIMA ditulis sebagai SARIMA(p, d, q)(P, D, Q)[S]. Kumpulan parameter pertama, (p, d, q), menangani struktur non-musiman, identik dengan ARIMA standar. Kumpulan kedua, (P, D, Q)[S], memperhitungkan pola musiman, di mana S adalah panjang siklus musiman. Untuk data bulanan dengan musiman tahunan, S = 12. Untuk data kuartalan, S = 4.

Komponen Utama SARIMA

Tujuh parameter SARIMA bisa terasa banyak pada awalnya. Lebih mudah jika dipikirkan dalam dua kelompok: trio ARIMA yang sudah familiar (p, d, q) dan padanannya pada skala musiman (P, D, Q, S) yang mencerminkan fungsi yang sama. Setiap parameter musiman melakukan hal yang persis sama dengan kembarannya yang non-musiman, hanya saja diterapkan pada jarak musiman alih-alih langkah waktu berurutan.

Bagian AutoRegressive (AR)

Komponen AR menggunakan nilai masa lalu dari deret untuk memprediksi nilai masa depan. Parameter p menentukan berapa banyak nilai lag yang disertakan. Jika p = 2, model menggunakan dua langkah waktu sebelumnya sebagai prediktor untuk nilai saat ini.

Di sisi musiman, P melakukan hal yang sama tetapi pada lag musiman. Jika P = 1 dan S = 12, model melihat nilai 12 periode sebelumnya, bulan yang sama, tahun sebelumnya, sebagai prediktor. Ini secara langsung menangkap pola year-over-year.

Bagian Integrated (I)

Parameter d mengontrol berapa kali deret didiferensiasikan untuk menghapus tren dan membuatnya stasioner. Differencing berarti mengurangkan observasi sebelumnya dari setiap observasi, yang menghilangkan tren linear. Jika d = 1, Anda mengambil selisih pertama; jika d = 2, Anda melakukan differencing pada deret yang sudah didiferensiasikan.

Differencing musiman bekerja dengan cara yang sama tetapi pada lag musiman. Parameter D menentukan berapa banyak differencing musiman yang diterapkan. Dengan D = 1 dan S = 12, Anda mengurangkan nilai 12 periode sebelumnya dari setiap observasi. Menggunakan d = 1 dan D = 1 secara bersamaan umum dilakukan ketika sebuah deret memiliki tren naik umum dan pola musiman yang berulang.

Bagian Moving Average (MA)

Tidak seperti komponen AR yang melihat nilai masa lalu, komponen MA memodelkan hubungan antara observasi saat ini dan galat residual dari prediksi sebelumnya. Parameter q menentukan berapa banyak istilah galat berlag yang disertakan. Jika q = 1, model menggunakan galat prediksi dari langkah sebelumnya untuk menyesuaikan peramalan saat ini.

Padanan musiman Q menerapkan logika yang sama pada lag musiman. Dengan Q = 1 dan S = 12, model memasukkan galat peramalan dari 12 periode sebelumnya. Ini penting ketika guncangan musiman, seperti musim panas yang sangat panas yang mendorong permintaan energi, cenderung bertahan ke periode yang sama pada tahun berikutnya.

Komponen musiman (S)

Parameter S mendefinisikan panjang siklus musiman dan mengikat tiga parameter musiman (P, D, Q). Menentukan S dengan tepat itu penting: jika data Anda bulanan dengan pola tahunan, S = 12. Data mingguan dengan siklus tahunan memberikan S kira-kira 52.

Di sinilah musiman kadang menjadi rumit. Satu tahun tidak persis 52 minggu; lebih mendekati 52,18. Untuk sebagian besar tujuan praktis, pembulatan ke S = 52 sudah memadai. Namun beberapa dataset memiliki beberapa periode musiman: permintaan listrik harian sering menunjukkan siklus mingguan (S = 7) dan siklus tahunan (S = 365). SARIMA standar menangani satu periode musiman, sehingga multi-musiman memerlukan metode yang lebih lanjut seperti TBATS atau Facebook Prophet.

Ketika S tidak jelas, dekomposisi deret waktu membantu. Mendekomposisi deret menjadi komponen tren, musiman, dan residual akan menampilkan secara visual periode berulang yang dominan. Anda juga dapat memeriksa plot autokorelasi untuk melihat puncak pada lag yang teratur.

ARIMA vs. SARIMA: Apa Bedanya?

Mungkin Anda sudah bertanya-tanya: kapan sebaiknya Anda benar-benar menggunakan SARIMA alih-alih ARIMA yang lebih sederhana?

Jawaban singkatnya: gunakan ARIMA ketika data Anda tidak memiliki pola musiman yang berarti, dan gunakan SARIMA ketika memiliki pola tersebut.

ARIMA memodelkan tiga hal: autokorelasi dalam deret itu sendiri (AR), jumlah differencing yang diperlukan untuk kestasioneran (I), dan pengaruh yang masih tersisa dari galat peramalan masa lalu terhadap nilai saat ini (MA). Model ini menangani tren, siklus, dan derau tidak beraturan dengan baik. Yang tidak bisa dilakukannya adalah memodelkan pola yang berulang pada frekuensi musiman tetap. Pola tersebut akan lolos sebagai varians yang tidak terjelaskan.

SARIMA menambahkan kemampuan itu secara tepat. Ketika puncak dan lembah musiman jelas muncul dalam data Anda, memasangkan model ARIMA biasa memaksa pola-pola itu masuk ke residual, menghasilkan peramalan yang lebih buruk dan residual yang bukan derau putih. Model SARIMA menangkapnya secara langsung.

Aturan praktis: plot data Anda dan cari pola berulang pada interval tetap. Jika Anda melihatnya, lonjakan penjualan saat liburan, lonjakan energi di musim dingin, pola laba kuartalan, pilih SARIMA. Jika deretnya tidak beraturan atau didorong oleh tren tanpa siklus reguler, ARIMA lebih sederhana dan sudah cukup.

Kursus ARIMA Models in Python kami membahas kedua kerangka tersebut dengan latihan praktis untuk mempertajam intuisi Anda kapan masing-masing berlaku.

Cara Membangun Model SARIMA di Python

Membangun model SARIMA mengikuti urutan logis: kumpulkan data, periksa kestasioneran, identifikasi parameter, fit model, jalankan diagnostik, dan lakukan peramalan. Berikut cara setiap langkah bekerja dalam praktik, menggunakan pustaka statsmodels di Python.

Pengumpulan data

Untuk model yang menangkap musiman, Anda memerlukan riwayat yang cukup untuk mengamati pola setidaknya dua kali, idealnya beberapa siklus. Penjualan ritel bulanan, catatan suhu, angka konsumsi energi, dan jumlah penumpang adalah contoh klasik. Sumber yang tersedia publik seperti Federal Reserve Economic Data (FRED), US Census Bureau, atau Kaggle adalah titik awal yang baik.

Dataset pengajaran standar untuk alur kerja ini adalah jumlah penumpang maskapai: data bulanan dari 1949 hingga 1960 dengan tren naik yang jelas dan musiman tahunan yang kuat. Dataset ini tersedia melalui statsmodels via get_rdataset(), yang mengambilnya dari koleksi Rdatasets. Pelajari alur kerja pada dataset ini sebelum menerapkannya ke data Anda sendiri.

Prapemrosesan data

Sebelum memfitting model SARIMA apa pun, Anda memerlukan deret yang stasioner, yaitu deret di mana mean dan variansnya tidak berubah dari waktu ke waktu. Uji Augmented Dickey-Fuller (ADF) memeriksanya secara formal: nilai p di bawah 0,05 menunjukkan deretnya stasioner.

Jika tidak, differencing dapat memperbaikinya. Terapkan differencing reguler (d = 1) untuk tren, differencing musiman (D = 1 pada lag S) untuk nonstasioner musiman, atau keduanya jika diperlukan. Tangani nilai hilang sebelum langkah ini. Forward fill atau interpolasi adalah pendekatan standar untuk data deret waktu, karena menghapus baris akan merusak struktur temporal.

Identifikasi model

Dengan deret yang stasioner, Anda menggunakan plot Autocorrelation Function (ACF) dan Partial Autocorrelation Function (PACF) untuk mengidentifikasi parameter model. Berikut yang perlu dicari:

  • ACF menunjukkan korelasi antara deret dan lag-nya. Cutoff tajam setelah lag q menyiratkan orde MA. Puncak pada lag musiman (12, 24, 36 untuk data bulanan) menginformasikan Q.
  • PACF menunjukkan korelasi parsial dengan efek lag perantara yang dihapus. Cutoff tajam setelah lag p menyiratkan orde AR. Puncak musiman menginformasikan P.

Dalam praktiknya, plot memberikan nilai kandidat, dan Anda membandingkan beberapa model menggunakan kriteria informasi (lebih lanjut tentang ini di bagian diagnostik). Jika Anda ingin mengotomatisasi pencarian, auto_arima() dari paket pmdarima melakukan grid search atas kombinasi parameter dan memilih model dengan kecocokan terbaik.

Estimasi parameter

Setelah Anda mengidentifikasi parameter kandidat, statsmodels mengestimasinya menggunakan Maximum Likelihood Estimation (MLE), menemukan nilai koefisien yang membuat data yang diamati paling mungkin di bawah model. Estimasi SARIMA lebih intensif komputasi daripada ARIMA biasa karena pengoptimal harus memfitting komponen non-musiman dan musiman secara bersamaan.

Proses fitting sesekali dapat konvergen ke optimum lokal alih-alih global, jadi ada baiknya mencoba beberapa nilai awal atau kombinasi parameter yang berbeda ketika hasil tampak janggal.

Pemasangan model

Berikut cara memfitting model SARIMA di Python menggunakan dataset penumpang maskapai:

import pandas as pd
import statsmodels.api as sm

# Load the classic airline dataset
airline_data = sm.datasets.get_rdataset("AirPassengers", "datasets").data
airline_data.index = pd.date_range(start="1949-01", periods=len(airline_data), freq="MS")
passengers = airline_data["value"]

# Fit SARIMA(1,1,1)(1,1,1)[12]
sarima_model = sm.tsa.statespace.SARIMAX(
    passengers,
    order=(1, 1, 1),
    seasonal_order=(1, 1, 1, 12),
    enforce_stationarity=False,
    enforce_invertibility=False
)

sarima_result = sarima_model.fit(disp=False)
print(sarima_result.summary())	

Argumen order menerima (p, d, q) untuk bagian non-musiman; seasonal_order menerima (P, D, Q, S). Mengatur enforce_stationarity=False dan enforce_invertibility=False memberi pengoptimal lebih banyak fleksibilitas, yang sering membantu konvergensi pada data dunia nyata.

Statistik dan diagnostik model

Setelah fitting, jalankan plot diagnostik bawaan dengan sarima_result.plot_diagnostics(). Anda mencari empat hal:

  • Residual terstandarkan: Seharusnya terlihat seperti derau putih tanpa pola yang jelas.
  • Histogram residual: Seharusnya kira-kira normal.
  • Plot Normal Q-Q: Titik-titik harus berada dekat garis diagonal.
  • Korelogram (ACF residual): Tidak ada puncak signifikan, yang akan menunjukkan autokorelasi yang belum terjelaskan.

Perhatikan secara khusus lag musiman pada korelogram. Puncak pada lag 12, 24, dan seterusnya menunjukkan komponen musiman belum sepenuhnya tertangkap. Bandingkan spesifikasi alternatif menggunakan AIC (Akaike Information Criterion) dan BIC (Bayesian Information Criterion): nilai yang lebih rendah menunjukkan kecocokan yang lebih baik, dengan BIC memberi penalti kompleksitas lebih besar.

Peramalan

Dengan model tervalidasi, menghasilkan peramalan menjadi mudah. Bagi data Anda menjadi set pelatihan dan pengujian untuk mendapatkan pembacaan akurat atas ketepatan peramalan:

# Train on first 11 years, test on final year
train = passengers[:"1959"]
test = passengers["1960":]

# Refit on training data and forecast
sarima_train = sm.tsa.statespace.SARIMAX(
    train,
    order=(1, 1, 1),
    seasonal_order=(1, 1, 1, 12),
    enforce_stationarity=False,   # add this
    enforce_invertibility=False   # add this
).fit(disp=False)

forecast = sarima_train.get_forecast(steps=12)
forecast_mean = forecast.predicted_mean
conf_int = forecast.conf_int()

Metode get_forecast() menghasilkan prediksi titik beserta interval kepercayaan yang melebar seiring Anda meramal lebih jauh. Pelebaran itu bukan cacat; itu adalah cara model menyampaikan ketidakpastian secara jujur. Evaluasi akurasi menggunakan RMSE (Root Mean Squared Error) atau MAPE (Mean Absolute Percentage Error) pada set uji yang disisihkan.

Aplikasi Praktis SARIMA

Begitu banyak sinyal dunia nyata yang bersifat musiman sehingga SARIMA layak menjadi komponen permanen dalam perangkat deret waktu mana pun. Beberapa contoh lintas industri:

  • Ritel: Meramalkan volume penjualan bulanan untuk perencanaan inventaris, terutama di sekitar periode liburan ketika lonjakan permintaan dapat diprediksi tetapi bervariasi besarnya dari tahun ke tahun.
  • Konsumsi energi: Memprediksi permintaan listrik dan gas, yang mengikuti siklus musiman harian dan tahunan yang didorong oleh suhu dan pola aktivitas.
  • Keuangan: Memodelkan laba kuartalan atau pola volume perdagangan yang berulang seiring kalender fiskal.
  • Peramalan cuaca: Memproyeksikan suhu, curah hujan, dan variabel iklim lain yang mengikuti siklus tahunan yang kuat.

Dalam setiap kasus, struktur yang berulang adalah sinyalnya, dan SARIMA dibangun untuk menangkapnya.

Keterbatasan SARIMA

Mengetahui di mana sebuah alat bekerja dengan baik hanyalah setengah gambaran. SARIMA adalah baseline yang solid untuk deret waktu musiman, tetapi mengetahui batasannya adalah yang membedakan orang yang menggunakan model dengan baik dari yang menggunakannya secara membabi buta.

Model ini menangani tepat satu periode musiman. Jika data Anda memiliki banyak musiman, harian, mingguan, dan tahunan yang saling bertumpuk, SARIMA tidak akan memodelkan semuanya sekaligus. Metode seperti TBATS, Prophet, atau jaringan LSTM lebih natural dalam menangani banyak frekuensi musiman.

SARIMA juga mengasumsikan linearitas. Model ini memodelkan hubungan linear antara nilai masa lalu, galat masa lalu, dan observasi masa depan. Dinamika non-linear, umum pada deret waktu keuangan atau sistem kacau, memerlukan alat berbeda. Dan seperti ARIMA, SARIMA hanya mengandalkan riwayat deret itu sendiri. Jika Anda memiliki penggerak eksternal yang memengaruhi peramalan Anda, promosi, kejadian cuaca, indikator ekonomi, lihat SARIMAX, yang menambahkan variabel eksogen ke dalam kerangka SARIMA.

Terakhir, pemilihan parameter bisa benar-benar sulit. Dengan tujuh parameter yang harus dituning, ruang pencarian besar, dan proses fitting bisa lambat pada deret yang panjang. auto_arima() dari pmdarima membantu mengotomatisasi ini. Namun tidak ada jalan pintas untuk memahami apa arti parameter-parameter tersebut, itulah sebabnya kami membahas komponen-komponennya sebelum menyentuh kode apa pun.

Kesimpulan

Saya selalu berpikir SARIMA kurang mendapatkan apresiasi dalam kursus peramalan pengantar. Model ini diajarkan sebagai "ARIMA, tapi dengan hal-hal musiman," yang membuatnya terdengar seperti perluasan kecil. Padahal tidak. Parameter musiman bukan tempelan; parameter tersebut melakukan pekerjaan struktural nyata, menangkap lapisan perilaku data Anda yang tidak bisa dijangkau ARIMA.

Yang membuat SARIMA terasa pas dalam praktik adalah menyadari bahwa komponen non-musiman dan musiman bukan dua model terpisah yang berjalan paralel. Keduanya berinteraksi. Istilah AR dan MA bekerja bersama kembaran musimannya, masing-masing menangani skala waktu autokorelasi yang berbeda. Setelah itu klop, membaca plot ACF dan PACF tidak lagi terasa seperti cocokologi pola dan mulai terasa seperti benar-benar memahami data Anda.

Jika Anda bekerja dengan data bulanan, kuartalan, atau data dengan siklus teratur lainnya, SARIMA adalah titik awal yang tepat, bukan karena selalu menjadi jawaban akhir, tetapi karena memaksa Anda berpikir jernih tentang struktur deret Anda. Dari sana, SARIMAX menambahkan prediktor eksternal, dan metode seperti TBATS atau Prophet menangani kasus multi-musiman yang lebih berantakan. Time Series Forecasting Tutorial dan kursus ARIMA Models in Python kami sama-sama merupakan langkah lanjutan yang baik.

FAQ SARIMA

Apa kepanjangan SARIMA?

SARIMA adalah singkatan dari Seasonal AutoRegressive Integrated Moving Average. Model ini memperluas ARIMA standar dengan menambahkan parameter musiman—(P, D, Q) dan periode musiman S—yang menangkap pola berulang dalam data deret waktu, seperti siklus bulanan atau kuartalan.

Apa perbedaan antara ARIMA dan SARIMA?

ARIMA memodelkan pola non-musiman: tren, autokorelasi, dan efek moving average. SARIMA menambahkan lapisan kedua parameter (P, D, Q, S) yang memodelkan efek yang sama pada lag musiman. Jika data Anda menunjukkan pola berulang pada interval tetap—seperti penjualan lebih tinggi setiap Desember—SARIMA menangkapnya secara langsung, sedangkan ARIMA membiarkannya sebagai varians residual yang tidak terjelaskan.

Bagaimana cara memilih parameter SARIMA yang tepat?

Mulailah dengan memeriksa apakah deret Anda stasioner menggunakan uji Augmented Dickey-Fuller. Lalu periksa plot ACF dan PACF: orde AR (p) dan MA (q) non-musiman berasal dari pola cutoff pada lag non-musiman, sedangkan orde musiman P dan Q berasal dari puncak pada lag musiman. Anda juga dapat menggunakan auto_arima() dari paket pmdarima untuk mencari kombinasi parameter secara otomatis, menggunakan AIC atau BIC untuk memilih model terbaik.

Bagaimana cara menentukan periode musiman S untuk model SARIMA saya?

Periode musiman S mencerminkan seberapa sering pola berulang. Untuk data bulanan dengan musiman tahunan, S = 12. Untuk data kuartalan, S = 4. Untuk data mingguan, S = 52 (atau 52,18 yang dibulatkan). Jika periodenya tidak jelas, gunakan dekomposisi deret waktu atau periksa plot ACF untuk puncak yang berjarak teratur—puncak tersebut mengungkap frekuensi musiman dominan.

Bisakah SARIMA menangani beberapa periode musiman?

SARIMA standar menangani satu periode musiman pada satu waktu. Jika data Anda memiliki musiman berlapis—seperti permintaan listrik harian dengan siklus mingguan dan tahunan—Anda memerlukan alternatif seperti TBATS, Facebook Prophet, atau jaringan LSTM, yang dirancang untuk memodelkan struktur musiman yang tumpang tindih secara bersamaan.

Pustaka Python apa yang terbaik untuk memfitting model SARIMA?

Pustaka statsmodels di Python adalah pilihan standar, menawarkan SARIMAX() (yang cukup fleksibel untuk memfitting model SARIMA tanpa variabel eksogen). Untuk pemilihan parameter otomatis, fungsi auto_arima() dari pustaka pmdarima melakukan grid search dan layak ditambahkan ke alur kerja Anda saat Anda tidak yakin harus mulai dari nilai parameter yang mana.

Bagaimana cara mengevaluasi apakah model SARIMA saya sudah cocok?

Setelah fitting, jalankan plot_diagnostics() pada objek hasil dan periksa apakah residual terlihat seperti derau putih tanpa struktur—terutama tidak ada puncak pada lag musiman di ACF. Bandingkan spesifikasi model yang bersaing menggunakan AIC atau BIC (semakin rendah semakin baik). Untuk akurasi peramalan pada data yang disisihkan, RMSE dan MAPE adalah metrik yang paling umum.

Apa itu SARIMAX, dan kapan saya harus menggunakannya alih-alih SARIMA?

SARIMAX menambahkan variabel eksogen—prediktor eksternal—ke dalam kerangka SARIMA. Gunakan ketika Anda memiliki faktor terukur yang memengaruhi deret Anda di luar riwayatnya sendiri: belanja promosi yang memengaruhi penjualan ritel, suhu yang memengaruhi permintaan energi, atau indikator makroekonomi yang memengaruhi pendapatan kuartalan. Jika satu-satunya data Anda adalah deret itu sendiri, SARIMA sudah cukup; begitu Anda memiliki penggerak eksternal yang relevan, SARIMAX memungkinkan Anda memasukkannya secara langsung.

Topik
Terkait

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat Lebih BanyakLihat Lebih Banyak