Penerapan Algoritma Particle Swarm Optimization (PSO) Pada Kasus Prediksi


Particle Swarm Optimization (PSO) merupakan algoritma berbasis populasi yang mengeksploitasi individu dalam pencarian. Dalam PSO populasi disebut swarm dan individu disebut particle. Setiap partikel berpindah dengan kecepatan yang diadaptasi dari daerah pencarian dan menyimpannya sebagai posisi terbaik yang pernah dicapai.

PSO didasarkan pada perilaku sosial sekawanan burung atau sekumpulan ikan. Perilaku sosial terdiri dari tindakan individu dan pengaruh dari individu-individu lain dalam suatu kelompok.

Berikut ini merupakan contoh penerapan algoritma PSO pada kasus prediksi. PSO diimplementasikan untuk mengoptimasi algoritma jaringan syaraf tiruan backpropagation dalam memprediksi Indeks Harga Saham Gabungan (IHSG). Langkah-langkah pemrogramannya adalah sebagai berikut:

1. Membaca data IHSG, data bulanan dari bulan januari 2015 sampai dengan desember 2019. Perintah yang digunakan untuk membaca data IHSG dari file excel yaitu:

% membaca data excel
data = xlsread('IHSG.xlsx',1,'E5:P9');

Tampilan data IHSG dari bulan januari 2015 sampai dengan desember 2019 adalah sebagai berikut

2. Melakukan normalisasi data, data ditransformasi ke dalam range 0.1-0.9, persamaan yang digunakan adalah

di mana:
X’ = data hasil normalisasi
X = data asli/data awal
a = nilai maksimum data asli
b = nilai minimum data asli

Sedangkan perintah yang digunakan untuk melakukan normalisasi data adalah

% 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 pada gambar berikut

3. Mempersiapkan data latih dan target latih

Pada pemrograman ini, data IHSG diprediksi berdasarkan data IHSG 12 bulan sebelumnya. Data latih yang digunakan adalah data IHSG dari bulan Januari 2015 sampai dengan bulan November 2018. Sedangkan target latih adalah data IHSG dari bulan Januari 2016 sampai dengan bulan Desember 2018. Gambaran dari penggunaan data latih dan target latih ditunjukkan pada tabel berikut:

Perintah yang digunakan untuk menyusun data latih dan target latih yaitu

% menyusun data dan target latih
data_norm = data_norm';
tahun_latih = 3;	% Januari 2015 s.d November 2018
jumlah_bulan = 12;
data_latih = zeros(12,jumlah_bulan*tahun_latih);

for n = 1:jumlah_bulan*tahun_latih
    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+1)); % Januari 2016 s.d Desember 2018

Tampilan dari data latih dan target latih setelah disusun adalah sebagai berikut

Sedangkan tampilan dari target latih adalah

4. Melakukan pelatihan

Pelatihan dilakukan menggunakan algoritma jaringan syaraf tiruan backpropagation dan jaringan syaraf tiruan backpropagation yang dioptimasi dengan algortima pso. Perintah yang digunakan untuk melakukan pelatihan adalah

% menyiapkan parameter2 arsitektur jst (jumlah neuron pada
% hidden layer, jenis fungsi aktivasi, dan fungsi pelatihan)
jumlah_neuron1 = 10;
fungsi_aktivasi1 = 'logsig';
fungsi_aktivasi2 = 'purelin';
fungsi_pelatihan = 'traingd';

% membangun arsitektur jaringan syaraf tiruan backpropagation
net = newff(minmax(data_latih),[jumlah_neuron1 1],{fungsi_aktivasi1,...
    fungsi_aktivasi2},fungsi_pelatihan);

% menyiapkan parameter2 pelatihan (error goal, jumlah
% epoch, laju pembelajaran)
error_goal = 1e-6;
jumlah_epoch = 1000;
laju_pembelajaran = 0.01;

net.trainParam.goal = error_goal;
net.trainParam.epochs = jumlah_epoch;
net.trainParam.lr = laju_pembelajaran;

% proses pelatihan (training)
net_keluaran = train(net,data_latih,target_latih);

% hasil pelatihan
hasil_latih = sim(net_keluaran,data_latih);

% penghitungan nilai MSE
MSE_latih = mse(hasil_latih,target_latih);

hasil_latih = ((hasil_latih-0.1)*(max_data-min_data)/0.8)+min_data;
target_latih_asli = data(2:4,:);	% 2016 s.d 2018
target_latih_asli = target_latih_asli';
target_latih_asli = target_latih_asli(:);

