Jaringan Syaraf Tiruan untuk Memprediksi Jumlah Penduduk


Salah satu penerapan algoritma jaringan syaraf tiruan adalah untuk sistem prediksi (forecasting). Prediksi dapat dilakukan dalam bentuk urutan waktu (time 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 dianggap 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:

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));

[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_data-min_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:

% 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

target_latih = data_norm(jumlah_bulan+1:jumlah_bulan*tahun_latih); % Januari 2007 s.d 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:

% performance goal (MSE)
error_goal = 1e-6;

% choose a spread constant
spread = 1.2;

% choose max number of neurons
K = 10;

% 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);

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:

% 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 s.d januari 2013

% Menampilkan grafik hasil pelatihan
figure,
plot(hasil_latih,'bo-')
hold on
plot(target_latih_asli,'ro-')
hold off
grid on
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')

figure,
plotregression(target_latih_asli,hasil_latih,'Regression')

Grafik keluaran yang dihasilkan dari proses pelatihan adalah sebagai berikut:

Sedangkan grafik korelasi yang diperoleh yaitu:

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:

% Pengujian
tahun_uji = 5; % Desember 2012 s.d November 2016
data_uji = zeros(12,48);
jumlah_bulan = 12;

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

target_uji = data_norm(jumlah_bulan*tahun_uji+1:(jumlah_bulan*tahun_uji)+48); % Januari 2013 s.d 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:

% 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); % Januari 2013 s.d 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')

figure,
plotregression(target_uji_asli,hasil_uji,'Regression')

Grafik keluaran yang dihasilkan dari proses pengujian adalah sebagai berikut:

Sedangkan grafik korelasi yang diperoleh yaitu:

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 bulan-bulan berikutnya.

7. Melakuan prediksi untuk bulan Januari 2017 sampai dengan Desember 2017 (12 bulan).

Perintah yang digunakan adalah:

load net_keluaran
load data_prediksi_rbf
load hasil_prediksi_rbf

data_prediksi = data_prediksi_rbf(:,12);

