Algoritma Moving Average / Rata-rata Bergerak adalah salah satu algoritma yang digunakan untuk memperkirakan data berikutnya berdasarkan data-data yang sudah ada. Contoh yang dibahas kali ini adalah memperkirakan penjualan pada periode berikutnya berdasarkan data penjualan pada periode sebelumnya.
Algoritma ini memiliki beberapa variasi yang umum digunakan, yaitu:
- SMA (Simple Moving Average)
- CMA (Cumulative Moving Average)
- WMA (Weighted Moving Average)
- EMA (Exponential Moving Average)
Masing-masing variasi tersebut akan dibahas pada perhitungan dibawah ini
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 |
Contoh data awal adalah sebagai berikut:
Dim barang(3)() As Double barang(0) = New Double() {10, 12, 8, 11, 20} barang(1) = New Double() {15, 12, 13, 14, 14} barang(2) = New Double() {9, 7, 15, 15, 10} barang(3) = New Double() {1, 2, 4, 12, 13}
Sebelum masuk kedalam langkah-langkah pembahasan algoritma, ada beberapa konstanta atau parameter yang harus diketahui, yaitu:
* Tentukan banyak periode berikutnya yang perlu dihitung
Diasumsikan dalam kasus ini, banyak periode berikutnya adalah 3 periode
Const jumlahPeriodeBerikutnya As Integer = 3
* Tentukan jumlah data yang digunakan pada masing-masing perhitungan
Nantinya untuk setiap baris baru akan digunakan skian baris sebelumnya untuk menghitung prediksi penjualan pada baris tersebut
Diasumsikan dalam kasus ini, jumlah data sebelumnya yang digunakan adalah 3 data
Const jumlahDataSebelumnya As Integer = 3
* Tentukan faktor smoothing sebagai bobot penurun periode
Besar nilai antara 0 sampai dengan 1
Semakin besar nilai faktor smoothing, maka bobot pada periode yang lama akan semakin cepat mengecil
Diasumsikan dalam kasus ini, faktor smoothing yang digunakan adalah 0.8
Const alpha As Double = 0.8
SMA (Simple Moving Average)
Algoritma ini adalah algoritma Moving Average yang paling mudah. Nilai prediksi pada sebuah periode adalah berdasarkan rata-rata dari sekian baris data sebelumnya
Langkah-langkah penggunaan algoritma ini adalah
1. Hasil prediksi penjualan untuk data pada periode pertama adalah data itu sendiri
hasil(0) = data(0)
2. Pada masing-masing baris data,
Jumlahkan semua data sebanyak jumlah data sebelumnya
2a. Jika indeks data yang dihitung lebih dari jumlah data,
maka akan terdapat data yang tidak nyata,
Untuk baris data yang tidak nyata, gunakan nilai prediksi yang telah didapatkan sebelumnya seolah-olah penjualan dilakukan sebanyak jumlah tersebut
If j > data.Length - 1 Then rata2 += hasil(j) jumlahData += 1 . . .
2b. Selain itu, gunakan data yang nyata seperti biasanya,
. . . ElseIf j >= 0 Then rata2 += data(j) jumlahData += 1 End If
3. Hitung prediksi penjualan pada baris data ini dengan rumus = rata-rata dibagi jumlah data
rata2 /= jumlahData
CMA (Cumulative Moving Average)
Algoritma ini merupakan variasi lain dari Simple Moving Average. Dimana nilai prediksi pada sebuah periode adalah berdasarkan rata-rata dari semua baris data sebelumnya
Langkah-langkah penggunaan algoritma ini adalah
1. Hasil prediksi penjualan untuk data pada periode pertama adalah data itu sendiri
hasil(0) = data(0)
2. Pada masing-masing baris data,
Jumlahkan semua data dari awal sampai pada data sebelum baris data ini
2a. Jika indeks data yang dihitung lebih dari jumlah data,
maka akan terdapat data yang tidak nyata,
Untuk baris data yang tidak nyata, gunakan nilai prediksi yang telah didapatkan sebelumnya seolah-olah penjualan dilakukan sebanyak jumlah tersebut
If j > data.Length - 1 Then rata2 += hasil(j) jumlahData += 1 . . .
2b. Selain itu, gunakan data yang nyata seperti biasanya,
. . . ElseIf j >= 0 Then rata2 += data(j) jumlahData += 1 End If
3. Hitung prediksi penjualan pada baris data ini dengan rumus = rata-rata dibagi jumlah data
rata2 /= jumlahData
WMA (Weighted Moving Average)
Algoritma ini merupakan variasi lain dari Simple Moving Average. Semua periode akan memiliki nilai bobot sendiri. Periode yang lebih lama akan memiliki nilai bobot yang rendah, sehingga prediksi akan lebih ditentukan oleh data-data yang lebih baru. Nilai prediksi pada sebuah periode adalah berdasarkan jumlah dari sekian baris data sebelumnya setelah dikali dengan bobot periode.
Langkah-langkah penggunaan algoritma ini adalah
1. Hasil prediksi penjualan untuk data pada periode pertama adalah data itu sendiri
hasil(0) = data(0)
2. Tentukan bobot pada masing-masing periode
Nilai bobot yang digunakan akan selalu terurut dari bobot terendah ke bobot tertinggi
Selisih antar nilai bobot juga harus bernilai sama
dan jumlah semua nilai bobot tersebut harus bernilai 1
Karena ada 5 periode data, maka ada 5 bobot yang harus dihitung
2a. Hitung dulu semua jumlah indeks data yang digunakan sebanyak jumlah data sebelumnya
Lakukan perhitungan jumlah hanya pada data dengan indeks periode yang valid saja (mulai dari 1)
Dim n As Integer = 0 Dim iBobot As Integer = 1 For j As Integer = i - jumlahDataSebelumnya To i - 1 If j >= 0 Then n += iBobot iBobot += 1 End If Next
2b. Bobot pada masing-masing periode adalah indeks periode tersebut dibagi dengan jumlah indeks data
Lakukan perhitungan bobot hanya pada data dengan indeks periode yang valid saja (mulai dari 1)
Dim bobot(jumlahDataSebelumnya - 1) As Double Dim idxBobot As Integer = 0 iBobot = 1 For j As Integer = i - jumlahDataSebelumnya To i - 1 If j >= 0 Then bobot(idxBobot) = (iBobot) / n iBobot += 1 End If idxBobot += 1 Next
3. Pada masing-masing baris data,
Jumlahkan nilai perkalian dari data dan bobot periode pada semua data sebanyak jumlah data sebelumnya
3a. Jika indeks data yang dihitung lebih dari jumlah data,
maka akan terdapat data yang tidak nyata,
Untuk baris data yang tidak nyata, gunakan nilai prediksi yang telah didapatkan sebelumnya seolah-olah penjualan dilakukan sebanyak jumlah tersebut
If j > data.Length - 1 Then rata2 += hasil(j) * bobot(idxBobot) idxBobot += 1 . . .
3b. Selain itu, gunakan data yang nyata seperti biasanya,
. . . ElseIf j >= 0 Then rata2 += data(j) * bobot(idxBobot) idxBobot += 1 End If
EMA (Exponential Moving Average)
Algoritma ini merupakan pengembangan lebih lanjut dari Weighted Moving Average. Jika pada Weighted Moving Average nilai bobot yang dihitung akan berkurang / bertambah secara aritmatika (misalnya 1/6, 2/6, 3/6), maka pada algoritma ini nilai bobot yang dihitung akan berkurang / bertambah secara eksponensial (misalnya 1, 1/2, 1/4, 1/8). Dalam algoritma ini perhitungan prediksi juga menggunakan rumus tertentu, dan membutuhkan sebuah konstanta faktor smoothing yang sudah dijelaskan sebelumnya
Algoritma ini memiliki nama lain yaitu EWMA (Exponential Weighted Moving Average) dan merupakan versi dasar dari Algoritma Exponential Smoothing yang sudah pernah dijelaskan sebelumnya.
Langkah-langkah penggunaan algoritma ini adalah
1. Hasil prediksi penjualan untuk data pada periode pertama adalah data itu sendiri
hasil(0) = data(0)
2. Hitung prediksi penjualan dengan rumus
St = alpha * Y1 + (1 – alpha) * St-1
2a. Jika indeks data yang dihitung lebih dari jumlah data,
maka akan terdapat data yang tidak nyata,
Untuk baris data yang tidak nyata, gunakan nilai prediksi yang telah didapatkan sebelumnya seolah-olah penjualan dilakukan sebanyak jumlah tersebut
If i > data.Length - 1 Then hasil(i) = alpha * hasil(i - 1) + (1 - alpha) * hasil(i - 1) . . .
2b. Selain itu, gunakan data yang nyata seperti biasanya,
. . . Else hasil(i) = alpha * data(i) + (1 - alpha) * hasil(i - 1) End If
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.
Min mau tanya… Untuk yg simple moving average itu.. hitungnya gmna.. ko kalo dihitung manual hasilnya beda sama punya admin… Boleh kasih contoh 1 aja ngak??
Cara perhitungan Simple Moving Average cukup mudah. Untuk menjelaskan perhitungan, saya gunakan contoh data pensil.
Perlu diinget, bahwa parameter Jumlah Data Sebelumnya bernilai 3, sehingga saya hanya gunakan 3 data sebelumnya saja, sehingga:
P1 = (8+11+20)/3 = 13.xx dibulatkan menjadi 13
P2 = (11+20+13)/3 = 14.xx dibulatkan menjadi 14
P3 = (20+13+14)/3 = 16
Terimakasih min… Sangat membantu saya orang awam…
Oh iya mau tanya.. untuk pemakaian periode apakah ada batasannya… Misalnya karena data realnya ada 5 jadi periode maksimum yg digunakan hanya sampai 5 periode atau seperti apa??
Terimakasih ?
Tentu saja jumlah periode dapat disesuaikan tergantung kebutuhan. Dalam contoh ini saya hanya menggunakan 5 periode saja. Apabila dalam kasus sebenarnya terdapat jumlah periode yang lebih banyak (misalnya 10, 20, atau 50), maka silahkan menyesuaikan parameter jumlah periode sesuai yang anda inginkan. Saya rasa perhitungan akan semakin baik apabila semakin banyak data yang digunakan.
apakah algoritma simple moving average dan single moving average sama2..? terimah kasih atas pencerahannya
Jika dilihat dari definisi per kata, seharusnya kedua algoritma tersebut tidak sama. Akan tetapi untuk dapat memastikan hal tersebut maka anda harus mempelajari alur dari masing-masing algoritma yang dimaksud.