Dataset ini berfokus pada pengajuan pinjaman Kredit Pemilikan Rumah (KPR) di sebuah lembaga keuangan. Data ini mencakup informasi historis tentang pemohon pinjaman KPR serta hasil pengajuan mereka, baik yang disetujui maupun yang ditolak. Proses persetujuan pinjaman dalam konteks ini memerlukan upaya dan waktu yang signifikan jika dilakukan secara manual. Proses manual ini akan mengkonsumsi sumber daya dan waktu yang berharga. Namun, keputusan persetujuan KPR secara konsisten didasarkan pada data yang serupa dan repetitif. Oleh karena itu, lembaga keuangan telah memutuskan untuk mengadopsi model machine learning sebagai solusi dalam proses persetujuan pinjaman KPR. Hasil prediksi yang dihasilkan oleh model ini akan disubmit untuk direview oleh supervisor sebagai langkah akhir dalam proses persetujuan pinjaman tersebut. Dengan demikian, bank berharap dapat meningkatkan efisiensi dan efektivitas dalam pengambilan keputusan persetujuan pinjaman KPR.
Saya akan melakukan pembacaan data dan kemudian menyimpannya ke dalam variabel yang bernama “kpr”.
loan_id : ini adalah index/no baris no_of_dependents : jumlah tanggungan (anak, dll) education : tingkat pendidikan (tamat sma atau tidak) income_annum : jumlah pendapatan tahunan loan_ammount : jumlah pinjaman yang diajukan loan_term : lama masa pinjaman (tenor) dalam bulan cibil_score : identik dengan nilai kredit / bi-checking residential_assets_value : Nilai aset yang dimiliki pemohon pinjaman yang masuk ke dalam golongan residential commercial_assets_value : Nilai aset yang dimiliki pemohon pinjaman yang masuk ke dalam golongan commercial luxury_assets_value : Nilai aset yang dimiliki pemohon pinjaman yang masuk ke dalam golongan luxury bank_asset_value : Nilai aset yang dimiliki pemohon pinjaman yang ada di perbankan loan_status : hasil pengajuan pinjaman, diterima atau ditolak
#> Rows: 4,269
#> Columns: 13
#> $ loan_id <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14…
#> $ no_of_dependents <int> 2, 0, 3, 3, 5, 0, 5, 2, 0, 5, 4, 2, 3, 2, 1, …
#> $ education <chr> " Graduate", " Not Graduate", " Graduate", " …
#> $ self_employed <chr> " No", " Yes", " No", " No", " Yes", " Yes", …
#> $ income_annum <int> 9600000, 4100000, 9100000, 8200000, 9800000, …
#> $ loan_amount <int> 29900000, 12200000, 29700000, 30700000, 24200…
#> $ loan_term <int> 12, 8, 20, 8, 20, 10, 4, 20, 20, 10, 2, 18, 1…
#> $ cibil_score <int> 778, 417, 506, 467, 382, 319, 678, 382, 782, …
#> $ residential_assets_value <int> 2400000, 2700000, 7100000, 18200000, 12400000…
#> $ commercial_assets_value <int> 17600000, 2200000, 4500000, 3300000, 8200000,…
#> $ luxury_assets_value <int> 22700000, 8800000, 33300000, 23300000, 294000…
#> $ bank_asset_value <int> 8000000, 3300000, 12800000, 7900000, 5000000,…
#> $ loan_status <chr> " Approved", " Rejected", " Rejected", " Reje…
#> loan_id no_of_dependents education self_employed
#> Min. : 1 Min. :0.000 Length:4269 Length:4269
#> 1st Qu.:1068 1st Qu.:1.000 Class :character Class :character
#> Median :2135 Median :3.000 Mode :character Mode :character
#> Mean :2135 Mean :2.499
#> 3rd Qu.:3202 3rd Qu.:4.000
#> Max. :4269 Max. :5.000
#> income_annum loan_amount loan_term cibil_score
#> Min. : 200000 Min. : 300000 Min. : 2.0 Min. :300.0
#> 1st Qu.:2700000 1st Qu.: 7700000 1st Qu.: 6.0 1st Qu.:453.0
#> Median :5100000 Median :14500000 Median :10.0 Median :600.0
#> Mean :5059124 Mean :15133450 Mean :10.9 Mean :599.9
#> 3rd Qu.:7500000 3rd Qu.:21500000 3rd Qu.:16.0 3rd Qu.:748.0
#> Max. :9900000 Max. :39500000 Max. :20.0 Max. :900.0
#> residential_assets_value commercial_assets_value luxury_assets_value
#> Min. : -100000 Min. : 0 Min. : 300000
#> 1st Qu.: 2200000 1st Qu.: 1300000 1st Qu.: 7500000
#> Median : 5600000 Median : 3700000 Median :14600000
#> Mean : 7472617 Mean : 4973155 Mean :15126306
#> 3rd Qu.:11300000 3rd Qu.: 7600000 3rd Qu.:21700000
#> Max. :29100000 Max. :19400000 Max. :39200000
#> bank_asset_value loan_status
#> Min. : 0 Length:4269
#> 1st Qu.: 2300000 Class :character
#> Median : 4600000 Mode :character
#> Mean : 4976692
#> 3rd Qu.: 7100000
#> Max. :14700000
#> loan_id no_of_dependents education
#> 0 0 0
#> self_employed income_annum loan_amount
#> 0 0 0
#> loan_term cibil_score residential_assets_value
#> 0 0 0
#> commercial_assets_value luxury_assets_value bank_asset_value
#> 0 0 0
#> loan_status
#> 0
Dari hasil cek di atas, diketahui bahwa tidak ada missing value di data ini, dan terdapat beberapa tipe data yang belum sesuai.
kpr <- kpr %>%
select(-loan_id) %>%
mutate_at(vars(education, self_employed, loan_status), as.factor)
glimpse(kpr)#> Rows: 4,269
#> Columns: 12
#> $ no_of_dependents <int> 2, 0, 3, 3, 5, 0, 5, 2, 0, 5, 4, 2, 3, 2, 1, …
#> $ education <fct> Graduate, Not Graduate, Graduate, Graduat…
#> $ self_employed <fct> No, Yes, No, No, Yes, Yes, No, Yes, …
#> $ income_annum <int> 9600000, 4100000, 9100000, 8200000, 9800000, …
#> $ loan_amount <int> 29900000, 12200000, 29700000, 30700000, 24200…
#> $ loan_term <int> 12, 8, 20, 8, 20, 10, 4, 20, 20, 10, 2, 18, 1…
#> $ cibil_score <int> 778, 417, 506, 467, 382, 319, 678, 382, 782, …
#> $ residential_assets_value <int> 2400000, 2700000, 7100000, 18200000, 12400000…
#> $ commercial_assets_value <int> 17600000, 2200000, 4500000, 3300000, 8200000,…
#> $ luxury_assets_value <int> 22700000, 8800000, 33300000, 23300000, 294000…
#> $ bank_asset_value <int> 8000000, 3300000, 12800000, 7900000, 5000000,…
#> $ loan_status <fct> Approved, Rejected, Rejected, Rejected, …
#>
#> Approved Rejected
#> 0.6221598 0.3778402
Loan_id dihapus karena bersifat sebagai indeks dan tidak memberikan informasi yang bermanfaat. Selain itu, beberapa tipe data telah diubah menjadi faktor. Jika kita melihat perbandingan data antara pengajuan yang disetujui dan yang ditolak, proporsinya masih seimbang. Oleh karena itu, tidak diperlukan tindakan keseimbangan data.
Pertama saya akan memisahkan data sebanyak 80% untuk digunakan dalam melatih model regresi linear, dan sisa 20% dari data tersebut akan digunakan untuk menguji prediksi model regresi linear yang kita buat nanti.
Dengan menggunakan fungsi dibawah berikut, kita akan melatih sebuah model dan kemudian menyimpan model tersebut dengan nama cc_mdl
Hasil regresi logistik menunjukkan bahwa variabel-variabel prediktor, seperti jarak transaksi, rasio harga, penggunaan chip, penggunaan PIN, dan lainnya, memiliki pengaruh signifikan terhadap kemungkinan terjadinya fraud. Variabel-variabel ini memiliki koefisien estimasi yang signifikan dengan nilai p < 0.05, sehingga mereka berkontribusi secara nyata dalam memprediksi fraud. Model ini memiliki tingkat akurasi yang baik dalam menjelaskan data, seperti yang ditunjukkan oleh nilai deviance yang rendah. Akaike Information Criterion (AIC) yang rendah menunjukkan kompromi yang baik antara akurasi model dan kompleksitasnya. Dalam keseluruhan, model ini memberikan kerangka kerja yang berguna dalam memahami faktor-faktor yang berperan dalam kemungkinan terjadinya fraud pada transaksi kartu kredit. Stepwise tidak diperlukan karena semua prediktor berpengaruh signifikan.
#> Confusion Matrix and Statistics
#>
#> Reference
#> Prediction Approved Rejected
#> Approved 496 28
#> Rejected 27 303
#>
#> Accuracy : 0.9356
#> 95% CI : (0.917, 0.9511)
#> No Information Rate : 0.6124
#> P-Value [Acc > NIR] : <0.0000000000000002
#>
#> Kappa : 0.8643
#>
#> Mcnemar's Test P-Value : 1
#>
#> Sensitivity : 0.9484
#> Specificity : 0.9154
#> Pos Pred Value : 0.9466
#> Neg Pred Value : 0.9182
#> Prevalence : 0.6124
#> Detection Rate : 0.5808
#> Detection Prevalence : 0.6136
#> Balanced Accuracy : 0.9319
#>
#> 'Positive' Class : Approved
#>
Hasil dari evaluasi model Naive-Bayes menunjukkan kinerja yang positif dalam memprediksi persetujuan atau penolakan pinjaman Kredit Pemilikan Rumah (KPR). Model ini mencapai tingkat akurasi sekitar 94.73%, dengan nilai sensitivitas sekitar 95.55% dan spesifisitas sekitar 93.33%. Koefisien Kappa yang tinggi, sekitar 0.8871, mengindikasikan bahwa model ini lebih baik daripada prediksi acak. Persentase positif prediksi yang benar adalah sekitar 96.08%, sementara persentase negatif prediksi yang benar adalah sekitar 92.45%. Dengan Balanced Accuracy sekitar 94.44%, model ini menunjukkan keseimbangan yang baik antara sensitivitas dan spesifisitas. Ini menggambarkan bahwa model memiliki kemampuan untuk mendeteksi dengan baik kedua kelas, yaitu pengajuan yang disetujui dan ditolak, dalam konteks persetujuan pinjaman KPR. Dengan demikian, model ini dapat menjadi alat yang berharga dalam mendukung keputusan persetujuan pinjaman KPR dengan efisiensi dan akurasi yang baik.
#> Confusion Matrix and Statistics
#>
#> Reference
#> Prediction Approved Rejected
#> Approved 519 22
#> Rejected 4 309
#>
#> Accuracy : 0.9696
#> 95% CI : (0.9557, 0.98)
#> No Information Rate : 0.6124
#> P-Value [Acc > NIR] : < 0.00000000000000022
#>
#> Kappa : 0.9352
#>
#> Mcnemar's Test P-Value : 0.0008561
#>
#> Sensitivity : 0.9924
#> Specificity : 0.9335
#> Pos Pred Value : 0.9593
#> Neg Pred Value : 0.9872
#> Prevalence : 0.6124
#> Detection Rate : 0.6077
#> Detection Prevalence : 0.6335
#> Balanced Accuracy : 0.9629
#>
#> 'Positive' Class : Approved
#>
Evaluasi model decision tree menunjukkan hasil yang sangat positif dalam memprediksi hasil persetujuan atau penolakan pinjaman Kredit Pemilikan Rumah (KPR). Model ini mencapai tingkat akurasi sekitar 96.49% dengan sensitivitas 100%, menunjukkan kemampuan untuk mendeteksi semua pengajuan yang seharusnya disetujui dengan sempurna. Selain itu, model memiliki spesifisitas sekitar 90.48%, mengidentifikasi pengajuan yang seharusnya ditolak dengan baik. Persentase positif prediksi yang benar adalah sekitar 94.73%, sedangkan persentase negatif prediksi yang benar adalah 100%. Koefisien Kappa yang tinggi, sekitar 0.923, mengindikasikan kinerja yang sangat baik. Dalam keseluruhan, model decision tree ini adalah alat yang sangat efektif dalam mendukung keputusan persetujuan pinjaman KPR dengan tingkat akurasi dan kinerja yang sangat baik.
kpr_tree_prob <- predict(kpr_tree, kpr_test, type = "prob")
kpr_tree_prob <- kpr_tree_prob[,2]
kpr_tree_roc <- prediction(kpr_tree_prob,
kpr_test$loan_status)
kpr_tree_roc_vec <- performance(kpr_tree_roc,
"tpr",
"fpr"
)
plot(kpr_tree_roc_vec)
abline(0, 1, lty = 2)#> [[1]]
#> [1] 0.99338
AUC = 1, model memiliki performa ideal AUC = 0.5, model tidak lebih baik dalam memprediksi target dibandingkan kalau kita menebak secara acak AUC dalam kasus ini hampir mendekati angka 1, artinya model ini memiliki performa yang ideal dalam menentukan approved atau rejected.
#>
#> Call:
#> randomForest(x = x, y = y, mtry = param$mtry)
#> Type of random forest: classification
#> Number of trees: 500
#> No. of variables tried at each split: 11
#>
#> OOB estimate of error rate: 1.38%
#> Confusion matrix:
#> Approved Rejected class.error
#> Approved 2118 15 0.007032349
#> Rejected 32 1250 0.024960998
Hasil output dari model Random Forest menunjukkan model klasifikasi yang dibuat untuk memprediksi persetujuan atau penolakan Kredit Pemilikan Rumah (KPR). Model ini terdiri dari 500 pohon keputusan, dengan 6 variabel yang diuji pada setiap pemisahan simpul. Hasil estimasi kesalahan out-of-bag (OOB) dari model ini adalah sekitar 1.73%, mengindikasikan tingkat kesalahan yang rendah. Matriks kebingungan menunjukkan bahwa model cenderung memprediksi dengan baik, dengan sebagian besar pengamatan “Approved” dan “Rejected” yang sesuai dengan hasil yang sebenarnya. Tingkat kesalahan kelas juga rendah, menunjukkan kinerja yang baik dalam membedakan antara pengajuan yang disetujui dan ditolak. Dengan demikian, model Random Forest ini tampaknya berhasil dalam memprediksi status persetujuan KPR berdasarkan variabel yang digunakan dalam pelatihan.
Dari pengamatan di atas, cibil_score berkontribusi signifikan terhadap data.
Dalam proyek ini, kami melakukan analisis data untuk memprediksi persetujuan atau penolakan pinjaman Kredit Pemilikan Rumah (KPR) di sebuah lembaga keuangan. Kami menggunakan tiga jenis model untuk memprediksi hasil ini: Naive-Bayes, Decision Tree, dan Random Forest. Berikut adalah hasil dan kesimpulan yang dapat diambil:
Model Naive-Bayes: Model ini memberikan tingkat akurasi sekitar 93.79%. Sensitivitas (kemampuan untuk mendeteksi pengajuan yang seharusnya disetujui) sekitar 93.75%. Spesifisitas (kemampuan untuk mendeteksi pengajuan yang seharusnya ditolak) sekitar 93.86%. Model ini memiliki koefisien Kappa sekitar 0.8714, mengindikasikan kinerja yang baik.
Model Decision Tree: Model Decision Tree mencapai tingkat akurasi sekitar 96.49%. Sensitivitas model ini mencapai 100%, menunjukkan kemampuan untuk mendeteksi semua pengajuan yang seharusnya disetujui. Spesifisitas sekitar 91.81%, menunjukkan kemampuan dalam mengidentifikasi pengajuan yang seharusnya ditolak. Koefisien Kappa yang tinggi, sekitar 0.9259, mengindikasikan kinerja yang sangat baik.
Model Random Forest: Model Random Forest menggunakan 500 pohon keputusan dan mencapai estimasi kesalahan out-of-bag (OOB) sekitar 1.58%. Model ini memiliki tingkat kesalahan yang sangat rendah. Variable Importance Plot menunjukkan bahwa “cibil_score” adalah variabel yang paling berpengaruh dalam prediksi.
Berdasarkan hasil evaluasi ketiga model, Model Decision Tree memiliki kinerja terbaik dengan tingkat akurasi yang tinggi, sensitivitas dan spesifisitas yang baik, serta koefisien Kappa yang tinggi. Oleh karena itu, Model Decision Tree adalah pilihan terbaik untuk memprediksi persetujuan atau penolakan pinjaman KPR dalam konteks ini.
Apa yang harus dilakukan selanjutnya untuk meningkatkan model:
Peningkatan Data: Mengumpulkan lebih banyak data yang relevan dan bervariasi dapat membantu meningkatkan kinerja model. Feature Engineering: Mungkin ada variabel tambahan yang dapat diekstraksi atau dibuat untuk meningkatkan prediksi. Hyperparameter Tuning: Menyesuaikan hyperparameter model (seperti jumlah pohon, kedalaman maksimum, dll.) dapat membantu meningkatkan kinerja model. Validasi Silang yang Lebih Canggih: Gunakan validasi silang yang lebih canggih seperti K-Fold Cross-Validation untuk memastikan keandalan model.
Kesimpulan akhirnya, Model Decision Tree adalah yang paling baik dalam memprediksi persetujuan atau penolakan pinjaman KPR dalam dataset ini, dengan tingkat akurasi dan kinerja yang sangat baik