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 adaptive neuro fuzzy inference system, algoritma anfis, aplikasi matlab untuk prediksi, contoh anfis, contoh program anfis matlab, definisi algoritma anfis, definisi anfis, neuro fuzzy menggunakan matlab, pemrograman matlab, prediksi harga saham, prediksi harga saham menggunakan matlab, prediksi saham, prediksi saham menggunakan matlab, program prediksi saham, tutorial matlab. Bookmark the permalink. 22 Comments.
code untuk memprediksi nya dibagian mana ya mas misalkan untuk memprediksi bulan berikutnya mas menggunakan ANFIS
materi di halaman berikut bisa dipelajari
https://pemrogramanmatlab.com/2017/07/26/jaringan-syaraf-tiruan-untuk-memprediksi-jumlah-penduduk/
Pak kalau untuk memprediksi banjir ANFISnya bagaimana ya Pak??
Untuk berbagai kasus prediksi prinsip pemrograman nya sama saja
Selamat Malam, Pak.. Maaf saya ingin bertanya terkait data input yang digunakan untuk metode ANFIS apakah bisa menggunakan data tunggal? Terima kasih
Malam
Sama seperti pada artikel di atas data input anfis menggunakan data tunggal
Dan apakah sebelum menggunakan metode ANFIS harus melalukan clustering (pengelompokan) terlebih dahulu? Terima kasih
Tidak harus dilakukan klustering
Bisa langsung dimasukkan
kalau memprediksi tahun berikutnya yg blm ada datanya gimana mas?
materi di halaman berikut bisa dipelajari
https://pemrogramanmatlab.com/2017/07/26/jaringan-syaraf-tiruan-untuk-memprediksi-jumlah-penduduk/
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?
kak kalau datanya menggunakan beberapa variabel bagaimana? apakah bisa langsung diprediksi bersamaan atau diprediksi sendiri-sendiri pervariabel?
cara menampilkan mf nya gmna ya kak
Bisa menggunakan perintah plotmf
kak apakah syntax ini sudah include feedfoward dan backpropogation?
malam kak, untuk anfis ini menggunakan fungsi aktivasi apa ya?
fungsi keanggotaan (membership function) yang digunakan
ada trimf, trapmf, gaussmf, gbellmf
bisa dipelajari lagi artikel nya
kak untuk data yang ada hanya sedikit, sekitar 100 data apakah bisa kak? karena contoh di atas menggunakan data latih sekitar 14 tahun
Bisa
Tidak masalah
Source code bisa disesuaikan
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.