Exponential smoothing meramal dengan memuluskan; model autoregressive (AR) meramal dengan regresi. Gagasan intinya satu kalimat: nilai hari ini adalah fungsi linear dari nilai-nilai sebelumnya ditambah noise. Kedengarannya sederhana, tetapi dari persamaan itulah seluruh keluarga ARIMA dibangun — dan memahaminya sekarang akan membuat chapter ARIMA terasa seperti menyusun potongan yang sudah dikenal. Pada chapter ini kita tulis persamaan AR(p), ukur kekuatan hubungan antar-lag lewat korelasi, lalu pasang model AutoReg dari statsmodels pada penjualan Toko Kopi Kita dan tafsirkan koefisiennya.
Ide Dasar AR: Regresi pada Nilai Lampau #
Model autoregressive orde p — ditulis AR(p) — menuliskan nilai sekarang sebagai kombinasi linear dari p nilai lampau:
y_t = c + phi_1 * y_(t-1) + phi_2 * y_(t-2) + ... + phi_p * y_(t-p) + eps_t
y_t = nilai deret pada waktu t
c = konstanta (intercept)
phi_k = koefisien untuk lag ke-k
eps_t = noise pada waktu tNamanya menjelaskan dirinya sendiri: auto (diri sendiri) regressive (regresi) — regresi yang variabel bebasnya adalah salinan variabel terikat itu sendiri, digeser beberapa langkah ke belakang. Angka p menentukan seberapa jauh memori modelnya: AR(1) hanya melihat kemarin, AR(7) melihat satu pekan penuh. Jumlah lag yang tepat biasanya mengikuti struktur datanya — untuk pola mingguan, lag ke-7 adalah lag yang menyimpan informasi paling langsung: hari yang sama pekan lalu.
Mengukur Hubungan Antar-Lag dengan Korelasi #
Sebelum memilih p, kita ukur dulu lag mana yang benar-benar berhubungan dengan nilai sekarang. Caranya masih memakai jurus chapter pertama — shift() lalu .corr() — kali ini untuk delapan lag sekaligus, dari 1 sampai 14 hari.
import numpy as np
import pandas as pd
rng = np.random.default_rng(42)
n = 42
tanggal = pd.date_range("2025-01-06", periods=n, freq="D")
bobot_hari = np.array([0, 1, 2, 3, 8, 14, 11], dtype=float)
gelas = 40 + 0.6 * np.arange(n) + bobot_hari[tanggal.dayofweek] + rng.normal(0, 4.0, n)
deret = pd.Series(gelas.round().astype(int), index=tanggal, name="gelas")
baris = []
for lag in [1, 2, 3, 4, 5, 6, 7, 14]:
korelasi = deret.corr(deret.shift(lag))
baris.append({"lag": lag, "korelasi": round(korelasi, 3)})
print(pd.DataFrame(baris).to_string(index=False))Output yang Dihasilkan:
lag korelasi
1 0.773
2 0.545
3 0.460
4 0.448
5 0.494
6 0.708
7 0.862
14 0.872Cara membaca tabelnya:
- Lag 1 (0,773) tinggi karena dua hal sekaligus: tren yang bergerak pelan (nilai kemarin dan hari ini sama-sama berada di level serupa) dan kontinuitas antar hari.
- Lag 2 sampai 5 melorot ke 0,45-0,55 — begitu keluar dari kedekatan harian, hubungannya melemah.
- Lag 6 dan 7 menanjak kembali ke 0,708 dan 0,862 — ini sidik jari musiman mingguan: Jumat bersama Jumat pekan lalu, Sabtu bersama Sabtu pekan lalu. Lag 14 (0,872) menegaskan hal yang sama dari jarak dua pekan.
- Tabel seperti ini adalah bentuk sederhana dari ACF (autocorrelation function) — statsmodels menyediakan
plot_acfdanplot_pacfuntuk menggambarkannya beserta batas keberartian; ACF menunjukkan hubungan total (langsung + tak langsung), sedangkan PACF (partial autocorrelation) mengisolasi pengaruh langsung tiap lag setelah lag-lain dikendalikan. Pasangan grafik itulah alat klasik memilih p dan q pada ARIMA.
Memasang Model AutoReg #
Korelasi menunjuk ke lag 7, jadi kita pasang AR(7): regresi nilai sekarang atas tujuh nilai pekan yang baru lewat. Kelas AutoReg dari statsmodels mengerjakannya dengan metode kuadrat terkecil — mekanisme yang sama dengan LinearRegression pada supervised learning.
import numpy as np
import pandas as pd
from statsmodels.tsa.ar_model import AutoReg
rng = np.random.default_rng(42)
n = 42
tanggal = pd.date_range("2025-01-06", periods=n, freq="D")
bobot_hari = np.array([0, 1, 2, 3, 8, 14, 11], dtype=float)
gelas = 40 + 0.6 * np.arange(n) + bobot_hari[tanggal.dayofweek] + rng.normal(0, 4.0, n)
deret = pd.Series(gelas.round().astype(int), index=tanggal, name="gelas")
model = AutoReg(deret, lags=7, old_names=False).fit()
print(model.params.round(3))
print()
ramalan = model.predict(start=42, end=48)
print(ramalan.round(1))Output yang Dihasilkan:
const 7.360
gelas.L1 0.302
gelas.L2 -0.079
gelas.L3 -0.050
gelas.L4 -0.025
gelas.L5 -0.016
gelas.L6 0.251
gelas.L7 0.551
dtype: float64
2025-02-17 70.2
2025-02-18 65.0
2025-02-19 63.8
2025-02-20 68.0
2025-02-21 77.7
2025-02-22 83.8
2025-02-23 81.1
Freq: D, dtype: float64Mari kita bedah hasilnya:
AutoReg(deret, lags=7).fit()membangun 35 baris data latih (42 titik dikurangi 7 lag) — tiap baris berisi tujuh nilai lampau dan satu nilai sekarang — lalu menaksir koefisienphi_1sampaiphi_7beserta konstanta.- Koefisien terbesar adalah
gelas.L7(0,551): nilai hari yang sama pekan lalu adalah prediktor tunggal terkuat, persis seperti janji tabel korelasi.gelas.L6(0,251) menyusul — hari yang bersebelahan dalam pola akhir pekan (Sabtu-Minggu) juga saling menjelaskan. gelas.L2sampaigelas.L5nyaris nol (-0,079 s.d. -0,016): hari Selasa yang jauh dari akhir pekan nyaris tak menambah informasi setelah kemarin dan minggu lalu diperhitungkan. Inilah persis wajah PACF yang dibicarakan di atas — koefisien AR memang mengendalikan lag-lag lain.predict(start=42, end=48)meramal tujuh hari setelah data berakhir; indeks tanggal dilanjutkan otomatis oleh statsmodels. Bentuk ramalannya kini bergelombang mingguan — menurun ke hari kerja awal pekan (63,8) lalu memuncak Sabtu (83,8) — sesuai musiman yang dipelajari.- Jumlah koefisien lag sekitar 0,93 (0,302 - 0,079 - 0,050 - 0,025 - 0,016 + 0,251 + 0,551) nyaris menyentuh 1. Model hampir bersifat random walk-ish: ia memindahkan level hari ini ke besok hampir utuh — cara AR mengakomodasi tren tanpa benar-benar menstasionerkannya.
Rangkuman #
- AR(p) menuliskan nilai sekarang sebagai kombinasi linear p nilai lampau plus noise; p adalah panjang memori model.
- Tabel korelasi lag adalah ACF versi manual; lag 7 dan 14 yang tinggi pada data kita menandakan musiman mingguan yang layak masuk model.
AutoRegmenaksir koefisien via kuadrat terkecil; koefisien lag 7 terbesar (0,551) dan lag tengah pekan nyaris nol — struktur mingguan terbaca pada bobotnya.- Memasang AR pada deret bertren membuat jumlah koefisien mendekati 1; jalur yang benar adalah differencing dulu, lalu AR — tepat kerangka ARIMA.
Kita kini menguasai dua bata bangunan ARIMA: differencing dari chapter Stasioneritas, dan AR dari chapter ini. Satu bata terakhir belum kita bahas — komponen moving average dalam artian model (bukan pemulusan): error kemarin yang ikut menjelaskan hari ini. Ketiganya dirangkai pada chapter berikutnya, ARIMA .