Apa yang dapat kita pelajari dari data? Disini kita akan membahas teknik-teknik yang dapat dipakai untuk mempelajari data yang hasilnya dapat digunakan untuk proses pengambilan keputusan. Dalam menganalisa data biasanya muncul fitur-fitur yang dapat membantu kita dalam membangun model yang kita inginkan. Beberapa masalah dalam ilmu aktuaria yang sering dijumpai adalah:
Disini diberikan informasi mengenai konsumen yang melakukan peminjaman uang pada suatu bank di Jerman. Bank memiliki risiko tidak dibayarnya pinjaman tersebut. Apa yang dapat kita peroleh dari data peminjam untuk menilai kemampuan seorang peminjam dalam memenuhi kewajiban membayar kembali pinjaman tepat waktu?
#data() # menampilkan semua data dalam paket
data(credit) # memanggil data German Credit
str(credit)
## 'data.frame': 1000 obs. of 21 variables:
## $ checking_status : Factor w/ 4 levels "A11","A12","A13",..: 1 2 4 1 1 4 4 2 4 2 ...
## $ duration : int 6 48 12 42 24 36 24 36 12 30 ...
## $ credit_history : Factor w/ 5 levels "A30","A31","A32",..: 5 3 5 3 4 3 3 3 3 5 ...
## $ purpose : Factor w/ 10 levels "A40","A41","A410",..: 5 5 8 4 1 8 4 2 5 1 ...
## $ credit_amount : int 1169 5951 2096 7882 4870 9055 2835 6948 3059 5234 ...
## $ savings : Factor w/ 5 levels "A61","A62","A63",..: 5 1 1 1 1 5 3 1 4 1 ...
## $ employment : Factor w/ 5 levels "A71","A72","A73",..: 5 3 4 4 3 3 5 3 4 1 ...
## $ installment_rate : int 4 2 2 2 3 2 3 2 2 4 ...
## $ personal_status : Factor w/ 4 levels "A91","A92","A93",..: 3 2 3 3 3 3 3 3 1 4 ...
## $ other_parties : Factor w/ 3 levels "A101","A102",..: 1 1 1 3 1 1 1 1 1 1 ...
## $ residence_since : int 4 2 3 4 4 4 4 2 4 2 ...
## $ property_magnitude : Factor w/ 4 levels "A121","A122",..: 1 1 1 2 4 4 2 3 1 3 ...
## $ age : int 67 22 49 45 53 35 53 35 61 28 ...
## $ other_payment_plans: Factor w/ 3 levels "A141","A142",..: 3 3 3 3 3 3 3 3 3 3 ...
## $ housing : Factor w/ 3 levels "A151","A152",..: 2 2 2 3 3 3 2 1 2 2 ...
## $ existing_credits : int 2 1 1 1 2 1 1 1 1 2 ...
## $ job : Factor w/ 4 levels "A171","A172",..: 3 3 2 3 3 2 3 4 2 4 ...
## $ num_dependents : int 1 1 2 2 2 2 1 1 1 1 ...
## $ telephone : Factor w/ 2 levels "A191","A192": 2 1 1 1 1 2 1 2 1 1 ...
## $ foreign_worker : Factor w/ 2 levels "A201","A202": 1 1 1 1 1 1 1 1 1 1 ...
## $ class : num 0 1 0 0 1 0 0 0 0 1 ...
# hilangkan field foreign_worker dari credit
credit<- credit[,-which(names(credit)=='foreign_worker')]
# menampilkan tabel banyaknya peminjam tepat waktu (0) dan tidak tepat waktu (1)
table(credit$class)
##
## 0 1
## 700 300
credit.f<- credit
# membagi umur menjadi <=25 dan >25
credit.f$age<- cut(credit.f$age,c(0,25,Inf))
#membagi besar pinjaman menjadi <=4000 dan >4000
credit.f$credit_amount<- cut(credit.f$credit_amount,c(0,4000,Inf))
# membagi durasi pinjama menjadi tiga interval (0,15],(15,36],(36,Inf)
credit.f$duration<- cut(credit.f$duration,c(0,15,36,Inf))
Pengelompokkan level di atas dapat menyederhanakan tampilan data. Sebagai contoh bila kita ingin melihat tabel proporsi class 0 dan 1 untuk fitur age.
Proporsi terhadap baris dari 0 dan 1 pada level umur dalam data credit
prop.table(table(credit$age,credit$class),1)
##
## 0 1
## 19 0.50000000 0.50000000
## 20 0.64285714 0.35714286
## 21 0.64285714 0.35714286
## 22 0.59259259 0.40740741
## 23 0.58333333 0.41666667
## 24 0.56818182 0.43181818
## 25 0.53658537 0.46341463
## 26 0.72000000 0.28000000
## 27 0.74509804 0.25490196
## 28 0.65116279 0.34883721
## 29 0.59459459 0.40540541
## 30 0.72500000 0.27500000
## 31 0.71052632 0.28947368
## 32 0.73529412 0.26470588
## 33 0.60606061 0.39393939
## 34 0.65625000 0.34375000
## 35 0.85000000 0.15000000
## 36 0.84615385 0.15384615
## 37 0.72413793 0.27586207
## 38 0.83333333 0.16666667
## 39 0.71428571 0.28571429
## 40 0.76000000 0.24000000
## 41 0.76470588 0.23529412
## 42 0.63636364 0.36363636
## 43 0.70588235 0.29411765
## 44 0.70588235 0.29411765
## 45 0.80000000 0.20000000
## 46 0.77777778 0.22222222
## 47 0.70588235 0.29411765
## 48 0.75000000 0.25000000
## 49 0.92857143 0.07142857
## 50 0.75000000 0.25000000
## 51 0.87500000 0.12500000
## 52 0.88888889 0.11111111
## 53 0.28571429 0.71428571
## 54 0.80000000 0.20000000
## 55 0.62500000 0.37500000
## 56 1.00000000 0.00000000
## 57 0.66666667 0.33333333
## 58 0.60000000 0.40000000
## 59 0.66666667 0.33333333
## 60 0.50000000 0.50000000
## 61 0.57142857 0.42857143
## 62 1.00000000 0.00000000
## 63 0.87500000 0.12500000
## 64 1.00000000 0.00000000
## 65 0.80000000 0.20000000
## 66 0.60000000 0.40000000
## 67 1.00000000 0.00000000
## 68 0.33333333 0.66666667
## 70 1.00000000 0.00000000
## 74 0.75000000 0.25000000
## 75 1.00000000 0.00000000
Proporsi terhadap baris dari 0 dan 1 pada level umur dalam data credit.f
prop.table(table(credit.f$age,credit.f$class),1)
##
## 0 1
## (0,25] 0.5789474 0.4210526
## (25,Inf] 0.7283951 0.2716049
Dapat kita lihat tabel proporsi age dari data credit.f lebih singkat dibandingkan tabel proporsi age dari data credit.
Tes asosiasi antar fitur dengan respon dengan memakai Cramer V \[ V=\sqrt{\frac{\chi^2}{n(k-1)}} \] Kita menggunakan hipotesa berikut: \[ H_0 : \text{ Fitur}_i \text{ saling bebas dengan respon atau } \frac{n_{i,j}}{N}=\frac{n_{i.}n_{j.}}{N^2}\] Semakin kecil nilai \(V\) dari suatu fitur \(i\), kecenderungan respon dan fitur \(i\) saling bebas akan semakin kuat. Kita juga dapat menggunakan \(p\)-value yang memberikan kecenderungan yang sama dengan semakin besarnya \(p\)-value.
Dari hasil di atas kita dapat memilih fitur-fitur yang memiliki \(p\)-value yang dibawah 1e-4 sebagai fitur yang akan kita pakai dalam model.
aggregate(credit[,c("age","duration")],by=list(class=credit$class),mean)
## class age duration
## 1 0 36.22429 19.20714
## 2 1 33.96333 24.86000
Aggregate di atas kita gunakan untuk menghitung rataan age dan duration secara bersamaan berdasarkan class peminjam (0 untuk good dan 1 untuk bad)
Di atas kita membagi umur berdasarkan quantile 0%, 10%, 20%, …,100% dari umur dengan perintah cut(data,batas interval). Setiap kategori umur kita hitung proporsi good dan bad nya dengan menggunakan prop.table. Hasil proporsi good dan bad ini dapat kita visualkan dengan bantuan barplot. Dalam barplot kita transposkan terlebih dahulu data tabelnya dengan perintah t(). Untuk kepentingan observasi kita tambahkan rataan good dalam bentuk garis horisontal pada barplot.
Terlihat pada kelompok umur (33,36], (36,39], (39,45] dan (45,52] memiliki proporsi good diatas rataan good. Kelompok umur (18,23] memiliki potensi untuk menjadi bad paling besar dibandingkan kelompok umur lainnya.
Pada data German Credit kita memiliki variabel respon ‘credit$class’ yang bernilai 0 untuk peminjam yang baik dan 1 untuk yang tidak baik. Kita notasikan respon ini dengan \(Y\). Tujuan kita adalah menggunakan himpunan fitur \(X\) untuk memprediksi \(Y\) berdasarkan suatu fungsi skor \(S(x)\in [0,1]\) yang kontinu. Model prediksi ini akan berbentuk: \[\widehat{Y}=\begin{cases} 0 ,\ S(x)< s\\ 1,\ S(x)\geq s \end{cases}\] dengan \(s\) suatu batas yang dapat kita peroleh dari data.
Misalkan kita kumpulkan peminjam 0 dan 1 berdasarkan umur
umurgood<-credit$age[credit$class==0]
umurbad<-credit$age[credit$class==1]
p1 <- hist(umurgood) # centered at 4
p2 <- hist(umurbad) # centered at 6
plot( p1, col=rgb(0,0,1,1/4), xlim=c(0,90),xlab='umur',
main='Histogram good and bad of age ') # first histogram
plot( p2, col=rgb(1,0,0,1/4), xlim=c(0,90), xlab='umur',add=T) # second
Terlihat pada plot histogram di atas peminjam good dan bad tidak dapat dipisahkan secara jelas, dalam gambar ini peminjam good berwarna magenta.
Misalkan kita gunakan model liniear sederhana \[Y=X^T\beta+\epsilon,\ \ \epsilon \sim N(0,1) \] Kita dapat menggunakan \(S(x)=P(Y>0)=P(\epsilon >-X^T\beta)=P(\epsilon<X^T\beta)=\Phi(X^T\beta)\). Sehingga \[\widehat{Y}=\begin{cases} 0 ,\ \Phi(X^T\beta)< s\\ 1,\ \Phi(X^T\beta)\geq s \end{cases}\] Model di atas dikenal sebagai model probit.
# Model Probit
Y<-credit$class
reg<- glm(class~age+duration,data=credit,family=binomial(link="probit"))
summary(reg)
##
## Call:
## glm(formula = class ~ age + duration, family = binomial(link = "probit"),
## data = credit)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.5364 -0.8400 -0.7084 1.2452 2.1074
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.645078 0.161121 -4.004 6.24e-05 ***
## age -0.010685 0.003888 -2.748 0.00599 **
## duration 0.022887 0.003467 6.602 4.05e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1221.7 on 999 degrees of freedom
## Residual deviance: 1169.0 on 997 degrees of freedom
## AIC: 1175
##
## Number of Fisher Scoring iterations: 4
Kita aplikasikan model probitnya
S<-pnorm(predict(reg))
Fungsi predict di atas untuk menghitung \(\widehat{Y}\).
Berikut ini tabel yang diperlukann untuk ROC
##
## |------------------|---------------------------|-----------------------------|
## | | Y sebenarnya = 0 | Y sebenarnya = 1 |
## | | (negatif) | (Positif) |
## |------------------|:-------------------------:|-----------------------------|
## | Y model = 0 | Keputusan yang benar | Kesalahan jenis II |
## | -----------------| ------------------------- |-----------------------------|
## | Y model = 1 | Kesalahan jenis I | Keputusan yang benar |
## |------------------|---------------------------|-----------------------------|
Kita bangun kurva ROC(Receiver Operating Characteristic)
Terlihat dalam plot di atas model probit ini memberikan True positif yang selalu lebih besar dari False positive. Hasil ini memberikan potensi model probit dengan fitur umur dan durasi yang cukup baik dalam mengkategorikan peminjam baik atau tidak.
Setiap fitur memiliki kategori yang masih dalam bentuk variabel alpha numerik seperti A11. Untuk memudahkan arti dari variabel alpha numerik ini kita melakukan pengkodean untuk setiap variable ini. Dalam pengkodean ini kita juga dapat mereduksi beberapa level yang termuat dalam suatu fitur. Seperti level A30 dan A31 dalam fitur checking_status dijadikan satu level ‘critical account’. Pengkodean variabel alpha numerik dari setiap fitur dilakukan dengan cara berikut:
checking_status: ‘A14’=‘No Checking account’;‘A11’=‘CA<0 euros’; ‘A12’=‘CA in [0-200] euros’; ‘A13’=‘CA>200 euros’
credit_history: c(‘A30’,‘A31’)=‘critical account’; c(‘A32’,‘A33’)=‘existing credit paid back duly till now’; ‘A34’=‘all credits paid back duly’
purpose: ‘A40’=‘Car(new)’;‘A41’=‘Car (used)’; c(‘A42’,‘A43’,‘A44’,‘A45’)=‘Domestic equipment’; c(‘A46’,‘A47’,‘A48’,‘A49’)=‘Studies-Business’
savings: c(‘A65’,‘A63’,‘A64’)=‘No savings or > 500 euros’; c(‘A62’,‘A61’)=‘< 500 euros’
employment: c(‘A71’,‘A72’)=‘Unemployed or < 1 year’;‘A73’=‘[1,4] years’; c(‘A74’,‘A75’)=‘> 4 years’
personal_status: ‘A91’=‘male divorced/separated’;‘A92’=‘female divorced/separated’; c(‘A93’,‘A94’)=‘male single/married/widowed’;‘A95’=‘female single’
other_parties: ‘A103’=‘guarantor’;else=‘none’
property_magnitude: ‘A121’=‘Real estate’; ‘A124’=‘No property’; else=‘Else’
other_payment_plans ‘A143’=‘None’; else=‘Bank-Stores’
housing: ‘A152’=‘Owner’; else=‘Else’
set.seed(123)
index<-sort(sample(nrow(credit),644,replace=FALSE))
table(credit$class[index])
##
## 0 1
## 447 197
#data untuk proses pelatihan
train.db<- credit.rcd[index,]
# data untuk proses validasi
valid.db<- credit.rcd[-index,]
Misalkan \(Y_i\) menyatakan variabel acak yang memiliki nilai \(y_i\in \{0,1\}\) dengan peluang munculnya masing-masing nilai adalah \(1-\pi_i\) dan \(\pi_i\). Kita dapat memasukkan fitur \(X_i\) pada \(\pi_i\) dengan menggunakan hubungan \[\text{logit}(\pi_i)=\log\left(\frac{\pi_i}{1-\pi_i} \right)=E[Y_i | X_i]=X_i^T\beta\] Dengan menyelesaikan persamaan di atas terhadap \(\pi_i\), kita peroleh \[\pi_i=\frac{e^{X_i^T\beta}}{1+e^{X_i^T\beta}}\] Dalam model ini \(Y_i | x_i \sim\) Bernoulli\((\pi_i)\). Dengan menggunakan MLE kita dapat mengestimasi parameter \(\beta\). Fungsi log likelihood yang digunakan adalah
\[ \log(\mathcal{L}(\beta|X))=\sum_{i=1}^n y_i \log(\pi_i)+(1-y_i)\log(1-\pi_i)\] Elemen dari gradien log likelihood di atas adalah \[\frac{\partial \log(\mathcal{L}(\beta))}{\partial \beta_k}=\sum_{i=1}^n X_{k,i}(y_i-\pi_i), \ \forall k \]
Kita memiliki persamaan implisit terhadap \(\beta\), sehingga kita gunakan algoritma Newton-Rhapson untuk mendapatkan parameter\(\beta\). Untuk menggunakan algpritma ini diperlukan matriks Hessian \(H(\beta)\) berikut:
\[H_{kl}=\frac{\partial^2 \log(\mathcal{L}(\beta))}{\partial \beta_k\beta_l}=\sum_{i=1}^n X_{k,i}X_{l,i}(y_i-\pi_i),\ k,l=1,2,...,n.\] Algoritma Newton-Rhapson dapat dituliskan sebagai berikut:
Kita aplikasikan algoritma di atas dengan fitur age dan duration pada data training credit sebagai berikut:
## [,1] [,2] [,3] [,4] [,5]
## 1 -0.85987709 -0.82243351 -0.81592882 -0.81590275 -0.81590275
## age -0.01623872 -0.02208386 -0.02247568 -0.02247699 -0.02247699
## duration 0.02991720 0.03480574 0.03499499 0.03499547 0.03499547
Dengan kriteria pemberhentian \(|| \beta_k-\beta_{k-1}||\leq 1e-8\) algoritma Newton-Rhapson konvergen pada iterasi ke-5.
Kondisi distribusi parameter untuk \(n\to \infty\) berikut terpenuhi: \[\sqrt{n} (\widehat{\beta}-\beta) \rightarrow N(0,I(\beta)^{-1})\] dengan \(I(\beta)=-H(\beta)\).
Dibawah : \(H_0 : \beta=0\), kita memiliki \(\sqrt{n}\widehat{\beta}\to N(0,I(0)^{-1})\). variansi \(\sigma_i\) dari setiap parameter \(\beta\) berada pada diagonal dari matriks variansi-kovariansi \(I(0)^{-1}\).
Standar deviasi tersebut adalah
(SD<-sqrt(diag(solve(-hessian))))
## 1 age duration
## 0.335022041 0.008419787 0.006957801
Kita gunakan standar deviasi di atas untuk menghitung \(z-\) value dengan formula: \[z\text{-value}_i =\frac{\widehat{\beta}_i}{\sigma_i}\sim N(0,1),\ i=1,2,3\] diperoleh:
(zval<-BETA[,5]/SD)
## 1 age duration
## -2.435370 -2.669543 5.029675
Kita gunakan \(z\)-value di atas untuk menghitung \(p\)-value dengan formula: \[p-\text{value}_i=2(1-\Phi(z-\text{value}_i))),\ i=1,2,3.\] diperoleh:
(pval<-2*(1-pnorm(abs(BETA[,5]/SD))))
## 1 age duration
## 1.487655e-02 7.595448e-03 4.913124e-07
Kita tampilkan statistik yang berhubungan dengan parameter \(\beta\) dalam satu tabel:
cbind(BETA[,5],SD, zval,pval)
## SD zval pval
## 1 -0.81590275 0.335022041 -2.435370 1.487655e-02
## age -0.02247699 0.008419787 -2.669543 7.595448e-03
## duration 0.03499547 0.006957801 5.029675 4.913124e-07
Kita juga dapat mendapatkan parameter \(\beta\) tersebut dengan fungsi R berikut:
reg2<-glm(class~age+duration,data=credit[index,],family=binomial(link="logit"))
summary(reg2)
##
## Call:
## glm(formula = class ~ age + duration, family = binomial(link = "logit"),
## data = credit[index, ])
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -1.5357 -0.8560 -0.7217 1.2401 2.1195
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.815903 0.335022 -2.435 0.0149 *
## age -0.022477 0.008420 -2.670 0.0076 **
## duration 0.034995 0.006958 5.030 4.91e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 793.13 on 643 degrees of freedom
## Residual deviance: 759.62 on 641 degrees of freedom
## AIC: 765.62
##
## Number of Fisher Scoring iterations: 4
Terlihat parameter yang diperoleh glm di atas serupa dengan hasil Newton-Rhapson.
Untuk mengaplikasikan metode forward ini kami gunakan data credit yang sudah dikode ulang (level nya lebih sedikit)
## Start: AIC=799.59
## class ~ 1
##
## Df Deviance AIC
## + checking_status 3 708.63 734.51
## + credit_history 2 756.56 775.96
## + savings 1 766.98 779.91
## + duration 2 767.77 787.17
## + housing 1 779.11 792.05
## + credit_amount 1 779.90 792.83
## + age 1 784.66 797.60
## <none> 793.13 799.59
## + other_payment_plans 1 788.20 801.13
## + installment_rate 1 788.60 801.54
## + other_parties 1 788.71 801.64
## + property_magnitude 2 782.71 802.11
## + personal_status 2 783.53 802.93
## + employment 2 785.66 805.06
## + existing_credits 1 792.29 805.23
## + num_dependents 1 792.36 805.30
## + telephone 1 792.93 805.87
## + residence_since 1 793.04 805.97
## + purpose 4 774.73 807.07
## + job 3 790.00 815.87
##
## Step: AIC=734.51
## class ~ checking_status
##
## Df Deviance AIC
## + credit_history 2 687.92 726.72
## + duration 2 688.59 727.39
## + credit_amount 1 696.01 728.35
## + savings 1 696.06 728.40
## + other_parties 1 698.34 730.68
## + housing 1 701.52 733.86
## <none> 708.63 734.51
## + installment_rate 1 703.45 735.79
## + other_payment_plans 1 703.96 736.30
## + age 1 704.17 736.50
## + personal_status 2 699.98 738.79
## + property_magnitude 2 700.97 739.78
## + residence_since 1 707.87 740.20
## + num_dependents 1 708.41 740.74
## + existing_credits 1 708.55 740.89
## + telephone 1 708.63 740.97
## + employment 2 704.69 743.49
## + purpose 4 696.17 747.91
## + job 3 706.58 751.85
##
## Step: AIC=726.72
## class ~ checking_status + credit_history
##
## Df Deviance AIC
## + savings 1 676.14 721.42
## + credit_amount 1 676.43 721.70
## + other_parties 1 676.83 722.11
## + duration 2 671.03 722.77
## <none> 687.92 726.72
## + installment_rate 1 681.51 726.79
## + housing 1 682.47 727.74
## + age 1 684.67 729.94
## + other_payment_plans 1 685.49 730.77
## + existing_credits 1 685.58 730.85
## + personal_status 2 681.00 732.74
## + num_dependents 1 687.68 732.96
## + telephone 1 687.83 733.10
## + property_magnitude 2 681.39 733.13
## + residence_since 1 687.86 733.14
## + employment 2 685.18 736.93
## + purpose 4 677.55 742.22
## + job 3 686.56 744.77
##
## Step: AIC=721.42
## class ~ checking_status + credit_history + savings
##
## Df Deviance AIC
## + other_parties 1 662.57 714.31
## + duration 2 657.07 715.28
## + credit_amount 1 664.39 716.14
## + installment_rate 1 669.06 720.80
## <none> 676.14 721.42
## + housing 1 670.78 722.52
## + age 1 672.64 724.39
## + other_payment_plans 1 673.99 725.73
## + existing_credits 1 674.13 725.87
## + property_magnitude 2 668.92 727.13
## + personal_status 2 668.98 727.19
## + telephone 1 675.94 727.69
## + num_dependents 1 675.97 727.72
## + residence_since 1 676.14 727.88
## + employment 2 674.33 732.54
## + purpose 4 666.27 737.42
## + job 3 674.93 739.60
##
## Step: AIC=714.31
## class ~ checking_status + credit_history + savings + other_parties
##
## Df Deviance AIC
## + duration 2 644.85 709.52
## + credit_amount 1 652.40 710.61
## <none> 662.57 714.31
## + installment_rate 1 656.52 714.73
## + housing 1 658.53 716.73
## + age 1 659.02 717.23
## + other_payment_plans 1 660.39 718.60
## + existing_credits 1 660.67 718.88
## + personal_status 2 655.22 719.90
## + num_dependents 1 662.31 720.52
## + telephone 1 662.54 720.75
## + residence_since 1 662.56 720.77
## + property_magnitude 2 658.62 723.30
## + employment 2 660.96 725.63
## + purpose 4 654.18 731.80
## + job 3 661.79 732.93
##
## Step: AIC=709.52
## class ~ checking_status + credit_history + savings + other_parties +
## duration
##
## Df Deviance AIC
## <none> 644.85 709.52
## + installment_rate 1 638.86 710.00
## + age 1 640.01 711.15
## + housing 1 642.30 713.45
## + personal_status 2 635.94 713.56
## + existing_credits 1 642.92 714.06
## + other_payment_plans 1 643.29 714.43
## + credit_amount 1 643.47 714.62
## + telephone 1 644.58 715.73
## + num_dependents 1 644.61 715.76
## + residence_since 1 644.81 715.96
## + employment 2 642.22 719.83
## + property_magnitude 2 643.81 721.42
## + purpose 4 632.69 723.24
## + job 3 644.18 728.26
Performance berdasarkan AUC
performance(pred.validF,"auc")@y.values[[1]]
## [1] 0.7746076
logit<-glm(class~., data=train.db[,c("class",predictors)],family=binomial)
# langkah backward
selectionB<-step(logit, direction='backward',trace=TRUE,k=log(nrow(train.db)))
## Start: AIC=797.05
## class ~ checking_status + duration + credit_history + purpose +
## credit_amount + savings + employment + installment_rate +
## personal_status + other_parties + residence_since + property_magnitude +
## age + other_payment_plans + housing + existing_credits +
## job + num_dependents + telephone
##
## Df Deviance AIC
## - job 3 590.66 778.22
## - property_magnitude 2 590.89 784.93
## - purpose 4 604.38 785.47
## - employment 2 591.86 785.89
## - telephone 1 590.30 790.80
## - duration 2 597.07 791.10
## - residence_since 1 590.89 791.39
## - housing 1 591.59 792.09
## - other_payment_plans 1 591.99 792.49
## - existing_credits 1 592.65 793.15
## - num_dependents 1 592.78 793.28
## - age 1 594.00 794.49
## - credit_history 2 601.42 795.46
## - personal_status 2 602.72 796.75
## - credit_amount 1 596.42 796.91
## <none> 590.08 797.05
## - other_parties 1 596.57 797.06
## - installment_rate 1 603.23 803.73
## - savings 1 603.49 803.98
## - checking_status 3 635.74 823.31
##
## Step: AIC=778.22
## class ~ checking_status + duration + credit_history + purpose +
## credit_amount + savings + employment + installment_rate +
## personal_status + other_parties + residence_since + property_magnitude +
## age + other_payment_plans + housing + existing_credits +
## num_dependents + telephone
##
## Df Deviance AIC
## - property_magnitude 2 591.46 766.08
## - purpose 4 605.01 766.71
## - employment 2 592.30 766.93
## - telephone 1 590.93 772.03
## - duration 2 597.55 772.18
## - residence_since 1 591.49 772.59
## - housing 1 592.13 773.22
## - other_payment_plans 1 592.74 773.83
## - existing_credits 1 592.97 774.06
## - num_dependents 1 593.46 774.55
## - age 1 594.75 775.85
## - credit_history 2 602.28 776.90
## - other_parties 1 597.07 778.16
## <none> 590.66 778.22
## - personal_status 2 603.68 778.31
## - credit_amount 1 597.57 778.67
## - savings 1 604.44 785.53
## - installment_rate 1 604.80 785.90
## - checking_status 3 636.49 804.65
##
## Step: AIC=766.08
## class ~ checking_status + duration + credit_history + purpose +
## credit_amount + savings + employment + installment_rate +
## personal_status + other_parties + residence_since + age +
## other_payment_plans + housing + existing_credits + num_dependents +
## telephone
##
## Df Deviance AIC
## - purpose 4 605.66 754.41
## - employment 2 592.90 754.60
## - telephone 1 591.64 759.80
## - duration 2 598.54 760.24
## - residence_since 1 592.28 760.44
## - existing_credits 1 593.48 761.64
## - other_payment_plans 1 593.63 761.79
## - num_dependents 1 594.32 762.48
## - housing 1 594.48 762.64
## - age 1 595.19 763.35
## - credit_history 2 603.01 764.70
## - personal_status 2 604.31 766.00
## <none> 591.46 766.08
## - other_parties 1 598.88 767.04
## - credit_amount 1 599.48 767.64
## - savings 1 605.03 773.19
## - installment_rate 1 606.27 774.43
## - checking_status 3 638.07 793.30
##
## Step: AIC=754.41
## class ~ checking_status + duration + credit_history + credit_amount +
## savings + employment + installment_rate + personal_status +
## other_parties + residence_since + age + other_payment_plans +
## housing + existing_credits + num_dependents + telephone
##
## Df Deviance AIC
## - employment 2 607.35 743.18
## - duration 2 611.97 747.79
## - telephone 1 605.84 748.13
## - residence_since 1 606.58 748.87
## - housing 1 607.81 750.10
## - other_payment_plans 1 608.06 750.35
## - existing_credits 1 608.57 750.86
## - num_dependents 1 608.80 751.09
## - age 1 609.10 751.39
## - credit_amount 1 611.06 753.35
## - personal_status 2 618.56 754.38
## <none> 605.66 754.41
## - credit_history 2 619.25 755.07
## - other_parties 1 615.01 757.30
## - savings 1 620.10 762.39
## - installment_rate 1 620.60 762.89
## - checking_status 3 658.52 787.87
##
## Step: AIC=743.18
## class ~ checking_status + duration + credit_history + credit_amount +
## savings + installment_rate + personal_status + other_parties +
## residence_since + age + other_payment_plans + housing + existing_credits +
## num_dependents + telephone
##
## Df Deviance AIC
## - duration 2 613.33 736.21
## - telephone 1 607.64 737.00
## - residence_since 1 609.01 738.37
## - housing 1 609.39 738.75
## - other_payment_plans 1 609.68 739.04
## - existing_credits 1 610.00 739.35
## - num_dependents 1 610.27 739.63
## - age 1 611.15 740.51
## - credit_amount 1 612.84 742.20
## <none> 607.35 743.18
## - credit_history 2 621.05 743.94
## - personal_status 2 621.58 744.47
## - other_parties 1 616.81 746.16
## - installment_rate 1 621.87 751.22
## - savings 1 622.24 751.59
## - checking_status 3 661.19 777.61
##
## Step: AIC=736.21
## class ~ checking_status + credit_history + credit_amount + savings +
## installment_rate + personal_status + other_parties + residence_since +
## age + other_payment_plans + housing + existing_credits +
## num_dependents + telephone
##
## Df Deviance AIC
## - telephone 1 613.58 729.99
## - residence_since 1 615.03 731.45
## - existing_credits 1 615.53 731.95
## - other_payment_plans 1 615.96 732.38
## - housing 1 616.00 732.42
## - num_dependents 1 616.24 732.66
## - age 1 616.81 733.23
## <none> 613.33 736.21
## - personal_status 2 627.56 737.51
## - credit_history 2 628.07 738.02
## - other_parties 1 622.71 739.13
## - savings 1 627.06 743.48
## - installment_rate 1 631.16 747.58
## - credit_amount 1 631.34 747.76
## - checking_status 3 669.48 772.97
##
## Step: AIC=729.99
## class ~ checking_status + credit_history + credit_amount + savings +
## installment_rate + personal_status + other_parties + residence_since +
## age + other_payment_plans + housing + existing_credits +
## num_dependents
##
## Df Deviance AIC
## - residence_since 1 615.38 725.33
## - existing_credits 1 615.69 725.64
## - other_payment_plans 1 616.15 726.10
## - housing 1 616.26 726.21
## - num_dependents 1 616.58 726.53
## - age 1 617.45 727.40
## <none> 613.58 729.99
## - personal_status 2 627.75 731.23
## - credit_history 2 628.45 731.94
## - other_parties 1 622.81 732.76
## - savings 1 627.40 737.35
## - installment_rate 1 631.39 741.34
## - credit_amount 1 631.53 741.48
## - checking_status 3 669.66 766.67
##
## Step: AIC=725.33
## class ~ checking_status + credit_history + credit_amount + savings +
## installment_rate + personal_status + other_parties + age +
## other_payment_plans + housing + existing_credits + num_dependents
##
## Df Deviance AIC
## - housing 1 616.91 720.39
## - existing_credits 1 617.18 720.67
## - num_dependents 1 617.99 721.47
## - other_payment_plans 1 618.10 721.58
## - age 1 619.46 722.95
## <none> 615.38 725.33
## - personal_status 2 629.19 726.20
## - other_parties 1 624.99 728.47
## - credit_history 2 631.95 728.97
## - savings 1 630.03 733.52
## - installment_rate 1 632.23 735.71
## - credit_amount 1 633.13 736.61
## - checking_status 3 670.53 761.08
##
## Step: AIC=720.39
## class ~ checking_status + credit_history + credit_amount + savings +
## installment_rate + personal_status + other_parties + age +
## other_payment_plans + existing_credits + num_dependents
##
## Df Deviance AIC
## - existing_credits 1 618.70 715.71
## - other_payment_plans 1 619.40 716.42
## - num_dependents 1 619.95 716.96
## - age 1 621.79 718.80
## <none> 616.91 720.39
## - personal_status 2 631.31 721.86
## - other_parties 1 627.32 724.34
## - credit_history 2 634.20 724.75
## - savings 1 631.77 728.79
## - installment_rate 1 633.62 730.63
## - credit_amount 1 635.90 732.92
## - checking_status 3 675.47 759.55
##
## Step: AIC=715.71
## class ~ checking_status + credit_history + credit_amount + savings +
## installment_rate + personal_status + other_parties + age +
## other_payment_plans + num_dependents
##
## Df Deviance AIC
## - other_payment_plans 1 621.35 711.89
## - num_dependents 1 622.24 712.79
## - age 1 623.36 713.90
## <none> 618.70 715.71
## - personal_status 2 632.88 716.96
## - credit_history 2 634.24 718.32
## - other_parties 1 629.05 719.59
## - savings 1 633.73 724.28
## - installment_rate 1 635.23 725.77
## - credit_amount 1 638.25 728.80
## - checking_status 3 676.43 754.04
##
## Step: AIC=711.89
## class ~ checking_status + credit_history + credit_amount + savings +
## installment_rate + personal_status + other_parties + age +
## num_dependents
##
## Df Deviance AIC
## - num_dependents 1 625.03 709.11
## - age 1 625.97 710.05
## <none> 621.35 711.89
## - personal_status 2 634.54 712.15
## - other_parties 1 631.74 715.82
## - credit_history 2 639.37 716.98
## - savings 1 636.77 720.85
## - installment_rate 1 638.19 722.27
## - credit_amount 1 641.25 725.33
## - checking_status 3 678.14 749.28
##
## Step: AIC=709.11
## class ~ checking_status + credit_history + credit_amount + savings +
## installment_rate + personal_status + other_parties + age
##
## Df Deviance AIC
## - age 1 628.60 706.21
## - personal_status 2 635.60 706.75
## <none> 625.03 709.11
## - other_parties 1 635.41 713.02
## - credit_history 2 643.23 714.38
## - savings 1 640.38 717.99
## - installment_rate 1 640.73 718.34
## - credit_amount 1 644.29 721.90
## - checking_status 3 682.82 747.50
##
## Step: AIC=706.21
## class ~ checking_status + credit_history + credit_amount + savings +
## installment_rate + personal_status + other_parties
##
## Df Deviance AIC
## - personal_status 2 641.34 706.02
## <none> 628.60 706.21
## - other_parties 1 638.94 710.09
## - credit_history 2 647.64 712.32
## - installment_rate 1 643.64 714.79
## - savings 1 644.00 715.14
## - credit_amount 1 646.85 717.99
## - checking_status 3 689.01 747.22
##
## Step: AIC=706.02
## class ~ checking_status + credit_history + credit_amount + savings +
## installment_rate + other_parties
##
## Df Deviance AIC
## <none> 641.34 706.02
## - other_parties 1 651.63 709.84
## - installment_rate 1 652.40 710.61
## - credit_history 2 662.30 714.04
## - savings 1 656.11 714.32
## - credit_amount 1 656.52 714.73
## - checking_status 3 702.30 747.57
Performance berdasarkan AUC
performance(pred.validB,"auc")@y.values[[1]]
## [1] 0.780901