Kita mengenal peramalan berdasarkan time series data dengan menggunakan regresi saat di bangku sekolah dahulu. Ternyata peramalan bisa juga dengan menggunakan Jaringan Syaraf Tiruan (JST). Peramalan dengan JST memiliki keunggulan karena kemampuan JST yang sangat baik dalam menangani data non-linear. Ditambah lagi, JST mampu disisipkan dengan data pendamping selain data time series yang dikenal dengan istilah intervening indicator atau exogenous input. Jika pada postingan sebelumnya menggunakan referensi dari situs ini, maka kali ini kita coba dengan menggunakan fungsi bawaan Matlab yang dikenal dengan istilah Time Series NARX Feedback Neural Network. NARX itu sendiri singkatan dari Nonlinear Autoregressive Network wit eXogenous input. Kita akan mencoba meramalkan data penurunan jumlah taman seperti tabel di bawah ini (mengisi kolom yang ditunjukan dengan tanda tanya).
Data exogenous adalah populasi yang merupakan hasil dari proyeksi yang menunjukan trend bertambah, sementara park menunjukan trend menurun. Apakah JST sanggup memprediksi berapa penurunan jumlah taman sebagai akibat dari kenaikan populasi? Buka command window Matlab.
Masukkan data populasi X. Cara mudahnya tinggal anda copy-paste dari excel:
-
X=[1845005 1873470 1882869 2334142 2733030]
-
X=con2seq(X)
Di sini fungsi con2seq bermaksud mengkonversi data continyu menjadi sequensial yang jika dilihat di workspace window berupa tipe data “cell”. Sementara itu untuk data populasi untuk meramalkan adalah lima yang terakhir:
-
X2=[2334142 2733030 2943860 3155340 3369800]
-
X2=con2seq(X2)
Perhatikan untuk X2 sebagai prediksi di sini ada “shift” (untuk prediksi berikutnya ada data yang terkesan diulangi, lihat yang berwarna merah) dengan X sebelumnya. Lihat kembali prinsip-prinsip dasar windowing pada tulisan terdahulu. Untuk data park yang akan diramalkan, gunakan variabel T
-
T=[1904 1904 1887 1858 1772]
-
T=con2seq(T)
Intruksi berikut ini adalah untuk merakit NARX close dan open loupe, dilanjutkan dengan prediksi lima terakhir.
-
net = narxnet(1:2,1:2,10); %membuat NARX dgn riwayat 2 data sebelumnya (1:2)
-
[x,xi,ai,t] = preparets(net,X,{},T); %menyiapkan data training dan target “preparets=prepare time series”
-
net = train(net,x,t,xi,ai); %training NARX dengan data dari preparets
-
y = net(x,xi,ai); %memunculkan data hasil training untuk patokan validasi
-
netc = closeloop(net); %membuat NARX menjadi lingkar tertutup (serial-paralel)
-
view(netc); %melihat network lingkar tertutup NARX
-
[x,xi,ai,t] = preparets(netc,X,{},T); %persiapan data untuk memprediksi data 3,4,dan 5
-
yc = netc(x,xi,ai); %simulasi data 3,4,5 (cek errornya .. bandingkan dengan T)
Perintah view bermaksud melihat struktur NARX yang baru saja dirakit seperti gambar di bawah ini:
Gunakan fungsi “preparets” untuk populasi lima tahun terakhir sehingga dihasilkan network (netc) untuk memprediksi park berdasarkan data exogenous populasi.
-
[x2,xi,ai,t] = preparets(netc,X2,{},T); %persiapan simulasi data yang akan datang
-
yc2 = netc(x2,xi,ai) %simulasikan data yang akan datang 6,7,8,9,10
Untuk membuat plot prediksinya, konversi kembali data sequensial menjadi desimal dengan fungsi “cell2mat” seperti berikut ini:
-
plot([cell2mat(T) cell2mat(yc2)])
Apakah hasil itu sudah fix? Ternyata belum. Coba saja running ulang, akan menghasilkan prediksi tiga tahun kedepan yang berbeda. Berikut ini running kedua saya:
Sepertinya cara ini kurang baik, bisa gunakan cara yang mudah dengan GUI di postingan tentang NARNET dan NARX
Semoga bisa menjadi inspirasi.