Peramalan dengan Jaringan Syaraf Tiruan

Jaringan syaraf tiruan (jst) sering juga dijadikan sarana untuk meramalan. Berbeda dengan fitting yang mengandalkan variabel-variabel input, peramalan hanya mengandalkan data berdasarkan deretan waktu (time series). Dan seperti time series lainnya, jumlah data sangat menentukan kualitas peramalannya, walaupun dua data bisa meramalkan data ketiga tetapi tentu saja kalah akurat dibanding meramalkan data ke 1001 dari 1000 data.

Misal saya memiliki data tiga tahun, kemudian saya susun menjadi bentuk seperti ini dimana matriks berisi dua baris dengan baris pertama tahun pertama dan baris kedua tahun kedua. Sementara tahun ketiga saya jadikan target pelatihan.

Dengan membuka toolbox JST (ketik nntool di command window) kita rakit JST untuk dilatih dengan target pelatihan tahun ketiga:

Masukan variabel-variabel masukan dan target di jendela nntool. Buat JST dengan jumlah neuron sesuai keinginan, lakukan training.

Begitu pula JST-nya, buat saja dengan mengklik tombol ‘new’ di jendela network designer. Atau bisa juga menggunakan fungsi di command window tanpa toolbox (fungsi newff).

Jika sudah, dobel klik pada network1 untuk melakukan proses training. Pilih lagi input dan target datanya, lakukan simulasi, dan tunggu sesaat hingga proses pelatihan selesai.

Hasilnya jangan lupa disimpan untuk memprediksi tahun keempat. Bagaimana memprediksi tahun keempat? Gunakan saja tahun kedua dan tahun ketiga sebagai input, maka JST akan memprediksi tahun keempat berdasar pelatihan sebelumnya.

Kemudian lakukan simulasi dengan fungsi sim dari Matlab. Gunakan network1 yang telah di ekspor dari proses pelatihan sebelumnya. Gunakan kode berikut di command window, maka prediksi tahun keempat selesai, akurasi tentu saja bisa diuji jika Anda punya data tahun keempat yang sesungguhnya.

Tentu saja dua data untuk meramalkan data ketiga kurang baik, seperti halnya anda memprediksi kurs dollar terhadap rupiah hanya dengan dua data, karena belum tentu rupiah terus melemah, bisa saja menguat jika data pelatihannya banyak. Tetapi yang namanya ramalan ya belum tentu benar kan?

Iklan

