작업형 2
1. 고객의 대출 정보인 Loan 데이터 세트에서 전체 데이터를 7:3 으로 훈련 / 테스트 데이터로 분할하고, 테스트 데이터로 고객의 대출상환 (loan_status)을 예측하고 csv 포맷으로 제출하시오.
→ 해설 이상. 정보 부족한 문제임
→ 대출상환 (loan_status)가 PAIDOFF 인 경우는 삭제하고, 다른 경우일 때만 가지고 모델링 연습
# 데이터 로드
> ds <- read.csv("c:/data/Loan payments data.csv")
> str(ds)
'data.frame': 500 obs. of 11 variables:
$ Loan_ID : chr "xqd20166231" "xqd20168902" "xqd20160003" "xqd20160004" ...
$ loan_status : chr "PAIDOFF" "PAIDOFF" "PAIDOFF" "PAIDOFF" ...
$ Principal : int 1000 1000 1000 1000 1000 300 1000 1000 1000 800 ...
$ terms : int 30 30 30 15 30 7 30 30 30 15 ...
$ effective_date: chr "9/8/2016" "9/8/2016" "9/8/2016" "9/8/2016" ...
$ due_date : chr "10/7/2016" "10/7/2016" "10/7/2016" "9/22/2016" ...
$ paid_off_time : chr "9/14/2016 19:31" "10/7/2016 9:00" "9/25/2016 16:58" "9/22/2016 20:00" ...
$ past_due_days : int NA NA NA NA NA NA NA NA NA NA ...
$ age : int 45 50 33 27 28 35 29 36 28 26 ...
$ education : chr "High School or Below" "Bechalor" "Bechalor" "college" ...
$ Gender : chr "male" "female" "female" "male" ...
> summary(ds)
Loan_ID loan_status Principal terms effective_date due_date
Length:500 Length:500 Min. : 300.0 Min. : 7.00 Length:500 Length:500
Class :character Class :character 1st Qu.:1000.0 1st Qu.:15.00 Class :character Class :character
Mode :character Mode :character Median :1000.0 Median :30.00 Mode :character Mode :character
Mean : 943.2 Mean :22.82
3rd Qu.:1000.0 3rd Qu.:30.00
Max. :1000.0 Max. :30.00
paid_off_time past_due_days age education Gender
Length:500 Min. : 1.00 Min. :18.00 Length:500 Length:500
Class :character 1st Qu.: 3.00 1st Qu.:27.00 Class :character Class :character
Mode :character Median :37.00 Median :30.00 Mode :character Mode :character
Mean :36.01 Mean :31.12
3rd Qu.:60.00 3rd Qu.:35.00
Max. :76.00 Max. :51.00
NA's :300
# 데이터 형태를 보기. pate_due_days 가 N/A 면 PAIDOFF 임.
# NA 값 행 날려서 데이터 만들기
> ds2 <- ds
> ds2 <- na.omit(ds)
> summary(ds2$loan_status)
Length Class Mode
200 character character
# loan_status 를 factor화한 후 7:3 으로 나눈다
> ds3 <- ds2
> ds3$loan_status <- as.factor(ds2$loan_status)
> summary(ds3$loan_status)
COLLECTION COLLECTION_PAIDOFF
100 100
> idx <- createDataPartition(ds3$loan_status, p=0.7)
> pre_train <- ds3[idx$Resample1,]
> pre_test <- ds3[-idx$Resample1,]
# 데이터 스케일
> scaled_train <- preProcess(pre_train, method = "range")
> scaled_test <- preProcess(pre_test, method = "range")
# 데이터셋 생성
> train <- predict(scaled_train, pre_train)
> test <- predict(scaled_test, pre_test)
# 데이터 모델링
# glm
> md_glm <- glm(loan_status~., train, family='binomial')
Warning message:
glm.fit: 알고리즘이 수렴하지 않았습니다 - glm pass
# svm
> library(e1071)
> md_svm <- svm(loan_status~., train)
> pred_svm <- svm(md_svm, test, type='response')
Error in svm.default(md_svm, test, type = "response") :
wrong type specification!
svm pass
# 랜덤포레스트 사용
md_rf2 <- randomForest(loan_status~., train, ntree=300)
> pred_rf <- predict(md_rf2, test, type='response')
> confusionMatrix(pred_rf, test$loan_status)
Confusion Matrix and Statistics
Reference
Prediction COLLECTION COLLECTION_PAIDOFF
COLLECTION 30 5
COLLECTION_PAIDOFF 0 25
Accuracy : 0.9167
95% CI : (0.8161, 0.9724)
No Information Rate : 0.5
P-Value [Acc > NIR] : 5.191e-12
Kappa : 0.8333
Mcnemar's Test P-Value : 0.07364
Sensitivity : 1.0000
Specificity : 0.8333
Pos Pred Value : 0.8571
Neg Pred Value : 1.0000
Prevalence : 0.5000
Detection Rate : 0.5000
Detection Prevalence : 0.5833
Balanced Accuracy : 0.9167
'Positive' Class : COLLECTION
# 데이터 저장
> total = as.data.frame(cbind(test$Loan_ID, pred_rf))
> head(total)
write.csv(total, "12314_556.csv", row.names = FALSE)
'자기계발 > 자격증' 카테고리의 다른 글
[빅데이터 분석기사] 6/25 실기 후기 및 다음 시험을 위한 준비 (0) | 2022.06.25 |
---|---|
[빅데이터 분석기사] 실기 모의고사 3회 - 1/2 (R tool 사용) (0) | 2022.06.21 |
[빅데이터 분석기사] 실기 모의고사 2회 - 1/2 (0) | 2022.06.19 |
[빅데이터 분석기사] 실기 모의고사 1회 - 2/2 (0) | 2022.06.18 |
[빅데이터 분석기사] 실기 모의고사 1회 - 1/2 (0) | 2022.06.17 |
댓글