데이터마이닝 중간고사 과제
20170744 권다정 (2021년 5월 2일 )
■ 자료
신용자료(파일명 : credit.csv)
1,000개의 관측치와 17개의 변수로 구성
- 고객의 특성 변수들과 부도여부(default)를 포함하고 있는 자료
- 반응변수 : default 변수(yes : 부도, 채무 불이행, no : 부도 아님)
예측변수
checking_balance | 자유예금 |
months_loan_duration | 기간 |
credit_history | 과거 신용정보 |
purpose | 목적 |
amount | 신용대출금액 |
savings_balance | 저축예금 |
employment_duration | 현직장 재직기간 |
percent_of_income | 소득대비 적금비율 |
years_at_residence | 현 거주기간 |
age | 연령 |
other_credit | 기타 적금 |
housing | 주거형태 |
existing_loans_count | 신용계좌 수 |
job | 직업 |
dependents | 부양가족수 |
phone | 전화소유 |
default | 부도여부 |
신용자료 csv 파일을 R에서 read
credit<-read.csv("credit.csv",stringsAsFactors = TRUE) |
# credit.csv 파일을 read.csv 함수를 이용해서 불러 온 후 credit변수에 저장
# 불러오는 변수에 문자형이 있으므로 stringsAsFactors = TRUE를 이용해 펙터로 변환한다.
- 변수명 확인 : head함수
head(credit) # head함수를 이용해 디폴트로 처음 6개의 관측 값을 출력 |
str(credit) # str함수를 이용해 데이터 구조를 확인합니다. # 데이터 구조, 변수 개수, 변수 명, 관찰치 개수, 관찰치의 미리보기 |
- 데이터 구조 확인 : str 함수
해석 ‘1000개의 관측치‘ , ’17개의 변수‘로 되어있는 ’데이터 프레임‘이고 각 변수들의 유형은 int, Factor로 이뤄져있습니다. default 변수를 이용해 분석을 실행해야하는데 Factor로 되어있어 num으로 변경하는 작업이 필요 |
credit$default <- ifelse(credit$default == "no" , 0 , 1) str(credit$default) # ifelse 함수를 이용해 default변수의 값이 “no”이면 0, “no”가 아니면 (= yes이면) 1의 값을 할당 |
훈련용 자료와 검증용 자료로 7:3으로 분할
install.packages("caret") library(caret) inTrain <- createDataPartition( # 훈련용 자료와 검증용 자료로 분할하는 함수 y = credit$default, #레이블 p = .7, #훈련 데이터에서 사용할 데이터의 비율을 0.7로 지정 list = FALSE) #결과를 리스트로 반환할지 여부. FALSE로 지정해 리스트로 반환하지 않음. str(inTrain) # inTrain 변수의 구조 확인 |
training <- credit[ inTrain,] # training변수에 훈련용 자료 inTrain (70%)지정 testing <- credit[-inTrain,] # testing변수에 검증용 자료 –inTrain (30%) 지정 nrow(training) # nrow함수를 이용해 행의 수 확인 nrow(testing) |
로지스틱 회귀모형
(1) 훈련용 자료로 로지스틱 회귀모형 적합
logi <- glm(default~., data=training, family=binomial ) # glm함수를 이용해 logi변수에 로지스틱 회귀모형 적합 # 종속변수는 default로 지정, 독립변수는 .을 이용해 모든 변수 지정 # family=binomial 옵션을 사용 summary(logi) # summary함수를 이용해 logi변수의 회귀모형 적합 확인 |
회귀계수의 검정에서 p-값이 0에서 0.7까지 다양하게 분포하여 변수선택법을 이용해 제거하는 과정을 가질 필요가 있다. 마지막부분에 제시된 Null deviance는 절편만 포함하는 모형 ( : =0하의 모형)의 완전모형(또는 포화모형)으로부터의 이탈도를 나타낸다. 값이 작을수록 해당모형이 자료를 잘 적합함을 의미한다. P-값= (699) > 855.21)으로 통계적으로 유의하다고 어렵다. Null deviance에 비해 자유도 1 기준에 이탈도의 감소가 199.35정도의 큰 감소를 보이며, P-값= (664) > 655.86)이므로 귀무가설이 기각되며 적합값이 관측된 자료를 잘 적합하고 있다고 말하기 어렵다. |
(2) 변수선택법을 이용하여 최종 모형 선택
step.logi <- step(logi, direction="backward") # 변수선택법을 이용하기 위해 step함수 사용 # direction=“backward” 옵션을 이용해 후진 제거법 사용 |
후진 제거법은 모든 설명변수를 포함하는 모형에서 기여도가 낮은 변수를 차례로 제거해 나가되 더 이상 제거할 변수가 없을 때 중단하는 방법이다. AIC 값을 줄여가며 P-value가 높은 변수들을 변수를 하나씩 제거하여 AIC=178.58에서 총 12개의 변수가 남았음을 알 수 있다. |
(3) 검증용 자료를 이용하여 부도 예측확률 계산
a <- predict(logi, newdata=testing, type="response") head(a) # predict함수를 이용해 예측확률 계산 # logi : 예측에 사용할 회귀분석 결과식 # newdata : 예측에 사용할 x값. 검증용 자료를 이용하므로 testing으로 지정 # type=“response”로 지정 |
|
b <- ifelse(a>=0.7, 1, 0) #b 변수에 ifelse함수를 사용해 a가 0.7보다 크면 1 , 작으면 0으로 분류 b <- as.factor(b) # b변수를 펙터로 변환 install.packages("e1071") library(e1071) library(caret) confusionMatrix(b, testing$default) #confusionMatrix함수를 이용해 정오 분류표 구하기 |
(4) 부도 예측확률이 특정 cutoff(예를 들어 0.7, 0.8, 0.9 등) 보다 클 경우, 부도로 분류한 뒤 정오 분류표 작성
정오분류표는 Reference는 예측집단, Prediction는 실제 집단을 나타낸다. |
(5) (4)의 정오분류표에서 민감도, 특이도, 정분류율 계산
위의 출력물은 (4)의 정오분류표 출력 결과이다. 민감도 : sensitivity = 0.9714 ( = 204 / 204+76 ) 특이도 : specificity = 0.1556 ( = 14 / 14+76 ) 정분류율 : Accuracy = 0.7267 ( = (204+14) / (204+6+76+14)) 로 계산 할 수 있다. 민감도, 특이도, 정분류율에 대한 값이 출력되지만, 정오분류표를 이용해 구할수도 있다. |
의사결정나무 분석
(1) 훈련용 자료로 의사결정나무 적합
#4.의사결정 (1) install.packages("rpart") # rpart 패키지 설치 library(rpart) # rpart library 불러오기 c <- rpart(default~., data=training) # c변수에 rpart함수를 이용해 # default를 종속 .을 독립으로 하는 # 훈련용 자료로 의사결정나무 적합 plot(c, compress=T, margin=0.3) # plot으로 시각화 # compress=T는 나무의 조밀하게 그리도록 지정 # margin은 여백을 나타냄. 0.3으로 지정 |
text(c, cex=1.0) # text함수를 이용해 텍스트 입력 # cex 옵션은 글자크기를 설정 |
(2) 정오 분류표 작성
#4.(2) c1 <- predict(c, newdata=testing, type="class") head(c1) # predict함수를 이용해 예측확률 계산 # c : 예측에 사용할 회귀분석 결과 식 # newdata : 예측에 사용할 x값. 검증용 자료를 이용하므로 testing으로 지정 # type=“class”로 지정 #4.(3) library(caret) confusionMatrix(c1, testing$default) #confusionMatrix함수를 이용해 정오 분류표 구하기 |
정오분류표는 Reference는 예측집단, Prediction는 실제 집단을 나타낸다. |
(3) (2)의 정오분류표에서 민감도, 특이도, 정분류율 계산
위의 출력물은 (2)의 정오분류표 출력 결과이다. 민감도 : sensitivity = 0.9048 ( = 190 / 190+62 ) 특이도 : specificity = 0.3111 ( = 28 / 28+62 ) 정분류율 : Accuracy = 0.7267 ( = (190+28) / (190+20+62+28)) 로 계산 할 수 있다. 민감도, 특이도, 정분류율에 대한 값이 출력되지만, 정오분류표를 이용해 구할 수도 있다. |
5. 단순베이즈 분류
(1) 훈련용 자료로 단순베이즈 분류 적합
#5.(1) library(e1071) m<-naiveBayes(default~., data=credit) # naivBayes함수를 이용해 단순베이즈 분류 적합 # 종속변수 default 독립변수 모두 # data=credit사용 m |
(2) 정오 분류표 작성
#5.(2) m1 <- predict(m, newdata=testing, type="class") # predict함수를 이용해 예측확률 계산 # m : 예측에 사용할 회귀분석 결과 식 # newdata : 예측에 사용할 x값. 검증용 자료를 이용하므로 testing으로 지정 # type=“class”로 지정 head(m1) library(caret) confusionMatrix(m1, testing$default) #정오분류표 #confusionMatrix함수를 이용해 정오 분류표 구하기 |
정오분류표는 Reference는 예측집단, Prediction는 실제 집단을 나타낸다. |
(3) (2)의 정오분류표에서 민감도, 특이도, 정분류율 계산
위의 출력물은 (2)의 정오분류표 출력 결과이다. 민감도 : sensitivity = 0.8952 ( = 188 / 188+43 ) 특이도 : specificity = 0.5222 ( = 47 / 47+43 ) 정분류율 : Accuracy = 0.7833 ( = (188+43) / (188+22+43+47)) 로 계산 할 수 있다. 민감도, 특이도, 정분류율에 대한 값이 출력되지만, 정오분류표를 이용해 구할수도 있다. |
6. 3가지 방법 비교
- 방법 별 민감도, 특이도, 정분류율 비교
로지스틱회귀분석 민감도 : sensitivity = 0.9714 ( = 204 / 204+76 ) 특이도 : specificity = 0.1556 ( = 14 / 14+76 ) 정분류율 : Accuracy = 0.7267 ( = (204+14) / (204+6+76+14)) |
의사결정나무 적합 민감도 : sensitivity = 0.9048 ( = 190 / 190+62 ) 특이도 : specificity = 0.3111 ( = 28 / 28+62 ) 정분류율 : Accuracy = 0.7267 ( = (190+28) / (190+20+62+28)) |
단순베이즈 분류 민감도 : sensitivity = 0.8952 ( = 188 / 188+43 ) 특이도 : specificity = 0.5222 ( = 47 / 47+43 ) 정분류율 : Accuracy = 0.7833 ( = (188+43) / (188+22+43+47)) |
- 결론
민감도 : 실제값이 True인 관측치 중 예측치가 적중한 정도를 나타냅니다.
[로지스틱 0.9714 의사결정 0.9048 단순베이즈 0.8952]
로지스틱에서 가장 높고 단순베이즈에서 가장 낮습니다.
특이도 : 실제값이 False인 관측치 중 예측치가 적중한 정도를 나타냅니다.
[로지스틱 0.1556 의사결정 0.3111 단순베이즈 0.5222]
단순베이즈에서 가장 높고 로지스틱에서 가장 낮습니다.
정분류율 : 전체 관측치중 실제값과 예측치가 일치한 정도를 나타냅니다.
정분류율은 범주의 분포가 균형을 이룰 때 효과적인 평가지표입니다.
[로지스틱 0.7267 의사결정 0.7267 단순베이즈 0.7833]
단순베이즈에서 가장 높습니다.
'전공수업 > 데이터마이닝' 카테고리의 다른 글
서포트 벡터 머신 과제 (0) | 2021.06.02 |
---|---|
신경망 모형 과제 (0) | 2021.06.02 |
데이터마이닝 강의자료 (0) | 2021.06.02 |
데이터 분할 (0) | 2021.06.02 |