본문 바로가기
Data & Research

[Statistics] 로지스틱 회귀분석 (Logistic Regression)

by 물박사의 저장공간 2021. 10. 31.

선형 회귀분석은

"원하는 변수(연속형 변수)를 예측(모델링)하기 위한 목적으로 해당 변수와 상관관계가 높은 다른 변수를 가지고 빗대어 설명하는 것"이라고 말씀드렸는데요, 만약 원하는 변수가 연속형 변수가 아닌 범주형 변수라면?

종속변수가 0.1, -1.234 등의 값으로 연속적인 실수값이 아니라 짜장면/짬뽕과 같은 카테고리(이산형 변수)라면 이제 로지스틱 회귀분석을 사용해야 합니다. 일단 가장 간단한 분류(2가지로 분류하는 위의 짜장면/짬뽕처럼)인 Binary classification의 경우 종속변수(y)가 0 혹은 1이 나오도록 모델링해야할텐데.. 기존 회귀분석의 꼴에서는 그게 어렵습니다. 그래서 y의 범위를 조절해서 0 혹은 1을 산출시킬 수 있는 방향으로 나아가 볼까요?

 

(여기서 "아니 0/1이라면서 0이면 딱 정확한 0이고, 1이면 딱 정확한 1이 나오도록 해야지 1이 나올 확률이란게 뭐냐?"고 생각하실 수도 있을 것 같네요. 제 생각을 말씀드리면, 어쨌든 우리가 갖고 있는 수식체계로부터 binary classification을 도출해내야하는데, 기본적인 최적화(미분 등)가 가능하면서 이렇게 0/1 딱 정확한 값을 튀어나오게 만드는 형태의 수식은 찾기 어렵죠. 그래서 대신 그 확률을 도출하는 함수들을 활용한다고 봅니다.)

https://ratsgo.github.io/machine%20learning/2017/04/02/logistic/

 

로지스틱 회귀 · ratsgo's blog

이번 포스팅에선 범주형 변수를 예측하는 모델인 로지스틱 회귀(Logistic Regression)에 대해 살펴보려고 합니다. 이번 글은 고려대 강필성 교수님과 역시 같은 대학의 김성범, 정순영 교수님 강의를

ratsgo.github.io

역시 자세한 내용은 위 링크를 참고해보시면 도움이 될 것 같습니다.

 

여기서 한 가지 언급하고 넘어갈 부분은, 이진분류의 꼴이 반드시 logistic 함수의 꼴을 활용하는 방식일 필요는 없다는 것입니다. 가장 대표적인 꼴이 logistic 함수를 사용하는 것이구요. probit 등의 모형을 활용할 수도 있습니다. 

 

자 이제 (y가 1이 나올 확률인) P를 계산하는 형태가 어떻게 되어야 하는지 도출해냈습니다. 0으로 분류에 대응되는 확률은 1-P일 것입니다.

 

설명변수의 개수가 많아지는 경우에 Multivariate Logistic Regression이라 부르고요 (x의 종류가 많아지는 경우) 우리가 분류하고자하는 카테고리가 2개가 아니라 3이상으로 커지는 경우에는(짜장면/짬뽕/짬짜면) Multinomial Logistic Regression이라고 합니다.

선형 회귀분석의 계수들은 그 의미를 이해하기 비교적 쉬웠습니다. 말그대로 "선형"이라 설명변수의 값이 어느 구간에 있는지에 상관없이 그 설명변수의 영향력을 일정하게 반영하고 있죠. (기하적으로는 우리가 선형회귀분석에서 찾아낸 직선의 기울기입니다. 기울기가 항상 일정하죠)

 

그런데, 비선형 모델이 되면 그게 불가능합니다. 위 로지스틱 함수에서 x축의 어느 구간에 있느냐에 따라 기울기가 달라지는데요. 대신 로지스틱 회귀에서는 일정한 것이 따로 있습니다. 승산(odds)입니다. 승산이란 종속변수가 1이 나올 확률을 종속변수가 0이 나올 확률로 나눠준 값입니다. 1이 성공 0이 실패라고 한다면 "성공할 확률이 실패할 확률의 몇 배인가?"의 의미가 되겠죠 (Relative risk와 Odds ratio같은 부분들은 또 나중에 기회가 되면 말씀드리겠습니다)

 

로지스틱 회귀분석의 계수추정은 MLE를 사용합니다. (최우도추정의 내용은 선형회귀분석 페이지를 참고하세요)

https://trillionver2.tistory.com/entry/%EC%84%A0%ED%98%95-%ED%9A%8C%EA%B7%80%EB%B6%84%EC%84%9D-Simple-Linear-regression

 

