귀퉁이 서재
DATA - 22. 로지스틱 회귀(Logistic Regression) 본문
이번 챕터에서는 로지스틱 회귀에 대해 알아보겠습니다. 이전 챕터까지 배웠던 단순 선형 회귀, 다중 선형 회귀에서는 독립 변수가 양적 데이터 혹은 범주형 데이터이고, 종속 변수가 양적 데이터였습니다. 이번엔 종속 변수가 범주형 데이터일 때의 회귀 모델에 대해 알아보겠습니다. 종속 변수가 범주형 데이터이며 이진형(binary)일 때를 로지스틱 회귀라 합니다. 위키피디아 정의를 가져와 봤습니다.
로지스틱 회귀(logistic regression)는 D.R.Cox가 1958년에 제안한 확률 모델로서 독립 변수의 선형 결합을 이용하여 사건의 발생 가능성을 예측하는 데 사용되는 통계 기법이다. 로지스틱 회귀의 목적은 일반적인 회귀 분석의 목표와 동일하게 종속 변수와 독립 변수 간의 관계를 구체적인 함수로 나타내어 향후 예측 모델에 사용하는 것이다. 이는 독립 변수의 선형 결합으로 종속 변수를 설명한다는 관점에서는 선형 회귀 분석과 유사하다. 하지만 로지스틱 회귀는 선형 회귀 분석과는 다르게 종속 변수가 범주형 데이터를 대상으로 하며, 입력 데이터가 주어졌을 때 해당 데이터의 결과가 특정 분류로 나뉘기 때문에 일종의 분류 (classification) 기법으로도 볼 수 있다. 흔히 로지스틱 회귀는 종속변수가 이진형(binary) 문제(즉, 유효한 범주의 개수가 두 개인 경우)를 지칭할 때 사용된다. 이외에, 두 개 이상의 범주를 가지는 문제가 대상인 경우엔 다항 로지스틱 회귀 (multinomial logistic regression) 또는 분화 로지스틱 회귀 (polytomous logistic regression)라고 하고 복수의 범주이면서 순서가 존재하면 서수 로지스틱 회귀 (ordinal logistic regression)라고 한다. 로지스틱 회귀 분석은 의료, 통신, 데이터마이닝과 같은 다양한 분야에서 분류 및 예측을 위한 모델로서 폭넓게 사용되고 있다.
로지스틱 회귀의 예로는, 성적 등을 기반으로 어떤 대학에 합격할지 불합격할지, 환자의 건강 상태를 기반으로 특정 질병이 있는지 없는지 등이 있습니다. 독립 변수로는 양적 데이터, 범주형 데이터 모두 사용이 가능하지만 종속 변수는 binary인 범주형 데이터입니다. (합격 or 불합격, 양성 or 음성)
p : 성공 확률 (대학에 합격할 확률, 특정 질병이 있을 확률 등)
p/(1-p) : 오즈 (odds) - 성공 확률이 실패 확률보다 몇 배 더 높은가를 나타내는 비율
오즈가 1보다 크면 성공 확률이 실패 확률보다 높다는 뜻이고, 1보다 작으면 성공 확률이 실패 확률보다 작다는 뜻입니다.
(ex. 카지노에서 오즈가 1/4이라면 5번 게임을 해서 1번은 이기고, 4번은 진다는 뜻입니다.)
성공 확률 p에 대한 그래프는 시그모이드(Sigmoid) 함수를 그립니다. 시그모이드 함수의 특징은 0부터 1까지의 값을 갖는다는 것입니다. 즉, 성공 확률 p가 0부터 1 사이의 값입니다. 여기서 x 축은 회귀식 전체입니다. 수식을 보면 항상 증명해보고 싶은 욕구가 있어서 자필로 쓴 것을 그대로 올립니다.
로지스틱 회귀 실습
본 실습은 GRE 점수, GPA, Prestige를 기반으로 UCLA 대학에 합격할 수 있는지 없는지 여부를 판별하는 실습입니다. 사용할 변수는 다음과 같습니다.
admit: 이항 변수(binary variable)로 합격(admit = 1), 불합격(admit = 0)으로 나뉨
gre: GRE(Graduate Record Examination) 점수
gpa: GPA (Grade Point Average) 학점 평균
prestige: 출신 고등학교입니다. (prestige = 1이면 가장 좋은 학교이고, prestige = 4이면 가장 안 좋은 학교)
gre, gpa, prestige가 독립변수이고, admit이 종속변수입니다. 또한 gre와 gpa는 양적 데이터이며, prestige는 범주형 데이터입니다. admit는 binary 범주형 데이터입니다. 따라서 로지스틱 회귀를 해야 합니다.
데이터 셋은 제 깃헙에서 받을 수 있습니다.
import numpy as np
import pandas as pd
import statsmodels.api as sm
df = pd.read_csv("admissions.csv")
df.head()
우선, 범주형 독립 변수인 prestige를 원-핫 인코딩 처리해보겠습니다.
df[['prest_1', 'prest_2', 'prest_3','prest_4',]] = pd.get_dummies(df['prestige'])
df.head()
이제, intercept를 추가하고, Logit 함수를 이용해 로지스틱 회귀 결과를 구해보겠습니다. (다중 선형 회귀에서는 OLS를 썼지만 로지스틱 회귀에서는 Logit을 씁니다.) prest_1을 baseline로 잡았기 때문에 drop 했습니다.
df['intercept'] = 1
logit_mod = sm.Logit(df['admit'], df[['intercept','gre', 'gpa', 'prest_2', 'prest_3', 'prest_4']])
results = logit_mod.fit()
results.summary()
우선, 로지스틱 회귀를 한 모든 계수가 admit과의 관계에 있어 통계적으로 유의합니다. p-value가 0.05보다 작기 때문입니다. 로지스틱 회귀는 다중 선형 회귀와 다르게 계수(coef)에 지수 변환을 해줘야 합니다. 지수 변환을 해준다는 의미는 exponential 함수를 취한다는 말입니다.
np.exp(results.params)
다른 모든 변수가 동일하다고 할 때, GPA가 1점 증가함에 따라 admit 확률이 2.18배 증가합니다. 또한, 어떤 사람이 prestige 4인 고등학교를 졸업했다면, prestige 1인 고등학교를 졸업한 것에 비해 입학 확률이 0.21배가 됩니다. np.exp(results.params)에 역수를 취하면 prestige 간 관계를 보다 명확히 파악할 수 있습니다.
1/np.exp(results.params)
np.exp(results.params)에 역수를 취한 결과를 기반으로 다시 해석해 보겠습니다. prestige 1인 고등학교를 졸업했다면 prestige 4인 고등학교를 졸업한 것에 비해 입학 확률이 4.73배 높아집니다. prestige 3에 비해서는 3.81배, prestige 2에 비해서는 1.97배 높아집니다. 범주형 데이터는 이런 식으로 해석할 수 있습니다.
반면, 양적 데이터(수치형 데이터)는 다중 선형 회귀에 동일하게 해석합니다. 물론 exponential 함수는 취해줘야 합니다. gpa가 1점 오를 때마다 2.18배 입학 확률이 높아진다고 해석할 수 있습니다.
Reference
'데이터 분석' 카테고리의 다른 글
DATA - 23. Data Wrangling (Gathering Data) II (4) | 2019.05.14 |
---|---|
DATA - 23. Data Wrangling (Gathering Data) (0) | 2019.05.10 |
DATA - 21. Higher order term (3) | 2019.05.02 |
DATA - 20. 다중공선성(Multicollinearity)과 VIF(Variance Inflation Factors) (9) | 2019.05.01 |
DATA - 19. 가변수(dummy variables)를 활용하여 범주형 데이터 모델링하기 (4) | 2019.04.30 |