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:
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.
siang mas, mo nanya, saya kan lg bikin aplikasi TA tentang sistem pakar untuk memprediksi hasil penjualan, kbutulan algoritma diatas cocok banget sama judul TA saya mas. tapi bahasa programnya beda, dlm skripsii saya, saya menggunakan bahasa program php dan mysql. kira2 klo bahasa programnya diterjemahkan ke php dan mysql + dibikin form input ama databasenya kira2 brapa ya mas ya ?.
Selamat siang,
Tentu saja saya bisa bantu untuk melakukan konversi algoritma ini kedalam bahasa pemrograman php. Jika tertarik untuk menggunakan jasa saya, komunikasi selanjutnya bisa dilakukan secara pribadi saja, dengan nomor kontak yang tertera pada halaman http://piptools.net/hubungi-kami/ .
Materi di atas apakah ada jurnalnya? Saya di haruskan mengambil kutipan yang bersumber di jurnal atau rilis resmi. Terimakasih sebelumnya.
Implementasi algoritma ini adalah berdasarkan pemahaman saya dalam memahami berbagai sumber referensi yang saya dapatkan melalui internet, sehingga saya tidak memiliki sebuah jurnal yang khusus membahas mengenai implementasi algoritma yang saya lakukan. Anda bisa menggunakan jurnal apapun yang membahas algoritma ini, yang dapat anda temukan dengan pencarian jurnal melalui internet.
maaf min , mau menanyakan lagi, bisa ga ya ES di gunakan untuk memprediksi data yg periode nya kurang dari 10? semisal kita ingin memprediksi tingkat penjualan di bulan Agustus 2017 , tetapi data yang kita miliki hanya dari bulan Januari sampai Juli. Nah itu masih bisa menggunakan ES atau dengan algoritma lain? Terimakasih. 🙂
maaf min, saya kurang memperhatikan , ternyata bisa hehe. Di post anda ternyata cuma 3 periode. maafkan atas ketidak telitian saya 🙂
Baik, tidak apa-apa. Memang dalam pembahasan ini saya hanya menggunakan 3 periode saja untuk memudahkan cara perhitungan. Tentu saja dalam implementasi sebenarnya hanya tinggal menyesuaikan dengan jumlah periode data yang dipakai, Anda tinggal melakukan penggantian konstanta pada poin nomor 2 untuk menyesuakan jumlah periode yang terjadi dalam topik anda.
Saya mau bertanya apakah source kode di atas bisa di gunakan di java ?
Skrip yang saya bagikan adalah skrip dalam bahasa visual basic .net, sehingga apabila ingin digunakan pada java, maka anda harus melakukan konversi secara manual sebelum skrip tersebut dapat dipakai.
apakah algoritma ini bisa digunakan untuk prediksi time series seperti inflasi/saham?
Seharusnya masih bisa selama topiknya adalah memprediksikan sesuatu didepan berdasarkan sejumlah data yg anda miliki sebelumnya
mau tanya admin, algoritma ini tahun berapa dirilis dan diperkenalkan ?
Mengenai hal tersebut dapat dicari pada jurnal-jurnal terkait. Saya sendiri juga tidak memahami kapan saatnya algoritma ini diperkenalkan.
maaf min untuk yang
slope = (alpha / (3 * (1 – alpha) * (1 – alpha))) * (((6 – 5 * alpha) * St(0)(3)) – ((10 – 8 * alpha) * St(1)(3)) + ((4 – 3 * alpha) * St(2)(3)))
angka 6-5 kemudian 10-8 dan 4-3 itu asal nya dari mana ya??
terimakasih
Angka tersebut merupakan angka yang sudah ditentukan pada rumus untuk menghitung slope pada saat saya membaca referensi jurnal untuk mempelajari algoritma ini. Dan mohon maaf saya sudah tidak memiliki referensi tersebut. Tentunya jika anda memiliki referensi jurnal yang menggunakan rumus dengan angka yang berbeda, maka silahkan mengubah bagian ini sesuai dengan rumus tersebut.