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(data);
min_data = 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);

for m = 1:jumlah_bulan*tahun_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,1);
for m = 1:jumlah_bulan*tahun_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,1);
data = data';
for m = 1:jumlah_bulan*tahun_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+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. 22 Comments.

  1. Bagas Yafitra Pandji

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

  2. Pak kalau untuk memprediksi banjir ANFISnya bagaimana ya Pak??

  3. Selamat Malam, Pak.. Maaf saya ingin bertanya terkait data input yang digunakan untuk metode ANFIS apakah bisa menggunakan data tunggal? Terima kasih

  4. Dan apakah sebelum menggunakan metode ANFIS harus melalukan clustering (pengelompokan) terlebih dahulu? Terima kasih

  5. kalau memprediksi tahun berikutnya yg blm ada datanya gimana mas?

  6. kalau semisal menggunakan data harian bagaimana?

    • Prinsipnya sama saja, data harian, bulanan, tahunan

    • untuk data latihnya bagaimana?
      disitu kan tahun latih = 14; bulan latih=6; dan jumlah bulan= 12
      kalau semisal memiliki data harian dengan jumlah 253 data bagaimana?
      apakah ada referensi kak?

  7. kak kalau datanya menggunakan beberapa variabel bagaimana? apakah bisa langsung diprediksi bersamaan atau diprediksi sendiri-sendiri pervariabel?

  8. cara menampilkan mf nya gmna ya kak

  9. kak apakah syntax ini sudah include feedfoward dan backpropogation?

  10. malam kak, untuk anfis ini menggunakan fungsi aktivasi apa ya?

  11. kak untuk data yang ada hanya sedikit, sekitar 100 data apakah bisa kak? karena contoh di atas menggunakan data latih sekitar 14 tahun

  12. Selamat pagi Tuan Adi. Saya pelajar dari Malaysia, dan sedang melakukan research untuk predict stock price menggunakan ANFIS. Soalan saya,jika saya ingin menggunakan data harian untuk 1 tahun, adakah ia wajar untuk menggunakan coding yg Tuan sediakan? Soalan kedua, adakah jumlah data saya itu cukup untuk didefinasikan sebagai ‘high dimensioanal’? Soalan ketiga, bagaimana saya ingin masukkan inout (open,close,high and low price) sebagai input dalam Matlab. Mohom bantuan dan pencerahan Tuan dan maafkan saya kerana soalan saya sangat panjang.

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 )

Facebook photo

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

Connecting to %s

%d bloggers like this: