Tulisan ini menyajikan kode dan rumus yang digunakan untuk menghasilkan analisis contoh dan pokok-pokok yang ditampilkan dalam studi kasus saya mengenai membangun model pembelajaran mesin yang bermakna (Meaningful Machine Learning) untuk memprediksi kolektibilitas piutang (AR).
Kami akan langsung menjelaskan pekerjaan secara rinci prosesmembangun model machine-learning untuk memprediksi hasil proses kolektibilitas AR yang berbeda. kita akan bersama-sama membangun model, mengevaluasi kinerjanya, dan menjawab atau menangani pertanyaan-pertanyaan terkait AR yang berbeda dengan menggunakan machine learning. Pembasahan Kami akan mencakup teori pembelajaran mesin (Machine Learning) seperti yang diterapkan dalam kasus ini dengan menggunakan R statistics.
Digunakan 4 Algoritma Machine Learning : yakni Decision Tree (C4.5), Random Forest, Extreem Gradient Booster dan Neural Network (Jaringan Syaraf Tiruan).
Melalui kajian ini diharapkan didapatkan satu algoritma yang presisinya cukup untuk melakukan prediksi sebuah account akan bermasalah di kemudian hari dan faktor faktor apa saja yang mempengaruhinya, sehingga Chief Financial Officer mampu menciptakan insight dan tindakan yang proaktif dalam menanggulangi permasalahan piutang ini dikemudian hari.
Semua analisis dilakukan di R menggunakan RStudio. Untuk informasi sesi rinci termasuk versi R, operasi sistem dan paket versi, Silakan lihat sessionInfo () output pada akhir dokumen ini. Semua grafik dan angka dipresentasikan dengan paket ggplot2.
Kami menggunakan data set sebagai contoh yang diberikan oleh perusahaan Multifinance yang tentunya secara acak dan hanya diberikan sebagai contoh saja…. buakn kasus yang nyata di lapangan.
Data kami download dari server mereka kemudian direkayasa agar data aslinya tersamarkan.
Pertama kali kita melihat klasifikasi yang akan kita prediksi yakni: Kolektibiltas yang hasilnya dapat dibagi menjadi :
• Kredit yang Macet atau Bermasalah dalam hal ini dinyatakan dengan “Ya”
• Yang lancar atau tidak Bermasalah dinyatakan dengan “Tidak”
Featur atau Variabel yang digunakan untuk melakukan Prediksi
• Jenis Kredit : Plafon yang diberikan untuk Kendaraan Bermotor (dalam jlasifikasi jenis dan Juta)
• Fungsi : digunakan untuk kepentingan pribadi atau komersial seperti untuk digunakan Transportasi online
• Kota : Tempat Tinggal Debitur di wilayah Perkotaan atau Pedesaan
• Usia debitur : Usia yang digolongkan dalam kurang dari 45 tahun, diantara 45 tahun hingga 55 tahun hingga diatas 55 tahun
• Tenggat Waktu : Adalah tenggat waktu yang diberikan oleh pihak Multi finance setelah jatuh tempo
• Hari keterlambatan : Rerata Keterlambatan dalam pembayaran angsuran setiap bulannya
• Tenor Tahun : jangka Waktu Pinjaman
Melalui data data tersebut akan dicoba dicari model prediksi yang paling tepat.
Berikut Contoh datanya :JenisKredit | Fungsi | Kota | Usia | TenggatWaktu | HariKeterlambatan | TenorTahun | Kredit_Macet |
---|---|---|---|---|---|---|---|
Motor > 40 jt | Pribadi | Kota Besar | > 55 tahun | 1 sd 2 Minggu | TidakTerlambat | 4 | Tidak |
Mobil <250 jt | Komersial | Pedesaan | <45 tahun | diatas 1 bulan | 1 Minggu | 5 | Ya |
Mobil <250 jt | Komersial | Kota Besar | > 55 tahun | < 1minggu | TidakTerlambat | 5 | Tidak |
Mobil > 300jt | Komersial | Kota Kecil | 46 - 55 tahun | diatas 1 bulan | 1 Minggu | 5 | Tidak |
Mobil <250 jt | Pribadi | Kota Kecil | 46 - 55 tahun | diatas 1 bulan | 1 Minggu | 4 | Ya |
Mobil > 300jt | Pribadi | Pedesaan | <45 tahun | 2 sd 4 Minggu | TidakTerlambat | 2 | Ya |
Mobil <250 jt | Komersial | Pedesaan | <45 tahun | 2 sd 4 Minggu | TidakTerlambat | 2 | Tidak |
Adapun Distribusi Jumlah Ar yang bermasalah
## Tidak Ya
## 1905 561
Untuk kasus ini kami membagi data 2446 obervasi kedalam 70% data train untuk membuat model, dan 30% persen sisanya digunakan untuk melakukan validasi hasil prediksinya.
## Loading required package: lattice
## Loading required package: ggplot2
## Warning: labs do not fit even at cex 0.15, there may be some overplotting
## Confusion Matrix and Statistics
##
## Reference
## Prediction Tidak Ya
## Tidak 499 97
## Ya 72 71
##
## Accuracy : 0.7713
## 95% CI : (0.7393, 0.8011)
## No Information Rate : 0.7727
## P-Value [Acc > NIR] : 0.55546
##
## Kappa : 0.313
## Mcnemar's Test P-Value : 0.06487
##
## Sensitivity : 0.8739
## Specificity : 0.4226
## Pos Pred Value : 0.8372
## Neg Pred Value : 0.4965
## Prevalence : 0.7727
## Detection Rate : 0.6752
## Detection Prevalence : 0.8065
## Balanced Accuracy : 0.6483
##
## 'Positive' Class : Tidak
##
Dari proses permodelan yang digunakan library Rpart maka didapatkan digram pohon seperti diatas, dan yang menarik Tampak dari OBB matrik akurasi dari algoritma ini mencapai 77%.
untuk membandingkan lebih lanjut persoalan Akurasi maka dilakukan perhiungan dengan ROC
## Loading required package: gplots
##
## Attaching package: 'gplots'
## The following object is masked from 'package:stats':
##
## lowess
Akurasi dilihat dari Area under Curvenya berada pada 74,1%. Ini hasil pertama algortima yang dihasilkan oleh karenanya kita akan menggunakan algoritma yang kedua yakni Random Forest
Random Forest merupakan algoritma dari gabungan beratus bahkan beribu ribu pohon keputusan, karena 1 decision tree bisa menghasilkan perkiraan atau prediksi yang “overfit” yang bisa menimbulkan kesalahan prediksi.
hasil perhitungan Random Forest sebagai berikut :
## randomForest 4.6-12
## Type rfNews() to see new features/changes/bug fixes.
##
## Attaching package: 'randomForest'
## The following object is masked from 'package:ggplot2':
##
## margin
## Confusion Matrix and Statistics
##
## Reference
## Prediction Tidak Ya
## Tidak 553 93
## Ya 18 75
##
## Accuracy : 0.8498
## 95% CI : (0.822, 0.8748)
## No Information Rate : 0.7727
## P-Value [Acc > NIR] : 1.069e-07
##
## Kappa : 0.4925
## Mcnemar's Test P-Value : 2.160e-12
##
## Sensitivity : 0.9685
## Specificity : 0.4464
## Pos Pred Value : 0.8560
## Neg Pred Value : 0.8065
## Prevalence : 0.7727
## Detection Rate : 0.7483
## Detection Prevalence : 0.8742
## Balanced Accuracy : 0.7075
##
## 'Positive' Class : Tidak
##
Akurasi OBB pada Random Forest lebih tinggi yakni sebesar : 84.98% dengan susunan variabel berdasarkan tingkat kepentingannya bisa dilihat pada tabel Importance dan jumlah tree akan maksimal 100-150 tree.
Kita akan menbandingkan dengan akurasi dari perspektif ROC ROCR
ROCR dari random forest : 83.13% lebih tinggi dari Tree Diagram diatas, jadi kita akan gunakan sementara Algoritm Random forest sebagai yang paling Akurat
Extreme gradient boosting trees yang menggabungkan regresi dengan diagram pohon, sehingga algoritma ini disebut sebagai ensemble. Penjelasan detailnya bisa didapat disini : https://en.wikipedia.org/wiki/Gradient_boosting
Permodelan eXtreme Gradient Bosting
## Loading required package: plyr
## Confusion Matrix and Statistics
##
## Reference
## Prediction Tidak Ya
## Tidak 528 100
## Ya 43 68
##
## Accuracy : 0.8065
## 95% CI : (0.7761, 0.8344)
## No Information Rate : 0.7727
## P-Value [Acc > NIR] : 0.01456
##
## Kappa : 0.3743
## Mcnemar's Test P-Value : 2.828e-06
##
## Sensitivity : 0.9247
## Specificity : 0.4048
## Pos Pred Value : 0.8408
## Neg Pred Value : 0.6126
## Prevalence : 0.7727
## Detection Rate : 0.7145
## Detection Prevalence : 0.8498
## Balanced Accuracy : 0.6647
##
## 'Positive' Class : Tidak
##
Perhitungan Akurasi dengan ROC
Melalui eXtreem Gradient Booster dihasilkan akurasi prediksi : 80.65% atau 81% sedangkan Area Under Curve pada ROCnya sebesar : 79.2 %, angka ini masih relatif dibawah akurasi algoritma Random Forest. Jadi kita masih menggunakan Algoritma Random forest untuk memprediksi.
artificial neural network (ANN), atau juga disebut simulated neural network (SNN), atau umumnya hanya disebut neural network (NN)), adalah jaringan dari sekelompok unit pemroses kecil yang dimodelkan berdasarkan sistem saraf manusia. JST merupakan sistem adaptif yang dapat mengubah strukturnya untuk memecahkan masalah berdasarkan informasi eksternal maupun internal yang mengalir melalui jaringan tersebut. Oleh karena sifatnya yang adaptif, JST juga sering disebut dengan jaringan adaptif.
Secara sederhana, JST adalah sebuah alat pemodelan data statistik non-linier. JST dapat digunakan untuk memodelkan hubungan yang kompleks antara input dan output untuk menemukan pola-pola pada data. Menurut suatu teorema yang disebut “teorema penaksiran universal”, JST dengan minimal sebuah lapis tersembunyi dengan fungsi aktivasi non-linear dapat memodelkan seluruh fungsi terukur Boreal apapun dari suatu dimensi ke dimensi lainnya, untuk lebih jelasnya silakan explore disini : https://id.wikipedia.org/wiki/Jaringan_saraf_tiruan
proses Permodelan Jaringan Syaraf Tiruan
##
## Attaching package: 'neuralnet'
## The following object is masked from 'package:ROCR':
##
## prediction
## Confusion Matrix and Statistics
##
## Reference
## Prediction 1 2
## 1 371 111
## 2 200 57
##
## Accuracy : 0.579161
## 95% CI : (0.5426328, 0.6150549)
## No Information Rate : 0.7726658
## P-Value [Acc > NIR] : 1
##
## Kappa : -0.0092481
## Mcnemar's Test P-Value : 0.0000006037235
##
## Sensitivity : 0.6497373
## Specificity : 0.3392857
## Pos Pred Value : 0.7697095
## Neg Pred Value : 0.2217899
## Prevalence : 0.7726658
## Detection Rate : 0.5020298
## Detection Prevalence : 0.6522327
## Balanced Accuracy : 0.4945115
##
## 'Positive' Class : 1
##
## [1] 0.4945
Dengan menggunakan neural network pada OBB matriks tingkat akurasinya = 57.91% sedangkan dari Area under Curve pada ROC akurasinya berada pada 49.45%. Algoritma ini akurasinya masih jauh dari Random Forest pada kasus dan sekumpulan data ini.
Untuk kasus yang diajukan oleh rekan-rekan di Multifinance maka kami menganjurkan menggunakan algoritma Random Forest pada saat ini, dengan akurasi 84.17% pada OBB dan ROCR 82.73% angka akurasi ini adalah yang tertinggi yang dicapai dibandingkan dengan algoritm pohon keputusan, Extreme Gradient Booster, Neural Net (Jaringan Syaraf Tiruan).
Dengan data yang baru maka PT MultiFinance dapat memprediksi account atau debitur mana yang nantinya bakalan macet atau tidak berbasis data empiris dan kalkulasi yang konsisten terukur, tentunya hal ini akan meningkatkan efisiensi dan efektifitas kinerja di bagian Collection di kemudian hari.
Depok, 7 April 2017 Heru Wiryanto
sessionInfo()
## R version 3.3.3 (2017-03-06)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Linux Mint 18
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
## [5] LC_MONETARY=id_ID.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=id_ID.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=id_ID.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] neuralnet_1.33 plyr_1.8.4 xgboost_0.6-4
## [4] randomForest_4.6-12 ROCR_1.0-7 gplots_3.0.1
## [7] rpart.plot_2.1.1 rpart_4.1-10 caret_6.0-73
## [10] ggplot2_2.2.1 lattice_0.20-35 knitr_1.15.1
##
## loaded via a namespace (and not attached):
## [1] Rcpp_0.12.10 compiler_3.3.3 nloptr_1.0.4
## [4] highr_0.6 bitops_1.0-6 class_7.3-14
## [7] iterators_1.0.8 tools_3.3.3 digest_0.6.12
## [10] lme4_1.1-12 evaluate_0.10 tibble_1.3.0
## [13] gtable_0.2.0 nlme_3.1-131 mgcv_1.8-16
## [16] Matrix_1.2-8 foreach_1.4.3 yaml_2.1.14
## [19] parallel_3.3.3 SparseM_1.76 e1071_1.6-8
## [22] stringr_1.2.0 caTools_1.17.1 gtools_3.5.0
## [25] MatrixModels_0.4-1 stats4_3.3.3 rprojroot_1.2
## [28] grid_3.3.3 nnet_7.3-12 data.table_1.10.4
## [31] rmarkdown_1.4 gdata_2.17.0 minqa_1.2.4
## [34] reshape2_1.4.2 car_2.1-4 magrittr_1.5
## [37] backports_1.0.5 scales_0.4.1 codetools_0.2-15
## [40] ModelMetrics_1.1.0 htmltools_0.3.5 MASS_7.3-45
## [43] splines_3.3.3 pbkrtest_0.4-7 colorspace_1.3-2
## [46] quantreg_5.29 KernSmooth_2.23-15 stringi_1.1.3
## [49] lazyeval_0.2.0 munsell_0.4.3