R)로지스틱 회귀

 로지스틱 회귀 : 각 독립 변수의 선형 결합을 통해 사건의 발생 확률(가능성)을 예측하는 기법


앞서 설정한 상관, 회귀 분석이 단순히 각 독립 변수 간의 관계에 대해 상관 관계 "어느 정도 관계가 있는 가"에 대해 반환했다면, 

로지스틱 회귀는 한 단계 더 나아가, 각 독립 변수의 선형 결합 후 사건의 발생 확률을 예측하는 기법이다.

※해당 링크의 데이터를 기준으로 실습을 진행하였습니다

데이터 링크 : https://github.com/datawithnosense/R/blob/main/01.Practice_Dataset/ch6-1.csv


만약, 실습 도중

Error in eval(family$initialize) : y values must be 0 <= y <= 1

해당 구문 발생 시, gender 열의 factor 값에 대한 전처리가 필요하므로, 해당 코드를 실행할 것

> g$gender <- as.factor(g$gender)


로지스틱 회귀의 기본적인 구문

glm(독립변수 y ~ 독립변수x1+독립변수x2+ ... , family = binomial , data = 데이터 셋)

-독립변수 y에 대한 독립변수 x들의 로지스틱 회귀 분석 실행

-family 옵션은 필수, 로지스틱 회귀 모형은 binomial 옵션을 사용


summary()함수로 결과 확인 시, 해당 독립변수x들의 유의 수준 또한 0.05(신뢰수준 95%) 보다 작으므로 양호하다.

종속변수가 연속적인 값이 아니기 때문에, 결정계수(R-squared : 상관, 회귀에서 성능을 확인할 수 있는 척도)의 확인이 불가능하다.

대신, 정오분석표 등의 방법을 이용한다.

이분화 도메인을 갖는 속성에 대해 예측을 할 때, Postive 값의 횟수에 대한 비율을 민감도라고 하며 반대로 Negative 값의 횟수에 대한 비율을 특이도라고 한다.


예를 들자면 어떤 병에 대해 환자의 발병 여부를 의사가 판별 한다고 할 때, 의사가 병이라 진단 내리는 비율을 민감도, 병이 없다고 진단내리는 비율을 특이도라고 볼 수 있다.


필요에 따라 민감도를 높게 설정하여 예측하는 경우, 정확도가 100%에 가까워 지지만, 이는 좋은 예측 결과라고 보기 어렵다. 하지만 Negative 예측에 오차에 비해 Positive 예측 오차에 대한 손실이 막대하다면, 이때는 민감도를 높게 할 필요가 있다.

install.packages("caret")

library(caret)

caret 라이브러리를 이용해 이미 예측 결과를 낸 값(해당 값을 내는 방법은 차후 링크를 첨부할 예정)에 대해 정오분석표를 작성한다.

confusionMatrix(g$gender_pred(예측값), g$gender(실제값))



민감도는 0.9667, 특이도는 0.9333, 정확도는 95%(0.95)로 높은 수준이다.

유의수준(P-value) 또한 0.05보다 작으므로 신뢰수준 95%(유의수준 0.05)에서 유효함을 알 수 있다. 

댓글