Cara Kerja Model Machine Learning
Prediksi Lama Pembayaran Invoice
Dokumen ini menjelaskan—dengan bahasa yang bisa dipahami non-teknis—apa yang dilakukan model ML di aplikasi Finance Kreasi: data apa yang dipakai, bagaimana tiga algoritma regresi bekerja, dan bagaimana hasilnya muncul di layar BOD dan Finance.
01Ringkasan satu paragraf
Setiap invoice yang diterbitkan PT Kreasi Pandawa Sakti pada akhirnya dibayar klien dalam jumlah hari yang berbeda-beda. Model ini mempelajari pola pembayaran dari ratusan invoice lama, lalu untuk invoice yang belum lunas ia memperkirakan berapa hari lagi kira-kira invoice itu dibayar. Jika perkiraannya melebihi termin (jatuh tempo yang disepakati), invoice ditandai Berisiko telat. Bagian Keuangan memakai ini untuk memprioritaskan penagihan; BOD memakai versi agregatnya untuk menilai risiko arus kas.
02Di mana hasilnya terlihat di aplikasi
Beranda BOD — gambaran besar
KPI “Piutang Berisiko Telat” + panel “Risiko Penagihan (Prediksi ML)”: total invoice yang diprediksi telat dan nilai outstanding-nya.
AR Aging (Finance) — per invoice
Tabel piutang dapat kolom “Estimasi lunas” dan “Risiko (ML)”, jadi tiap invoice bisa diurutkan menurut risikonya.
Contoh baris:
Inv KPS-2026-014 · est. 31 hari Berisiko telat
Inv KPS-2026-002 · est. 12 hari Sesuai termin
Keduanya memakai model yang sama—bedanya hanya tingkat zoom: Finance melihat per invoice untuk bertindak, BOD melihat totalnya untuk menilai kesehatan kas.
03Data & field yang dipakai
Model tidak “tahu” apa pun selain angka/atribut yang kita beri. Berikut field nyata dari
aplikasi (objek Invoice) yang dikirim ke model saat memprediksi:
| Field model | Asal di aplikasi | Arti | Pengaruh |
|---|---|---|---|
klien | Nama klien invoice | Identitas klien (mis. Energizer, Ichi Tan) | Tertinggi |
top_days | Termin (jatuh tempo − tgl invoice) | Lama termin pembayaran yang disepakati | Tinggi |
total | Nilai TOTAL invoice (Rp) | Besar tagihan | Sedang |
bulan, kuartal, year | Tanggal invoice | Musim/periode penerbitan | Rendah–sedang |
ada_po | Ada PO atau tidak | Penanda jalur dokumen | Rendah |
ada_ce | Ada nomor CE atau tidak | Penanda jalur dokumen | Rendah |
Yang diprediksi (target) adalah lama pembayaran dalam hari:
y = Tanggal Pembayaran − Tanggal Invoice (dalam hari)
Catatan: kolom Inv. Aging di spreadsheet asli tidak dipakai sebagai target karena
tidak konsisten (kosong di 2025–2026, tercampur nilai aneh di berkas lama). Target dihitung
ulang dari kedua tanggal agar bersih.
04Alur kerja end-to-end (kerangka CRISP-DM)
CRISP-DM (Cross-Industry Standard Process for Data Mining) adalah kerangka baku
enam tahap: pemahaman bisnis → pemahaman data → persiapan data → pemodelan → evaluasi →
penerapan. Seluruh proses memakai random_state = 42 agar hasilnya bisa diulang
persis.
05Tiga algoritma — bagaimana masing-masing berpikir
Ketiganya menjawab pertanyaan yang sama (“berapa hari?”) tapi dengan cara berbeda. Kita membandingkan dari yang paling sederhana ke paling canggih.
Multiple Linear Regression (MLR)
Ide: menarik satu “garis lurus” (bidang) terbaik melalui data. Setiap fitur diberi bobot (koefisien); prediksi = penjumlahan berbobot semua fitur.
ŷ = β₀ + β₁·(top_days) + β₂·(total) + … + βₙ·(fitur ke-n)
Mesin mencari nilai β yang membuat total selisih kuadrat (prediksi − aktual) paling kecil (least squares). Dalam proyek ini dipakai sebagai pembanding dasar: kalau model canggih tidak bisa mengalahkan garis lurus, berarti tidak ada gunanya.
Kelebihan
Sederhana, cepat, mudah dijelaskan (tiap fitur punya bobot jelas).Kelemahan
Menganggap hubungan selalu lurus. Pola nyata (klien × termin) tidak linear → kurang akurat.Random Forest Regression
Ide: membangun banyak pohon keputusan (di proyek ini 300 pohon), tiap pohon menebak dari sebagian data & sebagian fitur secara acak. Hasil akhir = rata-rata tebakan semua pohon. Ibarat menanyakan 300 staf berpengalaman lalu mengambil rata-ratanya—lebih stabil daripada satu pendapat.
Satu pohon membuat aturan bercabang seperti: “jika klien = Energizer dan termin > 30 → cenderung lama”. Karena tiap pohon melihat data berbeda, kesalahan acak saling meredam (teknik bagging).
Kelebihan
Menangkap pola tidak linear & interaksi antar fitur; tahan terhadap overfitting.Kelemahan
Lebih lambat & “kotak hitam”; rata-rata bisa menumpulkan kasus ekstrem.XGBoost Regression ★ (model terpilih)
Ide: juga memakai pohon, tapi dibangun bertahap dan saling memperbaiki (gradient boosting). Pohon pertama menebak kasar, pohon berikutnya fokus memperbaiki kesalahan pohon sebelumnya, begitu seterusnya (400 pohon). Ada pula regularisasi untuk mencegah model menghafal data.
Berbeda dari Random Forest yang merata-ratakan pohon sederajat, XGBoost menyusun pohon secara berurutan—tiap pohon adalah koreksi atas sisa kesalahan. Ini membuatnya biasanya paling akurat untuk data tabel seperti milik kita.
Kelebihan
Paling akurat di proyek ini; menangani pola rumit; regularisasi mengurangi overfitting.Kelemahan
Paling banyak parameter untuk disetel; perlu hati-hati agar tidak overfit.Parameter dipakai: n_estimators=400, learning_rate=0,05, max_depth=6, subsample=0,8, colsample_bytree=0,8, reg_lambda=1,0.
06Pelatihan & evaluasi
Dari 854 invoice tergabung, diambil yang berstatus lunas dengan lama bayar valid lalu dibuang pencilannya → 446 baris bersih. Data dibagi 80% latih (356) : 20% uji (90). Tiap model juga diuji dengan validasi silang 5-lipatan (data latih dibagi 5, dilatih-diuji bergantian) supaya hasilnya tidak kebetulan.
Metrik penilaian
- MAE — rata-rata selisih absolut (berapa hari rata-rata meleset). Makin kecil makin baik.
- RMSE — akar rata-rata kuadrat selisih (menghukum meleset besar). Makin kecil makin baik.
- R² — seberapa besar keragaman yang berhasil dijelaskan model (0–1). Makin mendekati 1 makin baik.
Hasil perbandingan (data uji)
| Model | R² (CV) | R² (Uji) | RMSE (hari) | MAE (hari) |
|---|---|---|---|---|
| Multiple Linear Regression | 0,259 | 0,491 | 11,92 | 8,29 |
| Random Forest | 0,452 | 0,567 | 10,99 | 7,29 |
| XGBoost ★ | 0,495 | 0,617 | 10,34 | 6,64 |
Urutannya konsisten di validasi silang maupun data uji: XGBoost > Random Forest > Linear. MAE 6,64 hari berarti rata-rata prediksi meleset sekitar seminggu—cukup untuk membantu menyusun prioritas penagihan.
07Faktor yang paling berpengaruh
Setelah model terbaik dipilih, kita ukur fitur mana yang paling menentukan (feature importance):
| Peringkat | Fitur | Bobot |
|---|---|---|
| 1 | klien = PT. Ichi Tan Indonesia | 0,153 |
| 2 | klien = PT. Energizer Indonesia | 0,106 |
| 3 | klien = PT. Bital Asia | 0,097 |
| 4 | klien = PT. Wavin Trading Indonesia | 0,088 |
| 5 | top_days (termin pembayaran) | 0,075 |
Kesimpulan: identitas klien adalah penentu terkuat—tiap klien punya kebiasaan & birokrasi bayar yang berbeda—diikuti termin (TOP). Karena itu Finance bisa memperkirakan prioritas penagihan berdasarkan klien + termin sejak invoice diterbitkan.
08Bagaimana model disajikan ke aplikasi
Model dilatih dengan Python lalu disimpan sebagai berkas. Ia dijalankan oleh sebuah layanan terpisah (sidecar) yang dipanggil aplikasi utama (Go) lewat HTTP.
Pemakaian per peran:
- AR Aging (Finance): tiap invoice diberi estimasi hari + flag berisiko bila estimasi > termin.
- Beranda BOD: estimasi semua invoice dijumlahkan menjadi “berapa banyak & berapa rupiah piutang yang diprediksi telat”.
09Keterbatasan & catatan jujur
- Estimasi, bukan kepastian. Rata-rata meleset ±7 hari (MAE). Berguna untuk mengurutkan prioritas, bukan menjanjikan tanggal pasti.
- Data didominasi 2019–2024. Banyak invoice 2025–2026 belum lunas sehingga belum punya tanggal bayar—porsi data terbarunya kecil.
- Angka di aplikasi bisa beda tipis dari contoh laporan. Saat live, aplikasi memberi model field yang tersedia (klien, total, termin; field uang/PO memakai nilai default), sehingga estimasinya sedikit berbeda dari contoh yang memakai field uang lengkap.
- Model ini ≠ forecast cashflow. Grafik perkiraan kas 8 minggu di Beranda BOD adalah model lain dan terpisah dari prediksi lama-bayar ini.
Pengembangan lanjutan
- Menambah data 2025–2026 yang sudah lunas agar model makin mutakhir.
- Menambah fitur riwayat perilaku bayar klien (rata-rata keterlambatan sebelumnya).
- Membaca isi dokumen PO otomatis (OCR) sebagai sumber fitur tambahan.
10Glosarium singkat
| Istilah | Arti |
|---|---|
| Regresi | Memprediksi angka kontinu (di sini: jumlah hari), bukan kategori. |
| Fitur (feature) | Atribut input yang dipakai model (klien, termin, nilai, dll.). |
| Target | Yang diprediksi: lama pembayaran (hari). |
| TOP / termin | Term of Payment—jangka waktu jatuh tempo yang disepakati. |
| Overfitting | Model menghafal data latih sehingga gagal di data baru. |
| Data leakage | Memakai informasi yang baru ada setelah kejadian → model “mencontek”. |
| Validasi silang | Membagi data berulang untuk menguji kestabilan model. |
| Sidecar | Layanan kecil terpisah yang menjalankan model dan dipanggil aplikasi utama. |