email : ?_?
ntraktir : https://trakteer.id/contekansial
nyawer :
https://saweria.co/contekansial
github :
https://bit.ly/origin-AL-GitHub
youtube :
https://bit.ly/origin-AL-youtube
Perusahaan AL.Loan merupakan perusahaan yang bergerak di
bidang layanan pinjaman usaha bagi sektor UMKM. Karena adanya pandemik
ini, perusahaan berusaha memberikan pelayanan berupa keringanan pinjaman
bagi pelanggan yang disebut sebagai rekomendasi tindak
lanjut. Pemberian rekomendasi tindak lanjut pada pelanggan ini
didasari pada kriteria tertentu, dan perlu ditentukan faktor-faktor apa
saja yang berpengaruh sehingga pelanggan mendapatkan treatment
tertentu yang masuk dalam rekomendasi tindak lanjut program dari
perusahaan.
Tujuan Project:
Model:
Referensi model (Ref):
Data:
Tujuan Pembelajaran dari Project ini:
R untuk keperluan
statistika dasar dan dasar-dasar machine learning.R.Catatan : Apabila ingin melakukan eksplorasi pada
R yang terpasang pada komputer, dapat ditambahkan perintah
setwd("path file tempat kamu bekerja") pada tiap baris
pertama editor di R-Studio kamu.
Hal yang pertama dilakukan adalah membaca dataset
yang telah dipersiapkan. Dengan menggunakan fungsi bawaan R
bacalah dataset yang berformat csv tersebut !
Begini :
#membuat variabel dataset
AL.Loan = read.csv("https://storage.googleapis.com/dqlab-dataset/project.csv")Setelah data berhasil di import, cobalah kamu untuk menginspeksi dataset dengan jalan:
Begini :
# Enam baris teratas data
head(AL.Loan, 9) X NAMA_NASABAH NOMOR_KONTRAK DOMISILI KARAKTER
1 0 YOLI SEPINA NAINGGOLAN 0 MASIH TETAP KOOPERATIF
2 1 ERWIN NASUTION 1 MASIH TETAP TIDAK KOOPERATIF
3 2 HUSIN 2 MASIH TETAP TIDAK KOOPERATIF
4 3 HARITSYAH 3 PINDAH PERMANEN KOOPERATIF
5 4 HARIRI PANGGABEAN 4 MASIH TETAP TIDAK KOOPERATIF
6 5 JHON PREDDY HUTABARAT 5 MASIH TETAP KOOPERATIF
7 6 NURDINA BATUBARA 6 MASIH TETAP KOOPERATIF
8 7 SAUT PARDAMEAN HUTAGALUNG 7 MASIH TETAP KOOPERATIF
9 8 SANTYO HUTABARAT 8 MASIH TETAP KOOPERATIF
PROFESI KONDISI_USAHA KONDISI_JAMINAN STATUS PRODUK PYD
1 IBU RUMAH TANGGA 2 Baik 2 3 30000000
2 NELAYAN 3 Rusak 8 3 10000000
3 LAINNYA 3 Baik 8 3 60000000
4 PNS 1 Rusak 7 3 90000000
5 WIRAUSAHA / PEDAGANG 1 Baik 8 3 150000000
6 WIRAUSAHA / PEDAGANG 1 Baik 7 3 40000000
7 LAINNYA 3 Baik 7 3 60000000
8 LAINNYA 2 Baik 7 3 7500000
9 LAINNYA 2 Baik 7 3 45000000
TENOR OSL KEWAJIBAN KOLEKTIBILITAS COUNT_SURVEY
1 24 28750000 4896841 DALAM PENGAWASAN KHUSUS 1
2 12 2040693 0 MACET 1
3 24 0 0 MACET 1
4 18 0 0 MACET 1
5 18 19844807 0 MACET 1
6 36 27298726 2208516 DALAM PENGAWASAN KHUSUS 1
7 36 19999200 6946592 DALAM PENGAWASAN KHUSUS 2
8 4 7500000 0 LANCAR 2
9 24 45000000 0 LANCAR 1
REKOMENDASI_TINDAK_LANJUT
1 Angsuran Biasa
2 Penarikan
3 Penarikan
4 Angsuran Biasa
5 Penarikan
6 Restrukturisasi
7 Restrukturisasi
8 Restrukturisasi
9 Restrukturisasi
# Tampilkan tipe data setiap kolomnya
str(AL.Loan)'data.frame': 1000 obs. of 17 variables:
$ X : int 0 1 2 3 4 5 6 7 8 9 ...
$ NAMA_NASABAH : chr "YOLI SEPINA NAINGGOLAN" "ERWIN NASUTION" "HUSIN" "HARITSYAH" ...
$ NOMOR_KONTRAK : int 0 1 2 3 4 5 6 7 8 9 ...
$ DOMISILI : chr "MASIH TETAP" "MASIH TETAP" "MASIH TETAP" "PINDAH PERMANEN" ...
$ KARAKTER : chr "KOOPERATIF" "TIDAK KOOPERATIF" "TIDAK KOOPERATIF" "KOOPERATIF" ...
$ PROFESI : chr "IBU RUMAH TANGGA" "NELAYAN" "LAINNYA" "PNS" ...
$ KONDISI_USAHA : int 2 3 3 1 1 1 3 2 2 3 ...
$ KONDISI_JAMINAN : chr "Baik" "Rusak" "Baik" "Rusak" ...
$ STATUS : int 2 8 8 7 8 7 7 7 7 3 ...
$ PRODUK : int 3 3 3 3 3 3 3 3 3 3 ...
$ PYD : int 30000000 10000000 60000000 90000000 150000000 40000000 60000000 7500000 45000000 50000000 ...
$ TENOR : int 24 12 24 18 18 36 36 4 24 36 ...
$ OSL : int 28750000 2040693 0 0 19844807 27298726 19999200 7500000 45000000 6944100 ...
$ KEWAJIBAN : int 4896841 0 0 0 0 2208516 6946592 0 0 7730984 ...
$ KOLEKTIBILITAS : chr "DALAM PENGAWASAN KHUSUS" "MACET" "MACET" "MACET" ...
$ COUNT_SURVEY : int 1 1 1 1 1 1 2 2 1 1 ...
$ REKOMENDASI_TINDAK_LANJUT: chr "Angsuran Biasa" "Penarikan" "Penarikan" "Angsuran Biasa" ...
Melalui R kita dapat menampilkan statistik deskriptif
pada data yang dimiliki. Jika diinginkan lebih spesifik maka dapat
dilakukan pada kolom tertentu pada tabel data yang kita punya. Tentunya
kita dapat menggunakan accessor $ untuk memilih
kolom yang diinginkan dari data.
Begini :
summary(AL.Loan$OSL) Min. 1st Qu. Median Mean 3rd Qu. Max.
0 3999950 8687350 26562373 32082900 440932336
Kamu ingin menampilkan statistik deskriptif untuk seluruh kolom.
Begini :
summary(AL.Loan) X NAMA_NASABAH NOMOR_KONTRAK DOMISILI
Min. : 0.0 Length:1000 Min. : 0.0 Length:1000
1st Qu.:249.8 Class :character 1st Qu.:249.8 Class :character
Median :499.5 Mode :character Median :499.5 Mode :character
Mean :499.5 Mean :499.5
3rd Qu.:749.2 3rd Qu.:749.2
Max. :999.0 Max. :999.0
KARAKTER PROFESI KONDISI_USAHA KONDISI_JAMINAN
Length:1000 Length:1000 Min. :1.000 Length:1000
Class :character Class :character 1st Qu.:2.000 Class :character
Mode :character Mode :character Median :2.000 Mode :character
Mean :2.273
3rd Qu.:3.000
Max. :3.000
STATUS PRODUK PYD TENOR
Min. :2.000 Min. : 3.00 Min. : 500000 Min. : 3.00
1st Qu.:3.000 1st Qu.: 3.00 1st Qu.: 8000000 1st Qu.:12.00
Median :7.000 Median : 3.00 Median : 15000000 Median :18.00
Mean :5.379 Mean :12.45 Mean : 38537508 Mean :20.75
3rd Qu.:7.000 3rd Qu.: 7.00 3rd Qu.: 50000000 3rd Qu.:24.00
Max. :8.000 Max. :77.00 Max. :500000000 Max. :48.00
OSL KEWAJIBAN KOLEKTIBILITAS COUNT_SURVEY
Min. : 0 Min. : 0 Length:1000 Min. :1.000
1st Qu.: 3999950 1st Qu.: 687487 Class :character 1st Qu.:1.000
Median : 8687350 Median : 2008974 Mode :character Median :1.000
Mean : 26562373 Mean : 5663981 Mean :1.036
3rd Qu.: 32082900 3rd Qu.: 4823198 3rd Qu.:1.000
Max. :440932336 Max. :400900000 Max. :2.000
REKOMENDASI_TINDAK_LANJUT
Length:1000
Class :character
Mode :character
Pada data yang kamu miliki, sebenarnya kamu tidak memerlukan
NAMA_NASABAH untuk diberikan rekomendasi. Atau dengan kata
lain penanda pelanggan untuk diberikan rekomendasi cukup dengan melihat
NOMOR_KONTRAK pelanggan itu saja.
Hapuslah kolom X dan NAMA_NASABAH pada data
yang kamu miliki dan cetak kembali nama kolom yang tersedia pada
data.
Begini :
#menghapus kolom yang tidak diperlukan
data.guna = AL.Loan[-c(1,2)]
#menampilkan nama kolom
colnames(data.guna) [1] "NOMOR_KONTRAK" "DOMISILI"
[3] "KARAKTER" "PROFESI"
[5] "KONDISI_USAHA" "KONDISI_JAMINAN"
[7] "STATUS" "PRODUK"
[9] "PYD" "TENOR"
[11] "OSL" "KEWAJIBAN"
[13] "KOLEKTIBILITAS" "COUNT_SURVEY"
[15] "REKOMENDASI_TINDAK_LANJUT"
Seperti yang diketahui ketika data ditarik dari suatu sumber terkadang ada kondisi tipe data tidak dengan tepat direpresentasikan. Misalkan semua record/baris pada suatu kolom berisi seharusnya data numerik akan tetapi disajikan didalam suatu karakter angka.
R sendiri memiliki fungsi sapply yang dapat
digunakan untuk mengkoversi tipe data. Dalam hal ini fungsi
sapply menerima input/argumen fungsi berupa
list, vector, atau data.frame dan
mengembalikan/menghasilkan output berupa vector atau
matrix.
Cobalah untuk meninjau kembali kolom PRODUK,
PYD, TENOR, dan OSL apakah perlu
dikonversikan menjadi bertipe numerik atau tidak.
Begini :
cek.1 <- data.guna[, 8:11]
head(cek.1, 9) PRODUK PYD TENOR OSL
1 3 30000000 24 28750000
2 3 10000000 12 2040693
3 3 60000000 24 0
4 3 90000000 18 0
5 3 150000000 18 19844807
6 3 40000000 36 27298726
7 3 60000000 36 19999200
8 3 7500000 4 7500000
9 3 45000000 24 45000000
Tentu saja kamu menyadari bahwa data yang dimiliki ada yang bersifat
kategorik. Data kategorik dapat dipilih melalui kolom-kolom
KONDISI_USAHA, KONDISI_JAMINAN,
REKOMENDASI_TINDAK_LANJUT.
Begini :
AL.Loan_kategorik = data.guna[,c("KONDISI_USAHA", "KONDISI_JAMINAN", "REKOMENDASI_TINDAK_LANJUT")]
head(AL.Loan_kategorik, 9) KONDISI_USAHA KONDISI_JAMINAN REKOMENDASI_TINDAK_LANJUT
1 2 Baik Angsuran Biasa
2 3 Rusak Penarikan
3 3 Baik Penarikan
4 1 Rusak Angsuran Biasa
5 1 Baik Penarikan
6 1 Baik Restrukturisasi
7 3 Baik Restrukturisasi
8 2 Baik Restrukturisasi
9 2 Baik Restrukturisasi
Mengubah kolom REKOMENDASI_TINDAK_LANJUT sebagai faktor
(menggunakan as.factor)
Begini :
data.guna$REKOMENDASI_TINDAK_LANJUT = as.factor(data.guna$REKOMENDASI_TINDAK_LANJUT)
str(data.guna$REKOMENDASI_TINDAK_LANJUT) Factor w/ 4 levels "Angsuran Biasa",..: 1 3 3 1 3 4 4 4 4 1 ...
Uji chi-square dapat digunakan untuk melihat hubungan antar variabel kategorik.
Begini :
#melihat hubungan KONDISI_USAHA dengan REKOMENDASI_TINDAK_LANJUT
chisq.test(AL.Loan_kategorik$KONDISI_USAHA, AL.Loan_kategorik$REKOMENDASI_TINDAK_LANJUT)
Pearson's Chi-squared test
data: AL.Loan_kategorik$KONDISI_USAHA and AL.Loan_kategorik$REKOMENDASI_TINDAK_LANJUT
X-squared = 129.82, df = 6, p-value < 2.2e-16
#melihat hubungan KONDISI_JAMINAN dengan REKOMENDASI_TINDAK_LANJUT
chisq.test(AL.Loan_kategorik$KONDISI_JAMINAN, AL.Loan_kategorik$REKOMENDASI_TINDAK_LANJUT)
Pearson's Chi-squared test
data: AL.Loan_kategorik$KONDISI_JAMINAN and AL.Loan_kategorik$REKOMENDASI_TINDAK_LANJUT
X-squared = 162.87, df = 9, p-value < 2.2e-16
Jika nilai p < 0.05, maka tolak H0
(tidak ada hubungan antar variabel). Tampak dari hasil kalau nilai
p < 0.05, artinya ada hubungan antara kedua kolom dengan
REKOMENDASI_TINDAK_LANJUT
Selain melihat hubungan pada data yang bersifat kategorikal, kita juga bisa melihat hubungan antar variabel numerikal. Ya. Kita akan menggunakan korelasi.
Begini :
library("corrplot")
library("ggcorrplot")
M = data.guna[,8:11]
# Library corrplot
# -- Pearson correlation
par(mfrow=c(1,1))
corrplot(cor(M), type="upper", order="hclust")corrplot(cor(M), method="square", type="upper")corrplot(cor(M), method="number", type="lower")corrplot(cor(M), method="ellipse")# -- Kendall correlation
par(mfrow=c(1,1))
corrplot(cor(M, method="kendall"), type="upper", order="hclust")corrplot(cor(M, method="kendall"), method="square", type="upper")corrplot(cor(M, method="kendall"), method="number", type="lower")corrplot(cor(M, method="kendall"), method="ellipse")# Library ggcorrplot
corr = round(cor(M), 1) # Pearson correlation
ggcorrplot(round(cor(M), 1),
hc.order = TRUE,
type = "lower",
lab = TRUE,
lab_size = 3,
method="circle",
colors = c("tomato2", "white", "springgreen3"),
title="Correlogram of Data Nasabah",
ggtheme=theme_bw)Dalam melakukan pemodelan tentu kita perlu meninjau variabel-variabel apa saja yang berpengaruh pada model kita, khususnya pada klasifikasi. Pada kesempatan ini kita menggunakan model Regresi Multinomial.
Lalu bagaimana menentukan variabel apa saja yang berpengaruh tersebut?
Ada banyak alternatif, salah satunya ialah Information
Gain. Melalui information gain diambil nilai
importance variable yang lebih dari 0.02 (kamu
dapat eksplorasi apa yang terjadi apabila kita mengambil nilai yang
kurang dari 0.02).
Berikut hasil dari information gain:
attr_importance
KONDISI_JAMINAN 0.038889946
STATUS 0.109539204
KEWAJIBAN 0.002414449
OSL 0.006693011
KOLEKTIBILITAS 0.084934084
Lakukanlah syntax untuk memilih kolom-kolom yang akan diproses !
Begini :
colnames(data.guna) [1] "NOMOR_KONTRAK" "DOMISILI"
[3] "KARAKTER" "PROFESI"
[5] "KONDISI_USAHA" "KONDISI_JAMINAN"
[7] "STATUS" "PRODUK"
[9] "PYD" "TENOR"
[11] "OSL" "KEWAJIBAN"
[13] "KOLEKTIBILITAS" "COUNT_SURVEY"
[15] "REKOMENDASI_TINDAK_LANJUT"
#memilih kolom yang akan diproses
data.pilih =
data.guna[,c("KARAKTER","KONDISI_USAHA","KONDISI_JAMINAN","STATUS","KEWAJIBAN","OSL","KOLEKTIBILITAS","REKOMENDASI_TINDAK_LANJUT")]Jika pada data terdapat NA value, nilai
tersebut dapat pula untuk dipangkas.
Begini :
data.non.na = na.omit(data.pilih)
head(data.non.na, 9) KARAKTER KONDISI_USAHA KONDISI_JAMINAN STATUS KEWAJIBAN OSL
1 KOOPERATIF 2 Baik 2 4896841 28750000
2 TIDAK KOOPERATIF 3 Rusak 8 0 2040693
3 TIDAK KOOPERATIF 3 Baik 8 0 0
4 KOOPERATIF 1 Rusak 7 0 0
5 TIDAK KOOPERATIF 1 Baik 8 0 19844807
6 KOOPERATIF 1 Baik 7 2208516 27298726
7 KOOPERATIF 3 Baik 7 6946592 19999200
8 KOOPERATIF 2 Baik 7 0 7500000
9 KOOPERATIF 2 Baik 7 0 45000000
KOLEKTIBILITAS REKOMENDASI_TINDAK_LANJUT
1 DALAM PENGAWASAN KHUSUS Angsuran Biasa
2 MACET Penarikan
3 MACET Penarikan
4 MACET Angsuran Biasa
5 MACET Penarikan
6 DALAM PENGAWASAN KHUSUS Restrukturisasi
7 DALAM PENGAWASAN KHUSUS Restrukturisasi
8 LANCAR Restrukturisasi
9 LANCAR Restrukturisasi
Untuk memberikan performa model yang baik, maka pada data kita perlu dilakukan treatment tertentu, misalnya dilakukan scalling atau dilakukan pengelompokan data atau disebut juga bucketing.
Begini :
data.pilih.baru = data.pilih
data.pilih.baru$KEWAJIBAN = scale(data.pilih.baru$KEWAJIBAN)[, 1]
data.pilih.baru$OSL = scale(data.pilih.baru$OSL)[, 1]
data.pilih.baru$KEWAJIBAN = cut(data.pilih.baru$KEWAJIBAN, breaks = c(-0.354107,5,15,30))
data.pilih.baru$KEWAJIBAN = as.factor(data.pilih.baru$KEWAJIBAN)
data.pilih.baru$OSL = cut(data.pilih.baru$OSL, breaks = c(-0.60383,3,10,15))
data.pilih.baru$OSL = as.factor(data.pilih.baru$OSL)
data.pilih.baru = na.omit(data.pilih.baru)
head(data.pilih.baru, 9) KARAKTER KONDISI_USAHA KONDISI_JAMINAN STATUS KEWAJIBAN OSL
1 KOOPERATIF 2 Baik 2 (-0.354,5] (-0.604,3]
2 TIDAK KOOPERATIF 3 Rusak 8 (-0.354,5] (-0.604,3]
3 TIDAK KOOPERATIF 3 Baik 8 (-0.354,5] (-0.604,3]
4 KOOPERATIF 1 Rusak 7 (-0.354,5] (-0.604,3]
5 TIDAK KOOPERATIF 1 Baik 8 (-0.354,5] (-0.604,3]
6 KOOPERATIF 1 Baik 7 (-0.354,5] (-0.604,3]
7 KOOPERATIF 3 Baik 7 (-0.354,5] (-0.604,3]
8 KOOPERATIF 2 Baik 7 (-0.354,5] (-0.604,3]
9 KOOPERATIF 2 Baik 7 (-0.354,5] (-0.604,3]
KOLEKTIBILITAS REKOMENDASI_TINDAK_LANJUT
1 DALAM PENGAWASAN KHUSUS Angsuran Biasa
2 MACET Penarikan
3 MACET Penarikan
4 MACET Angsuran Biasa
5 MACET Penarikan
6 DALAM PENGAWASAN KHUSUS Restrukturisasi
7 DALAM PENGAWASAN KHUSUS Restrukturisasi
8 LANCAR Restrukturisasi
9 LANCAR Restrukturisasi
Sebelum masuk pada pemodelan, kita perlu memisahkan data kita menjadi training dan testing (ada pula yang membaginya menjadi training, testing, dan validasi).
Tujuan dari pemisahan data ini ialah untuk melihat kemampuan model kita untuk melakukan prediksi sebagaimana tujuan dari pemodelan kita.
Begini :
library("caret")
library("lattice")
index = createDataPartition(data.pilih.baru$REKOMENDASI_TINDAK_LANJUT, p = .95, list = FALSE)
training = data.pilih.baru[index, ]
testing = data.pilih.baru[-index, ]
dim(training)[1] 952 8
dim(testing)[1] 48 8
Sekarang kita siap untuk masuk pada pemodelan.
Ingat bahwa kita menggunakan Model Regresi Multinomial, dimana kita perlu menentukan referensi dari kelas target.
Referensi kelas target ini ialah kelas yang memiliki jumlah anggota terbanyak.
Begini :
train2 = training
# Setting the reference
train2$REKOMENDASI_TINDAK_LANJUT = relevel(train2$REKOMENDASI_TINDAK_LANJUT, ref = "Angsuran Biasa")
# training the model
require(nnet)
# Training the multinomial model
multinom_model = multinom(REKOMENDASI_TINDAK_LANJUT ~ ., data = train2)# weights: 64 (45 variable)
initial value 1319.752232
iter 10 value 746.668519
iter 20 value 619.362692
iter 30 value 614.634633
iter 40 value 614.357939
iter 50 value 614.348164
iter 60 value 614.347802
final value 614.347776
converged
# Checking the model
summary(multinom_model)Call:
multinom(formula = REKOMENDASI_TINDAK_LANJUT ~ ., data = train2)
Coefficients:
(Intercept) KARAKTERTIDAK KOOPERATIF KONDISI_USAHA
Diskon Pelunasan -3.241859 1.836693 -0.7802720
Penarikan -7.073783 3.981080 0.6797721
Restrukturisasi -4.134044 -2.150295 0.9704772
KONDISI_JAMINANHilang KONDISI_JAMINANPindah Tangan
Diskon Pelunasan -18.8535350 -27.7138938
Penarikan 2.0789853 0.4989398
Restrukturisasi 0.6096445 -13.6938543
KONDISI_JAMINANRusak STATUS KEWAJIBAN(5,15]
Diskon Pelunasan -28.1213391 0.10191636 0
Penarikan -2.1864719 0.07743757 0
Restrukturisasi 0.1452639 0.32804571 0
KEWAJIBAN(15,30] OSL(3,10] OSL(10,15]
Diskon Pelunasan -3.511732 2.9695155 0
Penarikan 0.666806 -25.0833604 0
Restrukturisasi 26.498000 0.3203163 0
KOLEKTIBILITASDIRAGUKAN KOLEKTIBILITASKURANG LANCAR
Diskon Pelunasan 2.8933707 0.2966154
Penarikan 4.2629206 0.9533702
Restrukturisasi -0.5107179 -0.1327158
KOLEKTIBILITASLANCAR KOLEKTIBILITASMACET
Diskon Pelunasan 0.1820101 0.541061
Penarikan -35.1136677 1.239402
Restrukturisasi 0.8900466 -3.300281
Std. Errors:
(Intercept) KARAKTERTIDAK KOOPERATIF KONDISI_USAHA
Diskon Pelunasan 1.0969389 0.9093564 0.3860147
Penarikan 1.1972329 0.6393468 0.3754234
Restrukturisasi 0.3551196 0.7868614 0.1036833
KONDISI_JAMINANHilang KONDISI_JAMINANPindah Tangan
Diskon Pelunasan 5.897717e-10 1.965332e-13
Penarikan 1.462610e+00 6.570442e-01
Restrukturisasi 1.197129e+00 6.208012e-07
KONDISI_JAMINANRusak STATUS KEWAJIBAN(5,15]
Diskon Pelunasan 3.991998e-13 0.14095662 4.655031e-16
Penarikan 1.726863e+00 0.10292567 NaN
Restrukturisasi 1.197202e+00 0.03728375 0.000000e+00
KEWAJIBAN(15,30] OSL(3,10] OSL(10,15]
Diskon Pelunasan 7.245841e-15 1.044097e+00 NaN
Penarikan 4.073940e-16 2.614797e-13 4.249707e-16
Restrukturisasi 5.946145e-13 6.303926e-01 0.000000e+00
KOLEKTIBILITASDIRAGUKAN KOLEKTIBILITASKURANG LANCAR
Diskon Pelunasan 0.9318819 0.7405701
Penarikan 0.8644920 0.6687520
Restrukturisasi 0.6175803 0.1917806
KOLEKTIBILITASLANCAR KOLEKTIBILITASMACET
Diskon Pelunasan 9.489292e-01 1.2312144
Penarikan 2.467085e-16 0.7158318
Restrukturisasi 2.159505e-01 1.0786995
Residual Deviance: 1228.696
AIC: 1306.696
#converting the coefficients to odds by taking the exponential of the coefficients.
exp(coef(multinom_model)) (Intercept) KARAKTERTIDAK KOOPERATIF KONDISI_USAHA
Diskon Pelunasan 0.0390911716 6.2757472 0.4582813
Penarikan 0.0008470231 53.5748651 1.9734279
Restrukturisasi 0.0160179680 0.1164497 2.6392037
KONDISI_JAMINANHilang KONDISI_JAMINANPindah Tangan
Diskon Pelunasan 6.486550e-09 9.204683e-13
Penarikan 7.996351e+00 1.646974e+00
Restrukturisasi 1.839777e+00 1.129366e-06
KONDISI_JAMINANRusak STATUS KEWAJIBAN(5,15] KEWAJIBAN(15,30]
Diskon Pelunasan 6.124316e-13 1.107291 1 2.984518e-02
Penarikan 1.123123e-01 1.080515 1 1.948006e+00
Restrukturisasi 1.156345e+00 1.388252 1 3.220589e+11
OSL(3,10] OSL(10,15] KOLEKTIBILITASDIRAGUKAN
Diskon Pelunasan 1.948248e+01 1 18.0540616
Penarikan 1.277718e-11 1 71.0170917
Restrukturisasi 1.377563e+00 1 0.6000647
KOLEKTIBILITASKURANG LANCAR KOLEKTIBILITASLANCAR
Diskon Pelunasan 1.345298 1.199626e+00
Penarikan 2.594439 5.627660e-16
Restrukturisasi 0.875714 2.435243e+00
KOLEKTIBILITASMACET
Diskon Pelunasan 1.71782853
Penarikan 3.45354662
Restrukturisasi 0.03687282
head(round(fitted(multinom_model), 2)) Angsuran Biasa Diskon Pelunasan Penarikan Restrukturisasi
1 0.81 0.01 0.00 0.17
2 0.79 0.00 0.20 0.02
3 0.30 0.03 0.67 0.01
4 0.98 0.00 0.00 0.02
5 0.50 0.22 0.29 0.00
6 0.69 0.03 0.00 0.29
# Predicting the values for train dataset
train2$ClassPredicted = predict(multinom_model, newdata = train2, "class")
train_prob = predict(multinom_model, newdata = train2, "probs")
df = train_prob
df$max=apply(df,1, max)
train2$score = df$max
test_prob = predict(multinom_model, newdata = testing, "probs")
df2 = test_prob
df2$max=apply(df2,1, max)Untuk keperluan tertentu, kita perlu mengetahui peluang dari tiap baris data (perwakilan dari pelanggan) untuk masuk pada kelas target tertentu.
Tujuannya ialah untuk melihat seberapa pengaruh model untuk melakukan klasifikasi. Selain itu bisa juga dari sudut pandang bisnis, dalam kasus real penentuan threshold pada nilai peluang juga dikaitkan dengan beberapa faktor, misalnya revenue pelanggan.
Cobalah lihat nilai peluang bahwa suatu pelanggan masuk pada kelas target tertentu !
Begini :
#membuat tabel klasifikasi
tab_train = table(train2$REKOMENDASI_TINDAK_LANJUT, train2$ClassPredicted)
round((sum(diag(tab_train))/sum(tab_train))*100,4)[1] 66.9118
testing$ClassPredicted = predict(multinom_model, newdata = testing, "class")
testing$score = df2$max
tab_test = table(testing$REKOMENDASI_TINDAK_LANJUT, testing$ClassPredicted)
round((sum(diag(tab_test))/sum(tab_test))*100,4)[1] 68.75
Misalkan kamu diberikan vektor A = c(4, 6, 9, 13) dan
B = c(5, 6, 7, 8).
Pilihlah kode di bawah ini untuk menunjukkan entry yang ada pada vektor A tidak terdapat pada vektor B.
Pilihan
unique(A, B)diff(A, B)setdiff(A, B)Gini :
A = c(4, 6, 9, 13)
B = c(5, 6, 7, 8)
unique(A, B)[1] 4 6 9 13
setdiff(A, B)[1] 4 9 13
Diberikan data frame berikut:
| user_id | Jenis.Kelamin | Pekerjaan | Pendidikan |
|---|---|---|---|
| 1893468 | Laki -laki | Dosen | S2 |
| 1893763 | Perempuan | Buruh | SMA |
| 1793624 | Laki -laki | Dosen | S3 |
| 1657829 | Laki -laki | Guru | S1 |
Manakah kode pada pilihan jawaban berikut yang dapat digunakan untuk
memilih data di atas dengan Jenis.Kelamin “Lak-laki” dan
dan Pekerjaan “Dosen” ?
Pilihan
subset(df, Jenis.Kelamin == "Laki-laki" & Pekerjaan == "Dosen")filter(df, Jenis.Kelamin == "Laki-laki", Pekerjaan == "Dosen")Kamu memiliki vektor A = c(4, "NA", 9).
Apakah output dari sum(is.na(A)) ?
Pilihan
Gini :
A = c(4, "NA", 9)
sum(is.na(A))[1] 0
Ukuran keragaman 2 peubah/variabel/feature pada suatu dataset dapat ditinjau dengan cara :
Pilihan
Ukuran variabilitas dari suatu data dapat ditinjau melalui :
Pilihan
Misalkan kamu memiliki dataframe
A = data.frame(kolom1 = 1:2) dan
B = data.frame(kolom2 = 3).
Pilihlah jawaban yang tepat untuk membentuk dataframe seperti berikut:
| kolom1 |
|---|
| 1 |
| 2 |
| 3 |
Pilihan
join(A, B, on = "kolom1")A + Brbind(A, B)c(A, B)Gini :
A = data.frame(kolom1 = 1:2)
B = data.frame(kolom1 = 3)
rbind(A, B) kolom1
1 1
2 2
3 3
c(A, B)$kolom1
[1] 1 2
$kolom1
[1] 3
Coba dilakukan pengecekan untuk hasil dari keluaran berikut :
angka <- seq(1, 10)
for (nilai in angka) {
if (nilai %% 2){
print(nilai)
}
}
Apakah merupakan bilangan ganjil dari 1-10 ?
Pilihan
Gini :
angka <- seq(1, 10)
for (nilai in angka) {
if (nilai %% 2){
print(nilai)
}
}[1] 1
[1] 3
[1] 5
[1] 7
[1] 9
Manakah metode berikut ini yang menjadikan vektor memiliki nilai berulang ?
Pilihan
reserve()rep()repeal()view()Manakah pilihan berikut ini yang digunakan untuk mendapatkan quantil dari suatu dataset ?
Pilihan
quantile()plot()barchart()barplot()Perintah apakah yang digunakan untuk menampilkan visualisasi
boxplot pada vektor A yang bernilai numerik ?
Pilihan
boxplot(A, color = "BLUE")boxplot(A, color_names = "blue")boxplot(A, color = "blue")boxplot(A, col = "blue")