% Hasil prediksi
hasil_prediksi_norm = sim(net_keluaran,data_prediksi);
hasil_prediksi = ((hasil_prediksi_norm-0.1)*(max_data-min_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];

% 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')

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 diperoleh melalui halaman berikut ini: Source Code

Posted on July 26, 2017, in Data mining, Pengenalan Pola and tagged , , , , , , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink. 96 Comments.

  1. Salam Mas Adi… mohon izin bertanya, masih benar2 baru belajar ANN.
    Saya sudah mengikuti langkah2 persis spt di atas, dgn data excelnya manual sy ketik ulang.
    Nah, saat create a neural network, hasil run-nya menyebutkan:
    Error using load
    Unable to read file ‘bobot_awal’. No such file or directory.

    File ‘bobot_awal’ ini sy bisa peroleh dimana yaa?
    Mohon petunjuk.

  2. Salam Mas Adi… mohon izin bertanya lagi.
    Dari data yg sudah dinormalisasi, hasil perolehan sy
    data latih 12×72, target latih 1×72

    sementara data Mas Adi di atas
    data latih 72×12, target latih 72×1.

    Dimana letak kesalahannya sehingga susunan data sy menjadi berbeda?
    Mohon petunjuk.

  3. Maaf pak mau tanya, itu kan tertera rumus untuk normalisasi, nah kalo mau mengembalikan dari normalisasi gimana ya ataubdengan istilah lain denormalisasi? Terimakasih

  4. Ada tidak pak contoh jst Bp yang d terapkan pada web/php. Terimakasih

  5. Kalo cara menampilkan iteraasi dan mse atau semuanya proses d command window gmn ya pak? Kan hasil runinngnya itu sepertinya grafik ya? Makasih

  6. mas mau tanya mas kalau misal prediksi penyakit terbanyak yang akan muncul data yang di ambil data kunjungan di puskesmas berdasarkan 5 penyakit terbanyak 5 tahun terakhir nantinya yang akan menjadi data target apa mas?
    outputnya penyakit terbanyak yang muncul tahun berikutnya? apa sama dengan yang mas bikin?
    makasi mas

  7. kalo data targetnya gimana mas…soalnya saya masih bingung menentukan data target…
    makasih sebelumnya mas

  8. mas adi,, kalo untuk madaline, ada?

  9. Ijin bertanya, untuk menetukan bobot awal seperti apa langkahnya? Terima kasih

  10. Wah terimakasih banyak kak, ini artikel yang saya cari-cari, terima kasih ya sudah share…
    Untuk tutorial aplikasi fuzzy ada ga kak? mau saya pakai judul skripsi…

    Website yang sangat bermanaat kak ,,, Perlu di bookmark nih 🙂

  11. sangat menarik mas Adi..

  12. mas ini utk matlab versi brp ya??

  13. Rbf nya pake k means yah?

  14. mas adi tanya dung..

    u code prediksi ke depan ada (load) data_prediksi_rbf dan (load) hasil_prediksi_rbf.kedua data tersebut diambil/diperoleh dari mana??
    trimaksh

  15. untuk hasil di comand windows nya kok g ada gan ya.

  16. pengen tau hasil di comand windows nya.

  17. Maaf pak, mau tanya yang denormalisasi itu data min dan data max dari tahun yang tertentu apa dari seluruh tahun? Terimakasih

  18. Mksd saya seluruh data

  19. Berarti misal data dr 2008 – 2016 , yang d pake min max nya dari semua tahun tersebut?

  20. Maaf pak mau tanya, misal untuk prediksi itu yang d gunakan untuk denormalisasi itu yang target atau data aktualnya.fungsi target d gunakan untuk apa pak? Terimakasih

  21. Maaf mau bertanya juga mas. Cara membuat file bobot awalnya bagaimana ya mas? Bisa tolong dijelaskan hehe.
    Terimakasih sebelumnya mas

  22. maaf mas mau bertanya, denormalisasi itu max dan min datanya dari seluruh data uji?

  23. ada referensi denormalisasinya mas, saya masih kurang paham mas
    saya hitung manual hasilnya 0,sekian
    terima kasih

  24. min, dalam proses PCA itu datanya harus distandarisasikan min? kalau iya, syntax standarisasinya apa min ?

  25. min, program sayakan penggabungan PCA dan JST, jadi pas di PCA nya itu, datanya langsung dibagi data training dan testing ngga min?
    trus min, setelah proses pca selesai, nilai apanya ya min yang dimasukin ke input di jst jika kita menggunakan perintah princomp?

  26. misi min mau nanya saya masih pemula dalam hal ini,untuk program misalkan tanpa menggunakan nntools (newrb) bagaimana caranya mohon pencerahan trims?

  27. Mau nanya mas,,

    apakah ada contoh/referensi pemograman matlab untuk prediksi tpi tanpa menggunakan NNTool ?,

    terimakasih…

    Warm Regards,,,

    Mahasiswa Legend

  28. mas adi tanya dong..

    u code prediksi ke depan ada (load) data_prediksi_rbf dan (load) hasil_prediksi_rbf.kedua data tersebut didapatkan dari mana ya? di komen diatas di jelaskan untuk mendapatkan data tersebut, mohon dijelaskan pak proses tersebut untuk mendapatkan data tersebut.

    Terimakasih

    • data tersebut diperoleh dari hasil prediksi periode sebelumnya

    • ka adi, data hasil prediksi periode sebelumnya itu didapatkan menggunakan metode yang sama atau tidak?
      jika menggunakan metode yang sama, mohon pencerahan gmana cara nya untuk mendapatkan data tersebut.

    • metode yang digunakan sama
      pada materi diatas diimplementasikan perambaran jaringan syaraf tiruan agar diperoleh nilai hasil prediksi

  29. min, cara meningkatkan nilai akurasi pada JST bagaimana min ?

  30. maaf kak, ingin menanyakan, ketika menjalankan langkah ke-4, selalu gagal, itu kenapa ya?
    mohon pencerahannya 😀

  31. selamat siang mas,
    saya telah membaca-baca blog pribadi anda, dan hal ini sangat membantu saya dalam mengerjakan penelitian saya. terimakasih.
    Yang ingin saya tanyakan, pertimbangan pemilihan angka pada variabel
    1. bias_hidden
    2. bias_keluaran
    3. bobot_hidden
    4. bobot_keluaran
    itu seperti apa

    terimakasih

  32. Herdis Yudistira

    selamat pagi, apa ubahan yg hrs saya lakukan agar data yg dilatih hanya untuk 3 tahun(sama dengan algoritma prediksi curah hujan backpropagation yang bapak tulis juga)?

  33. min, ada ngga syntax untuk klasifikasi yg targetnya berupa biner?

  34. izin nanya mas, kalo untuk ngitung nilai akurasinya gimana ya ?

  35. saya mau prediksi jumlah kendaraan, dengan 4 jenis kendaraan berbeda, dan data yang digunakan pertahun mulai 2007-2016. apa bisa digunakan karena datanya sedikit sekali.

  36. kalau untuk penentuan data latih dan data uji seperti apa ya, misal dilakukan per jenis kendaraan

  37. itu cara menentukan data pola variasinya gimana, tentukan sendiri atau gimana

  38. Selamat sore mas adi. sy mau tanya. apakah benar data_prediksi_rbf itu data input pelatihan dan hasil_prediksi_rbf itu hasil pelatihan?

  39. amry priswanto

    mas data_prediksi_rbf sama hasil_prediksi_rbf itu dapat dari mana ya ? kok saya bingung

  40. saya mau prediksi jumlah sepeda motor, dimana datanya mulai 2006-2016, cara membuat pola data latih dan uji gimana ya

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: