Algoritma Exponential Smoothing 15


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 BarangPeriode1Periode2Periode3
Pensil10128
Penghapus151213
Pena9715
Type-X15812

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:



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.


Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

15 pemikiran di “Algoritma Exponential Smoothing

  • fikri

    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 ?.

    • pip Penulis

      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/ .

  • Arifin

    Materi di atas apakah ada jurnalnya? Saya di haruskan mengambil kutipan yang bersumber di jurnal atau rilis resmi. Terimakasih sebelumnya.

    • pip Penulis

      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.

      • Arifin

        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. 🙂

        • Arifin

          maaf min, saya kurang memperhatikan , ternyata bisa hehe. Di post anda ternyata cuma 3 periode. maafkan atas ketidak telitian saya 🙂

        • pip Penulis

          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.

    • pip Penulis

      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.

    • pip Penulis

      Mengenai hal tersebut dapat dicari pada jurnal-jurnal terkait. Saya sendiri juga tidak memahami kapan saatnya algoritma ini diperkenalkan.

  • naufal

    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

    • pip Penulis

      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.