% PSO
h = @(x) NMSE(x, net_keluaran, data_latih, target_latih);
k = jumlah_neuron1;
[x_pso, ~] = pso(h, 12*k+k+k+1);
net_keluaran_pso = setwb(net_keluaran, x_pso');
hasil_latih_pso = sim(net_keluaran_pso,data_latih);

% penghitungan nilai MSE
MSE_latih_pso = mse(hasil_latih_pso,target_latih);

hasil_latih_pso = ((hasil_latih_pso-...
    0.1)*(max_data-min_data)/0.8)+min_data;

% plot grafik keluaran jst dengan target
figure,
plot(target_latih_asli,'ro-','LineWidth',1)
hold on
plot(hasil_latih,'b*-','LineWidth',1)
plot(hasil_latih_pso,'g*-','LineWidth',1)
hold off
grid on
title('Grafik Keluaran JST vs Target')
h = gca;
h.XTick = [1:12:48];
h.XTickLabel = {'2016';'2017';'2018';'2019'};
xlabel('Tahun')
ylabel('IHSG')
legend('Target','NN','NN+PSO','Location','Best')

Tampilan proses pelatihan jaringan syaraf tiruan ditunjukkan pada gambar berikut

Sedangkan tampilan iterasi yang dihasilkan oleh PSO ditunjukkan pada gambar di bawah ini

Grafik keluaran jst dan jst+pso terhadap target latih pada proses pelatihan ditunjukkan pada gambar berikut

Pada proses pelatihan, nilai Mean Square Error (MSE) yang dihasilkan oleh sistem ditunjukkan pada tabel berikut

Berdasarkan pada tabel di atas, nilai MSE yang dihasilkan oleh jst backpropagation yang teroptimasi oleh PSO lebih kecil dibandingkan dengan jst tanpa optimasi. Hal ini menunjukkan bahwa dengan adanya optimasi oleh PSO, akurasi yang dihasilkan menjadi lebih baik.

5. Mempersiapkan data uji dan target uji

Data uji yang digunakan adalah data IHSG dari bulan Januari 2018 sampai dengan bulan November 2019. Sedangkan target latih adalah data IHSG dari bulan Januari 2019 sampai dengan bulan Desember 2019. Gambaran dari penggunaan data uji dan target uji ditunjukkan pada tabel berikut:

Perintah yang digunakan untuk menyusun data uji dan target uji yaitu

% menyusun data dan target uji
tahun_uji = 1; % Januari 2018 s.d November 2019
jumlah_bulan = 12;
data_uji = zeros(12,jumlah_bulan*tahun_uji-1);

for n = 1:jumlah_bulan*tahun_uji
    for m = 1:jumlah_bulan
        data_uji(m,n) = data_norm(jumlah_bulan*tahun_latih+m+n-1);
    end
end
 
target_uji = data_norm(jumlah_bulan*(tahun_latih+tahun_uji)+1:end); % Januari 2019 s.d Desember 2019

Tampilan dari data uji dan target uji setelah disusun adalah sebagai berikut

Sedangkan tampilan dari target uji adalah

6. Melakukan pengujian

Perintah yang digunakan untuk melakukan pengujian adalah

% hasil pengujian NN
hasil_uji = sim(net_keluaran,data_uji);

% penghitungan nilai MSE
MSE_uji = mse(hasil_uji,target_uji);

hasil_uji = ((hasil_uji-...
    0.1)*(max_data-min_data)/0.8)+min_data;
target_uji_asli = data(5,:);	% 2019
target_uji_asli = target_uji_asli';
target_uji_asli = target_uji_asli(:);

% hasil pengujian NN+PSO
hasil_uji_pso = sim(net_keluaran_pso,data_uji);

% error MSE PSO optimized NN
MSE_uji_pso = mse(hasil_uji_pso,target_uji);

hasil_uji_pso = ((hasil_uji_pso-...
    0.1)*(max_data-min_data)/0.8)+min_data;

% plot grafik keluaran jst dengan target
figure,
plot(target_uji_asli,'mo-','LineWidth',1)
hold on
plot(hasil_uji,'y*-','LineWidth',1)
plot(hasil_uji_pso,'c*-','LineWidth',1)
hold off
grid on
title('Grafik Keluaran JST vs Target')
h = gca;
h.XTick = [1:12];
h.XTickLabel = {'JAN';'FEB';'MAR';'APR';'MEI';'JUN';...
    'JUL';'AGS';'SEP';'OKT';'NOV';'DES'};
xlabel('Tahun 2019')
ylabel('IHSG')
legend('Target','NN','NN+PSO','Location','Best')

Grafik keluaran jst dan jst+pso terhadap target uji pada proses pengujian ditunjukkan pada gambar berikut

Pada proses pengujian, nilai Mean Square Error (MSE) yang dihasilkan oleh sistem ditunjukkan pada tabel berikut

Berdasarkan pada nilai MSE pada proses pelatihan maupun pengujian, jst backpropagation yang teroptimasi oleh PSO menghasilkan akurasi yang lebih baik dibandingkan dengan jst tanpa optimasi.

Source code lengkap beserta data pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source Code

Posted on February 8, 2020, in Data mining and tagged , , , , , , , , , , . Bookmark the permalink. Leave a comment.

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: