Algoritma Exponential Smoothing adalah salah satu algoritma yang digunakan untuk memperkirakan hasil berikutnya berdasarkan data-data yang sudah ada sebelumnya. Salah satunya adalah untuk memperkirakan hasil penjualan berikutnya, agar stok barang tidak kurang / berlebih.
Contoh yang dibahas kali ini adalah memperkirakan penjualan pada periode berikutnya berdasarkan data penjualan pada periode sebelumnya
Semakin banyak data penjualan pada periode sebelumnya, semakin optimal hasil perhitungannya
Diasumsikan disini hanya terdapat 3 data penjualan pada periode sebelumnya, dan akan dicari 3 data penjualan untuk periode berikutnya
Contoh inputan:
Nama Barang | Periode1 | Periode2 | Periode3 |
---|---|---|---|
Pensil | 10 | 12 | 8 |
Penghapus | 15 | 12 | 13 |
Pena | 9 | 7 | 15 |
Type-X | 15 | 8 | 12 |
Langkah pertama adalah memasukkan data-data yang digunakan.
Contoh data adalah sebagai berikut
Indeks barang ke 3, 4, 5 digunakan untuk perhitungan pada periode ke 1, 2, 3
Dim barang(3, 5) As Double barang(0, 0) = 10 barang(0, 1) = 12 barang(0, 2) = 8 barang(1, 0) = 15 barang(1, 1) = 12 barang(1, 2) = 13 barang(2, 0) = 9 barang(2, 1) = 7 barang(2, 2) = 15 barang(3, 0) = 15 barang(3, 1) = 8 barang(3, 2) = 12
Langkah-langkah penggunaan algoritma ini adalah
1. Tentukan jumlah smoothing yang akan dilakukan
Diasumsikan dalam kasus ini, jumlah smoothing bernilai 3
Artinya untuk masing-masing data, akan dilakukan proses perhitungan smoothing sebanyak 3 kali
Const jumlahSmoothing As Integer = 3
2. Tentukan jumlah periode barang yang diketahui
Diasumsikan dalam kasus ini, jumlah periode barang yang diketahui ada 3 periode
Const jumlahPeriodeBarangSebelumnya As Integer = 3
3. Tentukan jumlah periode barang yang akan dihitung
Diasumsikan dalam kasus ini, jumlah periode barang yang akan dhitung adalah 3 periode kedepan
Const jumlahPeriodeBarangDihitung As Integer = 3
4. Lakukan perhitungan untuk setiap data barang
4a. Tentukan alpha sebagai nilai konstanta smoothing
nilai alpha berkisar antara 0 sampai dengan 1
cara pengambilan data dilakukan dengan cara sampling data antara 0 sampai 1 sebanyak mungkin sesuai kebutuhan
semakin banyak nilai konstanta yang dites, semakin optimal nilai konstanta yang didapatkan
Diasumsikan dalam kasus ini, akan dicari nilai alpha acak sebanyak 5 kali untuk dicari alpha terbaik nya
alphaAcak = rnd.Next(0, 10 * iterasi) / 200
4a1. Untuk masing-masing alpha yang dites,
Lakukan proses perhitungan smoothing data
rumus perhitungan smoothing pertama adalah St(a) = alpha * (data(a) + (1 – alpha) * St(a – 1)
rumus perhitungan smoothing kedua adalah St'(a) = alpha * (St(a) + (1 – alpha) * St'(a – 1)
rumus perhitungan smoothing ketiga adalah St”(a) = alpha * (St'(a) + (1 – alpha) * St”(a – 1)
St(0)(0) = data(0) For a = 1 To 2 St(0)(a) = alphaAcak * data(a) + (1 - alphaAcak) * St(0)(a - 1) Next St(1)(0) = St(0)(0) For a = 1 To 2 St(1)(a) = alphaAcak * St(0)(a) + (1 - alphaAcak) * St(1)(a - 1) Next St(2)(0) = St(1)(0) For a = 1 To 2 St(2)(a) = alphaAcak * St(1)(a) + (1 - alphaAcak) * St(2)(a - 1) Next
4a2. Tentukan nilai kesalahan peramalan
digunakan 2 metode perhitungan, yaitu Mean Absolute Error (MAE), dan Mean Squared Error (MSE)
Mean absolute error adalah rata-rata nilai absolute dari kesalahan meramal, dihitung dengan rumus (jumlah dari data(a) – st(a)) / banyak data
Mean squared error adalah rata-rata kuadrat nilai dari kesalahan meramal, dihitung dengan rumus (jumlah dari kuadrat data(a) – st(a)) / banyak data
Jika nilai perhitungan MAE dan MSE kurang dari nilai MAE dan MSE terendah, maka ambil nilai perhitungan ini sebagai nilai minimal
Dim MAE As Double = 0 Dim totData As Double = 0 For a = 0 To 2 totData = totData + Math.Abs(data(a) - St(0)(a)) Next MAE = totData / 3 Dim MSE As Double = 0 totData = 0 For a = 0 To 2 totData = totData + (Math.Abs(data(a) - St(0)(a))) * (Math.Abs(data(a) - St(0)(a))) Next MSE = totData / 3 If (MAE < minMAE) And (MSE < minMSE) Then minMAE = MAE minMSE = MSE alphaTerbaik = alphaAcak End If
4b. Setelah menemukan alpha terbaik, maka ulangi poin 4a1 dan 4a2 untuk nilai alpha ini
St(0)(0) = data(1) For a = 1 To 2 St(0)(a) = alpha * data(a) + (1 - alpha) * St(0)(a - 1) Next St(1)(0) = data(1) For a = 1 To 2 St(1)(a) = alpha * St(0)(a) + (1 - alpha) * St(1)(a - 1) Next St(2)(0) = data(1) For a = 1 To 2 St(2)(a) = alpha * St(1)(a) + (1 - alpha) * St(2)(a - 1) Next
4c. Tentukan nilai dari konstanta, slope, c
Nilai ini digunakan untuk perhitungan berikutnya
Rumus perhitungan dapat dilihat pada perhitungan dibawah
Dim konstanta As Double = 0 Dim slope As Double = 0 Dim c As Double = 0 konstanta = 3 * Smoothing1(2) - 3 * Smoothing2(2) + Smoothing3(2) slope = (alpha / (2 * (1 - alpha) * (1 - alpha))) * (((6 - 5 * alpha) * Smoothing1(2)) - ((10 - 8 * alpha) * Smoothing2(2)) + ((4 - 3 * alpha) * Smoothing3(2))) c = (alpha * alpha) / ((1 - alpha) * (1 - alpha)) * (Smoothing1(2) - 2 * Smoothing2(2) + Smoothing3(2))
‘4d. Tentukan nilai peramalan untuk masing-masing periode yang dihitung
Rumus perhitungan adalah pada periode ke j adalah konstanta + slope * j + 0.5 * c * kuadrat dari j
For j As Integer = 1 To jumlahPeriodeBarangDihitung barang(i, 2 + j) = Math.Truncate(konstanta + slope * j + (1 / 2) * c * j * j) Next
Hasil akhir adalah: (klik untuk perbesar gambar)
Contoh modul / source code dalam bahasa VB (Visual Basic) dapat didownload disini:
[sdm_download id=”238″ 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