63 respons untuk ‘Peramalan dengan Jaringan Syaraf Tiruan

    1. kalo peramalan biasa (time series) hasilnya seperti interpolasi, tapi kalau datanya memiliki beberapa atribut yg menentukan, biasanya menggunakan jst regresion (nnr), yang saat ini sedang banyak diteliti support vector regression (svr). misal memprediksi kurs dollar kalau cuma data history berarti time series aja, tapi kalo ada variabel lain (saham, oil price, dll) ya pake nnr atau svr lebih akurat

  1. Selamat siang pak, saya mau nanya berarti apakah boleh data training tahun ke 2 untuk diulangi lagi jadi peramalan untuk tahun ke 4. Adakah buku yang membahas tentang forecasting menggunakan jst?

    1. Pak saya adakah refrensi untuk peramalan menggunakan jst, bolehkah saya berkonsultasi dengan bapak untuk tugas akhir saya? Sent from Yahoo Mail on Android

    2. yang jelas, bisa asal ada slot, maksudnya misalnya 2,3,4 meramal thn ke5 berarti 2 ga bisa lagi dipakai meramal tahun ke6, hanya bisa 3 dan 4 jadi 3,4,5 meramal tahun ke6. alasannya krn jst memprediksi berdasarkan saat training, yaitu jumlah variabel masukan. jst bisa memprediksi, tambahkan satu input tambahan yaitu intervention indicator, yaitu prediksi indicator itu di tahun yg akan diramal, misalnya proyeksi jlh penduduk hingga 30 thn ke depan dll. coba lihat: https://rahmadya.com/2015/11/13/prediksi-dengan-jaringan-syaraf-tiruan-pada-matlab-latihan-awal/ klo ga bisa juga kabarin

  2. Berarti saya kan ada data penjualan 3 tahun terakhir dan ingin meramalkan tahun ke 4 jadi hanya times series. Kalo ikutin buku j.j. siang kan dibikin pola terus berjalan. 12 data pertama targetnya bulan 13. Terus2 sampai jadi matriks 12 x 12. Berarti target pelatihan tahun ke 3? Setelah di training lalu konsep testing nya itu bagaimana si pak? Terus fungsi aktivasi kalo saya pake logsig logsig ngefek ga ya pak?

    1. Berarti target pelatihan tahun ke 3? betul sekali
      Setelah di training lalu konsep testing nya itu bagaimana si pak? kalo cross k-fold validation dgn k=3, berarti 12/3=4 bulan. pertama jan-ags ditraining, test dengan sep-des, hitung akurasinya. gantian mei-des training, tes pake jan-april, terakhir ags-des dan jan-apr training, tes dengan mei-ags. kalo masih bingung: a,b,c. ab tes dgn c, bc tes dgn a, ca tes dgn b.
      Terus fungsi aktivasi kalo saya pake logsig logsig ngefek ga ya pak? banyak laporan kalo pake sigmoid ga bisa menghasilkan > range waktu pelatihan, misal 1,2,3,4,5 kalo ditest yg ke 6 mentuk di 5 bahkan turun, kecuali ada variabel intervention sbg input juga. tetapi asal error hasil testing ga besar boleh aja.

  3. jadi begini pak ini saya punya data penjualan 3 tahun, jadinya saya buat jadi bentuk begini
    tahun 1=[0.443593626 0.1 0.243539076 0.9 0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822]
    tahun 2=[0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847]
    tahun ketiga=[0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169 0.380731684 0.119412431 0.485259385 0.39118431 0.473313218 0.1]

    lalu saya membuat input data nya menjadi matrix 12 x 12 dengan makin maju terus
    p=[0.443593626 0.1 0.243539076 0.9 0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822;
    0.1 0.243539076 0.9 0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068;
    0.243539076 0.9 0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658;
    0.9 0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432;
    0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956;
    0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703;
    0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584;
    0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551;
    0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505;
    0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816;
    0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506;
    0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233]

    setelah itu targetnya apakah tahun ke 2 atau tahun ke tiga?
    tahun 2=[0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847]

    lalu saya bentuk jaringannya
    %membentuk jaringannya
    net=newff(minmax(p),[9,1],{‘tansig’,’logsig’})

    %menghitung bobot-bobot
    bobotAkhir_bias_lapisan=net.b{2,1};
    bobotAkhir_lapisan=net.LW{2,1};
    bobotAkhir_input=net.IW{1,1};
    bobotAkhir_bias_input=net.b{1,1};

    %training parameter
    net.trainParam.show=100;
    net.trainParam.lr=1;
    net.trainParam.epochs=5000;
    net.trainParam.goal=1e-10;

    %mentraining jst
    net=train(net,p,t)

    %simulasi
    y=sim(net,p)

    %testing dan forecasting
    bn=sim(net,p2)
    [m,bn,r]=postreg(bn,t)

    saya masih agak kurang paham dengan konsep testing nya pak sebenernya.

    kalo yang saya tangkap berarti saya tinggal membuat tahun ke dua dicampur tahun ke tiga yang saya buat di p saya?

    1. iya, prinsipnya testing nggak dipake buat nguji. tapi klo yg buat nguji terlalu nyimpang, ya sebagus apapun hasil training ya tetap dianggap jelek, makanya diimbangi dengan mentraining yg buat testing, lalu diuji dengan yang tadi buat training. hasil errornya di rata2 tiap paket training-testing. 12×12 berarti kalo K=3, pecah jadi 3 matriks 4×12, dua buah matriks itu (8×12) di training dengan sisanya, trus gantian. adil kan?

      Eh tunggu dulu, standardnya kan berbasis row. kebetulan 12×12 itu salah tetap jalan krn row dan col sama. targetnya udah bener, jangan lupa ditranspose. saya bagi dua kelompok p1 (baris 1-8) untuk train dan p2 (baris 9-12) untuk uji. krn sy msh belom jelas, tapi keliatannya sih 12×12 itu kolom 1 januari, kolom 2 feb, dst, iya kan? kalo iya, berarti harus diulang yg di atas. gunakan transpose, ini saya buat tiga kelompok, untuk set train-test pertama (kel1+kel2) diuji dengan kel3.

      p1=transpose(p(1:8,:));
      p2=transpose(p(9:12,:)); %data testing
      t2=t(:,9:12); %target utk hitung error
      net1=train(net,p1,t1) %training kelompok1
      hasil=sim(net1,p2)
      error=norm(t2-hasil) %error dgn jarak euclid
      error2=[t2-hasil] %error dgn selisih
      %atau perbandingkan sendiri
      error3=[t2;hasil] %akurat sekali

      coba set data berikutnya buat gabung kel2 dan kel 3 utk training, uji dengan kel1 (transpose(p(1:8,:))).

  4. Ooh begitu pak terima kasih ya pak.
    Tambahan lagi pak setelah begitu perlu di training lagi? Baik pak akan saya coba buat lagi berarti dia bacanya bukan per row ya pak?
    Yang saya buat si kesamping jadi januari februari maret april mei juni juli agustus oktober november desember;
    Februari maret april mei juni juli seterusnya ampe januari 2014
    Pantes saja begitu saya mau ganti bentuk koq ga bisa di jalankan..

    Set data tahun ke dua sama tahun ke tiga nya tetap buat bentuk seperti itu? 12 x 12 lalu saya tranpose lagi?
    Januari 2014-desember2014:
    Februari2014-januari 2015 begiti seterusnya?

  5. Berarti Target nya yang di t tetep tahun ke dua pak?
    t yang disini soalnya tahun 2..

    %program Jaringan Syaraf Tiruan Pen B-1000 dibuat oleh Erickson 545120054
    %input dan target
    p=[0.443593626 0.1 0.243539076 0.9 0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822;
    0.1 0.243539076 0.9 0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068;
    0.243539076 0.9 0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658;
    0.9 0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432;
    0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432

    0.311994956;
    0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956

    0.276433703;
    0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703

    0.871975584;
    0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551;
    0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505;
    0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816;
    0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816

    0.213487506;
    0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506

    0.240775233]

    p1=transpose(p(1:8,:));
    p2=transpose(p(9:12,:)); %data testing

    t=[0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233

    0.256651847]

    t2=t(:,9:12); %target utk hitung error

    tahun23=
    [0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847;
    0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847 0.203542569;
    0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847 0.203542569 0.272874841;
    0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847 0.203542569 0.272874841 0.270230539;
    0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847 0.203542569 0.272874841 0.270230539 0.258295174;
    0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847 0.203542569 0.272874841 0.270230539 0.258295174 0.307634594;
    0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847 0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169;
    0.152115505 0.144050816 0.213487506 0.240775233 0.256651847 0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169 0.380731684;
    0.144050816 0.213487506 0.240775233 0.256651847 0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169 0.380731684 0.119412431;
    0.213487506 0.240775233 0.256651847 0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169 0.380731684 0.119412431 0.485259385;
    0.240775233 0.256651847 0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169 0.380731684 0.119412431 0.485259385 0.39118431;
    0.256651847 0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169 0.380731684 0.119412431 0.485259385 0.39118431 0.473313218;

    q=[0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169 0.380731684 0.119412431 0.485259385 0.39118431 0.473313218 0.1]

    %membentuk jaringannya
    net=newff(minmax(p),[9,1],{‘tansig’,’logsig’})

    %menghitung bobot-bobot
    bobotAkhir_bias_lapisan=net.b{2,1};
    bobotAkhir_lapisan=net.LW{2,1};
    bobotAkhir_input=net.IW{1,1};
    bobotAkhir_bias_input=net.b{1,1};

    %training parameter
    net.trainParam.show=100;
    net.trainParam.lr=1;
    net.trainParam.epochs=5000;
    net.trainParam.goal=1e-10;

    %mentraining jst
    net1=train(net,p1,t1) %training kelompok1

    %simulasi
    y=sim(net1,p1)

    %testing dan forecasting
    hasil=sim(net1,p2)

    error=norm(t2-hasil) %error dgn jarak euclid
    error2=[t2-hasil] %error dgn selisih

    %atau perbandingkan sendiri
    error3=[t2;hasil] %akurat sekal

    jadi seperti ini pak nanti di simulasi lagi pake tahun23?

  6. Lalu pak saya mau nanya bukannya kalo di training lagi sama aja jadi berubah hasilnya kayak target ya pak? Jadi saya pikirnya langsung di testing masukin hasil tahun ke 2 dan 3 jadi hasil peramalan? Terima kasih banyak ya pak :))

    1. testing kan untuk nguji akurasi model (komposisi JST beserta data), kalo udah ya training yg baru untuk prediksi tahun yg akan datang yg belum tau hasilnya tepat apa nggak

      1. Hemm maap pak saya jadi agak ga konek Jadi kan saya udah bikin net1 nya tuh. Jadi nanti saya bakalan net=train(net1,tahun23,t3)Terus hasil peramalannya saya ambil yang mana pak? Maaf pak saya sulit paha. Sent from Yahoo Mail on Android

      2. net=train(net1,tahun23,t3) sebaiknya net1 juga net1=train(net1,tahun23,t3). untuk peramalan berikutnya, geser satu=satu ke bulan yg mau diramal. tentu dengan input bulan yg telah diketahui (series) dengan jumlah sama dengan training (biasanya 12), kalau kurang atau lebih ya jst merespon error masukan.

      3. Ooh begitu pak berarti nanti target t3 kan tahun ke 3. Lalu peramalan misal bulan januari tahun ke 4 berarti 12 data di tahun ke 3 januari-desember terus maju ya pak? Untuk bulan februari berarti dr februari-januari(hasil peramalan)

        Pak saya mau minta nama lengkap dan gelar bapak boleh pak? Saya mau mau masukan ucapan terima kasih di tugas akhir saya. Hehe

      4. best,
        Rahmadya Trias Handayanto, ST, MKom
        Computer Science & Inf. Management AIT Thailand
        PhD Student

    1. ya, formatnya kan input variabel kolom 1 hasilnya target kolom ke 1, dst basis kolom (beda dengan ANFIS yg formatnya basis rows)

  7. Selamat siang pak ini yang saya coba buat jadinya seperti ini:
    %program Jaringan Syaraf Tiruan Pen B-1000 dibuat oleh Erickson 545120054
    %input dan target
    p=[0.443593626 0.1 0.243539076 0.9 0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822;
    0.1 0.243539076 0.9 0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068;
    0.243539076 0.9 0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658;
    0.9 0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432;
    0.480734834 0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956;
    0.700588523 0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703;
    0.178784644 0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584;
    0.171136908 0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551;
    0.335695736 0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505;
    0.40613268 0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816;
    0.849073423 0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506;
    0.387248822 0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233] %data tahun 12

    p1=transpose(p(1:8,:));
    p2=transpose(p(9:12,:)); %data testing

    t=[0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847] %tahun 2

    t1=t(:,1:8); %target pertama

    t2=t(:,9:12); %target utk hitung error

    p3=[0.729809068 0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847;
    0.117960658 0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847 0.203542569;
    0.19891432 0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847 0.203542569 0.272874841;
    0.311994956 0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847 0.203542569 0.272874841 0.270230539;
    0.276433703 0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847 0.203542569 0.272874841 0.270230539 0.258295174;
    0.871975584 0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847 0.203542569 0.272874841 0.270230539 0.258295174 0.307634594;
    0.12833551 0.152115505 0.144050816 0.213487506 0.240775233 0.256651847 0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169;
    0.152115505 0.144050816 0.213487506 0.240775233 0.256651847 0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169 0.380731684;
    0.144050816 0.213487506 0.240775233 0.256651847 0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169 0.380731684 0.119412431;
    0.213487506 0.240775233 0.256651847 0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169 0.380731684 0.119412431 0.485259385;
    0.240775233 0.256651847 0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169 0.380731684 0.119412431 0.485259385 0.39118431;
    0.256651847 0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169 0.380731684 0.119412431 0.485259385 0.39118431 0.473313218] %data tahun 2 dan tahun 3

    p4=transpose(p3) %data tahun 2 dan 3

    t3=[0.203542569 0.272874841 0.270230539 0.258295174 0.307634594 0.172402169 0.380731684 0.119412431 0.485259385 0.39118431 0.473313218 0.1] %target tahun 3

    %membentuk jaringannya
    net=newff(minmax(p),[9,1],{‘tansig’,’logsig’})

    %menghitung bobot-bobot
    bobotAkhir_bias_lapisan=net.b{2,1};
    bobotAkhir_lapisan=net.LW{2,1};
    bobotAkhir_input=net.IW{1,1};
    bobotAkhir_bias_input=net.b{1,1};

    %training parameter
    net.trainParam.show=100;
    net.trainParam.lr=1;
    net.trainParam.epochs=5000;
    net.trainParam.goal=1e-10;

    %mentraining jst
    net1=train(net,p1,t1) %training kelompok1

    %simulasi
    y=sim(net1,p1)

    %testing dan forecasting
    hasil=sim(net1,p2)

    error=norm(t2-hasil) %error dgn jarak euclid
    error2=[t2-hasil] %error dgn selisih

    %atau perbandingkan sendiri
    error3=[t2;hasil] %akurat sekal

    %training untuk tahun 23
    net1=train(net1,p4,t3)

    c=sim(net1,p4)

    %forecasting
    d=sim(net1,t3)

    tapi kalo begini hasil dari forecasting nya aneh pak 😦 masa bisa banyak yang sama..
    maaf merepotkan ya pak..

    1. kalo sempet, coba ganti fungsi transfernya dari tansig dan logsig menjadi purelin (net=newff(minmax(p),[9,1],{‘purelin’,’purelin’})), soalnya tansig dan logsig mentok di harga mendekati 1 sementara purelin bisa membesar berapa saja, terutama untuk peramalan yg membesar terus seperti populasi penduduk, dll

      1. Terima kasih banyak ya pak. Ngmg2 untuk yang pelatihan kedua kali ga usah di testing lagi kan ya pak? Tetapi kebetulan ini permintaan produk memang make to order mau untuk intervalnya agak lebih jauh juga salah pak kayaknya. Hehe Jadinya setelah saya train test train forecast menurut bapak gmn?

        Sent from Yahoo Mail on Android

  8. Selamat malam pak.. saya mau tanya, kebetulan tugas akhir saya juga tentang peramalan hanya saya menggunakan data selama 2 tahun, mengikuti petunjuk dr buku J.J. Siang dengan pola data masukan 12 x 12 dan target masing-masing pola data masukan 1 data..
    Dan saya hanya melakukan training dan melakukan beberapa train and error untuk menentukan jaringan terbaik dan melakukan peramalan dengan menggunakan output dari hasil training saja, tanpa melakukan uji atau testing dari jaringan terbaik tersebut. Apakah hal itu sudah cukup untuk membuat peramalan pak?
    Jawaban sangat ditunggu pak, terima kasih banyak..

    1. sisain beberapa data terakhir untuk testing, kalo nggak bagaimana tahu kalo jaringannya akurat apa nggak ..syukur2 bisa pake teknik cross validation.

  9. salam.. saya sedang melakukan melakukan penelitian menggunakan anfis terkait peramalan. apakah fungsi sim yang ada diatas bisa juga digunakan pada peramalan anfis? lalu bagaimana cara mengimpor dan eksport nerwork yang terbentuk pada anfis? saya sudah membeli buku bapak tapi saya tidak menemukan jawabannya. mohon bantuannya secara lengkap. terima kasih. jawaban dari bapak bisa juga dikirim ke email saya ichwan_84@yahoo.com

    1. autocorrelation sepertinya masih dipakai, cuma implementasinya saja yg bergeser (neuron pada jst, rule pada anfis). dulunya statistik dan soft computing satu induk, tetapi soft computing fokus ke komputasi terhadap data yang kurang lengkap, ga jelas, dan sejenisnya yang dimotori oleh fuzzy karya zadeh. jst mulai ikut meramaikan pengolahan time series karena kemampuan mengelola data2 yg seperti itu. jika populasi meningkat, sementara jumlah perumahan cenderung tetap, jst bisa menggabungkan proyeksi populasi dengan perumahan yang jika tanpa populasi maka proyeksi perumahan tidak meningkat. bukan cuma jst, support vector machines sudah ikut nimbrung (SVR). Situs ini mungkin cukup jelas bagi saya, terutama penggunaan intervention indicator: http://www.obitko.com/tutorials/neural-network-prediction/introduction.html

  10. selamat malam pak, saya mau tanya pak, saya membuat program peramalan, program tersebut jika dirunning melalui m-filenya berjalan dengan baik, namun jika dijalankannya melalui .fig dan dibuat .exe muncul command seperti ini :
    ??? Reference to non-existent field ‘edit4′.

    Error in ==> forecasting>pushbutton1_Callback at 180
    set(handles.edit4,’String’,’BAIK’);

    Error in ==> gui_mainfcn at 96
    feval(varargin{:});

    Error in ==> forecasting at 42
    gui_mainfcn(gui_State, varargin{:});

    Error in ==>
    guidemfile>@(hObject,eventdata)forecasting(‘pushbutton1_Callback’,hObject,eventdata,guidata(hObject))

    ??? Error while evaluating uicontrol Callback
    kira2 saya salah dmnnya ya pak,
    mohon bimbingannya pak

  11. pak, saya mau tanya. apakah ada contoh source code dengan GUI matlab untuk peramalan tahun 2017,2018 data bulanan dengan menggunakan jaringan syaraf tiruan backpropagation?

  12. Selamat siang pak, maaf pak saya mau tanya tentang source code untuk peramalan data. Jika saya punya data sebanyak 96, 72 data (2008-2013 data training) dan 24 data (2014-2015 testing). untuk source code data training dan testingnya , saya bikin seperti seperti ini pak.

    % — Executes on button press in Learning.
    function Learning_Callback(hObject, eventdata, handles)
    % hObject handle to Learning (see GCBO)
    % eventdata reserved – to be defined in a future version of MATLAB
    % handles structure with handles and user data (see GUIDATA)
    %input parameter
    a1=str2num(get(handles.epoch,’string’));
    a2=str2num(get(handles.alfa,’string’));
    a3=str2num(get(handles.galat,’string’));
    a4=str2num(get(handles.hidden,’string’));

    %proses membaca data latih dari excel
    filename = ‘tabel.xlsx’;
    sheet = 2;
    xlRange = ‘B3:N74′;

    Data = xlsread(filename, sheet, xlRange);
    P = Data(:,1:12)’;
    T = Data(:,13)’;
    [m,n] = size(P);

    % Pembuatan JST
    net = newff(minmax(P),[a4 1],{‘tansig’ ‘logsig’ ‘purelin’},’trainlm’);

    % Memberikan nilai untuk mempengaruhi proses pelatihan
    net=init(net);
    net.performFcn = ‘mse’;
    net.trainParam.epochs = a1;
    net.trainParam.lr = a2;
    net.trainParam.goal = a3;
    net.trainParam.show = 50;
    net.trainParam.mc = 0.95;

    % Proses training
    [net,tr,Y,E] = train(net,P,T);

    % Hasil setelah pelatihan
    bobot_input = net.IW{1,1};
    bobot_layer = net.LW{2,1};
    bias_input = net.b{1,1};
    bias_layer = net.b{2,1};
    jumlah_iterasi = tr.num_epochs;
    nilai_keluaran = Y;
    nilai_error = E;
    error_MSE = (1/n)*sum(nilai_error.^2);
    prediksi_normalisasi = (((max(T)-min(T))*(Y-0.1))/0.8)+min(T);
    akurasi = (1-((abs(0.25506297-prediksi_normalisasi))/prediksi_normalisasi))*100;

    save net net

    % Hasil prediksi
    hasil_latih = sim(net,P);
    max_data = 239.4023;
    min_data = -104.2;
    hasil_latih = ((hasil_latih-0.1)*(max_data-min_data)/0.8)+min_data;

    % Performansi hasil prediksi
    filename = ‘tabel.xlsx’;
    sheet = 1;
    xlRange = ‘A107:BT107′;

    T_asli = xlsread(filename, sheet, xlRange);

    figure,
    plotregression(T_asli,hasil_latih,’Regression’)

    figure,
    plotperform(tr)

    figure,
    plot(hasil_latih,’bo-‘)
    hold on
    plot(T_asli,’ro-‘)
    hold off
    grid on
    title(strcat([‘Grafik Keluaran JST vs Target dengan nilai MSE = ‘,…
    num2str(error_MSE)]))
    xlabel(‘Pola ke-‘)
    ylabel(‘Tingkat Pencemaran Udara’)
    legend(‘Keluaran JST’,’Target’,’Location’,’Best’)
    ar=(1/n)*sum(nilai_error.^2);
    br =(((max(T)-min(T))*(Y-0.1))/0.8)+min(T);
    cr =(1-((abs(0.25506297-prediksi_normalisasi))/prediksi_normalisasi))*100;
    set(handles.edit8,’string’,[num2str(ar)])
    set(handles.edit11,’string’,[num2str(cr),’ %’])
    set(handles.uitable3,’Data’,br)
    set(handles.uitable10,’Data’,hasil_latih)

    % — Executes on button press in Testing.
    function Testing_Callback(hObject, eventdata, handles)
    % hObject handle to Testing (see GCBO)
    % eventdata reserved – to be defined in a future version of MATLAB
    % handles structure with handles and user data (see GUIDATA)
    data=getappdata(handles.figure1,’data’);

    % load jaringan yang sudah dibuat pada proses pelatihan
    load net.mat

    % Proses membaca data uji dari excel
    filename = ‘tabel.xlsx’;
    sheet = 2;
    xlRange = ‘B79:N90′;

    Data = xlsread(filename, sheet, xlRange);
    data_uji = Data(:,1:12)’;
    target_uji = Data(:,13)’;
    [m,n] = size(data_uji);

    % Hasil prediksi
    hasil_uji = sim(net,data_uji);
    nilai_error_uji = hasil_uji-target_uji;

    max_data = 239.4023;
    min_data = -104.2;
    hasil_uji = ((hasil_uji-0.1)*(max_data-min_data)/0.8)+min_data;

    % Performansi hasil prediksi
    error_MSE = (1/n)*sum(nilai_error_uji.^2);

    filename = ‘tabel.xlsx’;
    sheet = 1;
    xlRange = ‘K65:V65′;

    target_uji_asli = xlsread(filename, sheet, xlRange);

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

    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)]))
    xlabel(‘Pola ke-‘)
    ylabel(‘Tingkat Pencemaran’)
    legend(‘Keluaran JST’,’Target’,’Location’,’Best’)
    cr=(1/n)*sum(nilai_error_uji.^2);
    set(handles.edit7,’string’,[num2str(cr)])
    set(handles.uitable12,’Data’,hasil_uji)

    Kemudian jika saya ingin meramalkan data untuk bulan januari dan februari 2016, gambaran source code peramalannya bagaimana nggih pak? terimakasih

  13. jika saya mengacu pada postingan bapak, saya berfikir untuk peramalan bulan kedepan akan seperti ini
    % — Executes on button press in Prediksi.
    function Prediksi_Callback(hObject, eventdata, handles)
    % hObject handle to Prediksi (see GCBO)
    % eventdata reserved – to be defined in a future version of MATLAB
    % handles structure with handles and user data (see GUIDATA)
    % Proses membaca data uji dari excel
    load net.mat

    filename = ‘tabel.xlsx’;
    sheet = 1;
    xlRange = ‘K65:V65’;

    Data = xlsread(filename, sheet, xlRange);

    Told=Data;
    nets = removedelay(net);
    result=[]
    for i=1:10
    [xs,xis,ais,ts] = preparets(nets,{},{},Data);
    ys = nets(xs,xis,ais);
    Data(1,end+1) = ys(1,end);
    size(Data)
    Data=Data(2:end)
    result=[result;ys(1,end)]
    end
    result=cell2mat(result)
    figure
    t=cell2mat(Told)
    plot([t transpose(result)])

    1. tapi error seperti ini pak
      Error in analisisdata>Prediksi_Callback (line 389)
      nets = removedelay(net);
      mohon koreksinya, yang salah dibagian mana 🙂

  14. selamat siang pak, mau tanya perbedaan variasi jaringan traingd,traingda,traingdm,traingdx,trainlm apa ya pak? terimakasih 🙂

  15. selamat pagi pak, jaringan syaraf tiruan ini bisa di android kan atau tidak pak, kalau bisa apa jenis pemograman nya pak? php, java atau c++??? mohon balasannya ya pak

    1. semuanya bisa kayaknya kalo untuk simulate (sudah ditraining). kalo training java atau c++ yang butuh proses iterasi yang banyak.

  16. Selamat siang Pak, saya mau tanay. kebetulan saya sedang menjalankan penelitian tentang ANN untuk permalan, namun saya masih terhitung sangat pemula. saya mempunyai data historis permintaan selama 40 periode. dari contoh-contoh yang saya pelajari, ada yang terbagi menjadi data input dan target. Kalo boleh bertanya, apa dasar penentuan data input dan target?

    lalu untuk data saya yang berjumlah 40 periode dengan 1 variabel, bagaimana langkah-langkah awal dalam membentuk modelnya?

    terima kasih

    1. biasanya 20 input target 20. Atau dengan narnet, dikenal dengan window yaitu data prediksi baru digunakan untuk melatih NN untuk prediksi data berikutnya. Intinya: suatu data latih jadi target juga (kecuali data pertama).

  17. Malam pak, untuk di matlab sendiri, jika set data saya ada 48 periode dan hanya 1 variabel, bagaimana saya bisa mencari peramalan untuk 12 periode kedepan? karena kalau saya jadikan matriks sepertinya tidak bisa pak

    Terima Kasih

  18. Mau tanya kalo untuk ann Bp prediksi harga komoditas tanaman pangan itu ada membutuhkan brp nilai hiden ya? Mengubah dari data harga ke bobot itu langsung apa d bikin matrik jika menggunakan c++?

      1. Maaf mau tanya pak,kalomengubah data berupa harga menjadi data normalisasi pake excel gmn ya pak? Ada rumusnya mungkin pak? Untuk Ann Bp. Terimakasih

      2. Maaf mau tanya pak,kalomengubah data berupa harga menjadi data normalisasi pake excel gmn ya pak untuk Ann Bp ? Ada rumusnya mungkin pak?Terimakasih

  19. alhamdulillah ada tutorial yang saya cari.. 🙂
    saya dapat tugas nih pak.

    pak misalnya saya punya data beban listrik selama 8 hari..
    setiap satu hari ada 24 data (setiap jam).
    kalo saya mau memprediksi data hari ke 8 itu klasifikasi datanya gimana ya pak?
    data mana yang saya jadikan input dan mana yang jadi targetnya?

    nantinya saya mau menilai akurasi peramalannya

      1. Langkah 1:
        Berarti data 1-6 jadi input. Trus yang data 7 jadi target. Kemudian dibandingkan hasilnya dengan dengan data real 7 pak?

        Terus
        Langkah 2:
        Kalo oke lanjut, data 2-7 jadi input. Trus data 8 jadi target. Kemudian dibandingkan akurasinya data real 8.

        Begitu ya pak?.

        Oh iya itu data 2-7 untuk prediksi 8.
        data 7 nya hasil training langkah pertama, apa data real pak?

        Terimakasih atas bimbingannya. Maaf pmula jadi banyak tanya hhaha

      2. itu kan ibarat melatih hanya dengan satu data (1-6 utk 7). kalau punya data 1-9 bisa pake 3 data:
        Langkah 1:
        data 1-6 jadi input. Trus yang data 7 jadi target 1.
        data 2-7 jadi input. Trus yang data 8 jadi target 2.
        data 3-8 jadi input. Trus yang data 9 jadi target 3.
        Langkah 2:
        test dengan input 1-6, 2-7, 3-8, apakah hasilnya sama dgn target 1,2,3 ? Kalau akurat prediksi 10 dengan input data 4-9 ke 11 dgn 5-10 dst.

  20. selamat sore pak,
    kenapa data 1 dan 2 banyaknya tidak sama?
    data 1 ada 7 dan data 2 ada 5?

    dan data 3 juga berbeda, bisa tolong dijelaskan pak? saya masih mempelajari peralaman untuk kepentingan tugas akhir
    terimakasih

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.