7 minute read

Pada akhir 2021 lalu, saya diminta oleh salah seorang rekan saya di pabrik untuk membantunya mengerjakan algoritma auto replenishment untuk semua gudang yang di-_provide_ oleh perusahaan saya se-Indonesia.

Hal ini dia perlukan karena proses yang existing saat itu sangat melelahkan baginya dan tim.

Existing Process

Setiap pagi, rekan saya dan timnya harus mengambil berbagai data dari beberapa portal aplikasi internal untuk kemudian memutuskan produk mana yang harus dikirim, berapa dan kapan.

Oleh karena produk yamg kami produksi sangat banyak dan gudang provider (begitu kami menyebutnya) juga ada di tiap kota besar, maka proses ini sangat melelahkan. Tidak jarang ditemukan kesalahan karena faktor human.


Algoritma Auto Replenishment

Setelah mencari tahu bagaimana business process di workcenter rekan saya tersebut, saya coba memulai untuk membuat algoritma. Ternyata, 90% dari porsi total pengerjaan ini adalah:

Bagaimana membuat forecast produk yang akurat?

Jadi tujuannya sekarang berubah. Pada awalnya adalah otomasi, sekarang jadi forecasting.

Lantas bagaimana cara saya membuat algoritmanya?

Membuat Algoritma

Saya memiliki data jualan harian per-masing-masing gudang provider sejak tahun 2018. Fyi, produk yang saya kerjakan ada sekitar 200 buah produk.

Dari data tersebut, sudah jelas bahwa data ini termasuk ke dalam data time series. Oleh karena itu forecast-nya pun harus menggunakan teknik-teknik yang ada pada time series.

Berbagai model seperti ARIMA, exponential smoothing, TBATS, dan sebagainya saya coba untuk melakukan forecast. Namun hasilnya tidak memuaskan. Ada produk-produk yang bagus forecast-nya, ada juga produk-produk yang tidak bagus forecast-nya.

Lantas, salah seorang rekan tim saya memberikan ide yang brilian:

Bagaimana jika kita menggunakan prinsip time series decomposition? Tapi berdasarkan data yang sudah dihilangkan pencilannya. Kelak kita akan gunakan nilai trend sebagai basis angka forecast

Sebuah ide “liar” yang menurut saya layak dicoba. Dengan proses ini, menurut saya hasilnya kelak akan lebih cocok karena perlakukan untuk masing-masing produk jadinya lebih customize dan sesuai.

Bagi rekan-rekan yang belum tahu, prinsip dari time series decomposition adalah memecah data time series menjadi 3 komponen:

  1. Trend,
  2. Seasonal,
  3. Random noise.

Sumber gambar: https://otexts.com/fpp2/stl.html#ref-Cleveland1990


Workflow

Jadi cara kerja algoritma saya adalah sebagai berikut:

STEP 1
  Mengubah data jualan harian menjadi jualan bulanan.
  Cek sebaran data.
  Apakah ada pencilan?
    Jika Ada 
      Ganti dengan median
    Jika Tidak ada
      Lanjut

STEP 2
  Mengecek apakah data produk stasioner atau bukan.
  Jika stasioner
    Lanjut
  Jika tidak stasioner
    Hitung lag
    Gunakan lag untuk membuat time series baru (transformasi)

STEP 3
  Lakukan dekomposisi.
  Ambil nilai trend.
  Nilai forecast = mean(trend 6 bulan terakhir)
  Bandingkan nilai forecast dengan rata-rata sales 3 bulan terakhir
  Persentase selisih > 50%
    Jika Ya
      Apakah ada pencilan?
        Jika Ada 
            Ganti dengan median
        Jika Tidak ada
            Cek nilai max atau min data
      Ulangi STEP 3
    Jika tidak
        Lanjut

STEP 4
  Lakukan untuk semua produk

Sederhana bukan?

Mungkin kalian bertanya-tanya, kenapa saya harus menghilangkan pencilan atau bahkan nilai max atau min (walau bukan pencilan). Karena setelah dilakukan pre-analisis, ada beberapa kejadian pada saat pandemi di mana nilai sales produk-produk menjadi sangat amat tinggi akibat adanya special transaction order dari lembaga-lembaga tertentu.


Hasil Akhir dan Implikasi

Setelah algoritma ini dijalankan secara resmi pada Q4 2022, kami melakukan review pada Januari 2023 ini. Hasilnya cukup menggembirakan:

  1. Service level tetap terjaga di atas 92%. Artinya, hampir semua barang ready di gudang provider saat ada tarikan sales konsumen.
  2. Penghematan biaya overstock di gudang sebesar Rp 8 Miliar lebih! Ternyata setelah ditelaah, angka forecast hasil algoritma kami bisa menekan banyaknya stok yang ada di gudang. Jika selama ini tim biasa membanjiri gudang dengan banyak barang sehingga biaya penyimpanan menjadi besar, kini barang yang disimpan sudah lebih “sedikit” namun tetap terjaga.

Sebuah perjalanan panjang yang luar biasa.

Next-nya kami hendak mencari faktor penyebab sebagian kecil produk-produk yang memiliki service level di bawah 90%.