Prediksi Harga Saham Menggunakan Algoritma ANFIS


Adaptive Neuro Fuzzy Interference System (ANFIS) merupakan salah satu algoritma yang menggabungkan sistem fuzzy dengan sistem jaringan syaraf tiruan. Dasar dari penggabungan adalah kelebihan dan kekurangan dari masing-masing sistem. Kelebihan utama jaringan syaraf tiruan adalah dapat mengenali sistem melalui proses pembelajaran untuk memperbaiki parameter adaptif. Kekurangan dari sistem ini adalah kerumitan strukturnya. Sedangkan sistem fuzzy mempunyai konsep yang mirip dengan konsep berpikirnya manusia. Gabungan keduanya akan saling melengkapi kelebihan dan kekurangan masing-masing sistem.

Berikut ini merupakan contoh aplikasi pemrograman matlab untuk memprediksi harga saham suatu PT. X menggunakan algoritma ANFIS.

Langkah-langkahnya adalah sebagai berikut:

1. Mempersiapkan data harga saham. Data harga saham di suatu PT. X disajikan per bulan dari tahun 2003 sampai dengan tahun 2018.

2. Untuk mereduksi perhitungan komputasi yang terlalu besar, maka dilakukan normalisasi data ke dalam range 0 s.d 1 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;

% membaca data dari file excel
data = xlsread('Book1',1,'E7:P22');

