Algoritma Kalman Filter

Algoritma Kalman Filter adalah salah satu algoritma yang digunakan untuk memperkirakan hasil berikutnya berdasarkan data-data yang sudah ada sebelumnya. Contoh yang dibahas kali ini adalah mengenai memperkirakan penjualan pada periode berikutnya berdasarkan data penjualan pada periode sebelumnya.
Algoritma ini biasanya digunakan untuk melakukan estimasi data sebenarnya berdasarkan data observasi yang mengandung noise dan beberapa faktor ketidaktepatan lainnnya, dan itulah arti kata “Filter” pada algoritma ini. Tetapi dalam kasus ini, algoritma ini akan digunakan untuk memprediksikan nilai kedepannya, yang diperoleh dari nilai filter pada akhir perhitungan.



Diasumsikan ada 4 data barang yang sudah diketahui hasil penjualannya
Masing-masing barang memiliki data penjualan pada 5 periode sebelumnya
Maka tentukan prediksi penjualan untuk 3 periode berikutnya
Diasumsikan data penjualan adalah sebagai berikut:

Nama Barang Periode1 Periode2 Periode3 Periode4 Periode5
Pensil 10 12 8 11 20
Penghapus 15 12 13 14 14
Pena 9 7 15 15 10
Penggaris 1 2 4 12 13

Langkah pertama adalah memasukkan data-data yang digunakan.
Contoh data awal adalah sebagai berikut:

data=[10 12 8 11 20; ...
      15 12 13 14 14; ...
      9 7 15 15 10; ...
      1 2 4 12 13];

Langkah-langkah penggunaan algoritma ini adalah

* Lakukan perhitungan pada masing-masing data (poin 1 – 4)

for i=1:size(data,1)
. . .

1. Hitung rata-rata dan standar deviasi dari data yang sedang dihitung
Rata-rata adalah jumlah semua data dibagi dengan jumlah datanya
Standar deviasi adalah akar dari ((kuadrat dari (jumlah dari (data – rata-rata))) / jumlah data)

rata2 = mean(data(i,:));
stdDev = sqrt(sum((data(i,:) - rata2) .^ 2) / jumlahData);

2. Beri nilai awal untuk setiap variabel yang dibutuhkan
Penjelasan lebih lanjut mengenai masing-masing variabel dapat dilihat pada skrip dibawah ini

clear s
s.A = 1;            %Matriks Transisi State     (default matriks identitas)
s.Q = stdDev ^ 2;   %Kovarians Noise Proses     (default 0)
s.H = 1;            %Model Observasi            (default matriks identitas)
s.R = stdDev ^ 2;   %Kovarians Noise Observasi
s.B = 0;            %Matriks input              (default 0)
s.u = 0;            %Model kontrol input        (default 0)
s.x = nan;          %Estimasi Vektor State 
s.P = nan;          %Kovarians Estimasi Vektor State

3. Lakukan perulangan sebanyak jumlah data yang ada (poin 3a – 3b)

for j=1:jumlahData
. . .

3a. Beri nilai awal Vektor Observasi menggunakan data yang ada

s(end).z = data(i,j);

3b. Lakukan proses perhitungan dengan menggunakan metode Kalman Filter
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 3b1 – 3b3)

s(end+1)=kalmanfilter(s(end));

Memasuki perhitungan pada fungsi kalmanfilter

3b1. Parameter s memiliki beberapa field / variabel seperti yang sudah dijelaskan sebelumnya
Apabila terdapat variabel yang belum dideklarasikan sebelumnya,
maka skrip dibawah ini akan melakukan inisialisasi pada variabel tersebut

if ~isfield(s,'x'); s.x=nan*z; end
if ~isfield(s,'P'); s.P=nan; end
if ~isfield(s,'z'); error('Vektor Observasi tidak ditemukan'); end
if ~isfield(s,'u'); s.u=0; end
if ~isfield(s,'A'); s.A=eye(length(x)); end
if ~isfield(s,'B'); s.B=0; end
if ~isfield(s,'Q'); s.Q=zeros(length(x)); end
if ~isfield(s,'R'); error('Kovarians Observasi tidak ditemukan'); end
if ~isfield(s,'H'); s.H=eye(length(x)); end

3b2. Lakukan perhitungan berikut saat perulangan pertama kali,
yaitu saat estimasi vektor state masih belum memiliki nilai dari perhitungan sebelumnya

if isnan(s.x)
. . .

3b2a. Beri nilai awal untuk Estimasi Vektor State dan Kovarians Estimasi Vektor State

s.x = s.H \ s.z;
s.P = s.H \ s.R / s.H'; 

3b3. Lakukan perhitungan berikut pada perulangan berikutnya (sampai sebanyak jumlah data yang dihitung) (poin 3b3a – 3b3c)

. . .
else
. . .

3b3a. Hitung nilai prediksi sementara untuk Estimasi Vektor State dan Kovarians Estimasi Vektor State

s.x = s.A * s.x + s.B * s.u;
s.P = s.A * s.P * s.A' + s.Q;

3b3b. Hitung faktor gain Kalman

K = s.P * s.H' / (s.H * s.P * s.H' + s.R);

3b3c. Lakukan koreksi menggunakan faktor gain untuk mendapatkan nilai akhir prediksi

s.x = s.x + K * (s.z - s.H * s.x);
s.P = s.P - K * s.H * s.P;

4. Nilai prediksi akhir diambil dari nilai Estimasi Transisi State yang sudah dihitung sebelumnya

kf(i) = round(s(end).x,0);

Hasil akhir adalah:

Algoritma Kalman Filter
Contoh: Memperkirakan penjualan pada periode berikutnya berdasarkan data penjualan pada periode sebelumnya
Diasumsikan ada 4 data barang yang sudah diketahui hasil penjualannya
Masing-masing barang memiliki data penjualan pada 5 periode sebelumnya
Maka tentukan prediksi penjualan untuk 3 periode berikutnya
Diasumsikan data penjualan adalah sebagai berikut: 
Nama Barang, Periode1, Periode2, Periode3, Periode4, Periode5
Pensil     , 10      , 12      , 8       , 11      , 20
Penghapus  , 15      , 12      , 13      , 14      , 14
Pena       , 9       , 7       , 15      , 15      , 10
Penggaris  , 1       , 2       , 4       , 12      , 13


Hasil Perhitungan dengan metode Kalman Filter
Nama Barang, Periode1, Periode2, Periode3, Periode4, Periode5, Prediksi Periode berikutnya
Pensil     , 10      , 12      , 8       , 11      , 20      , 16
Penghapus  , 15      , 12      , 13      , 14      , 14      , 14
Pena       , 9       , 7       , 15      , 15      , 10      , 12
Penggaris  , 1       , 2       , 4       , 12      , 13      , 11

Contoh modul / source code menggunakan Matlab dapat didownload disini:

[sdm_download id=”2252″ fancy=”0″]



Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.

Comments

16 responses to “Algoritma Kalman Filter”

  1. Firdani Rianda Avatar
    Firdani Rianda

    Saya ingin bertanya dalam menentukan prediksi kedepannya Filter Kalman harus ada Measurement terbaru, dengan cara apa tanpa adanya measurement terbaru dapat memprediksi data ke periode selanjutnya?

    1. pip Avatar
      pip

      Measurement apakah yang anda maksud? karena dalam pembahasan diatas tidak ada pembahasan mengenai Measurement.

      Pada intinya, perhitungan yang dilakukan pada algoritma ini adalah melakukan perhitungan Kalman Filter untuk masing-masing periode, dan kemudian mendapatkan jawaban akhir dari perhitungan data yang terakhir.

  2. Syahadian Avatar
    Syahadian

    apakah algoritma kalman filter ini cocok untuk peramalan semisal nilai inflasi bulanan?

    1. pip Avatar
      pip

      Seharusnya masih tepat guna selama cara implementasi kasus masih mirip seperti contoh kasus yang saya bagikan disini

  3. eka ningsih Avatar
    eka ningsih

    algoritma diatas menggunakan aplikasi apa ya ? matlab?

    terimakasih

    1. pip Avatar
      pip

      Ya, betul. Hasil implementasi skrip diatas dapat anda ujicoba secara langsung dengan mengunduh file skrip yang saya sertakan pada akhir pos ini.

  4. Adi Sunardy Avatar

    Dear Admin,

    Apakah ada contoh atau penjelasan implementasi KF sebagai filter untuk mereduksi noise pada sebuah dataset (reference data)? Terima kasih atas respondnya.

    Thanks

    1. pip Avatar
      pip

      Saya tidak memiliki contoh implementasi algoritma ini untuk digunakan dalam proses reduksi noise. Tetapi, jika saya melihat proses implementasi secara umum, seharusnya hanya perlu melakukan prediksi pada masing-masing bit sinyal untuk mendapatkan sinyal akhir. Ini hanyalah perkiraan saya saja sehingga hasilnya tidak saya ketahui.

  5. Muhammad Rizaldi S Avatar
    Muhammad Rizaldi S

    selamat malam admin.
    saya mau bertanya dalam peramalan/ prediksi/ forcasting ada peramalan jangka pendek menengah dan jangka panjang. algoritma kalman filter unscented kalman filter dan ekstented kalman filter dan algoritma levenberg marquarth cocok untuk meramalkan jangka apa ?

    1. pip Avatar
      pip

      Menurut pandangan saya, tanpa melihat dari segi teori, percobaan algoritma dilakukan dengan sistem trial dan error untuk mendapatkan algoritma manakah yang lebih cocok digunakan pada jangka menengah atau panjang. Jika menurut teori maka silahkan anda baca pada jurnal yang membahas algoritma tersebut.

    2. Muhammad Rizaldi S Avatar
      Muhammad Rizaldi S

      dan apakah bisa di implemntasi untuk peramalan harga ?

      1. pip Avatar
        pip

        Jika kasus yang tersedia adalah bersifat time-series, maka seharusnya masih bisa dilakukan.

        1. M rizaldi S Avatar
          M rizaldi S

          terimakasih pak. boleh saya minta link contoh perhitungan manual nya algoritma kalman filter pak, saya mengalami kesulitan dalam perhitungan manual. setelah dilakukan perhitungan manual saya akan mencari nilai mse nya. termakasih pak mohon bantuannya

          1. pip Avatar
            pip

            Mohon maaf saya tidak memiliki referensi contoh perhitungan manual untuk algoritma ini. Saya hanya mempelajari alur skrip berdasarkan referensi skrip lainnya sehingga tidak menggunakan hitung manual

        2. M rizaldi S Avatar
          M rizaldi S

          atau boleh saya melihat referensi skrip kasus kaya penjelasan bapak. terimakasih

          1. pip Avatar
            pip

            Saya mempelajari algoritma ini sejak 2 tahun lalu, sehingga saya sudah tidak mengingat dimanakah referensi skrip yang saya gunakan. Harap maklum

Leave a Reply

Your email address will not be published. Required fields are marked *