loan_classification
1. 병렬처리를 위한 패키지 불러오기
1 | library(caret) # 머신러닝을 위한 패키지 |
1 | ## Loading required package: ggplot2 |
1 | ## Loading required package: lattice |
1 | library(tidyverse) # 데이터 핸들링 및 시각화를 위한 패키지 |
1 | ## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ── |
1 | ## ✓ tibble 3.1.6 ✓ dplyr 1.0.7 |
1 | ## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ── |
1 | library(doParallel) # 병렬처리를 위한 패키지 |
1 | ## Loading required package: foreach |
1 | ## |
1 | ## The following objects are masked from 'package:purrr': |
1 | ## Loading required package: iterators |
1 | ## Loading required package: parallel |
- 병렬처리
- 주 목적: 속도 때문에 씀
- 원리 및 기타 설명은 다음 링크를 참고한다.
- https://freshrimpsushi.tistory.com/1266
1 | detectCores() # 현재 자기 컴퓨터의 코어 개수를 반환한다 |
1 | ## [1] 8 |
- 병렬처리에 쓸 코어를 등록한다.
- 보통 50% 쓰는 것을 추천한다. (이유: 모형이 개발되는 동안 다른 간단한 작업도 해야 함)
1 | cl <- parallel::makeCluster(6, setup_timeout = 0.5) |
2. 데이터 가져오기
- 경로를 확인한 뒤 데이터를 가져온다.
1 | loan_data <- read.csv("data/cleaned_loan_data.csv", stringsAsFactors = FALSE) |
1 | ## [1] 29091 8 |
3. 데이터 전처리
- 경로를 확인한 뒤 데이터를 가져온다.
- 먼저 중복값을 확인한다.
1 | sapply(loan_data, function(x) sum(is.na(x))) |
1 | ## loan_status loan_amnt grade home_ownership annual_inc |
- 데이터 타입을 확인한다.
1 | loan_data %>% duplicated() %>% sum() # 374개 확인 |
1 | ## [1] 374 |
1 | loan_data2 <- loan_data %>% distinct() |
- 데이터 타입을 확인한다.
1 | glimpse(loan_data2) |
1 | ## Rows: 28,717 |
- 우선 타겟 데이터는 영어로 표현한다.
1 | loan_data2$loan_status <- factor(loan_data2$loan_status, levels = c(0, 1), labels = c("non_default", "default")) |
- 만약 한꺼번에 하고 싶다면 다음과 같이 할 수 있다.
1 | loan_data2 <- loan_data2 %>% |
- chr 데이터가 모두 factor로 바뀌었는지 확인한다.
1 | glimpse(loan_data2) |
1 | ## Rows: 28,717 |
4. 데이터 분리
- 훈련 데이터와 테스트 데이터로 분리한다.
1 | set.seed(2021) |
5. 모형 개발 준비
- caret 패키지에서의 모형 개발 관련해서는 다음 웹사이트에서 확인 하기를 바란다.
(1) Controller
- trainControl 함수를 활용하여 기본 세팅을 진행한다.
1 | control <- trainControl( |
(2) Feature Engineering
- 통계처리를 진행한다.
1 | preProc <- c("BoxCox", |
(3) 독립 변수와 종속 변수의 정의
- 독립변수와 종속 변수를 정의한다.
1 | frml <- loan_status ~ loan_amnt + grade + home_ownership + annual_inc + age + emp_cat + ir_cat |
6. 모형개발
- 개발준비가 끝났다면, 다양한 모델을 개발하도록 한다.
(1) 로지스틱회귀분석
1 | logis <- train( |
1 | ## Generalized Linear Model |
(2) 의사결정나무
- 의사결정 나무에서 하이퍼파라미터를 정의한다.
1 | rpartGrid <- expand.grid(cp = c(0.001, 0.005, 0.01)) |
1 | ## model parameter label forReg forClass probModel |
- 이제 모형을 개발한다.
1 | set.seed(2021) |
1 | ## CART |
1 | ggplot(rpt) |
(3) 랜덤포레스트
- 이번에는 랜덤포레스트를 사용하기 위한 하이퍼파라미터를 정의한다.
1 | rfGrid <- expand.grid(mtry = c(3, 4, 5)) |
1 | ## model parameter label forReg forClass probModel |
- 랜덤포레스트 모델을 개발한다.
1 | rf <- train( |
1 | ## Random Forest |
1 | ggplot(rf) |
7. 모형 Resampling
- 3개의 모형을 비교하도록 한다.
1 | resamps <- resamples( |
1 | ## |
1 | bwplot(resamps, layout = c(2, 1)) |
8. 최종모형 선정 및 모형평가
(1) Confusion Matrix
1 | pred_rpt <- predict(rf, test, type = "prob") |
1 | ## Confusion Matrix and Statistics |
(2) ROC Curve & AUC
- 이번에는 ROC Curve와 AUC를 계산하도록 한다.
1 | library(ROCR) |
1 | # AUC = Area Under Curve의 뜻으로 |
1 | ## [1] 0.5581301 |
loan_classification
https://yoonhwa-p.github.io/2021/11/29/R/loan_classification/
You need to set
install_url
to use ShareThis. Please set it in _config.yml
.