본문 바로가기
전공수업/데이터마이닝

중간고사 과제

by bibibig_data 2021. 6. 2.

credit (1).csv
0.09MB

 

 

 

 

 

데이터마이닝 중간고사 과제

 

20170744 권다정 (202152 )

 

자료

신용자료(파일명 : 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함수를 사용해 a0.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]

단순베이즈에서 가장 높습니다.

 

 

20170744권다정 데이터마이닝과제 (2).hwp
0.44MB

'전공수업 > 데이터마이닝' 카테고리의 다른 글

서포트 벡터 머신 과제  (0) 2021.06.02
신경망 모형 과제  (0) 2021.06.02
데이터마이닝 강의자료  (0) 2021.06.02
데이터 분할  (0) 2021.06.02