Jaringan Syaraf Tiruan untuk Memprediksi Jumlah Penduduk JUN 8 Posted by adi pamungkas
1 Vote
Salah satu penerapan algoritma jaringan syaraf tiruan adalah untuk sistem prediksi( prediksi ( forecasting).. forecasting) Prediksi dapat dilakukan dalam bentuk urutan waktu (time series) atau series) atau dapat pula dilakukan dalam bentuk bukan urutan waktu. Dalam sistem prediksi urutan waktu, data masukan adalah berupa beberapa data dalam kurun waktu tertentu, sedangkan data keluarannya adalah data pada kurun waktu berikutnya. Pada sistem prediksi ini data keluaran diasumsikan hanya dipengaruhi oleh data-data sebelumnya. Contoh sistem prediksi urutan waktu: sistem untuk memprediksi jumlah penduduk pada bulan tertentu di mana data masukannya adalah jumlah penduduk pada 12 bulan sebelumnya. Untuk sistem prediksi bukan urutan waktu, data masukannya adalah berupa beberapa variabel data yang mempengaruhi nilai data keluaran, sedangkan data keluarannya adalah berupa data pada kurun waktu berikutnya. Pada sistem prediksi ini variabel-variabel yang mempengaruhi nilai data keluaran diikutsertakan untuk melakukan prediksi. Contoh sistem prediksi bukan urutan waktu: sistem untuk memprediksi jumlah penduduk pada bulan tertentu di mana data masukannya adalah jumlah penduduk pada 1 bulan sebelumnya, tingkat kesejahteraan penduduk, tingkat keamanan lingkungan, faktor politik, dan faktor-faktor demografi lainnya pada 1 bulan sebelumnya. Berikut ini merupakan contoh pemrograman menggunakan bahasa pemrograman matlab untuk melakukan prediksi jumlah penduduk pada suatu daerah X dengan sistem prediksi urutan waktu menggunakan algoritma jaringan syaraf tiruan radial basis function (rbf neural network). Langkah-langkah
nya
adalah
sebagai
berikut:
1. Mempersiapkan data jumlah penduduk. Data jumlah penduduk di suatu daerah X disajikan per
bulan
dari
tahun
2006
sampai
dengan
tahun
2016.
2. Untuk mereduksi perhitungan komputasi yang terlalu besar, maka dilakukan normalisasi data ke dalam range 0,1 s.d 0,9 menggunakan persamaan berikut:
di mana: X’ =
data hasil normalisasi
X = data asli/data awal a = nilai maksimum data asli b = nilai minimum data asli Perintah yang digunakan yaitu: 1 2 3 4 5 6 7
clc; clear; close all; warning off all; data = xlsread('Book1',1,'E6:P16'); % Proses Normalisasi Data max_data = max(max(data)); min_data = min(min(data));
8 9 10 11 12 13 14 15
[m,n] = size(data); data_norm = zeros(m,n); for x = 1:m for y = 1:n data_norm(x,y) = 0.1+0.8*(data(x,y)-min_data)/(max_datamin_data); end end
sehingga diperoleh data hasil normalisasi seperti yang ditunjukkan pada gambar di bawah ini
3. Pada pemrograman ini, data jumlah penduduk diprediksi berdasarkan data jumlah penduduk 12 bulan sebelumnya. Data latih yang digunakan adalah data jumlah penduduk dari bulan Januari 2006 sampai dengan bulan November 2012 (7 tahun). Sedangkan target latih adalah data jumlah penduduk dari bulan Januari 2007 sampai dengan bulan Desember 2012 (7 tahun). Gambaran dari
penggunaan
data
latih
dan
target
latih
ditunjukkan
pada
tabel
berikut:
Perintah yang digunakan untuk menyusun data latih dan target latih seperti pada pola di atas adalah: 1 2 3 4 5 6 7 8 9 10 11
% Pelatihan data_norm = data_norm'; tahun_latih = 7; % Januari 2006 s.d November 2012 data_latih = zeros(12,72); jumlah_bulan = 12; for n = 1:jumlah_bulan*(tahun_latih-1) for m = 1:jumlah_bulan data_latih(m,n) = data_norm(m+n-1); end end
12 13
target_latih = data_norm(jumlah_bulan+1:jumlah_bulan*tahun_latih); % Januari 2007 Desember 2012
sehingga susunan data latih dan target latih yang diperoleh adalah
4. Melakukan pelatihan jaringan radial basis function dengan masukan berupa data latih dan target latih yang sebelumnya telah disusun. Perintah yang digunakan adalah: 1 2 3 4 5 6 7
% performance goal (MSE) error_goal = 1e-6; % choose a spread constant spread = 1.2; % choose max number of neurons K = 10;
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
% number of neurons to add between displays Ki = 20; % create a neural network net = newrb(data_latih,target_latih,error_goal,spread,K,Ki); % inisialisasi bobot load bobot_awal net.IW{1,1} = bobot_hidden; net.LW{2,1} = bobot_keluaran; net.b{1,1} = bias_hidden; net.b{2,1} = bias_keluaran; % Proses training net.trainFcn = 'traingdx'; [net_keluaran,tr,~,E] = train(net,data_latih,target_latih); % Hasil setelah pelatihan nilai_error = E; error_MSE = (1/n)*sum(nilai_error.^2);
26 27 28 29 30 31
save net_keluaran.mat net_keluaran
Tampilan
pelatihan
jaringan
ditunjukkan
pada
gambar
di
bawah
ini
5. Menampilkan hasil pelatihan dalam bentuk grafik beserta nilai MSE (Mean Square Error) dan koefisien korelasi. Perintah yang digunakan adalah: 1 2 3 4 5 6
% Hasil prediksi hasil_latih = sim(net_keluaran,data_latih); hasil_latih = ((hasil_latih-0.1)*(max_data-min_data)/0.8)+min_data; data = data'; target_latih_asli = data(jumlah_bulan+1:jumlah_bulan*tahun_latih); % januari 2007 januari 2013
7 8 9 10 11 12 13
% Menampilkan grafik hasil pelatihan figure, plot(hasil_latih,'bo-') hold on plot(target_latih_asli,'ro-') hold off grid on
14 15 16 17
title(strcat(['Grafik Keluaran JST vs Target dengan nilai MSE = ',... num2str(error_MSE)])) xlabel('Bulan ke-') ylabel('Jumlah Penduduk') legend('Keluaran JST','Target','Location','Best')
18 19 20
figure, plotregression(target_latih_asli,hasil_latih,'Regression')
21 22
Grafik
keluaran
yang
dihasilkan
dari
proses
Sedangkan grafik korelasi yang diperoleh yaitu:
pelatihan
adalah
sebagai
berikut:
Nilai MSE dan koefisien korelasi yang dihasilkan pada proses pelatihan berturut-turut adalah sebesar 0.00066804 dan 0.85259. Kedua nilai tersebut menunjukkan bahwa proses pelatihan jaringan radial basis function dapat memprediksi jumlah penduduk dengan baik, sehingga jaringan yang diperoleh dapat digunakan untuk melakukan prediksi pada proses pengujian. 5. Mempersiapkan data uji dan target uji. Pada proses pengujian, target uji digunakan hanya untuk memvalidasi hasil pengujian. Gambaran penggunaan data uji dan target uji ditunjukkan pada
tabel
berikut:
Perintah yang digunakan untuk menyusun data uji dan target uji seperti pada pola di atas adalah: 1 2 3 4
% Pengujian tahun_uji = 5; % Desember 2012 s.d November 2016 data_uji = zeros(12,48); jumlah_bulan = 12;
5 6 7 8 9
for n = 1:jumlah_bulan*(tahun_uji-1) for m = 1:jumlah_bulan data_uji(m,n) = data_norm(72+m+n-1); end end
10 11 12
target_uji = data_norm(jumlah_bulan*tahun_uji+1:(jumlah_bulan*tahun_uji)+48); % Ja Desember 2016
sehingga susunan data uji dan target uji yang diperoleh adalah
6. Menampilkan hasil pengujian dalam bentuk grafik beserta nilai MSE (Mean Square Error) dan koefisien korelasi. Perintah yang digunakan adalah: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
% Hasil prediksi hasil_uji = sim(net_keluaran,data_uji); error_MSE_uji = mse(target_uji,hasil_uji); hasil_uji = ((hasil_uji-0.1)*(max_data-min_data)/0.8)+min_data; target_uji_asli = data(jumlah_bulan*tahun_uji+1:(jumlah_bulan*tahun_uji)+48); % Ja Desember 2016 % Menampilkan grafik hasil pengujian figure, plot(hasil_uji,'bo-') hold on plot(target_uji_asli,'ro-') hold off grid on title(strcat(['Grafik Keluaran JST vs Target dengan nilai MSE = ',... num2str(error_MSE_uji)])) xlabel('Bulan ke-') ylabel('Jumlah Penduduk') legend('Keluaran JST','Target','Location','Best')
19 20 21 22
figure, plotregression(target_uji_asli,hasil_uji,'Regression')
Grafik
keluaran
yang
dihasilkan
dari
proses
Sedangkan grafik korelasi yang diperoleh yaitu:
pengujian
adalah
sebagai
berikut:
Nilai MSE dan koefisien korelasi yang dihasilkan pada proses pengujian berturut-turut adalah sebesar 0.0034992 dan 0.91069. Kedua nilai tersebut menunjukkan bahwa proses pengujian jaringan radial basis function dapat memprediksi jumlah penduduk dengan baik, sehingga jaringan yang diperoleh dapat digunakan untuk melakukan prediksi jumlah penduduk pada bulanbulan berikutnya. 7. Melakuan prediksi untuk bulan Januari 2017 sampai dengan Desember 2017 (12 bulan). Perintah yang digunakan adalah: 1 2 3
load net_keluaran load data_prediksi_rbf load hasil_prediksi_rbf
4 5
data_prediksi = data_prediksi_rbf(:,12);
6 7 8
% Hasil prediksi hasil_prediksi_norm = sim(net_keluaran,data_prediksi);
9 10 11 12 13 14 15
hasil_prediksi = ((hasil_prediksi_norm-0.1)*(max_datamin_data)/0.8)+min_data; data_prediksi = data_prediksi(2:end,:); data_prediksi = [data_prediksi;hasil_prediksi_norm]; data_prediksi_rbf = [data_prediksi_rbf,data_prediksi]; hasil_prediksi_rbf = [hasil_prediksi_rbf,hasil_prediksi];
16 17 18 19 20 21 22 23 24 25
% save data_prediksi_rbf data_prediksi_rbf % save hasil_prediksi_rbf hasil_prediksi_rbf figure, plot(hasil_prediksi_rbf); grid on title('Hasil Prediksi Jumlah Penduduk Bulan Januari 2017 s.d Desember 2017') xlabel('Bulan ke-') ylabel('Jumlah Penduduk') legend('Hasil Prediksi','Target','Location','Best')
26
Grafik hasil prediksi yang dihasilkan yaitu
Hasil dari pelatihan, pengujian, dan prediksi di atas menunjukkan bahwa jaringan syaraf tiruan radial basis function mampu untuk melakukan prediksi jumlah penduduk dengan baik. Source code dan data pada pemrograman di atas dapat diunduh melalui halaman berikut ini: