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.
Leave a Reply