MODUL PERKULIAHAN
W542100001 –
Analisis Data
Analisis Data berbasis waktu
dengan statsmodels
Abstrak Sub-CPMK
Dalam modul ini kita akan memeriksa beberapa teknik umum yang digunakan
dalam analisis deret waktu dengan menerapkannya pada kumpulan data yang berisi nilai
penutupan harian untuk indeks pasar saham S&P 500 dari tahun 1950 hingga saat ini.
Tujuannya adalah untuk mengeksplorasi beberapa ide dan konsep dasar dari analisis
deret waktu, dan mengamati efeknya ketika diterapkan pada kumpulan data dunia nyata.
Meskipun tidak mungkin untuk benar-benar memprediksi perubahan dalam indeks
menggunakan teknik ini, ide-ide yang disajikan di sini secara teoritis dapat digunakan
sebagai bagian dari strategi yang lebih besar yang melibatkan banyak variabel tambahan
untuk melakukan upaya regresi atau pembelajaran mesin.
Analisis deret waktu adalah cabang statistik yang melibatkan penalaran tentang
urutan berurutan dari nilai-nilai terkait untuk mengekstrak statistik yang bermakna dan
karakteristik data lainnya. Ini digunakan dalam berbagai disiplin ilmu termasuk
ekonometrika, pemrosesan sinyal, prakiraan cuaca, dan pada dasarnya bidang lain yang
melibatkan data deret waktu. Teknik-teknik ini sering digunakan untuk mengembangkan
model yang dapat digunakan untuk mencoba meramalkan nilai masa depan dari suatu
deret, baik sendiri atau bersama dengan variabel lain.
Hal pertama yang jelas untuk diperhatikan, selain dari dua penurunan besar di ujung
ekor yang sesuai dengan kejatuhan pasar pada tahun 2002 dan 2008, adalah bahwa data
tersebut jelas tidak stasioner. Ini masuk akal untuk data pasar karena cenderung naik
dalam jangka panjang lebih banyak daripada turun. Ini adalah masalah untuk analisis
deret waktu meskipun karena data non-stasioner sulit untuk dijelaskan. Hal pertama yang
bisa kita coba adalah first difference dari seri tersebut. Dengan kata lain, kurangi nilai
sebelumnya t-1 dari nilai t saat ini untuk mendapatkan selisih d(t).
stock_data['First Difference'] = stock_data['Close'] -
stock_data['Close'].shift()
stock_data['First Difference'].plot(figsize=(16, 12))
Jadi itu memberi kita harga penutupan asli dengan transformasi log yang diterapkan
untuk "meratakan" data dari kurva eksponensial ke kurva linier. Salah satu cara untuk
melihat secara visual efek yang dimiliki transformasi log adalah dengan menganalisis
varians dari waktu ke waktu. Kita dapat menggunakan statistik varians bergulir dan
membandingkan seri asli dan seri yang dicatat.
stock_data['Original Variance'] = pd.rolling_var(stock_data['Close'], 30,
min_periods=None, freq=None, center=True)
stock_data['Log Variance'] = pd.rolling_var(stock_data['Natural Log'],
30, min_periods=None, freq=None, center=True)
Hasil autokorelasi dan autokorelasi parsial sangat dekat satu sama lain (saya hanya
memplot hasil autokorelasi di atas). Hal ini menunjukkan bahwa tidak ada korelasi yang
signifikan (> 0,2) antara nilai pada waktu t dan setiap saat sebelum t hingga 40 langkah di
belakang. Dengan kata lain, seri ini adalah jalan acak.
13.6. Dekomposisi
Teknik menarik lainnya yang bisa kita coba adalah dekomposisi. Ini adalah teknik
yang mencoba memecah deret waktu menjadi faktor tren, musiman, dan residual.
Statsmodels hadir dengan fungsi dekomposisi di luar kotak.
from statsmodels.tsa.seasonal import seasonal_decompose
Agak sulit untuk mengatakannya, tetapi tampaknya perubahan yang kami perkirakan
umumnya jauh lebih kecil daripada perubahan yang sebenarnya. Mungkin ada baiknya
melihat lebih dekat pada subset data untuk melihat apa yang sebenarnya terjadi.
Jadi sekarang cukup jelas bahwa ramalan itu jauh. Kami memprediksi variasi kecil kecil
relatif terhadap apa yang sebenarnya terjadi sehari-hari. Sekali lagi, ini kurang diharapkan
dengan model rata-rata bergerak sederhana dari rangkaian waktu berjalan acak. Tidak
ada informasi yang cukup dari hari-hari sebelumnya untuk memperkirakan secara akurat
apa yang akan terjadi pada hari berikutnya.
Model rata-rata bergerak tampaknya tidak berjalan dengan baik. Bagaimana dengan
model pemulusan eksponensial? Pemulusan eksponensial menyebarkan dampak dari
nilai-nilai sebelumnya menggunakan pembobotan eksponensial, sehingga hal-hal yang
terjadi baru-baru ini lebih berdampak daripada hal-hal yang terjadi di masa lalu.
Mungkinkah bentuk rata-rata yang "lebih cerdas" ini akan lebih akurat?
model = sm.tsa.ARIMA(stock_data['Logged First Difference'].iloc[1:],
order=(0, 0, 1))
results = model.fit(disp=-1)
stock_data['Forecast'] = results.fittedvalues
stock_data[['Logged First Difference', 'Forecast']].plot(figsize=(16,
12))