통계 모델을 사용하여 로지스틱 회귀를 수행하는 방법


Python의 statsmodels 모듈은 다양한 통계 모델을 적용할 수 있는 다양한 함수와 클래스를 제공합니다.

다음 단계별 예제에서는 statsmodels 함수를 사용하여 로지스틱 회귀를 수행하는 방법을 보여줍니다.

1단계: 데이터 생성

먼저 세 가지 변수를 포함하는 pandas DataFrame을 만들어 보겠습니다.

  • 공부한 시간(전체 값)
  • 연구 방법(방법 A 또는 B)
  • 시험 결과(합격 또는 불합격)

우리는 학생이 주어진 시험에 합격할지 여부를 예측하기 위해 공부한 시간과 공부 방법을 사용하여 로지스틱 회귀 모델을 적용할 것입니다.

다음 코드는 Pandas DataFrame을 생성하는 방법을 보여줍니다.

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' result ': [0, 1, 0, 0, 0, 0, 0, 1, 1, 0,
                              0, 1, 1, 1, 0, 1, 1, 1, 1, 1],
                   ' hours ': [1, 2, 2, 2, 3, 2, 5, 4, 3, 6,
                            5, 8, 8, 7, 6, 7, 5, 4, 8, 9],
                   ' method ': ['A', 'A', 'A', 'B', 'B', 'B', 'B',
                             'B', 'B', 'A', 'B', 'A', 'B', 'B',
                             'A', 'A', 'B', 'A', 'B', 'A']})

#view first five rows of DataFrame
df. head ()

	result hours method
0 0 1 A
1 1 2 A
2 0 2 A
3 0 2 B
4 0 3 B

2단계: 로지스틱 회귀 모델 적합

다음으로 logit() 함수를 사용하여 로지스틱 회귀 모델을 피팅합니다.

 import statsmodels. formula . api as smf

#fit logistic regression model
model = smf. logit (' result~hours+method ', data=df). fit ()

#view model summary
print ( model.summary ())

Optimization completed successfully.
         Current function value: 0.557786
         Iterations 5
                           Logit Regression Results                           
==================================================== ============================
Dept. Variable: result No. Observations: 20
Model: Logit Df Residuals: 17
Method: MLE Df Model: 2
Date: Mon, 22 Aug 2022 Pseudo R-squ.: 0.1894
Time: 09:53:35 Log-Likelihood: -11.156
converged: True LL-Null: -13.763
Covariance Type: nonrobust LLR p-value: 0.07375
==================================================== ============================
                  coef std err z P>|z| [0.025 0.975]
-------------------------------------------------- -----------------------------
Intercept -2.1569 1.416 -1.523 0.128 -4.932 0.618
method[TB] 0.0875 1.051 0.083 0.934 -1.973 2.148
hours 0.4909 0.245 2.002 0.045 0.010 0.972
==================================================== ============================

출력의 coef 열에 있는 값은 시험 합격 로그 확률의 평균 변화를 알려줍니다.

예를 들어:

  • 학습 방법 B를 사용하는 것은 학습 방법 A를 사용하는 것과 비교하여 시험 합격 로그 확률이 평균 0.0875 증가하는 것과 관련이 있습니다.
  • 공부한 각 추가 시간은 시험 합격 로그 확률이 평균 0.4909 증가하는 것과 관련이 있습니다.

P>|z| 의 값 열은 각 계수에 대한 p-값을 나타냅니다.

예를 들어:

  • 연구 방법의 p-값은 0.934 입니다. 이 값은 0.05 이상이므로 공부한 시간과 시험 합격 여부 사이에 통계적으로 유의미한 관계가 없다는 뜻이다.
  • 연구한 시간의 p-값은 0.045 입니다. 이 값은 0.05보다 작으므로 공부시간과 시험 합격 여부 사이에 통계적으로 유의한 관계가 있다는 뜻이다.

3단계: 모델 성능 평가

로지스틱 회귀 모델의 품질을 평가하기 위해 출력에서 두 가지 측정항목을 볼 수 있습니다.

1. 별명 R-제곱

이 값은 선형 회귀 모델의 R 제곱 값을 대체하는 것으로 간주될 수 있습니다.

이는 널 모델에서 전체 모델에 대한 최대화된 로그 우도 함수의 비율로 계산됩니다.

이 값의 범위는 0에서 1까지이며, 값이 높을수록 모델 적합도가 더 우수함을 나타냅니다.

이 예에서 의사 R-제곱 값은 0.1894 로 매우 낮습니다. 이는 모델의 예측 변수가 응답 변수의 값을 잘 예측하지 못하고 있음을 나타냅니다.

2. LLR p-값

이 값은 선형 회귀 모델의 전체 F-값 에 대한 p-값을 대체하는 것으로 간주될 수 있습니다.

이 값이 특정 임계값(예: α = 0.05)보다 낮으면 모델 전체가 “유용하다”고 결론을 내릴 수 있으며 예측 변수가 없는 모델에 비해 응답 변수 값을 더 잘 예측할 수 있습니다.

이 예에서 LLR의 p-값은 0.07375 입니다. 우리가 선택한 유의 수준(예: 0.01, 0.05, 0.1)에 따라 모델 전체가 유용하다는 결론을 내릴 수도 있고 그렇지 않을 수도 있습니다.

추가 리소스

다음 튜토리얼에서는 Python에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.

Python에서 선형 회귀를 수행하는 방법
Python에서 로그 회귀를 수행하는 방법
Python에서 분위수 회귀를 수행하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다