선형 회귀분석 (Simple Linear regression)

1. 선형 회귀 분석이란? 원하는 변수(연속형 변수)를 예측(모델링)하기 위한 목적으로 해당 변수와 상관관계가 높은 다른 변수를 가지고 빗대어 설명하는 것 예) 스펀지송이 이번주에 햄버거 가

trillionver2.tistory.com

관측치 각각이 관측될 확률이 독립이라고 보면 전체관측치가 이와같이 관측될 확률(우도: likelihood)를 위와 같이 계산할 수 있고, 여기에 log를 붙여준 뒤 -1을 곱하면 최종적인 NLL우도(Negative Log Likelihood)의 꼴이 나옵니다. 그런데, 이 최종 형태는 우리가 정보이론에서 binary cross-entropy라고 부르는 수식이랑 똑같아집니다. 로지스틱 회귀가 아닌 일반적인 이진 분류문제(deep learning 등)에서도 목적함수로 binary cross-entropy 많이 쓰시죠? 공교롭게도 그것은 로지스틱 회귀의 우도입니다. 그리고 범주가 2개가 아니라 3개 이상이 되는 경우-multinomial logistic regression-라면 위 그림 오른쪽 하단에 보시는 것처럼 일반화시킬 수가 있겠죠.(사실 이진분류도 1이 나올 확률: p / 0이 나올 확률:1-p 라는 관점에서 바라보면 저 일반화된 cross-entropy의 특수 케이스가 됩니다)

 

이제 우리가 찾고자하는 parameter (지금은 phi 안에 a, b와 같은 parameter가 포함되어 있죠)를 조절해가면서 저 우도를 최대화하도록 그 값들을 찾아주면 됩니다. 

 

그럼 로지스틱 회귀에 관련된 간단한 R코드를 돌려볼까요?

3_logistic_regression.R
0.00MB
3_logistic_regression2.R
0.00MB
3_multinomial_logistic_regression.R
0.00MB

R에서 기본적으로 내장되어 있는 데이터 iris 분류 문제입니다.

일단 이진분류 문제 해봅시다(범주가 setosa일 때를 기준값(y=0)으로 잡아두고, versicolor일 때를 (y=1)로 두죠.

(사실 거꾸로 해도 되죠. 알아서 해석만 그에 맞게 잘 해주시면 됩니다.)

 

우리가 종속변수의 확률을 계산할 때 로짓(logit)형태로 계산을 하는데 이 꼴을 무작정 외우지 마시고 분모에는 전체 범주의 exp꼴을 다 더해준거고 분자는 구하고자 하는 옵션에 대응되는 exp꼴만 올려준다고 생각하세요(이렇게 생각하면 multinomial logistic에서도 같은 관점에서 계산가능합니다). 다만 항상 한 카테고리는 기준 범주라 exp 지수에 0을 올려줍니다. 지금은 setosa가 기준 범주(y=0)로 설정되어 exp위에 0을 올려줬구, versicolor가 y=1에 대응되는 범주로 설정되어 여기에 찾고자 하는 parameter a, b(y=1의 범주에 대응하는 모수)가 exp 위에 올라갔습니다.

 

패키지를 돌리면 우리가 찾고자 하는 계수들과 그 표준오차 또 그에 대응되는 P-value가 나옵니다. P-value에 대한 부분은 지난 번 선형회귀분석을 참고하세요.

https://trillionver2.tistory.com/entry/%EC%84%A0%ED%98%95-%ED%9A%8C%EA%B7%80%EB%B6%84%EC%84%9D-Simple-Linear-regression

 

선형 회귀분석 (Simple Linear regression)

1. 선형 회귀 분석이란? 원하는 변수(연속형 변수)를 예측(모델링)하기 위한 목적으로 해당 변수와 상관관계가 높은 다른 변수를 가지고 빗대어 설명하는 것 예) 스펀지송이 이번주에 햄버거 가

trillionver2.tistory.com

 

자 이제는 범주가 2개보다 많아지는 Multinomial Logistic Regression을 해볼까요? 아래 그림의 오른쪽이 선택이 3개가 됐을 때의 계산법입니다. 이제 y=2에 대응되는 범주와 그 parameter c, d가 추가되었지만 로짓 계산하는 방법으 그대로죠. 분모에는 전체 선택 옵션 exp을 다 더해주고 분자에는 구하고자 하는 옵션의 exp만 올려놓는다!

실제 R 코드로 추정해본 결과는 아래와 같습니다.

이것으로 로지스틱 회귀분석은 마치겠습니다