Algoritma Exponential Smoothing

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)

cmd5a

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.

Comments

15 responses to “Algoritma Exponential Smoothing”

Leave a Reply

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