파이썬의 statsmodels 라이브러리를 이용해 간단하게 로지스틱 회귀분석을 해볼 수 있다.
위 코드에 대한 설명은 "파이썬(Python) Pandas를 이용한 데이터프레임(DataFrame) 만들기" 포스팅을 통해 확인할 수 있다.
위 코드를 Jupyter Notebook을 통해 실행해보면 아래와 같이 데이터 프레임이 만들어진 것을 확인할 수 있다.
종속변수와 독립변수가 모두 정규성을 가지는 연속적인 값을 가지고 있으면, 선형 회귀분석(linear regression)을 사용하여 독립변수들로 종속변수들을 설명하는 모델을 만들 수 있다. 선형 회귀분석은 "파이썬(Python)을 이용한 선형 회귀분석(linear regression)" 포스팅에서 더 자세한 내용을 확인할 수 있다.
하지만 종속변수가 연속값이 아니라 비연속값이면 선형회귀분석을 사용할 수 없다. 위에서 만든 result의 "_pass" 칼럼은 연속적이지 않다. (pass : 1, fail : 0)과 같은 비연속적인 범주형(categorical) 변수이다. 이 때 로지스틱 회귀분석을 사용한다.
로지스틱 회귀분석은 S-커브를 그리는 로지스틱 함수(시그모이드 함수)를 사용하기 때문에 범주형 변수를 잘 설명할 수 있다. 종속변수가 범주형 변수일 때 로지스틱 회귀분석을 사용하자.
아래와 같은 간단한 코드로 로지스틱 회귀분석을 실시해본다.
statsmodels.api를 import하여 Logit메서드를 사용하면 된다.
'_pass(종속변수) ~ score(독립변수)'의 로지스틱 회귀 모델링식과 분석을 실시할 result를 from_formula()안에 입력한다. 마지막에 fit()를 해주는 걸 잊지말자.
summary()를 사용하면 아래와 같이 로지스틱 회귀분석 결과 값을 확인할 수 있다.
- Pseudo R-squ(R제곱)이 0.8189이다. 위 예시에서는 높은 값이 나왔지만, 로지스틱 회귀분석에서는 보통 R제곱값은 낮게 나온다. R제곱에 의존할 필요는 없다.
- P>|t|(유의확률)은 독립변수의 유의확률이다. 보통 독립변수가 95%의 신뢰도를 가져야 유의미하다고 판단한다. 이 경우 독립변수의 유의확률은 0.05보다 작은 값이 산출된다. 즉, 독립변수의 유의확률이 0.05보다 작으면, 독립변수가 종속변수에 영향을 미치는 것이 유의미하다고 본다. 위 경우 score의 유의확률은 0.131이다. 따라서 score는 _pass에 유의미하게 영향을 미치지 않는다.
- score의 coef(계수)가 0.6863이다. 비록 score가 유의미한 영향을 미치지는 않는다고 나왔지만, score가 1 증가할 수록 _pass 확률의 Log가 0.6863만큼 증가한다는 것을 알 수 있다.
끝.
예시를 통해 살펴보자. 먼저 아래와 같이 예시 데이터프레임을 만든다.
1 2 3 4 5 6 7 8 9 10 11 12 | # DataFrame 만들기 import pandas as pd score = [56, 60, 61, 67, 69, 55, 70, 44, 51, 64, 60, 50, 68, 72, 90, 93, 85, 74, 81, 88, 92, 97, 77, 78, 98] _pass = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] result = pd.DataFrame( {"score": score, "_pass": _pass} ) result.tail() |
위 코드에 대한 설명은 "파이썬(Python) Pandas를 이용한 데이터프레임(DataFrame) 만들기" 포스팅을 통해 확인할 수 있다.
위 코드를 Jupyter Notebook을 통해 실행해보면 아래와 같이 데이터 프레임이 만들어진 것을 확인할 수 있다.
종속변수와 독립변수가 모두 정규성을 가지는 연속적인 값을 가지고 있으면, 선형 회귀분석(linear regression)을 사용하여 독립변수들로 종속변수들을 설명하는 모델을 만들 수 있다. 선형 회귀분석은 "파이썬(Python)을 이용한 선형 회귀분석(linear regression)" 포스팅에서 더 자세한 내용을 확인할 수 있다.
하지만 종속변수가 연속값이 아니라 비연속값이면 선형회귀분석을 사용할 수 없다. 위에서 만든 result의 "_pass" 칼럼은 연속적이지 않다. (pass : 1, fail : 0)과 같은 비연속적인 범주형(categorical) 변수이다. 이 때 로지스틱 회귀분석을 사용한다.
로지스틱 회귀분석은 S-커브를 그리는 로지스틱 함수(시그모이드 함수)를 사용하기 때문에 범주형 변수를 잘 설명할 수 있다. 종속변수가 범주형 변수일 때 로지스틱 회귀분석을 사용하자.
아래와 같은 간단한 코드로 로지스틱 회귀분석을 실시해본다.
1 2 3 4 5 6 7 | # 로지스틱 회귀분석하기 import statsmodels.api as sm logis = sm.Logit.from_formula('_pass ~ score', result).fit() logis.summary() |
statsmodels.api를 import하여 Logit메서드를 사용하면 된다.
'_pass(종속변수) ~ score(독립변수)'의 로지스틱 회귀 모델링식과 분석을 실시할 result를 from_formula()안에 입력한다. 마지막에 fit()를 해주는 걸 잊지말자.
summary()를 사용하면 아래와 같이 로지스틱 회귀분석 결과 값을 확인할 수 있다.
- Pseudo R-squ(R제곱)이 0.8189이다. 위 예시에서는 높은 값이 나왔지만, 로지스틱 회귀분석에서는 보통 R제곱값은 낮게 나온다. R제곱에 의존할 필요는 없다.
- P>|t|(유의확률)은 독립변수의 유의확률이다. 보통 독립변수가 95%의 신뢰도를 가져야 유의미하다고 판단한다. 이 경우 독립변수의 유의확률은 0.05보다 작은 값이 산출된다. 즉, 독립변수의 유의확률이 0.05보다 작으면, 독립변수가 종속변수에 영향을 미치는 것이 유의미하다고 본다. 위 경우 score의 유의확률은 0.131이다. 따라서 score는 _pass에 유의미하게 영향을 미치지 않는다.
- score의 coef(계수)가 0.6863이다. 비록 score가 유의미한 영향을 미치지는 않는다고 나왔지만, score가 1 증가할 수록 _pass 확률의 Log가 0.6863만큼 증가한다는 것을 알 수 있다.
끝.
댓글
댓글 쓰기