% 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) = (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, harga saham diprediksi berdasarkan data harga saham 6 bulan sebelumnya. Data latih yang digunakan adalah data harga saham dari bulan Januari 2003 sampai dengan bulan November 2016 (14 tahun). Sedangkan target latih adalah data jumlah penduduk dari bulan Juli 2003 sampai dengan bulan Desember 2016 (14 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:

% Menyiapkan data latih
data_norm = data_norm';
tahun_latih = 14; % Januari 2003 s.d November 2016
bulan_latih = 6;
jumlah_bulan = 12;
data_latih = zeros(jumlah_bulan*tahun_latih-bulan_latih,bulan_latih);

for m = 1:jumlah_bulan*tahun_latih-bulan_latih
    for n = 1:bulan_latih
        data_latih(m,n) = data_norm(m+n-1);
    end
end

% Menyiapkan target latih normalisasi
target_latih = zeros(jumlah_bulan*tahun_latih-bulan_latih,1);
for m = 1:jumlah_bulan*tahun_latih-bulan_latih
    target_latih(m) = data_norm(bulan_latih+m); % Juli 2003 s.d Desember 2012
end

sehingga susunan data latih dan target latih yang diperoleh adalah

4. Melakukan pelatihan menggunakan algoritma ANFIS dengan masukan berupa data latih dan target latih yang sebelumnya telah disusun.

Perintah yang digunakan adalah:

% Proses pelatihan
trnData = [data_latih,target_latih];
numMFs = 2;
mfType = 'trapmf';
epoch_n = 20;
in_fis = genfis1(trnData,numMFs,mfType);
out_fis = anfis(trnData,in_fis,epoch_n);

out_pelatihan = evalfis(data_latih,out_fis);
mse_pelatihan = mse(target_latih,data_latih);
diff = out_pelatihan-target_latih;
mape_pelatihan = (100/numel(out_pelatihan))*...
    (sum(sum(abs(diff)/target_latih)));

% Denormalisasi hasil pengujian
out_pelatihan_asli = (out_pelatihan*(max_data-min_data))+min_data;

Tampilan proses pelatihan ANFIS ditunjukkan pada gambar di bawah ini

5. Menampilkan hasil pelatihan dalam bentuk grafik.

Perintah yang digunakan adalah:

% Menyiapkan target latih asli
target_latih_asli = zeros(jumlah_bulan*tahun_latih-bulan_latih,1);
data = data';
for m = 1:jumlah_bulan*tahun_latih-bulan_latih
    target_latih_asli(m) = data(bulan_latih+m); % Juli 2003 s.d Desember 2012
end

% Menampilkan hasil pelatihan 
figure
plot(target_latih_asli,'o-','LineWidth',2,'MarkerSize',4)
hold on
grid on
plot(out_pelatihan_asli,'o-','LineWidth',2,'MarkerSize',4)
hold off
title('Grafik Hasil Pelatihan')
xlabel('Urutan data')
ylabel('Harga saham')
legend('Target Asli','Hasil Pelatihan')

Grafik keluaran yang dihasilkan dari proses pelatihan adalah sebagai berikut:

Nilai MSE dan MAPE yang dihasilkan pada proses pelatihan berturut-turut adalah sebesar 0.2392 dan 1.0259%. Kedua nilai tersebut menunjukkan bahwa proses pelatihan menggunakan algoritma ANFIS dapat memprediksi harga saham dengan baik, sehingga Fuzzy Inference System (FIS) 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:

% Menyiapkan data uji
tahun_uji = 2; % Juli 2016 s.d November 2018
bulan_uji = 6;
jumlah_bulan = 12;

data_uji = zeros(jumlah_bulan*tahun_uji,bulan_uji);

for m = 1:jumlah_bulan*tahun_uji
    for n = 1:bulan_uji
        data_uji(m,n) = data_norm(jumlah_bulan*tahun_latih-bulan_latih+m+n-1);
    end
end
 
% Menyiapkan target uji normalisasi
target_uji = zeros(jumlah_bulan*tahun_uji,1);
for m = 1:jumlah_bulan*tahun_uji
    target_uji(m) = data_norm(jumlah_bulan*tahun_latih+m); % Januari 2017 s.d Desember 2018
end

sehingga susunan data uji dan target uji yang diperoleh adalah

6. Menampilkan hasil pengujian dalam bentuk grafik.

Perintah yang digunakan adalah:

% Proses pengujian
out_pengujian = evalfis(data_uji,out_fis);
mse_pengujian = mse(target_uji,data_uji);
diff = out_pengujian-target_uji;
mape_pengujian = (100/numel(out_pengujian))*...
    (sum(sum(abs(diff)/target_uji)));

% Denormalisasi hasil pengujian
out_pengujian_asli = (out_pengujian*(max_data-min_data))+min_data;

% Menyiapkan target uji asli
target_uji_asli = zeros(jumlah_bulan*tahun_uji,1);
for m = 1:jumlah_bulan*tahun_uji
    target_uji_asli(m) = data(jumlah_bulan*tahun_latih+m); % Januari 2017 s.d Desember 2018
end

% Menampilkan hasil pengujian
figure
plot(target_uji_asli,'o-','LineWidth',2,'MarkerSize',4)
hold on
grid on
plot(out_pengujian_asli,'o-','LineWidth',2,'MarkerSize',4)
hold off
title('Grafik Hasil Pengujian')
xlabel('Urutan data')
ylabel('Harga saham')
legend('Target Asli','Hasil Pengujian')

Grafik keluaran yang dihasilkan dari proses pengujian adalah sebagai berikut:

Nilai MSE dan MAPE yang dihasilkan pada proses pengujian berturut-turut adalah sebesar 0.8003 dan 4.7643%. Kedua nilai tersebut menunjukkan bahwa proses pengujian menggunakan algoritma ANFIS dapat memprediksi harga saham dengan baik.

7. Membandingkan hasil pengujian algoritma ANFIS dengan memvariasikan membership function.

Hasil dari pelatihan dan pengujian di atas menunjukkan bahwa algoritma ANFIS mampu untuk melakukan prediksi harga saham dengan baik.

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

Posted on December 31, 2018, in Data mining and tagged , , , , , , , , , , , , , , . Bookmark the permalink. 1 Comment.

  1. Bagas Yafitra Pandji

    code untuk memprediksi nya dibagian mana ya mas misalkan untuk memprediksi bulan berikutnya mas menggunakan ANFIS

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: