728x90

로지스틱 회귀분석은 반응변수가 '범주형'인 경우 적용되는 회귀 분석 모형

새로운 설명변수 값이 주어질 때, 반응변수의 각 범주에 속할 확률이 얼마인지 추정하여 추정확률을 기준치에 따라 분류하는 목적으로 사용된다.

 

로지스틱 회귀분석은 카이제곱 검정을 이용하여 실시한다.

 

glm(formula, family, data, ...) : family - 모델에서 사용할 분포(보통 이항 로지스틱 회귀 분석인 경우 "binomial" 사용

confusionMatrix(data, reference, ...)

auc(actual, predicted, ...) : actual - 정답 label 벡터, predicted - 예측된 값의 벡터

 

library(ISLR)
bankruptcy = Default
set.seed(Sys.Date())

train_idx = sample(1:nrow(bankruptcy),
                   size = 0.8*nrow(bankruptcy),
                   replace = F) #80%의 bankruptcy 데이터를 학습데이터로 사용하기 위해 선별
test_idx = -train_idx #학습데이터로 사용된 나머지 20% 데이터를 테스트데이터로 사용
bankruptcy_train = bankruptcy[train_idx,]
bankrupcty_test = bankruptcy[test_idx,]

full_model = glm(default ~.,
                 family = binomial,
                 data = bankruptcy_train)
step_model = step(full_model, direction = "both") #step 함수를 이용해, 종속변수 자동선택

summary(step_model) #p값이 유의수준 0.05보다 작으므로 유의한 변수로 판정

#앞선 summary 결과에서 나온 null_deviance, residual_deviance를 변수에 저장하기
null_deviance = 2354.0
residual_deviance = 1287.4
model_deviance = null_deviance - residual_deviance

#카이제곱 분포로 모델 유의성 검증하기
pchisq(model_deviance,
       df = 2,
       lower.tail = F) #자유도가 2인 카이제곱 분포의 확률변수를 누적분호 함수 값으로 구하기
#결과적으로 나온 p값이 0.05보다 작으므로 유의, 귀무가설을 기각하고 대립가설을 채택한다.

#다중 공산성 확인하기
library(car) #vif 함수 사용하기 위한 라이브러리 불러오기
vif(step_model) # vif 결과가 4를 초과하지 않으므로 다중공산성에 문제가 없다

#분석모형 평가
pred = predict(step_model,
               new_data = bankrupcty_test[, -1],
               type = "response")
df_pred = as.data.frame(pred)
df_pred$default = ifelse(df_pred$pred >= 0.5, "YES", "NO") #확률 0.5를 기준으로 파산(Y)을 구분
df_pred$default = as.factor(df_pred$default) #Factor형으로 default 변수의 값들을 변환

confusionMatrix(data = df_pred$default,
                reference = bankruptcy_test[, 1])
#정확도는 0.977로 높은 결과값
#민감도는 0.9995로 높은 결과값
#특이도는 0.2969로 실제 파산(Y)값보다 파산을 예측한 비율이 적음
#정확도와 민감도는 높지만, 특이도가 낮은 모형이 만들어짐
#카파통계량은 0.4439로 모형은 보통 일치도를 보임.

library(ModelMetrics) #auc함수를 사용하기 위한 라이브러리 불러오기
auc(actual = bankrupcty_test[, 1],
    predicted = df_pred$default) #AUC 값은 0.6491792로 불량(poor)한 성능을 보이는 모델로 평가된다.

 

728x90